Merge remote-tracking branch 'upstream/develop' into user-contact

This commit is contained in:
Michael 2021-10-02 11:57:43 +00:00
commit 865006682a
54 changed files with 4237 additions and 4188 deletions

View file

@ -33,6 +33,7 @@ return $config
'operators' => [
'=>' => 'align_single_space_minimal',
'=' => 'align_single_space_minimal',
'??' => 'align_single_space_minimal',
],
],
'blank_line_after_namespace' => true,
@ -65,6 +66,7 @@ return $config
'single_import_per_statement' => true,
'single_line_after_imports' => true,
'switch_case_space' => true,
'ternary_operator_spaces' => false,
'visibility_required' => [
'elements' => ['property', 'method']
],

6
Vagrantfile vendored
View file

@ -6,8 +6,8 @@ server_timezone = "UTC"
public_folder = "/vagrant"
Vagrant.configure(2) do |config|
# Set server to Debian 10 / Buster 64bit
config.vm.box = "debian/buster64"
# Set server to Debian 11 / Bullseye 64bit
config.vm.box = "debian/bullseye64"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
@ -24,7 +24,7 @@ Vagrant.configure(2) do |config|
# Share a folder between host and guest
# config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", owner: "www-data", group: "vagrant"
config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", owner: "www-data", group: "www-data"
config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", owner: "www-data", group: "www-data", type: "virtualbox"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.

View file

@ -82,7 +82,7 @@ echo ">>> Installing 'Local Only' postfix"
debconf-set-selections <<< "postfix postfix/mailname string friendica.local"
debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Local Only'"
apt-get install -qq postfix mailutils libmailutils-dev
echo -e "friendica1: vagrant\nfriendica2: vagrant\nfriendica3: vagrant\nfriendica4: vagrant\nfriendica5: vagrant" >> /etc/aliases && newaliases
echo -e "$ADMIN_NICK: vagrant\n$USER_NICK: vagrant" >> /etc/aliases && newaliases
# Friendica needs git for fetching some dependencies
echo ">>> Installing git"
@ -93,13 +93,8 @@ echo ">>> Symlink /var/www to /vagrant"
rm -rf /var/www/
ln -fs /vagrant /var/www
# install deps with composer
echo ">>> Installing php requirements"
apt install unzip
# Setup Friendica
cd /var/www
php bin/composer.phar install
echo ">>> Setup Friendica"
# copy the .htaccess-dist file to .htaccess so that rewrite rules work
@ -120,10 +115,6 @@ bin/console user password "$ADMIN_NICK" "$ADMIN_PASSW"
bin/console user add "$USER_NICK" "$USER_NICK" "$USER_NICK@friendica.local" en
bin/console user password "$USER_NICK" "$USER_PASSW"
# set the admin
bin/console config config admin_email ""$ADMIN_NICK@friendica.local""
# create cronjob - activate if you have enough memory in you dev VM
# cronjob runs as www-data user
echo ">>> Installing cronjob"

View file

@ -84,7 +84,6 @@
"Friendica\\Addon\\": "addon/"
},
"files": [
"include/conversation.php",
"include/dba.php",
"include/enotify.php",
"boot.php"

View file

@ -526,7 +526,7 @@ Here is a complete list of all hook callbacks with file locations (as of 24-Sep-
Hook::callAll('enotify_mail', $datarray);
Hook::callAll('check_item_notification', $notification_data);
### include/conversation.php
### src/Content/Conversation.php
Hook::callAll('conversation_start', $cb);
Hook::callAll('render_location', $locate);

View file

@ -32,7 +32,8 @@ Due to the large variety of operating systems and PHP platforms in existence we
* PHP *command line* access with register_argc_argv set to true in the php.ini file
* Curl, GD, PDO, mbstrings, MySQLi, hash, xml, zip and OpenSSL extensions
* The POSIX module of PHP needs to be activated (e.g. [RHEL, CentOS](http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7) have disabled it)
* some form of email server or email gateway such that PHP mail() works
* Some form of email server or email gateway such that PHP mail() works.
If you cannot set up your own email server, you can use the [phpmailer](https://github.com/friendica/friendica-addons/tree/develop/phpmailer) addon and use a remote SMTP server.
* MySQL 5.6+ or an equivalent alternative for MySQL (MariaDB, Percona Server etc.)
* ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks (Windows)
* installation into a top-level domain or sub-domain (without a directory/path component in the URL) is RECOMMENDED. Directory paths will not be as convenient to use and have not been thoroughly tested. This is REQUIRED if you wish to communicate with the Diaspora network.

View file

@ -10,27 +10,27 @@ Getting started
No need to setup up a webserver, database etc. before actually starting.
Vagrant creates a virtual machine for you that you can just run inside VirtualBox and start to work directly on Friendica.
It brings an Ubuntu Xenial (16.04) with PHP 7.0 and MySQL 5.7.16
It brings an Debian Bullseye with PHP 7.4 and MariaDB 10.5.11.
What you need to do:
1. Install VirtualBox and vagrant.
Please use an up-to-date vagrant version from https://www.vagrantup.com/downloads.html.
2. Git clone your Friendica repository.
Inside, you'll find a "Vagrantfile" and some scripts in the utils folder.
3. Run "vagrant up" from inside the friendica clone:
$> vagrant up
Be patient: When it runs for the first time, it downloads an Ubuntu Server image.
4. Run "vagrant ssh" to log into the virtual machine to log in to the VM:
$> vagrant ssh
Inside, you'll find a `Vagrantfile` and some scripts in the `bin/dev` folder.
Pull the PHP requirements with `bin/composer install`.
3. Run `vagrant up` from inside the friendica clone.
This will start the virtual machine.
Be patient: When it runs for the first time, it downloads a Debian Server image and installs Friendica.
4. Run `vagrant ssh` to log into the virtual machine to log in to the VM in case you need to debug something on the server.
5. Open you test installation in a browser.
Go to 192.168.22.10.
Go to friendica.local (or 192.168.22.10).
friendica.local is using a self-signed TLS certificate, so you will need to add an exception to trust the certificate the first time you are visiting the page.
The mysql database is called "friendica", the mysql user and password both are "friendica".
6. Work on Friendica's code in your git clone on your machine (not in the VM).
Your local working directory is set up as a shared directory with the VM (/vagrant).
7. Check the changes in your browser in the VM.
Debug via the "vagrant ssh" login.
Find the Friendica log file /vagrant/logfile.out.
Find the Friendica log file `/vagrant/logfile.out` on the VM or in the `logfile.out` in you local Friendica directory.
8. Commit and push your changes directly back to Github.
If you want to stop vagrant after finishing your work, run the following command
@ -46,13 +46,24 @@ This will not delete the virtual machine.
to make sure that you can start from scratch with another "vagrant up".
The vagrant Friendica instance contains a test database.
You will then have the following accounts to login:
Default User Accounts
---------------------
By default the provision script will setup two user accounts.
* admin, password admin
* friendica1, password friendica1
* friendica2, password friendica2 and so on until friendica5
* friendica1 is connected to all others. friendica1 has two groups: group1 with friendica2 and friendica4, group2 with friendica3 and friendica5.
* friendica2 and friendica3 are connected. friendica4 and friendica5 are connected.
* friendica, password friendica
For further documentation of vagrant, please see [the vagrant*docs*](https://docs.vagrantup.com/v2/).
Trouble Shooting
----------------
If you see a version mis-match for the _VirtualBox Guest Additions_ between host and guest during the initial setup of the Vagrant VM, you will need to install an addon to Vagrant (ref. [Stack Overflow](https://stackoverflow.com/a/38010683)).
Stop the Vagrant VM and run the following command:
$> vagrant plugin install vagrant-vbguest
On the next Vagrant up, the version problem should be fixed.
If `friendica.local` is not resolved, you may need to add an entry to the `/etc/hosts` file (or similar configuration depending on the OS you are using).
For further documentation of vagrant, please see [the vagrant*docs*](https://docs.vagrantup.com/v2/).

View file

@ -220,7 +220,7 @@ Eine komplette Liste aller Hook-Callbacks mit den zugehörigen Dateien (am 01-Ap
Hook::callAll('enotify_mail', $datarray);
Hook::callAll('check_item_notification', $notification_data);
### include/conversation.php
### src/Content/Conversation.php
Hook::callAll('conversation_start', $cb);
Hook::callAll('render_location', $locate);

View file

@ -29,7 +29,8 @@ Requirements
* PHP *Kommandozeilen*-Zugang mit register_argc_argv auf "true" gesetzt in der php.ini-Datei
* Curl, GD, PDO, MySQLi, xml, zip und OpenSSL-Erweiterung
* Das POSIX Modul muss aktiviert sein ([CentOS, RHEL](http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7) haben dies z.B. deaktiviert)
* etwas in der Art eines Email-Servers oder eines Gateways wie PHP mail()
* Einen E-Mail Server, so dass PHP `mail()` funktioniert.
Wenn kein eigener E-Mail Server zur Verfügung steht, kann alternativ das [phpmailer](https://github.com/friendica/friendica-addons/tree/develop/phpmailer) Addon mit einem externen SMTP Account verwendet werden.
* Mysql 5.6+ (oder eine äquivalente Alternative: MariaDB, Percona Server etc.)
* die Möglichkeit, wiederkehrende Aufgaben mit cron (Linux/Mac) oder "Scheduled Tasks" einzustellen (Windows) [Beachte: andere Optionen sind in Abschnitt 7 dieser Dokumentation zu finden]
* Installation in einer Top-Level-Domain oder Subdomain (ohne eine Verzeichnis/Pfad-Komponente in der URL) wird bevorzugt. Verzeichnispfade sind für diesen Zweck nicht so günstig und wurden auch nicht ausführlich getestet.

View file

@ -1188,7 +1188,7 @@ function api_statuses_update($type)
// We have to avoid that the post is rejected because of an empty body
if (empty($_REQUEST['body'])) {
$_REQUEST['body'] = '[hr]';
$_REQUEST['body'] = '[hr]';
}
}
@ -2997,7 +2997,7 @@ function api_format_item($item, $type = "json", $status_user = null, $author_use
list($status_user, $author_user, $owner_user) = api_item_get_user($a, $item);
}
localize_item($item);
DI::contentItem()->localize($item);
$in_reply_to = api_in_reply_to($item);
@ -3053,15 +3053,6 @@ function api_format_item($item, $type = "json", $status_user = null, $author_use
$retweeted_item = [];
$quoted_item = [];
if ($item['gravity'] == GRAVITY_PARENT) {
$body = $item['body'];
$retweeted_item = api_share_as_retweet($item);
if ($body != $item['body']) {
$quoted_item = $retweeted_item;
$retweeted_item = [];
}
}
if (empty($retweeted_item) && ($item['owner-id'] == $item['author-id'])) {
$announce = api_get_announce($item);
if (!empty($announce)) {
@ -3119,6 +3110,7 @@ function api_format_item($item, $type = "json", $status_user = null, $author_use
$retweeted_status['text'] = $rt_converted["text"];
$retweeted_status['statusnet_html'] = $rt_converted["html"];
$retweeted_status['friendica_html'] = $rt_converted["html"];
$retweeted_status['created_at'] = api_date($retweeted_item['created']);
if (!empty($quoted_status)) {
@ -4920,76 +4912,6 @@ function api_get_announce($item)
return array_merge($item, $announce);
}
/**
* Return the item shared, if the item contains only the [share] tag
*
* @param array $item Sharer item
* @return array|false Shared item or false if not a reshare
* @throws ImagickException
* @throws InternalServerErrorException
*/
function api_share_as_retweet(&$item)
{
$body = trim($item["body"]);
if (Diaspora::isReshare($body, false) === false) {
if ($item['author-id'] == $item['owner-id']) {
return false;
} else {
// Reshares from OStatus, ActivityPub and Twitter
$reshared_item = $item;
$reshared_item['owner-id'] = $reshared_item['author-id'];
$reshared_item['owner-link'] = $reshared_item['author-link'];
$reshared_item['owner-name'] = $reshared_item['author-name'];
$reshared_item['owner-avatar'] = $reshared_item['author-avatar'];
return $reshared_item;
}
}
$reshared = Item::getShareArray($item);
if (empty($reshared)) {
return false;
}
$reshared_item = $item;
if (empty($reshared['shared']) || empty($reshared['profile']) || empty($reshared['author']) || empty($reshared['avatar']) || empty($reshared['posted'])) {
return false;
}
if (!empty($reshared['comment'])) {
$item['body'] = $reshared['comment'];
}
$reshared_item["share-pre-body"] = $reshared['comment'];
$reshared_item["body"] = $reshared['shared'];
$reshared_item["author-id"] = Contact::getIdForURL($reshared['profile'], 0, false);
$reshared_item["author-name"] = $reshared['author'];
$reshared_item["author-link"] = $reshared['profile'];
$reshared_item["author-avatar"] = $reshared['avatar'];
$reshared_item["plink"] = $reshared['link'] ?? '';
$reshared_item["created"] = $reshared['posted'];
$reshared_item["edited"] = $reshared['posted'];
// Try to fetch the original item
if (!empty($reshared['guid'])) {
$condition = ['guid' => $reshared['guid'], 'uid' => [0, $item['uid']]];
} elseif (!empty($reshared_item['plink']) && ($original_id = Item::searchByLink($reshared_item['plink']))) {
$condition = ['id' => $original_id];
} else {
$condition = [];
}
if (!empty($condition)) {
$original_item = Post::selectFirst([], $condition);
if (DBA::isResult($original_item)) {
$reshared_item = array_merge($reshared_item, $original_item);
}
}
return $reshared_item;
}
/**
*
* @param array $item

View file

@ -1,1462 +0,0 @@
<?php
/**
* @copyright Copyright (C) 2010-2021, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
use Friendica\App;
use Friendica\BaseModule;
use Friendica\Content\ContactSelector;
use Friendica\Content\Feature;
use Friendica\Core\ACL;
use Friendica\Core\Hook;
use Friendica\Core\Logger;
use Friendica\Core\Protocol;
use Friendica\Core\Renderer;
use Friendica\Core\Session;
use Friendica\Core\Theme;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\Item;
use Friendica\Model\Post;
use Friendica\Model\Tag;
use Friendica\Model\User;
use Friendica\Model\Verb;
use Friendica\Object\Post as PostObject;
use Friendica\Object\Thread;
use Friendica\Protocol\Activity;
use Friendica\Util\Crypto;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Proxy;
use Friendica\Util\Strings;
use Friendica\Util\Temporal;
use Friendica\Util\XML;
/**
* Render actions localized
*
* @param $item
* @throws ImagickException
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
function localize_item(&$item)
{
DI::profiler()->startRecording('rendering');
/// @todo The following functionality needs to be cleaned up.
if (!empty($item['verb'])) {
$activity = DI::activity();
$xmlhead = "<" . "?xml version='1.0' encoding='UTF-8' ?" . ">";
if (stristr($item['verb'], Activity::POKE)) {
$verb = urldecode(substr($item['verb'], strpos($item['verb'],'#') + 1));
if (!$verb) {
DI::profiler()->stopRecording();
return;
}
if ($item['object-type'] == "" || $item['object-type'] !== Activity\ObjectType::PERSON) {
DI::profiler()->stopRecording();
return;
}
$obj = XML::parseString($xmlhead . $item['object']);
$Bname = $obj->title;
$Blink = $obj->id;
$Bphoto = "";
foreach ($obj->link as $l) {
$atts = $l->attributes();
switch ($atts['rel']) {
case "alternate": $Blink = $atts['href'];
case "photo": $Bphoto = $atts['href'];
}
}
$author = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$A = '[url=' . Contact::magicLinkByContact($author) . ']' . $item['author-name'] . '[/url]';
if (!empty($Blink)) {
$B = '[url=' . Contact::magicLink($Blink) . ']' . $Bname . '[/url]';
} else {
$B = '';
}
if ($Bphoto != "" && !empty($Blink)) {
$Bphoto = '[url=' . Contact::magicLink($Blink) . '][img=80x80]' . $Bphoto . '[/img][/url]';
}
/*
* we can't have a translation string with three positions but no distinguishable text
* So here is the translate string.
*/
$txt = DI::l10n()->t('%1$s poked %2$s');
// now translate the verb
$poked_t = trim(sprintf($txt, '', ''));
$txt = str_replace($poked_t, DI::l10n()->t($verb), $txt);
// then do the sprintf on the translation string
$item['body'] = sprintf($txt, $A, $B) . "\n\n\n" . $Bphoto;
}
if ($activity->match($item['verb'], Activity::TAG)) {
$fields = ['author-id', 'author-link', 'author-name', 'author-network',
'verb', 'object-type', 'resource-id', 'body', 'plink'];
$obj = Post::selectFirst($fields, ['uri' => $item['parent-uri']]);
if (!DBA::isResult($obj)) {
DI::profiler()->stopRecording();
return;
}
$author_arr = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$author = '[url=' . Contact::magicLinkByContact($author_arr) . ']' . $item['author-name'] . '[/url]';
$author_arr = ['uid' => 0, 'id' => $obj['author-id'],
'network' => $obj['author-network'], 'url' => $obj['author-link']];
$objauthor = '[url=' . Contact::magicLinkByContact($author_arr) . ']' . $obj['author-name'] . '[/url]';
switch ($obj['verb']) {
case Activity::POST:
switch ($obj['object-type']) {
case Activity\ObjectType::EVENT:
$post_type = DI::l10n()->t('event');
break;
default:
$post_type = DI::l10n()->t('status');
}
break;
default:
if ($obj['resource-id']) {
$post_type = DI::l10n()->t('photo');
$m=[]; preg_match("/\[url=([^]]*)\]/", $obj['body'], $m);
$rr['plink'] = $m[1];
} else {
$post_type = DI::l10n()->t('status');
}
// Let's break everthing ... ;-)
break;
}
$plink = '[url=' . $obj['plink'] . ']' . $post_type . '[/url]';
$parsedobj = XML::parseString($xmlhead . $item['object']);
$tag = sprintf('#[url=%s]%s[/url]', $parsedobj->id, $parsedobj->content);
$item['body'] = DI::l10n()->t('%1$s tagged %2$s\'s %3$s with %4$s', $author, $objauthor, $plink, $tag);
}
}
$matches = null;
if (preg_match_all('/@\[url=(.*?)\]/is', $item['body'], $matches, PREG_SET_ORDER)) {
foreach ($matches as $mtch) {
if (!strpos($mtch[1], 'zrl=')) {
$item['body'] = str_replace($mtch[0], '@[url=' . Contact::magicLink($mtch[1]) . ']', $item['body']);
}
}
}
// add sparkle links to appropriate permalinks
// Only create a redirection to a magic link when logged in
if (!empty($item['plink']) && Session::isAuthenticated()) {
$author = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$item['plink'] = Contact::magicLinkByContact($author, $item['plink']);
}
DI::profiler()->stopRecording();
}
/**
* Count the total of comments on this item and its desendants
* @TODO proper type-hint + doc-tag
* @param $item
* @return int
*/
function count_descendants($item) {
$total = count($item['children']);
if ($total > 0) {
foreach ($item['children'] as $child) {
if (!visible_activity($child)) {
$total --;
}
$total += count_descendants($child);
}
}
return $total;
}
function visible_activity($item) {
$activity = DI::activity();
if (empty($item['verb']) || $activity->isHidden($item['verb'])) {
return false;
}
// @TODO below if() block can be rewritten to a single line: $isVisible = allConditionsHere;
if ($activity->match($item['verb'], Activity::FOLLOW) &&
$item['object-type'] === Activity\ObjectType::NOTE &&
empty($item['self']) &&
$item['uid'] == local_user()) {
return false;
}
return true;
}
function conv_get_blocklist()
{
if (!local_user()) {
return [];
}
$str_blocked = str_replace(["\n", "\r"], ",", DI::pConfig()->get(local_user(), 'system', 'blocked'));
if (empty($str_blocked)) {
return [];
}
$blocklist = [];
foreach (explode(',', $str_blocked) as $entry) {
$cid = Contact::getIdForURL(trim($entry), 0, false);
if (!empty($cid)) {
$blocklist[] = $cid;
}
}
return $blocklist;
}
/**
* "Render" a conversation or list of items for HTML display.
* There are two major forms of display:
* - Sequential or unthreaded ("New Item View" or search results)
* - conversation view
* The $mode parameter decides between the various renderings and also
* figures out how to determine page owner and other contextual items
* that are based on unique features of the calling module.
* @param App $a
* @param array $items
* @param $mode
* @param $update
* @param bool $preview
* @param string $order
* @param int $uid
* @return string
* @throws ImagickException
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
function conversation(App $a, array $items, $mode, $update, $preview = false, $order = 'commented', $uid = 0)
{
DI::profiler()->startRecording('rendering');
$page = DI::page();
$page->registerFooterScript(Theme::getPathForFile('asset/typeahead.js/dist/typeahead.bundle.js'));
$page->registerFooterScript(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput.js'));
$page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput.css'));
$page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput-typeahead.css'));
$ssl_state = (local_user() ? true : false);
$live_update_div = '';
$blocklist = conv_get_blocklist();
$previewing = (($preview) ? ' preview ' : '');
if ($mode === 'network') {
$items = conversation_add_children($items, false, $order, $uid);
if (!$update) {
/*
* The special div is needed for liveUpdate to kick in for this page.
* We only launch liveUpdate if you aren't filtering in some incompatible
* way and also you aren't writing a comment (discovered in javascript).
*/
$live_update_div = '<div id="live-network"></div>' . "\r\n"
. "<script> var profile_uid = " . $_SESSION['uid']
. "; var netargs = '" . substr(DI::args()->getCommand(), 8)
. '?f='
. (!empty($_GET['contactid']) ? '&contactid=' . rawurlencode($_GET['contactid']) : '')
. (!empty($_GET['search']) ? '&search=' . rawurlencode($_GET['search']) : '')
. (!empty($_GET['star']) ? '&star=' . rawurlencode($_GET['star']) : '')
. (!empty($_GET['order']) ? '&order=' . rawurlencode($_GET['order']) : '')
. (!empty($_GET['bmark']) ? '&bmark=' . rawurlencode($_GET['bmark']) : '')
. (!empty($_GET['liked']) ? '&liked=' . rawurlencode($_GET['liked']) : '')
. (!empty($_GET['conv']) ? '&conv=' . rawurlencode($_GET['conv']) : '')
. (!empty($_GET['nets']) ? '&nets=' . rawurlencode($_GET['nets']) : '')
. (!empty($_GET['cmin']) ? '&cmin=' . rawurlencode($_GET['cmin']) : '')
. (!empty($_GET['cmax']) ? '&cmax=' . rawurlencode($_GET['cmax']) : '')
. (!empty($_GET['file']) ? '&file=' . rawurlencode($_GET['file']) : '')
. "'; </script>\r\n";
}
} elseif ($mode === 'profile') {
$items = conversation_add_children($items, false, $order, local_user());
if (!$update) {
$tab = 'posts';
if (!empty($_GET['tab'])) {
$tab = Strings::escapeTags(trim($_GET['tab']));
}
if ($tab === 'posts') {
/*
* This is ugly, but we can't pass the profile_uid through the session to the ajax updater,
* because browser prefetching might change it on us. We have to deliver it with the page.
*/
$live_update_div = '<div id="live-profile"></div>' . "\r\n"
. "<script> var profile_uid = " . $uid
. "; var netargs = '?f='; </script>\r\n";
}
}
} elseif ($mode === 'notes') {
$items = conversation_add_children($items, false, $order, local_user());
if (!$update) {
$live_update_div = '<div id="live-notes"></div>' . "\r\n"
. "<script> var profile_uid = " . local_user()
. "; var netargs = '/?f='; </script>\r\n";
}
} elseif ($mode === 'display') {
$items = conversation_add_children($items, false, $order, $uid);
if (!$update) {
$live_update_div = '<div id="live-display"></div>' . "\r\n"
. "<script> var profile_uid = " . Session::get('uid', 0) . ";"
. "</script>";
}
} elseif ($mode === 'community') {
$items = conversation_add_children($items, true, $order, $uid);
if (!$update) {
$live_update_div = '<div id="live-community"></div>' . "\r\n"
. "<script> var profile_uid = -1; var netargs = '" . substr(DI::args()->getCommand(), 10)
. '?f='
. (!empty($_GET['no_sharer']) ? '&no_sharer=' . rawurlencode($_GET['no_sharer']) : '')
. "'; </script>\r\n";
}
} elseif ($mode === 'contacts') {
$items = conversation_add_children($items, false, $order, $uid);
if (!$update) {
$live_update_div = '<div id="live-contact"></div>' . "\r\n"
. "<script> var profile_uid = -1; var netargs = '" . substr(DI::args()->getCommand(), 8)
."/?f='; </script>\r\n";
}
} elseif ($mode === 'search') {
$live_update_div = '<div id="live-search"></div>' . "\r\n";
}
$page_dropping = ((local_user() && local_user() == $uid) ? true : false);
if (!$update) {
$_SESSION['return_path'] = DI::args()->getQueryString();
}
$cb = ['items' => $items, 'mode' => $mode, 'update' => $update, 'preview' => $preview];
Hook::callAll('conversation_start', $cb);
$items = $cb['items'];
$conv_responses = [
'like' => [],
'dislike' => [],
'attendyes' => [],
'attendno' => [],
'attendmaybe' => [],
'announce' => [],
];
if (DI::pConfig()->get(local_user(), 'system', 'hide_dislike')) {
unset($conv_responses['dislike']);
}
// array with html for each thread (parent+comments)
$threads = [];
$threadsid = -1;
$page_template = Renderer::getMarkupTemplate("conversation.tpl");
$formSecurityToken = BaseModule::getFormSecurityToken('contact_action');
if (!empty($items)) {
if (in_array($mode, ['community', 'contacts', 'profile'])) {
$writable = true;
} else {
$writable = ($items[0]['uid'] == 0) && in_array($items[0]['network'], Protocol::FEDERATED);
}
if (!local_user()) {
$writable = false;
}
if (in_array($mode, ['filed', 'search', 'contact-posts'])) {
/*
* "New Item View" on network page or search page results
* - just loop through the items and format them minimally for display
*/
$tpl = 'search_item.tpl';
$uriids = [];
foreach ($items as $item) {
if (in_array($item['uri-id'], $uriids)) {
continue;
}
$uriids[] = $item['uri-id'];
if (!visible_activity($item)) {
continue;
}
if (in_array($item['author-id'], $blocklist)) {
continue;
}
$threadsid++;
// prevent private email from leaking.
if ($item['network'] === Protocol::MAIL && local_user() != $item['uid']) {
continue;
}
$profile_name = $item['author-name'];
if (!empty($item['author-link']) && empty($item['author-name'])) {
$profile_name = $item['author-link'];
}
$tags = Tag::populateFromItem($item);
$author = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$profile_link = Contact::magicLinkByContact($author);
$sparkle = '';
if (strpos($profile_link, 'redir/') === 0) {
$sparkle = ' sparkle';
}
$locate = ['location' => $item['location'], 'coord' => $item['coord'], 'html' => ''];
Hook::callAll('render_location', $locate);
$location_html = $locate['html'] ?: Strings::escapeHtml($locate['location'] ?: $locate['coord'] ?: '');
localize_item($item);
if ($mode === 'filed') {
$dropping = true;
} else {
$dropping = false;
}
$drop = [
'dropping' => $dropping,
'pagedrop' => $page_dropping,
'select' => DI::l10n()->t('Select'),
'delete' => DI::l10n()->t('Delete'),
];
$likebuttons = [
'like' => null,
'dislike' => null,
'share' => null,
'announce' => null,
];
if (DI::pConfig()->get(local_user(), 'system', 'hide_dislike')) {
unset($likebuttons['dislike']);
}
$body_html = Item::prepareBody($item, true, $preview);
list($categories, $folders) = DI::contentItem()->determineCategoriesTerms($item, local_user());
if (!empty($item['content-warning']) && DI::pConfig()->get(local_user(), 'system', 'disable_cw', false)) {
$title = ucfirst($item['content-warning']);
} else {
$title = $item['title'];
}
$tmp_item = [
'template' => $tpl,
'id' => ($preview ? 'P0' : $item['id']),
'guid' => ($preview ? 'Q0' : $item['guid']),
'commented' => $item['commented'],
'received' => $item['received'],
'created_date' => $item['created'],
'uriid' => $item['uri-id'],
'network' => $item['network'],
'network_name' => ContactSelector::networkToName($item['author-network'], $item['author-link'], $item['network']),
'network_icon' => ContactSelector::networkToIcon($item['network'], $item['author-link']),
'linktitle' => DI::l10n()->t('View %s\'s profile @ %s', $profile_name, $item['author-link']),
'profile_url' => $profile_link,
'item_photo_menu_html' => item_photo_menu($item, $formSecurityToken),
'name' => $profile_name,
'sparkle' => $sparkle,
'lock' => false,
'thumb' => DI::baseUrl()->remove(Contact::getAvatarUrlForUrl($item['author-link'], $item['uid'], Proxy::SIZE_THUMB)),
'title' => $title,
'body_html' => $body_html,
'tags' => $tags['tags'],
'hashtags' => $tags['hashtags'],
'mentions' => $tags['mentions'],
'implicit_mentions' => $tags['implicit_mentions'],
'txt_cats' => DI::l10n()->t('Categories:'),
'txt_folders' => DI::l10n()->t('Filed under:'),
'has_cats' => ((count($categories)) ? 'true' : ''),
'has_folders' => ((count($folders)) ? 'true' : ''),
'categories' => $categories,
'folders' => $folders,
'text' => strip_tags($body_html),
'localtime' => DateTimeFormat::local($item['created'], 'r'),
'ago' => (($item['app']) ? DI::l10n()->t('%s from %s', Temporal::getRelativeDate($item['created']), $item['app']) : Temporal::getRelativeDate($item['created'])),
'location_html' => $location_html,
'indent' => '',
'owner_name' => '',
'owner_url' => '',
'owner_photo' => DI::baseUrl()->remove(Contact::getAvatarUrlForUrl($item['owner-link'], $item['uid'], Proxy::SIZE_THUMB)),
'plink' => Item::getPlink($item),
'edpost' => false,
'isstarred' => 'unstarred',
'star' => false,
'drop' => $drop,
'vote' => $likebuttons,
'like_html' => '',
'dislike_html' => '',
'comment_html' => '',
'conv' => (($preview) ? '' : ['href'=> 'display/'.$item['guid'], 'title'=> DI::l10n()->t('View in context')]),
'previewing' => $previewing,
'wait' => DI::l10n()->t('Please wait'),
'thread_level' => 1,
];
$arr = ['item' => $item, 'output' => $tmp_item];
Hook::callAll('display_item', $arr);
$threads[$threadsid]['id'] = $item['id'];
$threads[$threadsid]['network'] = $item['network'];
$threads[$threadsid]['items'] = [$arr['output']];
}
} else {
// Normal View
$page_template = Renderer::getMarkupTemplate("threaded_conversation.tpl");
$conv = new Thread($mode, $preview, $writable);
/*
* get all the topmost parents
* this shouldn't be needed, as we should have only them in our array
* But for now, this array respects the old style, just in case
*/
foreach ($items as $item) {
if (in_array($item['author-id'], $blocklist)) {
continue;
}
// Can we put this after the visibility check?
builtin_activity_puller($item, $conv_responses);
// Only add what is visible
if ($item['network'] === Protocol::MAIL && local_user() != $item['uid']) {
continue;
}
if (!visible_activity($item)) {
continue;
}
/// @todo Check if this call is needed or not
$arr = ['item' => $item];
Hook::callAll('display_item', $arr);
$item['pagedrop'] = $page_dropping;
if ($item['gravity'] == GRAVITY_PARENT) {
$item_object = new PostObject($item);
$conv->addParent($item_object);
}
}
$threads = $conv->getTemplateData($conv_responses, $formSecurityToken);
if (!$threads) {
Logger::log('[ERROR] conversation : Failed to get template data.', Logger::DEBUG);
$threads = [];
}
}
}
$o = Renderer::replaceMacros($page_template, [
'$baseurl' => DI::baseUrl()->get($ssl_state),
'$return_path' => DI::args()->getQueryString(),
'$live_update' => $live_update_div,
'$remove' => DI::l10n()->t('remove'),
'$mode' => $mode,
'$update' => $update,
'$threads' => $threads,
'$dropping' => ($page_dropping ? DI::l10n()->t('Delete Selected Items') : False),
]);
DI::profiler()->stopRecording();
return $o;
}
/**
* Adds some information (Causer, post reason, direction) to the fetched post row.
*
* @param array $row Post row
* @param array $activity Contact data of the resharer
*
* @return array items with parents and comments
*/
function conversation_add_row_information(array $row, array $activity) {
DI::profiler()->startRecording('rendering');
if ($row['uid'] == 0) {
$row['writable'] = in_array($row['network'], Protocol::FEDERATED);
}
if (!empty($activity)) {
if (($row['gravity'] == GRAVITY_PARENT)) {
$row['post-reason'] = Item::PR_ANNOUNCEMENT;
$row = array_merge($row, $activity);
$contact = Contact::getById($activity['causer-id'], ['url', 'name', 'thumb']);
$row['causer-link'] = $contact['url'];
$row['causer-avatar'] = $contact['thumb'];
$row['causer-name'] = $contact['name'];
} elseif (($row['gravity'] == GRAVITY_ACTIVITY) && ($row['verb'] == Activity::ANNOUNCE) &&
($row['author-id'] == $activity['causer-id'])) {
return $row;
}
}
switch ($row['post-reason']) {
case Item::PR_TO:
$row['direction'] = ['direction' => 7, 'title' => DI::l10n()->t('You had been addressed (%s).', 'to')];
break;
case Item::PR_CC:
$row['direction'] = ['direction' => 7, 'title' => DI::l10n()->t('You had been addressed (%s).', 'cc')];
break;
case Item::PR_BTO:
$row['direction'] = ['direction' => 7, 'title' => DI::l10n()->t('You had been addressed (%s).', 'bto')];
break;
case Item::PR_BCC:
$row['direction'] = ['direction' => 7, 'title' => DI::l10n()->t('You had been addressed (%s).', 'bcc')];
break;
case Item::PR_FOLLOWER:
$row['direction'] = ['direction' => 6, 'title' => DI::l10n()->t('You are following %s.', $row['author-name'])];
break;
case Item::PR_TAG:
$row['direction'] = ['direction' => 4, 'title' => DI::l10n()->t('Tagged')];
break;
case Item::PR_ANNOUNCEMENT:
if (!empty($row['causer-id']) && DI::pConfig()->get(local_user(), 'system', 'display_resharer')) {
$row['owner-id'] = $row['causer-id'];
$row['owner-link'] = $row['causer-link'];
$row['owner-avatar'] = $row['causer-avatar'];
$row['owner-name'] = $row['causer-name'];
}
if (($row['gravity'] == GRAVITY_PARENT) && !empty($row['causer-id'])) {
$causer = ['uid' => 0, 'id' => $row['causer-id'],
'network' => $row['causer-network'], 'url' => $row['causer-link']];
$row['reshared'] = DI::l10n()->t('%s reshared this.', '<a href="'. htmlentities(Contact::magicLinkByContact($causer)) .'">' . htmlentities($row['causer-name']) . '</a>');
}
$row['direction'] = ['direction' => 3, 'title' => (empty($row['causer-id']) ? DI::l10n()->t('Reshared') : DI::l10n()->t('Reshared by %s <%s>', $row['causer-name'], $row['causer-link']))];
break;
case Item::PR_COMMENT:
$row['direction'] = ['direction' => 5, 'title' => DI::l10n()->t('%s is participating in this thread.', $row['author-name'])];
break;
case Item::PR_STORED:
$row['direction'] = ['direction' => 8, 'title' => DI::l10n()->t('Stored')];
break;
case Item::PR_GLOBAL:
$row['direction'] = ['direction' => 9, 'title' => DI::l10n()->t('Global')];
break;
case Item::PR_RELAY:
$row['direction'] = ['direction' => 10, 'title' => (empty($row['causer-id']) ? DI::l10n()->t('Relayed') : DI::l10n()->t('Relayed by %s <%s>', $row['causer-name'], $row['causer-link']))];
break;
case Item::PR_FETCHED:
$row['direction'] = ['direction' => 2, 'title' => (empty($row['causer-id']) ? DI::l10n()->t('Fetched') : DI::l10n()->t('Fetched because of %s <%s>', $row['causer-name'], $row['causer-link']))];
break;
}
DI::profiler()->stopRecording();
return $row;
}
/**
* Add comments to top level entries that had been fetched before
*
* The system will fetch the comments for the local user whenever possible.
* This behaviour is currently needed to allow commenting on Friendica posts.
*
* @param array $parents Parent items
*
* @param $block_authors
* @param $order
* @param $uid
* @return array items with parents and comments
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
function conversation_add_children(array $parents, $block_authors, $order, $uid) {
DI::profiler()->startRecording('rendering');
if (count($parents) > 1) {
$max_comments = DI::config()->get('system', 'max_comments', 100);
} else {
$max_comments = DI::config()->get('system', 'max_display_comments', 1000);
}
$params = ['order' => ['uri-id' => true, 'uid' => true]];
$activities = [];
$uriids = [];
$commentcounter = [];
$activitycounter = [];
foreach ($parents AS $parent) {
if (!empty($parent['thr-parent-id']) && !empty($parent['gravity']) && ($parent['gravity'] == GRAVITY_ACTIVITY)) {
$uriid = $parent['thr-parent-id'];
if (!empty($parent['author-id'])) {
$activities[$uriid] = ['causer-id' => $parent['author-id']];
foreach (['commented', 'received', 'created'] as $orderfields) {
if (!empty($parent[$orderfields])) {
$activities[$uriid][$orderfields] = $parent[$orderfields];
}
}
}
} else {
$uriid = $parent['uri-id'];
}
$uriids[] = $uriid;
$commentcounter[$uriid] = 0;
$activitycounter[$uriid] = 0;
}
$condition = ['parent-uri-id' => $uriids];
if ($block_authors) {
$condition['author-hidden'] = false;
}
$condition = DBA::mergeConditions($condition,
["`uid` IN (0, ?) AND (`vid` != ? OR `vid` IS NULL)", $uid, Verb::getID(Activity::FOLLOW)]);
$thread_items = Post::selectForUser(local_user(), array_merge(Item::DISPLAY_FIELDLIST, ['pinned', 'contact-uid', 'gravity', 'post-type', 'post-reason']), $condition, $params);
$items = [];
while ($row = Post::fetch($thread_items)) {
if (!empty($items[$row['uri-id']]) && ($row['uid'] == 0)) {
continue;
}
if ($max_comments > 0) {
if (($row['gravity'] == GRAVITY_COMMENT) && (++$commentcounter[$row['parent-uri-id']] > $max_comments)) {
continue;
}
if (($row['gravity'] == GRAVITY_ACTIVITY) && (++$activitycounter[$row['parent-uri-id']] > $max_comments)) {
continue;
}
}
$items[$row['uri-id']] = conversation_add_row_information($row, $activities[$row['uri-id']] ?? []);
}
DBA::close($thread_items);
$items = conv_sort($items, $order);
DI::profiler()->stopRecording();
return $items;
}
function item_photo_menu($item, string $formSecurityToken)
{
DI::profiler()->startRecording('rendering');
$sub_link = '';
$poke_link = '';
$contact_url = '';
$pm_url = '';
$status_link = '';
$photos_link = '';
$posts_link = '';
$block_link = '';
$ignore_link = '';
if (local_user() && local_user() == $item['uid'] && $item['gravity'] == GRAVITY_PARENT && !$item['self'] && !$item['mention']) {
$sub_link = 'javascript:doFollowThread(' . $item['id'] . '); return false;';
}
$author = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$profile_link = Contact::magicLinkByContact($author, $item['author-link']);
$sparkle = (strpos($profile_link, 'redir/') === 0);
$cid = 0;
$pcid = $item['author-id'];
$network = '';
$rel = 0;
$condition = ['uid' => local_user(), 'nurl' => Strings::normaliseLink($item['author-link'])];
$contact = DBA::selectFirst('contact', ['id', 'network', 'rel'], $condition);
if (DBA::isResult($contact)) {
$cid = $contact['id'];
$network = $contact['network'];
$rel = $contact['rel'];
}
if ($sparkle) {
$status_link = $profile_link . '/status';
$photos_link = str_replace('/profile/', '/photos/', $profile_link);
$profile_link = $profile_link . '/profile';
}
if (!empty($pcid)) {
$contact_url = 'contact/' . $pcid;
$posts_link = $contact_url . '/posts';
$block_link = $item['self'] ? '' : $contact_url . '/block?t=' . $formSecurityToken;
$ignore_link = $item['self'] ? '' : $contact_url . '/ignore?t=' . $formSecurityToken;
}
if ($cid && !$item['self']) {
$contact_url = 'contact/' . $cid;
$poke_link = $contact_url . '/poke';
$posts_link = $contact_url . '/posts';
if (in_array($network, [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA])) {
$pm_url = 'message/new/' . $cid;
}
}
if (local_user()) {
$menu = [
DI::l10n()->t('Follow Thread') => $sub_link,
DI::l10n()->t('View Status') => $status_link,
DI::l10n()->t('View Profile') => $profile_link,
DI::l10n()->t('View Photos') => $photos_link,
DI::l10n()->t('Network Posts') => $posts_link,
DI::l10n()->t('View Contact') => $contact_url,
DI::l10n()->t('Send PM') => $pm_url,
DI::l10n()->t('Block') => $block_link,
DI::l10n()->t('Ignore') => $ignore_link
];
if (!empty($item['language'])) {
$menu[DI::l10n()->t('Languages')] = 'javascript:alert(\'' . Item::getLanguageMessage($item) . '\');';
}
if ($network == Protocol::DFRN) {
$menu[DI::l10n()->t("Poke")] = $poke_link;
}
if ((($cid == 0) || ($rel == Contact::FOLLOWER)) &&
in_array($item['network'], Protocol::FEDERATED)) {
$menu[DI::l10n()->t('Connect/Follow')] = 'follow?url=' . urlencode($item['author-link']) . '&auto=1';
}
} else {
$menu = [DI::l10n()->t('View Profile') => $item['author-link']];
}
$args = ['item' => $item, 'menu' => $menu];
Hook::callAll('item_photo_menu', $args);
$menu = $args['menu'];
$o = '';
foreach ($menu as $k => $v) {
if (strpos($v, 'javascript:') === 0) {
$v = substr($v, 11);
$o .= '<li role="menuitem"><a onclick="' . $v . '">' . $k . '</a></li>' . PHP_EOL;
} elseif ($v) {
$o .= '<li role="menuitem"><a href="' . $v . '">' . $k . '</a></li>' . PHP_EOL;
}
}
DI::profiler()->stopRecording();
return $o;
}
/**
* Checks item to see if it is one of the builtin activities (like/dislike, event attendance, consensus items, etc.)
*
* Increments the count of each matching activity and adds a link to the author as needed.
*
* @param array $activity
* @param array &$conv_responses (already created with builtin activity structure)
* @return void
* @throws ImagickException
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
function builtin_activity_puller(array $activity, array &$conv_responses)
{
foreach ($conv_responses as $mode => $v) {
$sparkle = '';
switch ($mode) {
case 'like':
$verb = Activity::LIKE;
break;
case 'dislike':
$verb = Activity::DISLIKE;
break;
case 'attendyes':
$verb = Activity::ATTEND;
break;
case 'attendno':
$verb = Activity::ATTENDNO;
break;
case 'attendmaybe':
$verb = Activity::ATTENDMAYBE;
break;
case 'announce':
$verb = Activity::ANNOUNCE;
break;
default:
return;
}
if (!empty($activity['verb']) && DI::activity()->match($activity['verb'], $verb) && ($activity['gravity'] != GRAVITY_PARENT)) {
$author = [
'uid' => 0,
'id' => $activity['author-id'],
'network' => $activity['author-network'],
'url' => $activity['author-link']
];
$url = Contact::magicLinkByContact($author);
if (strpos($url, 'redir/') === 0) {
$sparkle = ' class="sparkle" ';
}
$link = '<a href="' . $url . '"' . $sparkle . '>' . htmlentities($activity['author-name']) . '</a>';
if (empty($activity['thr-parent-id'])) {
$activity['thr-parent-id'] = $activity['parent-uri-id'];
}
// Skip when the causer of the parent is the same than the author of the announce
if (($verb == Activity::ANNOUNCE) && Post::exists(['uri-id' => $activity['thr-parent-id'],
'uid' => $activity['uid'], 'causer-id' => $activity['author-id'], 'gravity' => GRAVITY_PARENT])) {
continue;
}
if (!isset($conv_responses[$mode][$activity['thr-parent-id']])) {
$conv_responses[$mode][$activity['thr-parent-id']] = [
'links' => [],
'self' => 0,
];
} elseif (in_array($link, $conv_responses[$mode][$activity['thr-parent-id']]['links'])) {
// only list each unique author once
continue;
}
if (public_contact() == $activity['author-id']) {
$conv_responses[$mode][$activity['thr-parent-id']]['self'] = 1;
}
$conv_responses[$mode][$activity['thr-parent-id']]['links'][] = $link;
// there can only be one activity verb per item so if we found anything, we can stop looking
return;
}
}
}
/**
* Format the activity text for an item/photo/video
*
* @param array $links = array of pre-linked names of actors
* @param string $verb = one of 'like, 'dislike', 'attendyes', 'attendno', 'attendmaybe'
* @param int $id = item id
* @return string formatted text
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
function format_activity(array $links, $verb, $id) {
DI::profiler()->startRecording('rendering');
$o = '';
$expanded = '';
$phrase = '';
$total = count($links);
if ($total == 1) {
$likers = $links[0];
// Phrase if there is only one liker. In other cases it will be uses for the expanded
// list which show all likers
switch ($verb) {
case 'like' :
$phrase = DI::l10n()->t('%s likes this.', $likers);
break;
case 'dislike' :
$phrase = DI::l10n()->t('%s doesn\'t like this.', $likers);
break;
case 'attendyes' :
$phrase = DI::l10n()->t('%s attends.', $likers);
break;
case 'attendno' :
$phrase = DI::l10n()->t('%s doesn\'t attend.', $likers);
break;
case 'attendmaybe' :
$phrase = DI::l10n()->t('%s attends maybe.', $likers);
break;
case 'announce' :
$phrase = DI::l10n()->t('%s reshared this.', $likers);
break;
}
} elseif ($total > 1) {
if ($total < MAX_LIKERS) {
$likers = implode(', ', array_slice($links, 0, -1));
$likers .= ' ' . DI::l10n()->t('and') . ' ' . $links[count($links)-1];
} else {
$likers = implode(', ', array_slice($links, 0, MAX_LIKERS - 1));
$likers .= ' ' . DI::l10n()->t('and %d other people', $total - MAX_LIKERS);
}
$spanatts = "class=\"fakelink\" onclick=\"openClose('{$verb}list-$id');\"";
$explikers = '';
switch ($verb) {
case 'like':
$phrase = DI::l10n()->t('<span %1$s>%2$d people</span> like this', $spanatts, $total);
$explikers = DI::l10n()->t('%s like this.', $likers);
break;
case 'dislike':
$phrase = DI::l10n()->t('<span %1$s>%2$d people</span> don\'t like this', $spanatts, $total);
$explikers = DI::l10n()->t('%s don\'t like this.', $likers);
break;
case 'attendyes':
$phrase = DI::l10n()->t('<span %1$s>%2$d people</span> attend', $spanatts, $total);
$explikers = DI::l10n()->t('%s attend.', $likers);
break;
case 'attendno':
$phrase = DI::l10n()->t('<span %1$s>%2$d people</span> don\'t attend', $spanatts, $total);
$explikers = DI::l10n()->t('%s don\'t attend.', $likers);
break;
case 'attendmaybe':
$phrase = DI::l10n()->t('<span %1$s>%2$d people</span> attend maybe', $spanatts, $total);
$explikers = DI::l10n()->t('%s attend maybe.', $likers);
break;
case 'announce':
$phrase = DI::l10n()->t('<span %1$s>%2$d people</span> reshared this', $spanatts, $total);
$explikers = DI::l10n()->t('%s reshared this.', $likers);
break;
}
$expanded .= "\t" . '<p class="wall-item-' . $verb . '-expanded" id="' . $verb . 'list-' . $id . '" style="display: none;" >' . $explikers . EOL . '</p>';
}
$o .= Renderer::replaceMacros(Renderer::getMarkupTemplate('voting_fakelink.tpl'), [
'$phrase' => $phrase,
'$type' => $verb,
'$id' => $id
]);
$o .= $expanded;
DI::profiler()->stopRecording();
return $o;
}
function status_editor(App $a, array $x = [], $notes_cid = 0, $popup = false)
{
$user = User::getById($a->getLoggedInUserId(), ['uid', 'nickname', 'allow_location', 'default-location']);
if (empty($user['uid'])) {
return '';
}
DI::profiler()->startRecording('rendering');
$o = '';
$x['allow_location'] = $x['allow_location'] ?? $user['allow_location'];
$x['default_location'] = $x['default_location'] ?? $user['default-location'];
$x['nickname'] = $x['nickname'] ?? $user['nickname'];
$x['lockstate'] = $x['lockstate'] ?? ACL::getLockstateForUserId($user['uid']) ? 'lock' : 'unlock';
$x['acl'] = $x['acl'] ?? ACL::getFullSelectorHTML(DI::page(), $user['uid'], true);
$x['bang'] = $x['bang'] ?? '';
$x['visitor'] = $x['visitor'] ?? 'block';
$x['is_owner'] = $x['is_owner'] ?? true;
$x['profile_uid'] = $x['profile_uid'] ?? local_user();
$geotag = !empty($x['allow_location']) ? Renderer::replaceMacros(Renderer::getMarkupTemplate('jot_geotag.tpl'), []) : '';
$tpl = Renderer::getMarkupTemplate('jot-header.tpl');
DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [
'$newpost' => 'true',
'$baseurl' => DI::baseUrl()->get(true),
'$geotag' => $geotag,
'$nickname' => $x['nickname'],
'$ispublic' => DI::l10n()->t('Visible to <strong>everybody</strong>'),
'$linkurl' => DI::l10n()->t('Please enter a image/video/audio/webpage URL:'),
'$term' => DI::l10n()->t('Tag term:'),
'$fileas' => DI::l10n()->t('Save to Folder:'),
'$whereareu' => DI::l10n()->t('Where are you right now?'),
'$delitems' => DI::l10n()->t("Delete item\x28s\x29?"),
'$is_mobile' => DI::mode()->isMobile(),
]);
$jotplugins = '';
Hook::callAll('jot_tool', $jotplugins);
$tpl = Renderer::getMarkupTemplate("jot.tpl");
$o .= Renderer::replaceMacros($tpl, [
'$new_post' => DI::l10n()->t('New Post'),
'$return_path' => DI::args()->getQueryString(),
'$action' => 'item',
'$share' => ($x['button'] ?? '') ?: DI::l10n()->t('Share'),
'$loading' => DI::l10n()->t('Loading...'),
'$upload' => DI::l10n()->t('Upload photo'),
'$shortupload' => DI::l10n()->t('upload photo'),
'$attach' => DI::l10n()->t('Attach file'),
'$shortattach' => DI::l10n()->t('attach file'),
'$edbold' => DI::l10n()->t('Bold'),
'$editalic' => DI::l10n()->t('Italic'),
'$eduline' => DI::l10n()->t('Underline'),
'$edquote' => DI::l10n()->t('Quote'),
'$edcode' => DI::l10n()->t('Code'),
'$edimg' => DI::l10n()->t('Image'),
'$edurl' => DI::l10n()->t('Link'),
'$edattach' => DI::l10n()->t('Link or Media'),
'$edvideo' => DI::l10n()->t('Video'),
'$setloc' => DI::l10n()->t('Set your location'),
'$shortsetloc' => DI::l10n()->t('set location'),
'$noloc' => DI::l10n()->t('Clear browser location'),
'$shortnoloc' => DI::l10n()->t('clear location'),
'$title' => $x['title'] ?? '',
'$placeholdertitle' => DI::l10n()->t('Set title'),
'$category' => $x['category'] ?? '',
'$placeholdercategory' => Feature::isEnabled(local_user(), 'categories') ? DI::l10n()->t("Categories \x28comma-separated list\x29") : '',
'$scheduled_at' => Temporal::getDateTimeField(
new DateTime(),
new DateTime('now + 6 months'),
null,
DI::l10n()->t('Scheduled at'),
'scheduled_at'
),
'$wait' => DI::l10n()->t('Please wait'),
'$permset' => DI::l10n()->t('Permission settings'),
'$shortpermset' => DI::l10n()->t('Permissions'),
'$wall' => $notes_cid ? 0 : 1,
'$posttype' => $notes_cid ? Item::PT_PERSONAL_NOTE : Item::PT_ARTICLE,
'$content' => $x['content'] ?? '',
'$post_id' => $x['post_id'] ?? '',
'$baseurl' => DI::baseUrl()->get(true),
'$defloc' => $x['default_location'],
'$visitor' => $x['visitor'],
'$pvisit' => $notes_cid ? 'none' : $x['visitor'],
'$public' => DI::l10n()->t('Public post'),
'$lockstate' => $x['lockstate'],
'$bang' => $x['bang'],
'$profile_uid' => $x['profile_uid'],
'$preview' => DI::l10n()->t('Preview'),
'$jotplugins' => $jotplugins,
'$notes_cid' => $notes_cid,
'$cancel' => DI::l10n()->t('Cancel'),
'$rand_num' => Crypto::randomDigits(12),
// ACL permissions box
'$acl' => $x['acl'],
//jot nav tab (used in some themes)
'$message' => DI::l10n()->t('Message'),
'$browser' => DI::l10n()->t('Browser'),
'$compose_link_title' => DI::l10n()->t('Open Compose page'),
]);
if ($popup == true) {
$o = '<div id="jot-popup" style="display: none;">' . $o . '</div>';
}
DI::profiler()->stopRecording();
return $o;
}
/**
* Plucks the children of the given parent from a given item list.
*
* @param array $item_list
* @param array $parent
* @param bool $recursive
* @return array
*/
function get_item_children(array &$item_list, array $parent, $recursive = true)
{
DI::profiler()->startRecording('rendering');
$children = [];
foreach ($item_list as $i => $item) {
if ($item['gravity'] != GRAVITY_PARENT) {
if ($recursive) {
// Fallback to parent-uri if thr-parent is not set
$thr_parent = $item['thr-parent-id'];
if ($thr_parent == '') {
$thr_parent = $item['parent-uri-id'];
}
if ($thr_parent == $parent['uri-id']) {
$item['children'] = get_item_children($item_list, $item);
$children[] = $item;
unset($item_list[$i]);
}
} elseif ($item['parent-uri-id'] == $parent['uri-id']) {
$children[] = $item;
unset($item_list[$i]);
}
}
}
DI::profiler()->stopRecording();
return $children;
}
/**
* Recursively sorts a tree-like item array
*
* @param array $items
* @return array
*/
function sort_item_children(array $items)
{
DI::profiler()->startRecording('rendering');
$result = $items;
usort($result, 'sort_thr_received_rev');
foreach ($result as $k => $i) {
if (isset($result[$k]['children'])) {
$result[$k]['children'] = sort_item_children($result[$k]['children']);
}
}
DI::profiler()->stopRecording();
return $result;
}
/**
* Recursively add all children items at the top level of a list
*
* @param array $children List of items to append
* @param array $item_list
*/
function add_children_to_list(array $children, array &$item_list)
{
foreach ($children as $child) {
$item_list[] = $child;
if (isset($child['children'])) {
add_children_to_list($child['children'], $item_list);
}
}
}
/**
* Selectively flattens a tree-like item structure to prevent threading stairs
*
* This recursive function takes the item tree structure created by conv_sort() and
* flatten the extraneous depth levels when people reply sequentially, removing the
* stairs effect in threaded conversations limiting the available content width.
*
* The basic principle is the following: if a post item has only one reply and is
* the last reply of its parent, then the reply is moved to the parent.
*
* This process is rendered somewhat more complicated because items can be either
* replies or likes, and these don't factor at all in the reply count/last reply.
*
* @param array $parent A tree-like array of items
* @return array
*/
function smart_flatten_conversation(array $parent)
{
DI::profiler()->startRecording('rendering');
if (!isset($parent['children']) || count($parent['children']) == 0) {
DI::profiler()->stopRecording();
return $parent;
}
// We use a for loop to ensure we process the newly-moved items
for ($i = 0; $i < count($parent['children']); $i++) {
$child = $parent['children'][$i];
if (isset($child['children']) && count($child['children'])) {
// This helps counting only the regular posts
$count_post_closure = function($var) {
DI::profiler()->stopRecording();
return $var['verb'] === Activity::POST;
};
$child_post_count = count(array_filter($child['children'], $count_post_closure));
$remaining_post_count = count(array_filter(array_slice($parent['children'], $i), $count_post_closure));
// If there's only one child's children post and this is the last child post
if ($child_post_count == 1 && $remaining_post_count == 1) {
// Searches the post item in the children
$j = 0;
while($child['children'][$j]['verb'] !== Activity::POST && $j < count($child['children'])) {
$j ++;
}
$moved_item = $child['children'][$j];
unset($parent['children'][$i]['children'][$j]);
$parent['children'][] = $moved_item;
} else {
$parent['children'][$i] = smart_flatten_conversation($child);
}
}
}
DI::profiler()->stopRecording();
return $parent;
}
/**
* Expands a flat list of items into corresponding tree-like conversation structures.
*
* sort the top-level posts either on "received" or "commented", and finally
* append all the items at the top level (???)
*
* @param array $item_list A list of items belonging to one or more conversations
* @param string $order Either on "received" or "commented"
* @return array
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
function conv_sort(array $item_list, $order)
{
DI::profiler()->startRecording('rendering');
$parents = [];
if (!(is_array($item_list) && count($item_list))) {
DI::profiler()->stopRecording();
return $parents;
}
$blocklist = conv_get_blocklist();
$item_array = [];
// Dedupes the item list on the uri to prevent infinite loops
foreach ($item_list as $item) {
if (in_array($item['author-id'], $blocklist)) {
continue;
}
$item_array[$item['uri-id']] = $item;
}
// Extract the top level items
foreach ($item_array as $item) {
if ($item['gravity'] == GRAVITY_PARENT) {
$parents[] = $item;
}
}
if (stristr($order, 'pinned_received')) {
usort($parents, 'sort_thr_pinned_received');
} elseif (stristr($order, 'received')) {
usort($parents, 'sort_thr_received');
} elseif (stristr($order, 'commented')) {
usort($parents, 'sort_thr_commented');
}
/*
* Plucks children from the item_array, second pass collects eventual orphan
* items and add them as children of their top-level post.
*/
foreach ($parents as $i => $parent) {
$parents[$i]['children'] =
array_merge(get_item_children($item_array, $parent, true),
get_item_children($item_array, $parent, false));
}
foreach ($parents as $i => $parent) {
$parents[$i]['children'] = sort_item_children($parents[$i]['children']);
}
if (!DI::pConfig()->get(local_user(), 'system', 'no_smart_threading', 0)) {
foreach ($parents as $i => $parent) {
$parents[$i] = smart_flatten_conversation($parent);
}
}
/// @TODO: Stop recusrsively adding all children back to the top level (!!!)
/// However, this apparently ensures responses (likes, attendance) display (?!)
foreach ($parents as $parent) {
if (count($parent['children'])) {
add_children_to_list($parent['children'], $parents);
}
}
DI::profiler()->stopRecording();
return $parents;
}
/**
* usort() callback to sort item arrays by pinned and the received key
*
* @param array $a
* @param array $b
* @return int
*/
function sort_thr_pinned_received(array $a, array $b)
{
if ($b['pinned'] && !$a['pinned']) {
return 1;
} elseif (!$b['pinned'] && $a['pinned']) {
return -1;
}
return strcmp($b['received'], $a['received']);
}
/**
* usort() callback to sort item arrays by the received key
*
* @param array $a
* @param array $b
* @return int
*/
function sort_thr_received(array $a, array $b)
{
return strcmp($b['received'], $a['received']);
}
/**
* usort() callback to reverse sort item arrays by the received key
*
* @param array $a
* @param array $b
* @return int
*/
function sort_thr_received_rev(array $a, array $b)
{
return strcmp($a['received'], $b['received']);
}
/**
* usort() callback to sort item arrays by the commented key
*
* @param array $a
* @param array $b
* @return int
*/
function sort_thr_commented(array $a, array $b)
{
return strcmp($b['commented'], $a['commented']);
}

View file

@ -246,7 +246,7 @@ function display_content(App $a, $update = false, $update_uid = 0)
$page_uid = 0;
$parent = null;
if (!empty($parent_uri_id)) {
if (!local_user() && !empty($parent_uri_id)) {
$parent = Post::selectFirst(['uid'], ['uri-id' => $parent_uri_id, 'wall' => true]);
}
@ -272,7 +272,7 @@ function display_content(App $a, $update = false, $update_uid = 0)
// We need the editor here to be able to reshare an item.
if ($is_owner && !$update) {
$o .= status_editor($a, [], 0, true);
$o .= DI::conversation()->statusEditor([], 0, true);
}
$sql_extra = Item::getPermissionsSQLByUserId($page_uid);
@ -306,7 +306,7 @@ function display_content(App $a, $update = false, $update_uid = 0)
$o .= "<script> var netargs = '?uri_id=" . $item['uri-id'] . "'; </script>";
}
$o .= conversation($a, [$item], 'display', $update_uid, false, 'commented', $item_uid);
$o .= DI::conversation()->create([$item], 'display', $update_uid, false, 'commented', $item_uid);
// Preparing the meta header
$description = trim(BBCode::toPlaintext($item['body']));

View file

@ -177,10 +177,11 @@ function item_post(App $a) {
}
// Allow commenting if it is an answer to a public post
$allow_comment = local_user() && ($profile_uid == 0) && $toplevel_item_id && in_array($toplevel_item['network'], Protocol::FEDERATED);
$allow_comment = local_user() && $toplevel_item_id && in_array($toplevel_item['private'], [Item::PUBLIC, Item::UNLISTED]) && in_array($toplevel_item['network'], Protocol::FEDERATED);
// Now check that valid personal details have been provided
if (!Security::canWriteToUserWall($profile_uid) && !$allow_comment) {
Logger::notice('Permission denied.', ['local' => local_user(), 'profile_uid' => $profile_uid, 'toplevel_item_id' => $toplevel_item_id, 'network' => $toplevel_item['network']]);
notice(DI::l10n()->t('Permission denied.'));
if ($return_path) {
DI::baseUrl()->redirect($return_path);
@ -677,7 +678,7 @@ function item_post(App $a) {
$datarray["uri-id"] = -1;
$datarray["author-network"] = Protocol::DFRN;
$o = conversation($a, [array_merge($contact_record, $datarray)], 'search', false, true);
$o = DI::conversation()->create([array_merge($contact_record, $datarray)], 'search', false, true);
System::jsonExit(['preview' => $o]);
}
@ -931,6 +932,7 @@ function drop_item(int $id, string $return = '')
item_redirect_after_action($item, $return);
} else {
Logger::notice('Permission denied.', ['local' => local_user(), 'uid' => $item['uid'], 'cid' => $contact_id]);
notice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect('display/' . $item['guid']);
//NOTREACHED

View file

@ -57,7 +57,7 @@ function notes_content(App $a, $update = false)
'acl_data' => '',
];
$o .= status_editor($a, $x, $a->getContactId());
$o .= DI::conversation()->statusEditor($x, $a->getContactId());
}
$condition = ['uid' => local_user(), 'post-type' => Item::PT_PERSONAL_NOTE, 'gravity' => GRAVITY_PARENT,
@ -84,7 +84,7 @@ function notes_content(App $a, $update = false)
$count = count($notes);
$o .= conversation($a, $notes, 'notes', $update);
$o .= DI::conversation()->create($notes, 'notes', $update);
}
$o .= $pager->renderMinimal($count);

View file

@ -1394,15 +1394,15 @@ function photos_content(App $a)
// display comments
if (DBA::isResult($items)) {
foreach ($items as $item) {
builtin_activity_puller($item, $conv_responses);
DI::conversation()->builtinActivityPuller($item, $conv_responses);
}
if (!empty($conv_responses['like'][$link_item['uri']])) {
$like = format_activity($conv_responses['like'][$link_item['uri']]['links'], 'like', $link_item['id']);
$like = DI::conversation()->formatActivity($conv_responses['like'][$link_item['uri']]['links'], 'like', $link_item['id']);
}
if (!empty($conv_responses['dislike'][$link_item['uri']])) {
$dislike = format_activity($conv_responses['dislike'][$link_item['uri']]['links'], 'dislike', $link_item['id']);
$dislike = DI::conversation()->formatActivity($conv_responses['dislike'][$link_item['uri']]['links'], 'dislike', $link_item['id']);
}
if (($can_post || Security::canWriteToUserWall($owner_uid))) {

1226
src/Content/Conversation.php Normal file
View file

@ -0,0 +1,1226 @@
<?php
/**
* @copyright Copyright (C) 2010-2021, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
namespace Friendica\Content;
use Friendica\App;
use Friendica\App\Arguments;
use Friendica\App\BaseURL;
use Friendica\BaseModule;
use Friendica\Core\ACL;
use Friendica\Core\Config\IConfig;
use Friendica\Core\Hook;
use Friendica\Core\L10n;
use Friendica\Core\PConfig\IPConfig;
use Friendica\Core\Protocol;
use Friendica\Core\Renderer;
use Friendica\Core\Session;
use Friendica\Core\Theme;
use Friendica\Database\DBA;
use Friendica\Model\Contact;
use Friendica\Model\Item as ItemModel;
use Friendica\Model\Post;
use Friendica\Model\Tag;
use Friendica\Model\User;
use Friendica\Model\Verb;
use Friendica\Object\Post as PostObject;
use Friendica\Object\Thread;
use Friendica\Protocol\Activity;
use Friendica\Util\Crypto;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Profiler;
use Friendica\Util\Proxy;
use Friendica\Util\Strings;
use Friendica\Util\Temporal;
use Psr\Log\LoggerInterface;
class Conversation
{
/** @var Activity */
private $activity;
/** @var L10n */
private $l10n;
/** @var Profiler */
private $profiler;
/** @var LoggerInterface */
private $logger;
/** @var Item */
private $item;
/** @var App\Arguments */
private $args;
/** @var IPConfig */
private $pConfig;
/** @var BaseURL */
private $baseURL;
/** @var IConfig */
private $config;
/** @var App */
private $app;
/** @var App\Page */
private $page;
/** @var App\Mode */
private $mode;
public function __construct(LoggerInterface $logger, Profiler $profiler, Activity $activity, L10n $l10n, Item $item, Arguments $args, BaseURL $baseURL, IConfig $config, IPConfig $pConfig, App\Page $page, App\Mode $mode, App $app)
{
$this->activity = $activity;
$this->item = $item;
$this->config = $config;
$this->mode = $mode;
$this->baseURL = $baseURL;
$this->profiler = $profiler;
$this->logger = $logger;
$this->l10n = $l10n;
$this->args = $args;
$this->pConfig = $pConfig;
$this->page = $page;
$this->app = $app;
}
/**
* Checks item to see if it is one of the builtin activities (like/dislike, event attendance, consensus items, etc.)
*
* Increments the count of each matching activity and adds a link to the author as needed.
*
* @param array $activity
* @param array &$conv_responses (already created with builtin activity structure)
* @return void
* @throws ImagickException
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public function builtinActivityPuller(array $activity, array &$conv_responses)
{
foreach ($conv_responses as $mode => $v) {
$sparkle = '';
switch ($mode) {
case 'like':
$verb = Activity::LIKE;
break;
case 'dislike':
$verb = Activity::DISLIKE;
break;
case 'attendyes':
$verb = Activity::ATTEND;
break;
case 'attendno':
$verb = Activity::ATTENDNO;
break;
case 'attendmaybe':
$verb = Activity::ATTENDMAYBE;
break;
case 'announce':
$verb = Activity::ANNOUNCE;
break;
default:
return;
}
if (!empty($activity['verb']) && $this->activity->match($activity['verb'], $verb) && ($activity['gravity'] != GRAVITY_PARENT)) {
$author = [
'uid' => 0,
'id' => $activity['author-id'],
'network' => $activity['author-network'],
'url' => $activity['author-link']
];
$url = Contact::magicLinkByContact($author);
if (strpos($url, 'redir/') === 0) {
$sparkle = ' class="sparkle" ';
}
$link = '<a href="' . $url . '"' . $sparkle . '>' . htmlentities($activity['author-name']) . '</a>';
if (empty($activity['thr-parent-id'])) {
$activity['thr-parent-id'] = $activity['parent-uri-id'];
}
// Skip when the causer of the parent is the same than the author of the announce
if (($verb == Activity::ANNOUNCE) && Post::exists(['uri-id' => $activity['thr-parent-id'],
'uid' => $activity['uid'], 'causer-id' => $activity['author-id'], 'gravity' => GRAVITY_PARENT])) {
continue;
}
if (!isset($conv_responses[$mode][$activity['thr-parent-id']])) {
$conv_responses[$mode][$activity['thr-parent-id']] = [
'links' => [],
'self' => 0,
];
} elseif (in_array($link, $conv_responses[$mode][$activity['thr-parent-id']]['links'])) {
// only list each unique author once
continue;
}
if (public_contact() == $activity['author-id']) {
$conv_responses[$mode][$activity['thr-parent-id']]['self'] = 1;
}
$conv_responses[$mode][$activity['thr-parent-id']]['links'][] = $link;
// there can only be one activity verb per item so if we found anything, we can stop looking
return;
}
}
}
/**
* Format the activity text for an item/photo/video
*
* @param array $links = array of pre-linked names of actors
* @param string $verb = one of 'like, 'dislike', 'attendyes', 'attendno', 'attendmaybe'
* @param int $id = item id
* @return string formatted text
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public function formatActivity(array $links, $verb, $id)
{
$this->profiler->startRecording('rendering');
$o = '';
$expanded = '';
$phrase = '';
$total = count($links);
if ($total == 1) {
$likers = $links[0];
// Phrase if there is only one liker. In other cases it will be uses for the expanded
// list which show all likers
switch ($verb) {
case 'like':
$phrase = $this->l10n->t('%s likes this.', $likers);
break;
case 'dislike':
$phrase = $this->l10n->t('%s doesn\'t like this.', $likers);
break;
case 'attendyes':
$phrase = $this->l10n->t('%s attends.', $likers);
break;
case 'attendno':
$phrase = $this->l10n->t('%s doesn\'t attend.', $likers);
break;
case 'attendmaybe':
$phrase = $this->l10n->t('%s attends maybe.', $likers);
break;
case 'announce':
$phrase = $this->l10n->t('%s reshared this.', $likers);
break;
}
} elseif ($total > 1) {
if ($total < MAX_LIKERS) {
$likers = implode(', ', array_slice($links, 0, -1));
$likers .= ' ' . $this->l10n->t('and') . ' ' . $links[count($links) - 1];
} else {
$likers = implode(', ', array_slice($links, 0, MAX_LIKERS - 1));
$likers .= ' ' . $this->l10n->t('and %d other people', $total - MAX_LIKERS);
}
$spanatts = "class=\"fakelink\" onclick=\"openClose('{$verb}list-$id');\"";
$explikers = '';
switch ($verb) {
case 'like':
$phrase = $this->l10n->t('<span %1$s>%2$d people</span> like this', $spanatts, $total);
$explikers = $this->l10n->t('%s like this.', $likers);
break;
case 'dislike':
$phrase = $this->l10n->t('<span %1$s>%2$d people</span> don\'t like this', $spanatts, $total);
$explikers = $this->l10n->t('%s don\'t like this.', $likers);
break;
case 'attendyes':
$phrase = $this->l10n->t('<span %1$s>%2$d people</span> attend', $spanatts, $total);
$explikers = $this->l10n->t('%s attend.', $likers);
break;
case 'attendno':
$phrase = $this->l10n->t('<span %1$s>%2$d people</span> don\'t attend', $spanatts, $total);
$explikers = $this->l10n->t('%s don\'t attend.', $likers);
break;
case 'attendmaybe':
$phrase = $this->l10n->t('<span %1$s>%2$d people</span> attend maybe', $spanatts, $total);
$explikers = $this->l10n->t('%s attend maybe.', $likers);
break;
case 'announce':
$phrase = $this->l10n->t('<span %1$s>%2$d people</span> reshared this', $spanatts, $total);
$explikers = $this->l10n->t('%s reshared this.', $likers);
break;
}
$expanded .= "\t" . '<p class="wall-item-' . $verb . '-expanded" id="' . $verb . 'list-' . $id . '" style="display: none;" >' . $explikers . EOL . '</p>';
}
$o .= Renderer::replaceMacros(Renderer::getMarkupTemplate('voting_fakelink.tpl'), [
'$phrase' => $phrase,
'$type' => $verb,
'$id' => $id
]);
$o .= $expanded;
$this->profiler->stopRecording();
return $o;
}
public function statusEditor(array $x = [], $notes_cid = 0, $popup = false)
{
$user = User::getById($this->app->getLoggedInUserId(), ['uid', 'nickname', 'allow_location', 'default-location']);
if (empty($user['uid'])) {
return '';
}
$this->profiler->startRecording('rendering');
$o = '';
$x['allow_location'] = $x['allow_location'] ?? $user['allow_location'];
$x['default_location'] = $x['default_location'] ?? $user['default-location'];
$x['nickname'] = $x['nickname'] ?? $user['nickname'];
$x['lockstate'] = $x['lockstate'] ?? ACL::getLockstateForUserId($user['uid']) ? 'lock' : 'unlock';
$x['acl'] = $x['acl'] ?? ACL::getFullSelectorHTML($this->page, $user['uid'], true);
$x['bang'] = $x['bang'] ?? '';
$x['visitor'] = $x['visitor'] ?? 'block';
$x['is_owner'] = $x['is_owner'] ?? true;
$x['profile_uid'] = $x['profile_uid'] ?? local_user();
$geotag = !empty($x['allow_location']) ? Renderer::replaceMacros(Renderer::getMarkupTemplate('jot_geotag.tpl'), []) : '';
$tpl = Renderer::getMarkupTemplate('jot-header.tpl');
$this->page['htmlhead'] .= Renderer::replaceMacros($tpl, [
'$newpost' => 'true',
'$baseurl' => $this->baseURL->get(true),
'$geotag' => $geotag,
'$nickname' => $x['nickname'],
'$ispublic' => $this->l10n->t('Visible to <strong>everybody</strong>'),
'$linkurl' => $this->l10n->t('Please enter a image/video/audio/webpage URL:'),
'$term' => $this->l10n->t('Tag term:'),
'$fileas' => $this->l10n->t('Save to Folder:'),
'$whereareu' => $this->l10n->t('Where are you right now?'),
'$delitems' => $this->l10n->t("Delete item\x28s\x29?"),
'$is_mobile' => $this->mode->isMobile(),
]);
$jotplugins = '';
Hook::callAll('jot_tool', $jotplugins);
$tpl = Renderer::getMarkupTemplate("jot.tpl");
$o .= Renderer::replaceMacros($tpl, [
'$new_post' => $this->l10n->t('New Post'),
'$return_path' => $this->args->getQueryString(),
'$action' => 'item',
'$share' => ($x['button'] ?? '') ?: $this->l10n->t('Share'),
'$loading' => $this->l10n->t('Loading...'),
'$upload' => $this->l10n->t('Upload photo'),
'$shortupload' => $this->l10n->t('upload photo'),
'$attach' => $this->l10n->t('Attach file'),
'$shortattach' => $this->l10n->t('attach file'),
'$edbold' => $this->l10n->t('Bold'),
'$editalic' => $this->l10n->t('Italic'),
'$eduline' => $this->l10n->t('Underline'),
'$edquote' => $this->l10n->t('Quote'),
'$edcode' => $this->l10n->t('Code'),
'$edimg' => $this->l10n->t('Image'),
'$edurl' => $this->l10n->t('Link'),
'$edattach' => $this->l10n->t('Link or Media'),
'$edvideo' => $this->l10n->t('Video'),
'$setloc' => $this->l10n->t('Set your location'),
'$shortsetloc' => $this->l10n->t('set location'),
'$noloc' => $this->l10n->t('Clear browser location'),
'$shortnoloc' => $this->l10n->t('clear location'),
'$title' => $x['title'] ?? '',
'$placeholdertitle' => $this->l10n->t('Set title'),
'$category' => $x['category'] ?? '',
'$placeholdercategory' => Feature::isEnabled(local_user(), 'categories') ? $this->l10n->t("Categories \x28comma-separated list\x29") : '',
'$scheduled_at' => Temporal::getDateTimeField(
new \DateTime(),
new \DateTime('now + 6 months'),
null,
$this->l10n->t('Scheduled at'),
'scheduled_at'
),
'$wait' => $this->l10n->t('Please wait'),
'$permset' => $this->l10n->t('Permission settings'),
'$shortpermset' => $this->l10n->t('Permissions'),
'$wall' => $notes_cid ? 0 : 1,
'$posttype' => $notes_cid ? ItemModel::PT_PERSONAL_NOTE : ItemModel::PT_ARTICLE,
'$content' => $x['content'] ?? '',
'$post_id' => $x['post_id'] ?? '',
'$baseurl' => $this->baseURL->get(true),
'$defloc' => $x['default_location'],
'$visitor' => $x['visitor'],
'$pvisit' => $notes_cid ? 'none' : $x['visitor'],
'$public' => $this->l10n->t('Public post'),
'$lockstate' => $x['lockstate'],
'$bang' => $x['bang'],
'$profile_uid' => $x['profile_uid'],
'$preview' => $this->l10n->t('Preview'),
'$jotplugins' => $jotplugins,
'$notes_cid' => $notes_cid,
'$cancel' => $this->l10n->t('Cancel'),
'$rand_num' => Crypto::randomDigits(12),
// ACL permissions box
'$acl' => $x['acl'],
//jot nav tab (used in some themes)
'$message' => $this->l10n->t('Message'),
'$browser' => $this->l10n->t('Browser'),
'$compose_link_title' => $this->l10n->t('Open Compose page'),
]);
if ($popup == true) {
$o = '<div id="jot-popup" style="display: none;">' . $o . '</div>';
}
$this->profiler->stopRecording();
return $o;
}
/**
* "Render" a conversation or list of items for HTML display.
* There are two major forms of display:
* - Sequential or unthreaded ("New Item View" or search results)
* - conversation view
* The $mode parameter decides between the various renderings and also
* figures out how to determine page owner and other contextual items
* that are based on unique features of the calling module.
* @param array $items
* @param $mode
* @param $update
* @param bool $preview
* @param string $order
* @param int $uid
* @return string
* @throws ImagickException
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public function create(array $items, $mode, $update, $preview = false, $order = 'commented', $uid = 0)
{
$this->profiler->startRecording('rendering');
$this->page->registerFooterScript(Theme::getPathForFile('asset/typeahead.js/dist/typeahead.bundle.js'));
$this->page->registerFooterScript(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput.js'));
$this->page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput.css'));
$this->page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput-typeahead.css'));
$ssl_state = (local_user() ? true : false);
$live_update_div = '';
$blocklist = $this->getBlocklist();
$previewing = (($preview) ? ' preview ' : '');
if ($mode === 'network') {
$items = $this->addChildren($items, false, $order, $uid);
if (!$update) {
/*
* The special div is needed for liveUpdate to kick in for this page.
* We only launch liveUpdate if you aren't filtering in some incompatible
* way and also you aren't writing a comment (discovered in javascript).
*/
$live_update_div = '<div id="live-network"></div>' . "\r\n"
. "<script> var profile_uid = " . $_SESSION['uid']
. "; var netargs = '" . substr($this->args->getCommand(), 8)
. '?f='
. (!empty($_GET['contactid']) ? '&contactid=' . rawurlencode($_GET['contactid']) : '')
. (!empty($_GET['search']) ? '&search=' . rawurlencode($_GET['search']) : '')
. (!empty($_GET['star']) ? '&star=' . rawurlencode($_GET['star']) : '')
. (!empty($_GET['order']) ? '&order=' . rawurlencode($_GET['order']) : '')
. (!empty($_GET['bmark']) ? '&bmark=' . rawurlencode($_GET['bmark']) : '')
. (!empty($_GET['liked']) ? '&liked=' . rawurlencode($_GET['liked']) : '')
. (!empty($_GET['conv']) ? '&conv=' . rawurlencode($_GET['conv']) : '')
. (!empty($_GET['nets']) ? '&nets=' . rawurlencode($_GET['nets']) : '')
. (!empty($_GET['cmin']) ? '&cmin=' . rawurlencode($_GET['cmin']) : '')
. (!empty($_GET['cmax']) ? '&cmax=' . rawurlencode($_GET['cmax']) : '')
. (!empty($_GET['file']) ? '&file=' . rawurlencode($_GET['file']) : '')
. "'; </script>\r\n";
}
} elseif ($mode === 'profile') {
$items = $this->addChildren($items, false, $order, local_user());
if (!$update) {
$tab = !empty($_GET['tab']) ? trim($_GET['tab']) : 'posts';
if ($tab === 'posts') {
/*
* This is ugly, but we can't pass the profile_uid through the session to the ajax updater,
* because browser prefetching might change it on us. We have to deliver it with the page.
*/
$live_update_div = '<div id="live-profile"></div>' . "\r\n"
. "<script> var profile_uid = " . $uid
. "; var netargs = '?f='; </script>\r\n";
}
}
} elseif ($mode === 'notes') {
$items = $this->addChildren($items, false, $order, local_user());
if (!$update) {
$live_update_div = '<div id="live-notes"></div>' . "\r\n"
. "<script> var profile_uid = " . local_user()
. "; var netargs = '/?f='; </script>\r\n";
}
} elseif ($mode === 'display') {
$items = $this->addChildren($items, false, $order, $uid);
if (!$update) {
$live_update_div = '<div id="live-display"></div>' . "\r\n"
. "<script> var profile_uid = " . Session::get('uid', 0) . ";"
. "</script>";
}
} elseif ($mode === 'community') {
$items = $this->addChildren($items, true, $order, $uid);
if (!$update) {
$live_update_div = '<div id="live-community"></div>' . "\r\n"
. "<script> var profile_uid = -1; var netargs = '" . substr($this->args->getCommand(), 10)
. '?f='
. (!empty($_GET['no_sharer']) ? '&no_sharer=' . rawurlencode($_GET['no_sharer']) : '')
. "'; </script>\r\n";
}
} elseif ($mode === 'contacts') {
$items = $this->addChildren($items, false, $order, $uid);
if (!$update) {
$live_update_div = '<div id="live-contact"></div>' . "\r\n"
. "<script> var profile_uid = -1; var netargs = '" . substr($this->args->getCommand(), 8)
."/?f='; </script>\r\n";
}
} elseif ($mode === 'search') {
$live_update_div = '<div id="live-search"></div>' . "\r\n";
}
$page_dropping = ((local_user() && local_user() == $uid) ? true : false);
if (!$update) {
$_SESSION['return_path'] = $this->args->getQueryString();
}
$cb = ['items' => $items, 'mode' => $mode, 'update' => $update, 'preview' => $preview];
Hook::callAll('conversation_start', $cb);
$items = $cb['items'];
$conv_responses = [
'like' => [],
'dislike' => [],
'attendyes' => [],
'attendno' => [],
'attendmaybe' => [],
'announce' => [],
];
if ($this->pConfig->get(local_user(), 'system', 'hide_dislike')) {
unset($conv_responses['dislike']);
}
// array with html for each thread (parent+comments)
$threads = [];
$threadsid = -1;
$page_template = Renderer::getMarkupTemplate("conversation.tpl");
$formSecurityToken = BaseModule::getFormSecurityToken('contact_action');
if (!empty($items)) {
if (in_array($mode, ['community', 'contacts', 'profile'])) {
$writable = true;
} else {
$writable = ($items[0]['uid'] == 0) && in_array($items[0]['network'], Protocol::FEDERATED);
}
if (!local_user()) {
$writable = false;
}
if (in_array($mode, ['filed', 'search', 'contact-posts'])) {
/*
* "New Item View" on network page or search page results
* - just loop through the items and format them minimally for display
*/
$tpl = 'search_item.tpl';
$uriids = [];
foreach ($items as $item) {
if (in_array($item['uri-id'], $uriids)) {
continue;
}
$uriids[] = $item['uri-id'];
if (!$this->item->visibleActivity($item)) {
continue;
}
if (in_array($item['author-id'], $blocklist)) {
continue;
}
$threadsid++;
// prevent private email from leaking.
if ($item['network'] === Protocol::MAIL && local_user() != $item['uid']) {
continue;
}
$profile_name = $item['author-name'];
if (!empty($item['author-link']) && empty($item['author-name'])) {
$profile_name = $item['author-link'];
}
$tags = Tag::populateFromItem($item);
$author = ['uid' => 0, 'id' => $item['author-id'], 'network' => $item['author-network'], 'url' => $item['author-link']];
$profile_link = Contact::magicLinkByContact($author);
$sparkle = '';
if (strpos($profile_link, 'redir/') === 0) {
$sparkle = ' sparkle';
}
$locate = ['location' => $item['location'], 'coord' => $item['coord'], 'html' => ''];
Hook::callAll('render_location', $locate);
$location_html = $locate['html'] ?: Strings::escapeHtml($locate['location'] ?: $locate['coord'] ?: '');
$this->item->localize($item);
if ($mode === 'filed') {
$dropping = true;
} else {
$dropping = false;
}
$drop = [
'dropping' => $dropping,
'pagedrop' => $page_dropping,
'select' => $this->l10n->t('Select'),
'delete' => $this->l10n->t('Delete'),
];
$likebuttons = [
'like' => null,
'dislike' => null,
'share' => null,
'announce' => null,
];
if ($this->pConfig->get(local_user(), 'system', 'hide_dislike')) {
unset($likebuttons['dislike']);
}
$body_html = ItemModel::prepareBody($item, true, $preview);
list($categories, $folders) = $this->item->determineCategoriesTerms($item, local_user());
if (!empty($item['content-warning']) && $this->pConfig->get(local_user(), 'system', 'disable_cw', false)) {
$title = ucfirst($item['content-warning']);
} else {
$title = $item['title'];
}
$tmp_item = [
'template' => $tpl,
'id' => ($preview ? 'P0' : $item['id']),
'guid' => ($preview ? 'Q0' : $item['guid']),
'commented' => $item['commented'],
'received' => $item['received'],
'created_date' => $item['created'],
'uriid' => $item['uri-id'],
'network' => $item['network'],
'network_name' => ContactSelector::networkToName($item['author-network'], $item['author-link'], $item['network']),
'network_icon' => ContactSelector::networkToIcon($item['network'], $item['author-link']),
'linktitle' => $this->l10n->t('View %s\'s profile @ %s', $profile_name, $item['author-link']),
'profile_url' => $profile_link,
'item_photo_menu_html' => $this->item->photoMenu($item, $formSecurityToken),
'name' => $profile_name,
'sparkle' => $sparkle,
'lock' => false,
'thumb' => $this->baseURL->remove(Contact::getAvatarUrlForUrl($item['author-link'], $item['uid'], Proxy::SIZE_THUMB)),
'title' => $title,
'body_html' => $body_html,
'tags' => $tags['tags'],
'hashtags' => $tags['hashtags'],
'mentions' => $tags['mentions'],
'implicit_mentions' => $tags['implicit_mentions'],
'txt_cats' => $this->l10n->t('Categories:'),
'txt_folders' => $this->l10n->t('Filed under:'),
'has_cats' => ((count($categories)) ? 'true' : ''),
'has_folders' => ((count($folders)) ? 'true' : ''),
'categories' => $categories,
'folders' => $folders,
'text' => strip_tags($body_html),
'localtime' => DateTimeFormat::local($item['created'], 'r'),
'ago' => (($item['app']) ? $this->l10n->t('%s from %s', Temporal::getRelativeDate($item['created']), $item['app']) : Temporal::getRelativeDate($item['created'])),
'location_html' => $location_html,
'indent' => '',
'owner_name' => '',
'owner_url' => '',
'owner_photo' => $this->baseURL->remove(Contact::getAvatarUrlForUrl($item['owner-link'], $item['uid'], Proxy::SIZE_THUMB)),
'plink' => ItemModel::getPlink($item),
'edpost' => false,
'isstarred' => 'unstarred',
'star' => false,
'drop' => $drop,
'vote' => $likebuttons,
'like_html' => '',
'dislike_html ' => '',
'comment_html' => '',
'conv' => ($preview ? '' : ['href' => 'display/' . $item['guid'], 'title' => $this->l10n->t('View in context')]),
'previewing' => $previewing,
'wait' => $this->l10n->t('Please wait'),
'thread_level' => 1,
];
$arr = ['item' => $item, 'output' => $tmp_item];
Hook::callAll('display_item', $arr);
$threads[$threadsid]['id'] = $item['id'];
$threads[$threadsid]['network'] = $item['network'];
$threads[$threadsid]['items'] = [$arr['output']];
}
} else {
// Normal View
$page_template = Renderer::getMarkupTemplate("threaded_conversation.tpl");
$conv = new Thread($mode, $preview, $writable);
/*
* get all the topmost parents
* this shouldn't be needed, as we should have only them in our array
* But for now, this array respects the old style, just in case
*/
foreach ($items as $item) {
if (in_array($item['author-id'], $blocklist)) {
continue;
}
// Can we put this after the visibility check?
$this->builtinActivityPuller($item, $conv_responses);
// Only add what is visible
if ($item['network'] === Protocol::MAIL && local_user() != $item['uid']) {
continue;
}
if (!$this->item->visibleActivity($item)) {
continue;
}
/// @todo Check if this call is needed or not
$arr = ['item' => $item];
Hook::callAll('display_item', $arr);
$item['pagedrop'] = $page_dropping;
if ($item['gravity'] == GRAVITY_PARENT) {
$item_object = new PostObject($item);
$conv->addParent($item_object);
}
}
$threads = $conv->getTemplateData($conv_responses, $formSecurityToken);
if (!$threads) {
$this->logger->info('[ERROR] conversation : Failed to get template data.');
$threads = [];
}
}
}
$o = Renderer::replaceMacros($page_template, [
'$baseurl' => $this->baseURL->get($ssl_state),
'$return_path' => $this->args->getQueryString(),
'$live_update' => $live_update_div,
'$remove' => $this->l10n->t('remove'),
'$mode' => $mode,
'$update' => $update,
'$threads' => $threads,
'$dropping' => ($page_dropping ? $this->l10n->t('Delete Selected Items') : false),
]);
$this->profiler->stopRecording();
return $o;
}
private function getBlocklist()
{
if (!local_user()) {
return [];
}
$str_blocked = str_replace(["\n", "\r"], ",", $this->pConfig->get(local_user(), 'system', 'blocked'));
if (empty($str_blocked)) {
return [];
}
$blocklist = [];
foreach (explode(',', $str_blocked) as $entry) {
$cid = Contact::getIdForURL(trim($entry), 0, false);
if (!empty($cid)) {
$blocklist[] = $cid;
}
}
return $blocklist;
}
/**
* Adds some information (Causer, post reason, direction) to the fetched post row.
*
* @param array $row Post row
* @param array $activity Contact data of the resharer
*
* @return array items with parents and comments
*/
private function addRowInformation(array $row, array $activity)
{
$this->profiler->startRecording('rendering');
if ($row['uid'] == 0) {
$row['writable'] = in_array($row['network'], Protocol::FEDERATED);
}
if (!empty($activity)) {
if (($row['gravity'] == GRAVITY_PARENT)) {
$row['post-reason'] = ItemModel::PR_ANNOUNCEMENT;
$row = array_merge($row, $activity);
$contact = Contact::getById($activity['causer-id'], ['url', 'name', 'thumb']);
$row['causer-link'] = $contact['url'];
$row['causer-avatar'] = $contact['thumb'];
$row['causer-name'] = $contact['name'];
} elseif (($row['gravity'] == GRAVITY_ACTIVITY) && ($row['verb'] == Activity::ANNOUNCE) &&
($row['author-id'] == $activity['causer-id'])) {
return $row;
}
}
switch ($row['post-reason']) {
case ItemModel::PR_TO:
$row['direction'] = ['direction' => 7, 'title' => $this->l10n->t('You had been addressed (%s).', 'to')];
break;
case ItemModel::PR_CC:
$row['direction'] = ['direction' => 7, 'title' => $this->l10n->t('You had been addressed (%s).', 'cc')];
break;
case ItemModel::PR_BTO:
$row['direction'] = ['direction' => 7, 'title' => $this->l10n->t('You had been addressed (%s).', 'bto')];
break;
case ItemModel::PR_BCC:
$row['direction'] = ['direction' => 7, 'title' => $this->l10n->t('You had been addressed (%s).', 'bcc')];
break;
case ItemModel::PR_FOLLOWER:
$row['direction'] = ['direction' => 6, 'title' => $this->l10n->t('You are following %s.', $row['author-name'])];
break;
case ItemModel::PR_TAG:
$row['direction'] = ['direction' => 4, 'title' => $this->l10n->t('Tagged')];
break;
case ItemModel::PR_ANNOUNCEMENT:
if (!empty($row['causer-id']) && $this->pConfig->get(local_user(), 'system', 'display_resharer')) {
$row['owner-id'] = $row['causer-id'];
$row['owner-link'] = $row['causer-link'];
$row['owner-avatar'] = $row['causer-avatar'];
$row['owner-name'] = $row['causer-name'];
}
if (($row['gravity'] == GRAVITY_PARENT) && !empty($row['causer-id'])) {
$causer = ['uid' => 0, 'id' => $row['causer-id'], 'network' => $row['causer-network'], 'url' => $row['causer-link']];
$row['reshared'] = $this->l10n->t('%s reshared this.', '<a href="'. htmlentities(Contact::magicLinkByContact($causer)) .'">' . htmlentities($row['causer-name']) . '</a>');
}
$row['direction'] = ['direction' => 3, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Reshared') : $this->l10n->t('Reshared by %s <%s>', $row['causer-name'], $row['causer-link']))];
break;
case ItemModel::PR_COMMENT:
$row['direction'] = ['direction' => 5, 'title' => $this->l10n->t('%s is participating in this thread.', $row['author-name'])];
break;
case ItemModel::PR_STORED:
$row['direction'] = ['direction' => 8, 'title' => $this->l10n->t('Stored')];
break;
case ItemModel::PR_GLOBAL:
$row['direction'] = ['direction' => 9, 'title' => $this->l10n->t('Global')];
break;
case ItemModel::PR_RELAY:
$row['direction'] = ['direction' => 10, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Relayed') : $this->l10n->t('Relayed by %s <%s>', $row['causer-name'], $row['causer-link']))];
break;
case ItemModel::PR_FETCHED:
$row['direction'] = ['direction' => 2, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Fetched') : $this->l10n->t('Fetched because of %s <%s>', $row['causer-name'], $row['causer-link']))];
break;
}
$this->profiler->stopRecording();
return $row;
}
/**
* Add comments to top level entries that had been fetched before
*
* The system will fetch the comments for the local user whenever possible.
* This behaviour is currently needed to allow commenting on Friendica posts.
*
* @param array $parents Parent items
*
* @param $block_authors
* @param $order
* @param $uid
* @return array items with parents and comments
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private function addChildren(array $parents, $block_authors, $order, $uid)
{
$this->profiler->startRecording('rendering');
if (count($parents) > 1) {
$max_comments = $this->config->get('system', 'max_comments', 100);
} else {
$max_comments = $this->config->get('system', 'max_display_comments', 1000);
}
$params = ['order' => ['uri-id' => true, 'uid' => true]];
$activities = [];
$uriids = [];
$commentcounter = [];
$activitycounter = [];
foreach ($parents as $parent) {
if (!empty($parent['thr-parent-id']) && !empty($parent['gravity']) && ($parent['gravity'] == GRAVITY_ACTIVITY)) {
$uriid = $parent['thr-parent-id'];
if (!empty($parent['author-id'])) {
$activities[$uriid] = ['causer-id' => $parent['author-id']];
foreach (['commented', 'received', 'created'] as $orderfields) {
if (!empty($parent[$orderfields])) {
$activities[$uriid][$orderfields] = $parent[$orderfields];
}
}
}
} else {
$uriid = $parent['uri-id'];
}
$uriids[] = $uriid;
$commentcounter[$uriid] = 0;
$activitycounter[$uriid] = 0;
}
$condition = ['parent-uri-id' => $uriids];
if ($block_authors) {
$condition['author-hidden'] = false;
}
$condition = DBA::mergeConditions($condition,
["`uid` IN (0, ?) AND (`vid` != ? OR `vid` IS NULL)", $uid, Verb::getID(Activity::FOLLOW)]);
$thread_items = Post::selectForUser(local_user(), array_merge(ItemModel::DISPLAY_FIELDLIST, ['pinned', 'contact-uid', 'gravity', 'post-type', 'post-reason']), $condition, $params);
$items = [];
while ($row = Post::fetch($thread_items)) {
if (!empty($items[$row['uri-id']]) && ($row['uid'] == 0)) {
continue;
}
if ($max_comments > 0) {
if (($row['gravity'] == GRAVITY_COMMENT) && (++$commentcounter[$row['parent-uri-id']] > $max_comments)) {
continue;
}
if (($row['gravity'] == GRAVITY_ACTIVITY) && (++$activitycounter[$row['parent-uri-id']] > $max_comments)) {
continue;
}
}
$items[$row['uri-id']] = $this->addRowInformation($row, $activities[$row['uri-id']] ?? []);
}
DBA::close($thread_items);
$items = $this->convSort($items, $order);
$this->profiler->stopRecording();
return $items;
}
/**
* Plucks the children of the given parent from a given item list.
*
* @param array $item_list
* @param array $parent
* @param bool $recursive
* @return array
*/
private function getItemChildren(array &$item_list, array $parent, $recursive = true)
{
$this->profiler->startRecording('rendering');
$children = [];
foreach ($item_list as $i => $item) {
if ($item['gravity'] != GRAVITY_PARENT) {
if ($recursive) {
// Fallback to parent-uri if thr-parent is not set
$thr_parent = $item['thr-parent-id'];
if ($thr_parent == '') {
$thr_parent = $item['parent-uri-id'];
}
if ($thr_parent == $parent['uri-id']) {
$item['children'] = $this->getItemChildren($item_list, $item);
$children[] = $item;
unset($item_list[$i]);
}
} elseif ($item['parent-uri-id'] == $parent['uri-id']) {
$children[] = $item;
unset($item_list[$i]);
}
}
}
$this->profiler->stopRecording();
return $children;
}
/**
* Recursively sorts a tree-like item array
*
* @param array $items
* @return array
*/
private function sortItemChildren(array $items)
{
$this->profiler->startRecording('rendering');
$result = $items;
usort($result, [$this, 'sortThrReceivedRev']);
foreach ($result as $k => $i) {
if (isset($result[$k]['children'])) {
$result[$k]['children'] = $this->sortItemChildren($result[$k]['children']);
}
}
$this->profiler->stopRecording();
return $result;
}
/**
* Recursively add all children items at the top level of a list
*
* @param array $children List of items to append
* @param array $item_list
*/
private function addChildrenToList(array $children, array &$item_list)
{
foreach ($children as $child) {
$item_list[] = $child;
if (isset($child['children'])) {
$this->addChildrenToList($child['children'], $item_list);
}
}
}
/**
* Selectively flattens a tree-like item structure to prevent threading stairs
*
* This recursive function takes the item tree structure created by conv_sort() and
* flatten the extraneous depth levels when people reply sequentially, removing the
* stairs effect in threaded conversations limiting the available content width.
*
* The basic principle is the following: if a post item has only one reply and is
* the last reply of its parent, then the reply is moved to the parent.
*
* This process is rendered somewhat more complicated because items can be either
* replies or likes, and these don't factor at all in the reply count/last reply.
*
* @param array $parent A tree-like array of items
* @return array
*/
private function smartFlattenConversation(array $parent)
{
$this->profiler->startRecording('rendering');
if (!isset($parent['children']) || count($parent['children']) == 0) {
$this->profiler->stopRecording();
return $parent;
}
// We use a for loop to ensure we process the newly-moved items
for ($i = 0; $i < count($parent['children']); $i++) {
$child = $parent['children'][$i];
if (isset($child['children']) && count($child['children'])) {
// This helps counting only the regular posts
$count_post_closure = function ($var) {
$this->profiler->stopRecording();
return $var['verb'] === Activity::POST;
};
$child_post_count = count(array_filter($child['children'], $count_post_closure));
$remaining_post_count = count(array_filter(array_slice($parent['children'], $i), $count_post_closure));
// If there's only one child's children post and this is the last child post
if ($child_post_count == 1 && $remaining_post_count == 1) {
// Searches the post item in the children
$j = 0;
while ($child['children'][$j]['verb'] !== Activity::POST && $j < count($child['children'])) {
$j ++;
}
$moved_item = $child['children'][$j];
unset($parent['children'][$i]['children'][$j]);
$parent['children'][] = $moved_item;
} else {
$parent['children'][$i] = $this->smartFlattenConversation($child);
}
}
}
$this->profiler->stopRecording();
return $parent;
}
/**
* Expands a flat list of items into corresponding tree-like conversation structures.
*
* sort the top-level posts either on "received" or "commented", and finally
* append all the items at the top level (???)
*
* @param array $item_list A list of items belonging to one or more conversations
* @param string $order Either on "received" or "commented"
* @return array
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private function convSort(array $item_list, $order)
{
$this->profiler->startRecording('rendering');
$parents = [];
if (!(is_array($item_list) && count($item_list))) {
$this->profiler->stopRecording();
return $parents;
}
$blocklist = $this->getBlocklist();
$item_array = [];
// Dedupes the item list on the uri to prevent infinite loops
foreach ($item_list as $item) {
if (in_array($item['author-id'], $blocklist)) {
continue;
}
$item_array[$item['uri-id']] = $item;
}
// Extract the top level items
foreach ($item_array as $item) {
if ($item['gravity'] == GRAVITY_PARENT) {
$parents[] = $item;
}
}
if (stristr($order, 'pinned_received')) {
usort($parents, [$this, 'sortThrPinnedReceived']);
} elseif (stristr($order, 'received')) {
usort($parents, [$this, 'sortThrReceived']);
} elseif (stristr($order, 'commented')) {
usort($parents, [$this, 'sortThrCommented']);
}
/*
* Plucks children from the item_array, second pass collects eventual orphan
* items and add them as children of their top-level post.
*/
foreach ($parents as $i => $parent) {
$parents[$i]['children'] = array_merge($this->getItemChildren($item_array, $parent, true),
$this->getItemChildren($item_array, $parent, false));
}
foreach ($parents as $i => $parent) {
$parents[$i]['children'] = $this->sortItemChildren($parents[$i]['children']);
}
if (!$this->pConfig->get(local_user(), 'system', 'no_smart_threading', 0)) {
foreach ($parents as $i => $parent) {
$parents[$i] = $this->smartFlattenConversation($parent);
}
}
/// @TODO: Stop recusrsively adding all children back to the top level (!!!)
/// However, this apparently ensures responses (likes, attendance) display (?!)
foreach ($parents as $parent) {
if (count($parent['children'])) {
$this->addChildrenToList($parent['children'], $parents);
}
}
$this->profiler->stopRecording();
return $parents;
}
/**
* usort() callback to sort item arrays by pinned and the received key
*
* @param array $a
* @param array $b
* @return int
*/
private function sortThrPinnedReceived(array $a, array $b)
{
if ($b['pinned'] && !$a['pinned']) {
return 1;
} elseif (!$b['pinned'] && $a['pinned']) {
return -1;
}
return strcmp($b['received'], $a['received']);
}
/**
* usort() callback to sort item arrays by the received key
*
* @param array $a
* @param array $b
* @return int
*/
private function sortThrReceived(array $a, array $b)
{
return strcmp($b['received'], $a['received']);
}
/**
* usort() callback to reverse sort item arrays by the received key
*
* @param array $a
* @param array $b
* @return int
*/
private function sortThrReceivedRev(array $a, array $b)
{
return strcmp($a['received'], $b['received']);
}
/**
* usort() callback to sort item arrays by the commented key
*
* @param array $a
* @param array $b
* @return int
*/
private function sortThrCommented(array $a, array $b)
{
return strcmp($b['commented'], $a['commented']);
}
}

View file

@ -21,16 +21,39 @@
namespace Friendica\Content;
use Friendica\Core\Hook;
use Friendica\Core\L10n;
use Friendica\Core\Protocol;
use Friendica\Core\Session;
use Friendica\Database\DBA;
use Friendica\Model\Contact;
use Friendica\Model\Item as ModelItem;
use Friendica\Model\Tag;
use Friendica\Model\Post;
use Friendica\Protocol\Activity;
use Friendica\Util\Profiler;
use Friendica\Util\Strings;
use Friendica\Util\XML;
/**
* A content helper class for displaying items
*/
class Item
{
/** @var Activity */
private $activity;
/** @var L10n */
private $l10n;
/** @var Profiler */
private $profiler;
public function __construct(Profiler $profiler, Activity $activity, L10n $l10n)
{
$this->profiler = $profiler;
$this->activity = $activity;
$this->l10n = $l10n;
}
/**
* Return array with details for categories and folders for an item
*
@ -221,4 +244,261 @@ class Item
return ['replaced' => $replaced, 'contact' => $contact];
}
/**
* Render actions localized
*
* @param $item
* @throws ImagickException
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public function localize(&$item)
{
$this->profiler->startRecording('rendering');
/// @todo The following functionality needs to be cleaned up.
if (!empty($item['verb'])) {
$xmlhead = "<" . "?xml version='1.0' encoding='UTF-8' ?" . ">";
if (stristr($item['verb'], Activity::POKE)) {
$verb = urldecode(substr($item['verb'], strpos($item['verb'],'#') + 1));
if (!$verb) {
$this->profiler->stopRecording();
return;
}
if ($item['object-type'] == "" || $item['object-type'] !== Activity\ObjectType::PERSON) {
$this->profiler->stopRecording();
return;
}
$obj = XML::parseString($xmlhead . $item['object']);
$Bname = $obj->title;
$Blink = $obj->id;
$Bphoto = "";
foreach ($obj->link as $l) {
$atts = $l->attributes();
switch ($atts['rel']) {
case "alternate": $Blink = $atts['href'];
case "photo": $Bphoto = $atts['href'];
}
}
$author = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$A = '[url=' . Contact::magicLinkByContact($author) . ']' . $item['author-name'] . '[/url]';
if (!empty($Blink)) {
$B = '[url=' . Contact::magicLink($Blink) . ']' . $Bname . '[/url]';
} else {
$B = '';
}
if ($Bphoto != "" && !empty($Blink)) {
$Bphoto = '[url=' . Contact::magicLink($Blink) . '][img=80x80]' . $Bphoto . '[/img][/url]';
}
/*
* we can't have a translation string with three positions but no distinguishable text
* So here is the translate string.
*/
$txt = $this->l10n->t('%1$s poked %2$s');
// now translate the verb
$poked_t = trim(sprintf($txt, '', ''));
$txt = str_replace($poked_t, $this->l10n->t($verb), $txt);
// then do the sprintf on the translation string
$item['body'] = sprintf($txt, $A, $B) . "\n\n\n" . $Bphoto;
}
if ($this->activity->match($item['verb'], Activity::TAG)) {
$fields = ['author-id', 'author-link', 'author-name', 'author-network',
'verb', 'object-type', 'resource-id', 'body', 'plink'];
$obj = Post::selectFirst($fields, ['uri' => $item['parent-uri']]);
if (!DBA::isResult($obj)) {
$this->profiler->stopRecording();
return;
}
$author_arr = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$author = '[url=' . Contact::magicLinkByContact($author_arr) . ']' . $item['author-name'] . '[/url]';
$author_arr = ['uid' => 0, 'id' => $obj['author-id'],
'network' => $obj['author-network'], 'url' => $obj['author-link']];
$objauthor = '[url=' . Contact::magicLinkByContact($author_arr) . ']' . $obj['author-name'] . '[/url]';
switch ($obj['verb']) {
case Activity::POST:
switch ($obj['object-type']) {
case Activity\ObjectType::EVENT:
$post_type = $this->l10n->t('event');
break;
default:
$post_type = $this->l10n->t('status');
}
break;
default:
if ($obj['resource-id']) {
$post_type = $this->l10n->t('photo');
$m=[]; preg_match("/\[url=([^]]*)\]/", $obj['body'], $m);
$rr['plink'] = $m[1];
} else {
$post_type = $this->l10n->t('status');
}
// Let's break everthing ... ;-)
break;
}
$plink = '[url=' . $obj['plink'] . ']' . $post_type . '[/url]';
$parsedobj = XML::parseString($xmlhead . $item['object']);
$tag = sprintf('#[url=%s]%s[/url]', $parsedobj->id, $parsedobj->content);
$item['body'] = $this->l10n->t('%1$s tagged %2$s\'s %3$s with %4$s', $author, $objauthor, $plink, $tag);
}
}
$matches = null;
if (preg_match_all('/@\[url=(.*?)\]/is', $item['body'], $matches, PREG_SET_ORDER)) {
foreach ($matches as $mtch) {
if (!strpos($mtch[1], 'zrl=')) {
$item['body'] = str_replace($mtch[0], '@[url=' . Contact::magicLink($mtch[1]) . ']', $item['body']);
}
}
}
// add sparkle links to appropriate permalinks
// Only create a redirection to a magic link when logged in
if (!empty($item['plink']) && Session::isAuthenticated() && $item['private'] == ModelItem::PRIVATE) {
$author = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$item['plink'] = Contact::magicLinkByContact($author, $item['plink']);
}
$this->profiler->stopRecording();
}
public function photoMenu($item, string $formSecurityToken)
{
$this->profiler->startRecording('rendering');
$sub_link = '';
$poke_link = '';
$contact_url = '';
$pm_url = '';
$status_link = '';
$photos_link = '';
$posts_link = '';
$block_link = '';
$ignore_link = '';
if (local_user() && local_user() == $item['uid'] && $item['gravity'] == GRAVITY_PARENT && !$item['self'] && !$item['mention']) {
$sub_link = 'javascript:doFollowThread(' . $item['id'] . '); return false;';
}
$author = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$profile_link = Contact::magicLinkByContact($author, $item['author-link']);
$sparkle = (strpos($profile_link, 'redir/') === 0);
$cid = 0;
$pcid = $item['author-id'];
$network = '';
$rel = 0;
$condition = ['uid' => local_user(), 'nurl' => Strings::normaliseLink($item['author-link'])];
$contact = DBA::selectFirst('contact', ['id', 'network', 'rel'], $condition);
if (DBA::isResult($contact)) {
$cid = $contact['id'];
$network = $contact['network'];
$rel = $contact['rel'];
}
if ($sparkle) {
$status_link = $profile_link . '/status';
$photos_link = str_replace('/profile/', '/photos/', $profile_link);
$profile_link = $profile_link . '/profile';
}
if (!empty($pcid)) {
$contact_url = 'contact/' . $pcid;
$posts_link = $contact_url . '/posts';
$block_link = $item['self'] ? '' : $contact_url . '/block?t=' . $formSecurityToken;
$ignore_link = $item['self'] ? '' : $contact_url . '/ignore?t=' . $formSecurityToken;
}
if ($cid && !$item['self']) {
$contact_url = 'contact/' . $cid;
$poke_link = $contact_url . '/poke';
$posts_link = $contact_url . '/posts';
if (in_array($network, [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA])) {
$pm_url = 'message/new/' . $cid;
}
}
if (local_user()) {
$menu = [
$this->l10n->t('Follow Thread') => $sub_link,
$this->l10n->t('View Status') => $status_link,
$this->l10n->t('View Profile') => $profile_link,
$this->l10n->t('View Photos') => $photos_link,
$this->l10n->t('Network Posts') => $posts_link,
$this->l10n->t('View Contact') => $contact_url,
$this->l10n->t('Send PM') => $pm_url,
$this->l10n->t('Block') => $block_link,
$this->l10n->t('Ignore') => $ignore_link
];
if (!empty($item['language'])) {
$menu[$this->l10n->t('Languages')] = 'javascript:alert(\'' . ModelItem::getLanguageMessage($item) . '\');';
}
if ($network == Protocol::DFRN) {
$menu[$this->l10n->t("Poke")] = $poke_link;
}
if ((($cid == 0) || ($rel == Contact::FOLLOWER)) &&
in_array($item['network'], Protocol::FEDERATED)) {
$menu[$this->l10n->t('Connect/Follow')] = 'follow?url=' . urlencode($item['author-link']) . '&auto=1';
}
} else {
$menu = [$this->l10n->t('View Profile') => $item['author-link']];
}
$args = ['item' => $item, 'menu' => $menu];
Hook::callAll('item_photo_menu', $args);
$menu = $args['menu'];
$o = '';
foreach ($menu as $k => $v) {
if (strpos($v, 'javascript:') === 0) {
$v = substr($v, 11);
$o .= '<li role="menuitem"><a onclick="' . $v . '">' . $k . '</a></li>' . PHP_EOL;
} elseif ($v) {
$o .= '<li role="menuitem"><a href="' . $v . '">' . $k . '</a></li>' . PHP_EOL;
}
}
$this->profiler->stopRecording();
return $o;
}
public function visibleActivity($item) {
if (empty($item['verb']) || $this->activity->isHidden($item['verb'])) {
return false;
}
// @TODO below if() block can be rewritten to a single line: $isVisible = allConditionsHere;
if ($this->activity->match($item['verb'], Activity::FOLLOW) &&
$item['object-type'] === Activity\ObjectType::NOTE &&
empty($item['self']) &&
$item['uid'] == local_user()) {
return false;
}
return true;
}
}

View file

@ -424,10 +424,12 @@ class BBCode
public static function removeAttachment($body, $no_link_desc = false)
{
return preg_replace_callback("/\s*\[attachment (.*?)\](.*?)\[\/attachment\]\s*/ism",
function ($match) use ($no_link_desc) {
function ($match) use ($body, $no_link_desc) {
$attach_data = self::getAttachmentData($match[0]);
if (empty($attach_data['url'])) {
return $match[0];
} elseif (strpos(str_replace($match[0], '', $body), $attach_data['url']) !== false) {
return '';
} elseif (empty($attach_data['title']) || $no_link_desc) {
return " \n[url]" . $attach_data['url'] . "[/url]\n";
} else {

View file

@ -23,6 +23,7 @@ namespace Friendica\Core;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Util\Strings;
/**
@ -257,6 +258,12 @@ class Addon
if ($type == "author" || $type == "maintainer") {
$r = preg_match("|([^<]+)<([^>]+)>|", $v, $m);
if ($r) {
if (!empty($m[2]) && empty(parse_url($m[2], PHP_URL_SCHEME))) {
$contact = Contact::getByURL($m[2], false);
if (!empty($contact['url'])) {
$m[2] = $contact['url'];
}
}
$info[$type][] = ['name' => $m[1], 'link' => $m[2]];
} else {
$info[$type][] = ['name' => $v];

View file

@ -134,6 +134,14 @@ abstract class DI
return self::$dice->create(Content\Item::class);
}
/**
* @return Content\Conversation
*/
public static function conversation()
{
return self::$dice->create(Content\Conversation::class);
}
/**
* @return Content\Text\BBCode\Video
*/

View file

@ -593,10 +593,7 @@ class DBStructure
// Compare it
foreach ($definition AS $name => $structure) {
$is_new_table = false;
$group_by = "";
$sql3 = "";
$is_unique = false;
$temp_name = $name;
if (!isset($database[$name])) {
$r = self::createTable($name, $structure, $verbose, $action);
if (!DBA::isResult($r)) {
@ -604,23 +601,6 @@ class DBStructure
}
$is_new_table = true;
} else {
foreach ($structure["indexes"] AS $indexname => $fieldnames) {
if (isset($database[$name]["indexes"][$indexname])) {
$current_index_definition = implode(",", $database[$name]["indexes"][$indexname]);
} else {
$current_index_definition = "__NOT_SET__";
}
$new_index_definition = implode(",", $fieldnames);
if ($current_index_definition != $new_index_definition) {
if ($fieldnames[0] == "UNIQUE") {
$is_unique = true;
if ($ignore == "") {
$temp_name = "temp-" . $name;
}
}
}
}
/*
* Drop the index if it isn't present in the definition
* or the definition differ from current status
@ -636,7 +616,7 @@ class DBStructure
if ($current_index_definition != $new_index_definition && substr($indexname, 0, 6) != 'local_') {
$sql2 = self::dropIndex($indexname);
if ($sql3 == "") {
$sql3 = "ALTER" . $ignore . " TABLE `" . $temp_name . "` " . $sql2;
$sql3 = "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
} else {
$sql3 .= ", " . $sql2;
}
@ -647,7 +627,7 @@ class DBStructure
if (!isset($database[$name]["fields"][$fieldname])) {
$sql2 = self::addTableField($fieldname, $parameters);
if ($sql3 == "") {
$sql3 = "ALTER" . $ignore . " TABLE `" . $temp_name . "` " . $sql2;
$sql3 = "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
} else {
$sql3 .= ", " . $sql2;
}
@ -675,7 +655,7 @@ class DBStructure
if ($current_field_definition != $new_field_definition) {
$sql2 = self::modifyTableField($fieldname, $parameters);
if ($sql3 == "") {
$sql3 = "ALTER" . $ignore . " TABLE `" . $temp_name . "` " . $sql2;
$sql3 = "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
} else {
$sql3 .= ", " . $sql2;
}
@ -700,11 +680,9 @@ class DBStructure
if ($current_index_definition != $new_index_definition) {
$sql2 = self::createIndex($indexname, $fieldnames);
// Fetch the "group by" fields for unique indexes
$group_by = self::groupBy($fieldnames);
if ($sql2 != "") {
if ($sql3 == "") {
$sql3 = "ALTER" . $ignore . " TABLE `" . $temp_name . "` " . $sql2;
$sql3 = "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
} else {
$sql3 .= ", " . $sql2;
}
@ -729,7 +707,7 @@ class DBStructure
$sql2 = self::addForeignKey($name, $fieldname, $parameters);
if ($sql3 == "") {
$sql3 = "ALTER" . $ignore . " TABLE `" . $temp_name . "` " . $sql2;
$sql3 = "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
} else {
$sql3 .= ", " . $sql2;
}
@ -740,7 +718,7 @@ class DBStructure
$sql2 = self::dropForeignKey($param['CONSTRAINT_NAME']);
if ($sql3 == "") {
$sql3 = "ALTER" . $ignore . " TABLE `" . $temp_name . "` " . $sql2;
$sql3 = "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
} else {
$sql3 .= ", " . $sql2;
}
@ -752,7 +730,7 @@ class DBStructure
$sql2 = "COMMENT = '" . DBA::escape($structurecomment) . "'";
if ($sql3 == "") {
$sql3 = "ALTER" . $ignore . " TABLE `" . $temp_name . "` " . $sql2;
$sql3 = "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
} else {
$sql3 .= ", " . $sql2;
}
@ -764,7 +742,7 @@ class DBStructure
$sql2 = "ENGINE = '" . DBA::escape($structure['engine']) . "'";
if ($sql3 == "") {
$sql3 = "ALTER" . $ignore . " TABLE `" . $temp_name . "` " . $sql2;
$sql3 = "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
} else {
$sql3 .= ", " . $sql2;
}
@ -776,7 +754,7 @@ class DBStructure
$sql2 = "DEFAULT COLLATE utf8mb4_general_ci";
if ($sql3 == "") {
$sql3 = "ALTER" . $ignore . " TABLE `" . $temp_name . "` " . $sql2;
$sql3 = "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
} else {
$sql3 .= ", " . $sql2;
}
@ -803,7 +781,7 @@ class DBStructure
if ($field_definition['Collation'] != $parameters['Collation']) {
$sql2 = self::modifyTableField($fieldname, $parameters);
if (($sql3 == "") || (substr($sql3, -2, 2) == "; ")) {
$sql3 .= "ALTER" . $ignore . " TABLE `" . $temp_name . "` " . $sql2;
$sql3 .= "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
} else {
$sql3 .= ", " . $sql2;
}
@ -816,36 +794,8 @@ class DBStructure
$sql3 .= ";";
}
$field_list = '';
if ($is_unique && $ignore == '') {
foreach ($database[$name]["fields"] AS $fieldname => $parameters) {
$field_list .= 'ANY_VALUE(`' . $fieldname . '`),';
}
$field_list = rtrim($field_list, ',');
}
if ($verbose) {
// Ensure index conversion to unique removes duplicates
if ($is_unique && ($temp_name != $name)) {
if ($ignore != "") {
echo "SET session old_alter_table=1;\n";
} else {
echo "DROP TABLE IF EXISTS `" . $temp_name . "`;\n";
echo "CREATE TABLE `" . $temp_name . "` LIKE `" . $name . "`;\n";
}
}
echo $sql3 . "\n";
if ($is_unique && ($temp_name != $name)) {
if ($ignore != "") {
echo "SET session old_alter_table=0;\n";
} else {
echo "INSERT INTO `" . $temp_name . "` SELECT " . DBA::anyValueFallback($field_list) . " FROM `" . $name . "`" . $group_by . ";\n";
echo "DROP TABLE `" . $name . "`;\n";
echo "RENAME TABLE `" . $temp_name . "` TO `" . $name . "`;\n";
}
}
}
if ($action) {
@ -853,50 +803,10 @@ class DBStructure
DI::config()->set('system', 'maintenance_reason', DI::l10n()->t('%s: updating %s table.', DateTimeFormat::utcNow() . ' ' . date('e'), $name));
}
// Ensure index conversion to unique removes duplicates
if ($is_unique && ($temp_name != $name)) {
if ($ignore != "") {
DBA::e("SET session old_alter_table=1;");
} else {
$r = DBA::e("DROP TABLE IF EXISTS `" . $temp_name . "`;");
if (!DBA::isResult($r)) {
$errors .= self::printUpdateError($sql3);
return $errors;
}
$r = DBA::e("CREATE TABLE `" . $temp_name . "` LIKE `" . $name . "`;");
if (!DBA::isResult($r)) {
$errors .= self::printUpdateError($sql3);
return $errors;
}
}
}
$r = DBA::e($sql3);
if (!DBA::isResult($r)) {
$errors .= self::printUpdateError($sql3);
}
if ($is_unique && ($temp_name != $name)) {
if ($ignore != "") {
DBA::e("SET session old_alter_table=0;");
} else {
$r = DBA::e("INSERT INTO `" . $temp_name . "` SELECT " . $field_list . " FROM `" . $name . "`" . $group_by . ";");
if (!DBA::isResult($r)) {
$errors .= self::printUpdateError($sql3);
return $errors;
}
$r = DBA::e("DROP TABLE `" . $name . "`;");
if (!DBA::isResult($r)) {
$errors .= self::printUpdateError($sql3);
return $errors;
}
$r = DBA::e("RENAME TABLE `" . $temp_name . "` TO `" . $name . "`;");
if (!DBA::isResult($r)) {
$errors .= self::printUpdateError($sql3);
return $errors;
}
}
}
}
}
}
@ -1060,37 +970,6 @@ class DBStructure
return sprintf("DROP FOREIGN KEY `%s`", $constraint);
}
/**
* Constructs a GROUP BY clause from a UNIQUE index definition.
*
* @param array $fieldnames
* @return string
*/
private static function groupBy(array $fieldnames)
{
if ($fieldnames[0] != "UNIQUE") {
return "";
}
array_shift($fieldnames);
$names = "";
foreach ($fieldnames AS $fieldname) {
if ($names != "") {
$names .= ",";
}
if (preg_match('|(.+)\((\d+)\)|', $fieldname, $matches)) {
$names .= "`" . DBA::escape($matches[1]) . "`";
} else {
$names .= "`" . DBA::escape($fieldname) . "`";
}
}
$sql = sprintf(" GROUP BY %s", $names);
return $sql;
}
/**
* Renames columns or the primary key of a table
*

View file

@ -119,7 +119,8 @@ class APContact
*/
public static function getByURL($url, $update = null)
{
if (empty($url)) {
if (empty($url) || Network::isUrlBlocked($url)) {
Logger::info('Domain is blocked', ['url' => $url]);
return [];
}

View file

@ -1445,11 +1445,11 @@ class Contact
if ($thread_mode) {
$items = Post::toArray(Post::selectForUser(local_user(), ['uri-id', 'gravity', 'parent-uri-id', 'thr-parent-id', 'author-id'], $condition, $params));
$o .= conversation($a, $items, 'contacts', $update, false, 'commented', local_user());
$o .= DI::conversation()->create($items, 'contacts', $update, false, 'commented', local_user());
} else {
$items = Post::toArray(Post::selectForUser(local_user(), Item::DISPLAY_FIELDLIST, $condition, $params));
$o .= conversation($a, $items, 'contact-posts', $update);
$o .= DI::conversation()->create($items, 'contact-posts', $update);
}
if (!$update) {

View file

@ -74,9 +74,7 @@ class Mail
return false;
}
if ($msg['reply']) {
$reply = DBA::selectFirst('mail', ['uri', 'uri-id'], ['parent-uri' => $msg['parent-uri'], 'reply' => false]);
if ($msg['reply'] && DBA::isResult($reply = DBA::selectFirst('mail', ['uri', 'uri-id'], ['parent-uri' => $msg['parent-uri'], 'reply' => false]))) {
$msg['thr-parent'] = $reply['uri'];
$msg['thr-parent-id'] = $reply['uri-id'];
} else {

View file

@ -25,7 +25,6 @@ use Friendica\DI;
use Friendica\Core\Renderer;
use Friendica\Core\Theme;
use Friendica\Module\BaseAdmin;
use Friendica\Model\Log\ParsedLogIterator;
use Psr\Log\LogLevel;
class View extends BaseAdmin
@ -68,7 +67,7 @@ class View extends BaseAdmin
}
if (!file_exists($f)) {
$error = DI::l10n()->t('Error trying to open <strong>%1$s</strong> log file.\r\n<br/>Check to see if file %1$s exist and is readable.', $f);
$error = DI::l10n()->t('Error trying to open <strong>%1$s</strong> log file.<br/>Check to see if file %1$s exist and is readable.', $f);
} else {
try {
$data = DI::parsedLogIterator()
@ -77,12 +76,33 @@ class View extends BaseAdmin
->withFilters($filters)
->withSearch($search);
} catch (Exception $e) {
$error = DI::l10n()->t('Couldn\'t open <strong>%1$s</strong> log file.\r\n<br/>Check to see if file %1$s is readable.', $f);
$error = DI::l10n()->t('Couldn\'t open <strong>%1$s</strong> log file.<br/>Check to see if file %1$s is readable.', $f);
}
}
return Renderer::replaceMacros($t, [
'$title' => DI::l10n()->t('Administration'),
'$page' => DI::l10n()->t('View Logs'),
'$title' => DI::l10n()->t('Administration'),
'$page' => DI::l10n()->t('View Logs'),
'$l10n' => [
'Search' => DI::l10n()->t('Search'),
'Search_in_logs' => DI::l10n()->t('Search in logs'),
'Show_all' => DI::l10n()->t('Show all'),
'Date' => DI::l10n()->t('Date'),
'Level' => DI::l10n()->t('Level'),
'Context' => DI::l10n()->t('Context'),
'Message' => DI::l10n()->t('Message'),
'ALL' => DI::l10n()->t('ALL'),
'View_details' => DI::l10n()->t('View details'),
'Click_to_view_details' => DI::l10n()->t('Click to view details'),
'Event_details' => DI::l10n()->t('Event details'),
'Data' => DI::l10n()->t('Data'),
'Source' => DI::l10n()->t('Source'),
'File' => DI::l10n()->t('File'),
'Line' => DI::l10n()->t('Line'),
'Function' => DI::l10n()->t('Function'),
'UID' => DI::l10n()->t('UID'),
'Process_ID' => DI::l10n()->t('Process ID'),
'Close' => DI::l10n()->t('Close'),
],
'$data' => $data,
'$q' => $search,
'$filters' => $filters,

View file

@ -38,7 +38,6 @@ class Bookmarklet extends BaseModule
{
$_GET['mode'] = 'minimal';
$app = DI::app();
$config = DI::config();
if (!local_user()) {
@ -61,7 +60,7 @@ class Bookmarklet extends BaseModule
'title' => trim($_REQUEST['title'] ?? '', '*'),
'content' => $content
];
$output = status_editor($app, $x, 0, false);
$output = DI::conversation()->statusEditor($x, 0, false);
$output .= "<script>window.resizeTo(800,550);</script>";
} else {
$output = '<h2>' . DI::l10n()->t('The post was created') . '</h2>';

View file

@ -951,7 +951,7 @@ class Contact extends BaseModule
if (!$update) {
// We need the editor here to be able to reshare an item.
if (local_user()) {
$o = status_editor($a, [], 0, true);
$o = DI::conversation()->statusEditor([], 0, true);
}
}

View file

@ -127,7 +127,7 @@ class Community extends BaseModule
// We need the editor here to be able to reshare an item.
if (Session::isAuthenticated()) {
$o .= status_editor(DI::app(), [], 0, true);
$o .= DI::conversation()->statusEditor([], 0, true);
}
}
@ -138,7 +138,7 @@ class Community extends BaseModule
return $o;
}
$o .= conversation(DI::app(), $items, 'community', false, false, 'commented', local_user());
$o .= DI::conversation()->create($items, 'community', false, false, 'commented', local_user());
$pager = new BoundariesPager(
DI::l10n(),

View file

@ -145,7 +145,7 @@ class Network extends BaseModule
'content' => $content,
];
$o .= status_editor($a, $x);
$o .= DI::conversation()->statusEditor($x);
}
if (self::$groupId) {
@ -178,7 +178,7 @@ class Network extends BaseModule
$ordering = '`commented`';
}
$o .= conversation(DI::app(), $items, 'network', false, false, $ordering, local_user());
$o .= DI::conversation()->create($items, 'network', false, false, $ordering, local_user());
if (DI::pConfig()->get(local_user(), 'system', 'infinite_scroll')) {
$o .= HTML::scrollLoader();

View file

@ -132,7 +132,7 @@ class Status extends BaseProfile
'profile_uid' => $profile['uid'],
];
$o .= status_editor($a, $x);
$o .= DI::conversation()->statusEditor($x);
}
// Get permissions SQL - if $remote_contact is true, our remote user has been pre-verified and we already have fetched his/her groups
@ -224,7 +224,7 @@ class Status extends BaseProfile
$items = array_merge($items, $pinned);
}
$o .= conversation($a, $items, 'profile', false, false, 'pinned_received', $profile['uid']);
$o .= DI::conversation()->create($items, 'profile', false, false, 'pinned_received', $profile['uid']);
$o .= $pager->renderMinimal(count($items));

View file

@ -79,7 +79,7 @@ class Filed extends BaseSearch
$items = Post::toArray(Post::selectForUser(local_user(), Item::DISPLAY_FIELDLIST, $item_condition, $item_params));
$o .= conversation(DI::app(), $items, 'filed', false, false, '', local_user());
$o .= DI::conversation()->create($items, 'filed', false, false, '', local_user());
if (DI::pConfig()->get(local_user(), 'system', 'infinite_scroll')) {
$o .= HTML::scrollLoader();

View file

@ -200,7 +200,7 @@ class Index extends BaseSearch
Logger::info('Start Conversation.', ['q' => $search]);
$o .= conversation(DI::app(), $items, 'search', false, false, 'commented', local_user());
$o .= DI::conversation()->create($items, 'search', false, false, 'commented', local_user());
if (DI::pConfig()->get(local_user(), 'system', 'infinite_scroll')) {
$o .= HTML::scrollLoader();

View file

@ -39,7 +39,7 @@ class Community extends CommunityModule
$o = '';
if (!empty($_GET['force']) || !DI::pConfig()->get(local_user(), 'system', 'no_auto_update')) {
$o = conversation(DI::app(), self::getItems(), 'community', true, false, 'commented', local_user());
$o = DI::conversation()->create(self::getItems(), 'community', true, false, 'commented', local_user());
}
System::htmlUpdateExit($o);

View file

@ -53,7 +53,7 @@ class Network extends NetworkModule
$ordering = '`commented`';
}
$o = conversation(DI::app(), $items, 'network', $profile_uid, false, $ordering, local_user());
$o = DI::conversation()->create($items, 'network', $profile_uid, false, $ordering, local_user());
}
System::htmlUpdateExit($o);

View file

@ -115,7 +115,7 @@ class Profile extends BaseModule
$items = DBA::toArray($items_stmt);
$o .= conversation($a, $items, 'profile', $a->getProfileOwner(), false, 'received', $a->getProfileOwner());
$o .= DI::conversation()->create($items, 'profile', $a->getProfileOwner(), false, 'received', $a->getProfileOwner());
System::htmlUpdateExit($o);
}

View file

@ -231,6 +231,11 @@ class Probe
}
}
if (Network::isUrlBlocked($host_url)) {
Logger::info('Domain is blocked', ['url' => $host]);
return [];
}
self::$baseurl = $host_url;
Logger::info('Probing successful', ['host' => $host]);
@ -625,6 +630,11 @@ class Probe
*/
private static function getWebfinger(string $template, string $type, string $uri, string $addr)
{
if (Network::isUrlBlocked($template)) {
Logger::info('Domain is blocked', ['url' => $template]);
return [];
}
// First try the address because this is the primary purpose of webfinger
if (!empty($addr)) {
$detected = $addr;

View file

@ -105,7 +105,7 @@ class Post
// Only add will be displayed
if ($item['network'] === Protocol::MAIL && local_user() != $item['uid']) {
continue;
} elseif (!visible_activity($item)) {
} elseif (!DI::contentItem()->visibleActivity($item)) {
continue;
}
@ -279,7 +279,7 @@ class Post
foreach ($response_verbs as $value => $verb) {
$responses[$verb] = [
'self' => $conv_responses[$verb][$item['uri-id']]['self'] ?? 0,
'output' => !empty($conv_responses[$verb][$item['uri-id']]) ? format_activity($conv_responses[$verb][$item['uri-id']]['links'], $verb, $item['uri-id']) : '',
'output' => !empty($conv_responses[$verb][$item['uri-id']]) ? DI::conversation()->formatActivity($conv_responses[$verb][$item['uri-id']]['links'], $verb, $item['uri-id']) : '',
];
}
@ -363,7 +363,7 @@ class Post
$shiny = 'shiny';
}
localize_item($item);
DI::contentItem()->localize($item);
$body_html = Item::prepareBody($item, true);
@ -459,7 +459,7 @@ class Post
'vwall' => DI::l10n()->t('via Wall-To-Wall:'),
'profile_url' => $profile_link,
'name' => $profile_name,
'item_photo_menu_html' => item_photo_menu($item, $formSecurityToken),
'item_photo_menu_html' => DI::contentItem()->photoMenu($item, $formSecurityToken),
'thumb' => DI::baseUrl()->remove(Contact::getAvatarUrlForUrl($item['author-link'], $item['uid'], Proxy::SIZE_THUMB)),
'osparkle' => $osparkle,
'sparkle' => $sparkle,

View file

@ -1146,27 +1146,31 @@ class Feed
if ($item['gravity'] != GRAVITY_PARENT) {
$parent = Post::selectFirst(['guid', 'author-link', 'owner-link'], ['id' => $item['parent']]);
$thrparent = Post::selectFirst(['guid', 'author-link', 'owner-link', 'plink'], ['uid' => $owner["uid"], 'uri' => $item['thr-parent']]);
$thrparent = Post::selectFirst(['guid', 'author-link', 'owner-link', 'plink'], ['uid' => $owner['uid'], 'uri' => $item['thr-parent']]);
if (DBA::isResult($thrparent)) {
$mentioned[$thrparent["author-link"]] = $thrparent["author-link"];
$mentioned[$thrparent["owner-link"]] = $thrparent["owner-link"];
$parent_plink = $thrparent["plink"];
$mentioned[$thrparent['author-link']] = $thrparent['author-link'];
$mentioned[$thrparent['owner-link']] = $thrparent['owner-link'];
$parent_plink = $thrparent['plink'];
} elseif (DBA::isResult($parent)) {
$mentioned[$parent['author-link']] = $parent['author-link'];
$mentioned[$parent['owner-link']] = $parent['owner-link'];
$parent_plink = DI::baseUrl() . '/display/' . $parent['guid'];
} else {
$mentioned[$parent["author-link"]] = $parent["author-link"];
$mentioned[$parent["owner-link"]] = $parent["owner-link"];
$parent_plink = DI::baseUrl()."/display/".$parent["guid"];
DI::logger()->notice('Missing parent and thr-parent for child item', ['item' => $item]);
}
$attributes = [
"ref" => $item['thr-parent'],
"href" => $parent_plink];
XML::addElement($doc, $entry, "thr:in-reply-to", "", $attributes);
if (isset($parent_plink)) {
$attributes = [
'ref' => $item['thr-parent'],
'href' => $parent_plink];
XML::addElement($doc, $entry, 'thr:in-reply-to', '', $attributes);
$attributes = [
"rel" => "related",
"href" => $parent_plink];
XML::addElement($doc, $entry, "link", "", $attributes);
$attributes = [
'rel' => 'related',
'href' => $parent_plink];
XML::addElement($doc, $entry, 'link', '', $attributes);
}
}
// uri-id isn't present for follow entry pseudo-items
@ -1177,7 +1181,7 @@ class Feed
foreach ($tags as $tag) {
if ($tag['type'] == Tag::HASHTAG) {
XML::addElement($doc, $entry, "category", "", ["term" => $tag['name']]);
XML::addElement($doc, $entry, 'category', '', ['term' => $tag['name']]);
}
}

View file

@ -1931,27 +1931,31 @@ class OStatus
if ($item['gravity'] != GRAVITY_PARENT) {
$parent = Post::selectFirst(['guid', 'author-link', 'owner-link'], ['id' => $item['parent']]);
$thrparent = Post::selectFirst(['guid', 'author-link', 'owner-link', 'plink'], ['uid' => $owner["uid"], 'uri' => $item['thr-parent']]);
$thrparent = Post::selectFirst(['guid', 'author-link', 'owner-link', 'plink'], ['uid' => $owner['uid'], 'uri' => $item['thr-parent']]);
if (DBA::isResult($thrparent)) {
$mentioned[$thrparent["author-link"]] = $thrparent["author-link"];
$mentioned[$thrparent["owner-link"]] = $thrparent["owner-link"];
$parent_plink = $thrparent["plink"];
$mentioned[$thrparent['author-link']] = $thrparent['author-link'];
$mentioned[$thrparent['owner-link']] = $thrparent['owner-link'];
$parent_plink = $thrparent['plink'];
} elseif (DBA::isResult($parent)) {
$mentioned[$parent['author-link']] = $parent['author-link'];
$mentioned[$parent['owner-link']] = $parent['owner-link'];
$parent_plink = DI::baseUrl() . '/display/' . $parent['guid'];
} else {
$mentioned[$parent["author-link"]] = $parent["author-link"];
$mentioned[$parent["owner-link"]] = $parent["owner-link"];
$parent_plink = DI::baseUrl()."/display/".$parent["guid"];
DI::logger()->notice('Missing parent and thr-parent for child item', ['item' => $item]);
}
$attributes = [
"ref" => $item['thr-parent'],
"href" => $parent_plink];
XML::addElement($doc, $entry, "thr:in-reply-to", "", $attributes);
if (isset($parent_plink)) {
$attributes = [
'ref' => $item['thr-parent'],
'href' => $parent_plink];
XML::addElement($doc, $entry, 'thr:in-reply-to', '', $attributes);
$attributes = [
"rel" => "related",
"href" => $parent_plink];
XML::addElement($doc, $entry, "link", "", $attributes);
$attributes = [
'rel' => 'related',
'href' => $parent_plink];
XML::addElement($doc, $entry, 'link', '', $attributes);
}
}
if (intval($item['parent']) > 0) {

View file

@ -49,7 +49,7 @@ class Security
return true;
}
if (!empty(Session::getRemoteContactID($owner))) {
if (!empty($cid = Session::getRemoteContactID($owner))) {
// use remembered decision and avoid a DB lookup for each and every display item
// DO NOT use this function if there are going to be multiple owners
// We have a contact-id for an authenticated remote user, this block determines if the contact
@ -60,22 +60,19 @@ class Security
} elseif ($verified === 1) {
return false;
} else {
$cid = Session::getRemoteContactID($owner);
if (!$cid) {
$user = User::getById($owner);
if (!$user || $user['blockwall']) {
$verified = 1;
return false;
}
$r = q("SELECT `contact`.*, `user`.`page-flags` FROM `contact` INNER JOIN `user` on `user`.`uid` = `contact`.`uid`
WHERE `contact`.`uid` = %d AND `contact`.`id` = %d AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
AND `user`.`blockwall` = 0 AND `readonly` = 0 AND (`contact`.`rel` IN (%d , %d) OR `user`.`page-flags` = %d) LIMIT 1",
intval($owner),
intval($cid),
intval(Contact::SHARING),
intval(Contact::FRIEND),
intval(User::PAGE_FLAGS_COMMUNITY)
);
if (DBA::isResult($r)) {
$contact = Contact::getById($cid);
if ($contact || $contact['blocked'] || $contact['readonly'] || $contact['pending']) {
$verified = 1;
return false;
}
if (in_array($contact['rel'], [Contact::SHARING, Contact::FRIEND]) || ($user['page-flags'] == User::PAGE_FLAGS_COMMUNITY)) {
$verified = 2;
return true;
} else {

View file

@ -95,6 +95,9 @@ class ReversedFileReader implements \Iterator
if ($this->pos == 0) {
return array_pop($buffer);
}
if (is_null($buffer)) {
return null;
}
if (count($buffer) > 1) {
return array_pop($buffer);
}

View file

@ -3510,18 +3510,6 @@ class ApiTest extends FixtureTest
$this->markTestIncomplete();
}
/**
* Test the api_share_as_retweet() function.
*
* @return void
*/
public function testApiShareAsRetweet()
{
$item = ['body' => '', 'author-id' => 1, 'owner-id' => 1];
$result = api_share_as_retweet($item);
self::assertFalse($result);
}
/**
* Test the api_share_as_retweet() function with a valid item.
*

View file

@ -228,14 +228,14 @@ class BBCodeTest extends MockedTest
'text' => '[size=xx-large]Test text[/size]',
'try_oembed' => false,
// Triggers the diaspora compatible output
'simpleHtml' => 3,
'simpleHtml' => BBCode::DIASPORA,
],
'bug-2199-diaspora-no-numeric-size' => [
'expectedHtml' => 'Test text',
'text' => '[size=24]Test text[/size]',
'try_oembed' => false,
// Triggers the diaspora compatible output
'simpleHtml' => 3,
'simpleHtml' => BBCode::DIASPORA,
],
'bug-7665-audio-tag' => [
'expectedHtml' => '<audio src="http://www.cendrones.fr/colloque2017/jonathanbocquet.mp3" controls><a href="http://www.cendrones.fr/colloque2017/jonathanbocquet.mp3">http://www.cendrones.fr/colloque2017/jonathanbocquet.mp3</a></audio>',
@ -282,6 +282,16 @@ class BBCodeTest extends MockedTest
'expectedHTML' => '<span class="arbitrary classes">Test</span>',
'text' => '[class=arbitrary classes]Test[/class]',
],
'bug-10772-duplicated-links' => [
'expectedHTML' => 'Jetzt wird mir klar, warum Kapitalisten jedes Mal durchdrehen wenn Marx und das Kapital ins Gespräch kommt. Soziopathen.<br>Karl Marx - Die ursprüngliche Akkumulation<br><a href="https://wohlstandfueralle.podigee.io/107-urspruengliche-akkumulation" target="_blank" rel="noopener noreferrer">https://wohlstandfueralle.podigee.io/107-urspruengliche-akkumulation</a><br>#Podcast #Kapitalismus',
'text' => "Jetzt wird mir klar, warum Kapitalisten jedes Mal durchdrehen wenn Marx und das Kapital ins Gespräch kommt. Soziopathen.
Karl Marx - Die ursprüngliche Akkumulation
[url=https://wohlstandfueralle.podigee.io/107-urspruengliche-akkumulation]https://wohlstandfueralle.podigee.io/107-urspruengliche-akkumulation[/url]
#[url=https://horche.demkontinuum.de/search?tag=Podcast]Podcast[/url] #[url=https://horche.demkontinuum.de/search?tag=Kapitalismus]Kapitalismus[/url]
[attachment type='link' url='https://wohlstandfueralle.podigee.io/107-urspruengliche-akkumulation' title='Ep. 107: Karl Marx #8 - Die urspr&uuml;ngliche Akkumulation' publisher_name='Wohlstand f&uuml;r Alle' preview='https://images.podigee-cdn.net/0x,s6LXshYO7uhG23H431B30t4hxj1bQuzlTsUlze0F_-H8=/https://cdn.podigee.com/uploads/u8126/bd5fe4f4-38b7-4f3f-b269-6a0080144635.jpg']Wie der Kapitalismus funktioniert und inwieweit Menschen darin ausgebeutet werden, haben wir bereits besprochen. Immer wieder verweisen wir auch darauf, dass der Kapitalismus nicht immer schon existierte, sondern historisiert werden muss.[/attachment]",
'try_oembed' => false,
'simpleHtml' => BBCode::TWITTER,
],
];
}

View file

@ -19,7 +19,7 @@
*
*/
namespace Friendica\Test\src\Object\Log;
namespace Friendica\Test\src\Model\Log;
use Friendica\Util\ReversedFileReader;
use Friendica\Model\Log\ParsedLogIterator;
@ -145,4 +145,16 @@ class ParsedLogIteratorTest extends TestCase
$pls = iterator_to_array($this->pli, false);
self::assertCount(0, $pls);
}
public function testEmptyLogFile()
{
$logfile = dirname(__DIR__) . '/../../datasets/log/empty.friendica.log.txt';
$reader = new ReversedFileReader();
$pli = new ParsedLogIterator($reader);
$pli->open($logfile);
$pls = iterator_to_array($pli, false);
self::assertCount(0, $pls);
}
}

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2021.12-dev\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-26 03:07+0000\n"
"POT-Creation-Date: 2021-10-02 11:56+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -37,7 +37,7 @@ msgstr[1] ""
msgid "Monthly posting limit of %d post reached. The post was rejected."
msgstr ""
#: include/api.php:4437 mod/photos.php:89 mod/photos.php:198 mod/photos.php:626
#: include/api.php:4429 mod/photos.php:89 mod/photos.php:198 mod/photos.php:626
#: mod/photos.php:1035 mod/photos.php:1052 mod/photos.php:1599
#: src/Model/User.php:1169 src/Model/User.php:1177 src/Model/User.php:1185
#: src/Module/Settings/Profile/Photo/Crop.php:101
@ -49,458 +49,6 @@ msgstr ""
msgid "Profile Photos"
msgstr ""
#: include/conversation.php:110
#, php-format
msgid "%1$s poked %2$s"
msgstr ""
#: include/conversation.php:143 src/Model/Item.php:2622
msgid "event"
msgstr ""
#: include/conversation.php:146 include/conversation.php:155 mod/tagger.php:90
msgid "status"
msgstr ""
#: include/conversation.php:151 mod/tagger.php:90 src/Model/Item.php:2624
msgid "photo"
msgstr ""
#: include/conversation.php:165 mod/tagger.php:123
#, php-format
msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr ""
#: include/conversation.php:476 mod/photos.php:1461 src/Object/Post.php:227
msgid "Select"
msgstr ""
#: include/conversation.php:477 mod/photos.php:1462 mod/settings.php:573
#: src/Module/Admin/Users/Active.php:139 src/Module/Admin/Users/Blocked.php:140
#: src/Module/Admin/Users/Index.php:153 src/Module/Contact.php:865
#: src/Module/Contact.php:1150
msgid "Delete"
msgstr ""
#: include/conversation.php:512 src/Object/Post.php:454 src/Object/Post.php:455
#, php-format
msgid "View %s's profile @ %s"
msgstr ""
#: include/conversation.php:525 src/Object/Post.php:442
msgid "Categories:"
msgstr ""
#: include/conversation.php:526 src/Object/Post.php:443
msgid "Filed under:"
msgstr ""
#: include/conversation.php:533 src/Object/Post.php:468
#, php-format
msgid "%s from %s"
msgstr ""
#: include/conversation.php:548
msgid "View in context"
msgstr ""
#: include/conversation.php:550 include/conversation.php:1155
#: mod/editpost.php:107 mod/message.php:203 mod/message.php:368
#: mod/photos.php:1526 mod/wallmessage.php:155 src/Module/Item/Compose.php:165
#: src/Object/Post.php:502
msgid "Please wait"
msgstr ""
#: include/conversation.php:614
msgid "remove"
msgstr ""
#: include/conversation.php:618
msgid "Delete Selected Items"
msgstr ""
#: include/conversation.php:656 include/conversation.php:659
#: include/conversation.php:662 include/conversation.php:665
#, php-format
msgid "You had been addressed (%s)."
msgstr ""
#: include/conversation.php:668
#, php-format
msgid "You are following %s."
msgstr ""
#: include/conversation.php:671
msgid "Tagged"
msgstr ""
#: include/conversation.php:684 include/conversation.php:1022
#: include/conversation.php:1060
#, php-format
msgid "%s reshared this."
msgstr ""
#: include/conversation.php:686
msgid "Reshared"
msgstr ""
#: include/conversation.php:686
#, php-format
msgid "Reshared by %s <%s>"
msgstr ""
#: include/conversation.php:689
#, php-format
msgid "%s is participating in this thread."
msgstr ""
#: include/conversation.php:692
msgid "Stored"
msgstr ""
#: include/conversation.php:695
msgid "Global"
msgstr ""
#: include/conversation.php:698
msgid "Relayed"
msgstr ""
#: include/conversation.php:698
#, php-format
msgid "Relayed by %s <%s>"
msgstr ""
#: include/conversation.php:701
msgid "Fetched"
msgstr ""
#: include/conversation.php:701
#, php-format
msgid "Fetched because of %s <%s>"
msgstr ""
#: include/conversation.php:853 view/theme/frio/theme.php:323
msgid "Follow Thread"
msgstr ""
#: include/conversation.php:854 src/Model/Contact.php:1082
msgid "View Status"
msgstr ""
#: include/conversation.php:855 include/conversation.php:877
#: src/Model/Contact.php:1008 src/Model/Contact.php:1074
#: src/Model/Contact.php:1083 src/Module/Directory.php:160
#: src/Module/Settings/Profile/Index.php:223
msgid "View Profile"
msgstr ""
#: include/conversation.php:856 src/Model/Contact.php:1084
msgid "View Photos"
msgstr ""
#: include/conversation.php:857 src/Model/Contact.php:1075
#: src/Model/Contact.php:1085
msgid "Network Posts"
msgstr ""
#: include/conversation.php:858 src/Model/Contact.php:1076
#: src/Model/Contact.php:1086
msgid "View Contact"
msgstr ""
#: include/conversation.php:859 src/Model/Contact.php:1088
msgid "Send PM"
msgstr ""
#: include/conversation.php:860 src/Module/Admin/Blocklist/Contact.php:84
#: src/Module/Admin/Users/Active.php:140 src/Module/Admin/Users/Index.php:154
#: src/Module/Contact.php:602 src/Module/Contact.php:863
#: src/Module/Contact.php:1133
msgid "Block"
msgstr ""
#: include/conversation.php:861 src/Module/Contact.php:603
#: src/Module/Contact.php:864 src/Module/Contact.php:1141
#: src/Module/Notifications/Introductions.php:113
#: src/Module/Notifications/Introductions.php:185
#: src/Module/Notifications/Notification.php:59
msgid "Ignore"
msgstr ""
#: include/conversation.php:865 src/Object/Post.php:429
msgid "Languages"
msgstr ""
#: include/conversation.php:869 src/Model/Contact.php:1089
msgid "Poke"
msgstr ""
#: include/conversation.php:874 mod/follow.php:138 src/Content/Widget.php:76
#: src/Model/Contact.php:1077 src/Model/Contact.php:1090
#: view/theme/vier/theme.php:172
msgid "Connect/Follow"
msgstr ""
#: include/conversation.php:1007
#, php-format
msgid "%s likes this."
msgstr ""
#: include/conversation.php:1010
#, php-format
msgid "%s doesn't like this."
msgstr ""
#: include/conversation.php:1013
#, php-format
msgid "%s attends."
msgstr ""
#: include/conversation.php:1016
#, php-format
msgid "%s doesn't attend."
msgstr ""
#: include/conversation.php:1019
#, php-format
msgid "%s attends maybe."
msgstr ""
#: include/conversation.php:1028
msgid "and"
msgstr ""
#: include/conversation.php:1031
#, php-format
msgid "and %d other people"
msgstr ""
#: include/conversation.php:1039
#, php-format
msgid "<span %1$s>%2$d people</span> like this"
msgstr ""
#: include/conversation.php:1040
#, php-format
msgid "%s like this."
msgstr ""
#: include/conversation.php:1043
#, php-format
msgid "<span %1$s>%2$d people</span> don't like this"
msgstr ""
#: include/conversation.php:1044
#, php-format
msgid "%s don't like this."
msgstr ""
#: include/conversation.php:1047
#, php-format
msgid "<span %1$s>%2$d people</span> attend"
msgstr ""
#: include/conversation.php:1048
#, php-format
msgid "%s attend."
msgstr ""
#: include/conversation.php:1051
#, php-format
msgid "<span %1$s>%2$d people</span> don't attend"
msgstr ""
#: include/conversation.php:1052
#, php-format
msgid "%s don't attend."
msgstr ""
#: include/conversation.php:1055
#, php-format
msgid "<span %1$s>%2$d people</span> attend maybe"
msgstr ""
#: include/conversation.php:1056
#, php-format
msgid "%s attend maybe."
msgstr ""
#: include/conversation.php:1059
#, php-format
msgid "<span %1$s>%2$d people</span> reshared this"
msgstr ""
#: include/conversation.php:1107
msgid "Visible to <strong>everybody</strong>"
msgstr ""
#: include/conversation.php:1108 src/Module/Item/Compose.php:159
#: src/Object/Post.php:973
msgid "Please enter a image/video/audio/webpage URL:"
msgstr ""
#: include/conversation.php:1109
msgid "Tag term:"
msgstr ""
#: include/conversation.php:1110 src/Module/Filer/SaveTag.php:68
msgid "Save to Folder:"
msgstr ""
#: include/conversation.php:1111
msgid "Where are you right now?"
msgstr ""
#: include/conversation.php:1112
msgid "Delete item(s)?"
msgstr ""
#: include/conversation.php:1122
msgid "New Post"
msgstr ""
#: include/conversation.php:1125
msgid "Share"
msgstr ""
#: include/conversation.php:1126 mod/editpost.php:92 mod/photos.php:1375
#: src/Module/Contact/Poke.php:157 src/Object/Post.php:964
msgid "Loading..."
msgstr ""
#: include/conversation.php:1127 mod/editpost.php:93 mod/message.php:201
#: mod/message.php:365 mod/wallmessage.php:153
msgid "Upload photo"
msgstr ""
#: include/conversation.php:1128 mod/editpost.php:94
msgid "upload photo"
msgstr ""
#: include/conversation.php:1129 mod/editpost.php:95
msgid "Attach file"
msgstr ""
#: include/conversation.php:1130 mod/editpost.php:96
msgid "attach file"
msgstr ""
#: include/conversation.php:1131 src/Module/Item/Compose.php:151
#: src/Object/Post.php:965
msgid "Bold"
msgstr ""
#: include/conversation.php:1132 src/Module/Item/Compose.php:152
#: src/Object/Post.php:966
msgid "Italic"
msgstr ""
#: include/conversation.php:1133 src/Module/Item/Compose.php:153
#: src/Object/Post.php:967
msgid "Underline"
msgstr ""
#: include/conversation.php:1134 src/Module/Item/Compose.php:154
#: src/Object/Post.php:968
msgid "Quote"
msgstr ""
#: include/conversation.php:1135 src/Module/Item/Compose.php:155
#: src/Object/Post.php:969
msgid "Code"
msgstr ""
#: include/conversation.php:1136 src/Module/Item/Compose.php:156
#: src/Object/Post.php:970
msgid "Image"
msgstr ""
#: include/conversation.php:1137 src/Module/Item/Compose.php:157
#: src/Object/Post.php:971
msgid "Link"
msgstr ""
#: include/conversation.php:1138 src/Module/Item/Compose.php:158
#: src/Object/Post.php:972
msgid "Link or Media"
msgstr ""
#: include/conversation.php:1139
msgid "Video"
msgstr ""
#: include/conversation.php:1140 mod/editpost.php:103
#: src/Module/Item/Compose.php:161
msgid "Set your location"
msgstr ""
#: include/conversation.php:1141 mod/editpost.php:104
msgid "set location"
msgstr ""
#: include/conversation.php:1142 mod/editpost.php:105
msgid "Clear browser location"
msgstr ""
#: include/conversation.php:1143 mod/editpost.php:106
msgid "clear location"
msgstr ""
#: include/conversation.php:1145 mod/editpost.php:120
#: src/Module/Item/Compose.php:166
msgid "Set title"
msgstr ""
#: include/conversation.php:1147 mod/editpost.php:122
#: src/Module/Item/Compose.php:167
msgid "Categories (comma-separated list)"
msgstr ""
#: include/conversation.php:1152 src/Module/Item/Compose.php:172
msgid "Scheduled at"
msgstr ""
#: include/conversation.php:1156 mod/editpost.php:108
msgid "Permission settings"
msgstr ""
#: include/conversation.php:1157 mod/editpost.php:136 mod/events.php:583
#: mod/photos.php:965 mod/photos.php:1328
msgid "Permissions"
msgstr ""
#: include/conversation.php:1166 mod/editpost.php:117
msgid "Public post"
msgstr ""
#: include/conversation.php:1170 mod/editpost.php:128 mod/events.php:578
#: mod/photos.php:1374 mod/photos.php:1430 mod/photos.php:1504
#: src/Module/Item/Compose.php:160 src/Object/Post.php:974
msgid "Preview"
msgstr ""
#: include/conversation.php:1173 mod/editpost.php:130 mod/fbrowser.php:105
#: mod/fbrowser.php:134 mod/follow.php:144 mod/photos.php:1029
#: mod/photos.php:1136 mod/tagrm.php:37 mod/tagrm.php:129 mod/unfollow.php:97
#: src/Module/Contact.php:443 src/Module/RemoteFollow.php:116
msgid "Cancel"
msgstr ""
#: include/conversation.php:1180 mod/editpost.php:134
#: src/Content/Widget/VCard.php:107 src/Model/Profile.php:459
msgid "Message"
msgstr ""
#: include/conversation.php:1181 mod/editpost.php:135
#: src/Module/Settings/TwoFactor/Trusted.php:101
msgid "Browser"
msgstr ""
#: include/conversation.php:1183 mod/editpost.php:138
msgid "Open Compose page"
msgstr ""
#: include/enotify.php:52 include/enotify.php:559
msgid "[Friendica:Notify]"
msgstr ""
@ -752,7 +300,7 @@ msgid "%s %s shared a new post"
msgstr ""
#: mod/api.php:30 mod/editpost.php:38 mod/events.php:236 mod/follow.php:56
#: mod/follow.php:130 mod/item.php:184 mod/item.php:189 mod/item.php:934
#: mod/follow.php:130 mod/item.php:185 mod/item.php:190 mod/item.php:936
#: mod/message.php:69 mod/message.php:111 mod/notes.php:44
#: mod/ostatus_subscribe.php:32 mod/photos.php:163 mod/photos.php:917
#: mod/repair_ostatus.php:31 mod/settings.php:47 mod/settings.php:57
@ -899,6 +447,28 @@ msgstr ""
msgid "Save"
msgstr ""
#: mod/editpost.php:92 mod/photos.php:1375 src/Content/Conversation.php:326
#: src/Module/Contact/Poke.php:157 src/Object/Post.php:964
msgid "Loading..."
msgstr ""
#: mod/editpost.php:93 mod/message.php:201 mod/message.php:365
#: mod/wallmessage.php:153 src/Content/Conversation.php:327
msgid "Upload photo"
msgstr ""
#: mod/editpost.php:94 src/Content/Conversation.php:328
msgid "upload photo"
msgstr ""
#: mod/editpost.php:95 src/Content/Conversation.php:329
msgid "Attach file"
msgstr ""
#: mod/editpost.php:96 src/Content/Conversation.php:330
msgid "attach file"
msgstr ""
#: mod/editpost.php:97 mod/message.php:202 mod/message.php:366
#: mod/wallmessage.php:154
msgid "Insert web link"
@ -924,14 +494,89 @@ msgstr ""
msgid "audio link"
msgstr ""
#: mod/editpost.php:103 src/Content/Conversation.php:340
#: src/Module/Item/Compose.php:161
msgid "Set your location"
msgstr ""
#: mod/editpost.php:104 src/Content/Conversation.php:341
msgid "set location"
msgstr ""
#: mod/editpost.php:105 src/Content/Conversation.php:342
msgid "Clear browser location"
msgstr ""
#: mod/editpost.php:106 src/Content/Conversation.php:343
msgid "clear location"
msgstr ""
#: mod/editpost.php:107 mod/message.php:203 mod/message.php:368
#: mod/photos.php:1526 mod/wallmessage.php:155 src/Content/Conversation.php:355
#: src/Content/Conversation.php:689 src/Module/Item/Compose.php:165
#: src/Object/Post.php:502
msgid "Please wait"
msgstr ""
#: mod/editpost.php:108 src/Content/Conversation.php:356
msgid "Permission settings"
msgstr ""
#: mod/editpost.php:116 src/Core/ACL.php:327
msgid "CC: email addresses"
msgstr ""
#: mod/editpost.php:117 src/Content/Conversation.php:366
msgid "Public post"
msgstr ""
#: mod/editpost.php:120 src/Content/Conversation.php:345
#: src/Module/Item/Compose.php:166
msgid "Set title"
msgstr ""
#: mod/editpost.php:122 src/Content/Conversation.php:347
#: src/Module/Item/Compose.php:167
msgid "Categories (comma-separated list)"
msgstr ""
#: mod/editpost.php:123 src/Core/ACL.php:328
msgid "Example: bob@example.com, mary@example.com"
msgstr ""
#: mod/editpost.php:128 mod/events.php:578 mod/photos.php:1374
#: mod/photos.php:1430 mod/photos.php:1504 src/Content/Conversation.php:370
#: src/Module/Item/Compose.php:160 src/Object/Post.php:974
msgid "Preview"
msgstr ""
#: mod/editpost.php:130 mod/fbrowser.php:105 mod/fbrowser.php:134
#: mod/follow.php:144 mod/photos.php:1029 mod/photos.php:1136 mod/tagrm.php:37
#: mod/tagrm.php:129 mod/unfollow.php:97 src/Content/Conversation.php:373
#: src/Module/Contact.php:443 src/Module/RemoteFollow.php:116
msgid "Cancel"
msgstr ""
#: mod/editpost.php:134 src/Content/Conversation.php:380
#: src/Content/Widget/VCard.php:107 src/Model/Profile.php:459
#: src/Module/Admin/Logs/View.php:92
msgid "Message"
msgstr ""
#: mod/editpost.php:135 src/Content/Conversation.php:381
#: src/Module/Settings/TwoFactor/Trusted.php:101
msgid "Browser"
msgstr ""
#: mod/editpost.php:136 mod/events.php:583 mod/photos.php:965
#: mod/photos.php:1328 src/Content/Conversation.php:357
msgid "Permissions"
msgstr ""
#: mod/editpost.php:138 src/Content/Conversation.php:383
msgid "Open Compose page"
msgstr ""
#: mod/events.php:138 mod/events.php:140
msgid "Event can not end before it has started."
msgstr ""
@ -944,7 +589,7 @@ msgstr ""
msgid "Create New Event"
msgstr ""
#: mod/events.php:536
#: mod/events.php:536 src/Module/Admin/Logs/View.php:96
msgid "Event details"
msgstr ""
@ -1072,6 +717,12 @@ msgstr ""
msgid "OStatus support is disabled. Contact can't be added."
msgstr ""
#: mod/follow.php:138 src/Content/Item.php:463 src/Content/Widget.php:76
#: src/Model/Contact.php:1077 src/Model/Contact.php:1090
#: view/theme/vier/theme.php:172
msgid "Connect/Follow"
msgstr ""
#: mod/follow.php:139 src/Module/RemoteFollow.php:114
msgid "Please answer the following:"
msgstr ""
@ -1115,23 +766,23 @@ msgstr ""
msgid "Unable to locate original post."
msgstr ""
#: mod/item.php:340 mod/item.php:345
#: mod/item.php:341 mod/item.php:346
msgid "Empty post discarded."
msgstr ""
#: mod/item.php:741
#: mod/item.php:742
msgid "Post updated."
msgstr ""
#: mod/item.php:751 mod/item.php:756
#: mod/item.php:752 mod/item.php:757
msgid "Item wasn't stored."
msgstr ""
#: mod/item.php:767
#: mod/item.php:768
msgid "Item couldn't be fetched."
msgstr ""
#: mod/item.php:913 src/Module/Admin/Themes/Details.php:39
#: mod/item.php:914 src/Module/Admin/Themes/Details.php:39
#: src/Module/Admin/Themes/Index.php:59 src/Module/Debug/ItemBody.php:41
#: src/Module/Debug/ItemBody.php:56
msgid "Item not found."
@ -1676,6 +1327,17 @@ msgstr ""
msgid "Comment"
msgstr ""
#: mod/photos.php:1461 src/Content/Conversation.php:615 src/Object/Post.php:227
msgid "Select"
msgstr ""
#: mod/photos.php:1462 mod/settings.php:573 src/Content/Conversation.php:616
#: src/Module/Admin/Users/Active.php:139 src/Module/Admin/Users/Blocked.php:140
#: src/Module/Admin/Users/Index.php:153 src/Module/Contact.php:865
#: src/Module/Contact.php:1150
msgid "Delete"
msgstr ""
#: mod/photos.php:1523 src/Object/Post.php:349
msgid "Like"
msgstr ""
@ -2545,6 +2207,19 @@ msgstr ""
msgid "Friend Suggestions"
msgstr ""
#: mod/tagger.php:90 src/Content/Item.php:346 src/Model/Item.php:2624
msgid "photo"
msgstr ""
#: mod/tagger.php:90 src/Content/Item.php:341 src/Content/Item.php:350
msgid "status"
msgstr ""
#: mod/tagger.php:123 src/Content/Item.php:360
#, php-format
msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr ""
#: mod/tagrm.php:115
msgid "Remove Item Tag"
msgstr ""
@ -2947,6 +2622,268 @@ msgstr ""
msgid "%s (via %s)"
msgstr ""
#: src/Content/Conversation.php:207
#, php-format
msgid "%s likes this."
msgstr ""
#: src/Content/Conversation.php:210
#, php-format
msgid "%s doesn't like this."
msgstr ""
#: src/Content/Conversation.php:213
#, php-format
msgid "%s attends."
msgstr ""
#: src/Content/Conversation.php:216
#, php-format
msgid "%s doesn't attend."
msgstr ""
#: src/Content/Conversation.php:219
#, php-format
msgid "%s attends maybe."
msgstr ""
#: src/Content/Conversation.php:222 src/Content/Conversation.php:260
#: src/Content/Conversation.php:848
#, php-format
msgid "%s reshared this."
msgstr ""
#: src/Content/Conversation.php:228
msgid "and"
msgstr ""
#: src/Content/Conversation.php:231
#, php-format
msgid "and %d other people"
msgstr ""
#: src/Content/Conversation.php:239
#, php-format
msgid "<span %1$s>%2$d people</span> like this"
msgstr ""
#: src/Content/Conversation.php:240
#, php-format
msgid "%s like this."
msgstr ""
#: src/Content/Conversation.php:243
#, php-format
msgid "<span %1$s>%2$d people</span> don't like this"
msgstr ""
#: src/Content/Conversation.php:244
#, php-format
msgid "%s don't like this."
msgstr ""
#: src/Content/Conversation.php:247
#, php-format
msgid "<span %1$s>%2$d people</span> attend"
msgstr ""
#: src/Content/Conversation.php:248
#, php-format
msgid "%s attend."
msgstr ""
#: src/Content/Conversation.php:251
#, php-format
msgid "<span %1$s>%2$d people</span> don't attend"
msgstr ""
#: src/Content/Conversation.php:252
#, php-format
msgid "%s don't attend."
msgstr ""
#: src/Content/Conversation.php:255
#, php-format
msgid "<span %1$s>%2$d people</span> attend maybe"
msgstr ""
#: src/Content/Conversation.php:256
#, php-format
msgid "%s attend maybe."
msgstr ""
#: src/Content/Conversation.php:259
#, php-format
msgid "<span %1$s>%2$d people</span> reshared this"
msgstr ""
#: src/Content/Conversation.php:307
msgid "Visible to <strong>everybody</strong>"
msgstr ""
#: src/Content/Conversation.php:308 src/Module/Item/Compose.php:159
#: src/Object/Post.php:973
msgid "Please enter a image/video/audio/webpage URL:"
msgstr ""
#: src/Content/Conversation.php:309
msgid "Tag term:"
msgstr ""
#: src/Content/Conversation.php:310 src/Module/Filer/SaveTag.php:68
msgid "Save to Folder:"
msgstr ""
#: src/Content/Conversation.php:311
msgid "Where are you right now?"
msgstr ""
#: src/Content/Conversation.php:312
msgid "Delete item(s)?"
msgstr ""
#: src/Content/Conversation.php:322
msgid "New Post"
msgstr ""
#: src/Content/Conversation.php:325
msgid "Share"
msgstr ""
#: src/Content/Conversation.php:331 src/Module/Item/Compose.php:151
#: src/Object/Post.php:965
msgid "Bold"
msgstr ""
#: src/Content/Conversation.php:332 src/Module/Item/Compose.php:152
#: src/Object/Post.php:966
msgid "Italic"
msgstr ""
#: src/Content/Conversation.php:333 src/Module/Item/Compose.php:153
#: src/Object/Post.php:967
msgid "Underline"
msgstr ""
#: src/Content/Conversation.php:334 src/Module/Item/Compose.php:154
#: src/Object/Post.php:968
msgid "Quote"
msgstr ""
#: src/Content/Conversation.php:335 src/Module/Item/Compose.php:155
#: src/Object/Post.php:969
msgid "Code"
msgstr ""
#: src/Content/Conversation.php:336 src/Module/Item/Compose.php:156
#: src/Object/Post.php:970
msgid "Image"
msgstr ""
#: src/Content/Conversation.php:337 src/Module/Item/Compose.php:157
#: src/Object/Post.php:971
msgid "Link"
msgstr ""
#: src/Content/Conversation.php:338 src/Module/Item/Compose.php:158
#: src/Object/Post.php:972
msgid "Link or Media"
msgstr ""
#: src/Content/Conversation.php:339
msgid "Video"
msgstr ""
#: src/Content/Conversation.php:352 src/Module/Item/Compose.php:172
msgid "Scheduled at"
msgstr ""
#: src/Content/Conversation.php:651 src/Object/Post.php:454
#: src/Object/Post.php:455
#, php-format
msgid "View %s's profile @ %s"
msgstr ""
#: src/Content/Conversation.php:664 src/Object/Post.php:442
msgid "Categories:"
msgstr ""
#: src/Content/Conversation.php:665 src/Object/Post.php:443
msgid "Filed under:"
msgstr ""
#: src/Content/Conversation.php:672 src/Object/Post.php:468
#, php-format
msgid "%s from %s"
msgstr ""
#: src/Content/Conversation.php:687
msgid "View in context"
msgstr ""
#: src/Content/Conversation.php:752
msgid "remove"
msgstr ""
#: src/Content/Conversation.php:756
msgid "Delete Selected Items"
msgstr ""
#: src/Content/Conversation.php:820 src/Content/Conversation.php:823
#: src/Content/Conversation.php:826 src/Content/Conversation.php:829
#, php-format
msgid "You had been addressed (%s)."
msgstr ""
#: src/Content/Conversation.php:832
#, php-format
msgid "You are following %s."
msgstr ""
#: src/Content/Conversation.php:835
msgid "Tagged"
msgstr ""
#: src/Content/Conversation.php:850
msgid "Reshared"
msgstr ""
#: src/Content/Conversation.php:850
#, php-format
msgid "Reshared by %s <%s>"
msgstr ""
#: src/Content/Conversation.php:853
#, php-format
msgid "%s is participating in this thread."
msgstr ""
#: src/Content/Conversation.php:856
msgid "Stored"
msgstr ""
#: src/Content/Conversation.php:859
msgid "Global"
msgstr ""
#: src/Content/Conversation.php:862
msgid "Relayed"
msgstr ""
#: src/Content/Conversation.php:862
#, php-format
msgid "Relayed by %s <%s>"
msgstr ""
#: src/Content/Conversation.php:865
msgid "Fetched"
msgstr ""
#: src/Content/Conversation.php:865
#, php-format
msgid "Fetched because of %s <%s>"
msgstr ""
#: src/Content/Feature.php:96
msgid "General Features"
msgstr ""
@ -3052,6 +2989,70 @@ msgstr ""
msgid "show more"
msgstr ""
#: src/Content/Item.php:305
#, php-format
msgid "%1$s poked %2$s"
msgstr ""
#: src/Content/Item.php:338 src/Model/Item.php:2622
msgid "event"
msgstr ""
#: src/Content/Item.php:442 view/theme/frio/theme.php:323
msgid "Follow Thread"
msgstr ""
#: src/Content/Item.php:443 src/Model/Contact.php:1082
msgid "View Status"
msgstr ""
#: src/Content/Item.php:444 src/Content/Item.php:466 src/Model/Contact.php:1008
#: src/Model/Contact.php:1074 src/Model/Contact.php:1083
#: src/Module/Directory.php:160 src/Module/Settings/Profile/Index.php:223
msgid "View Profile"
msgstr ""
#: src/Content/Item.php:445 src/Model/Contact.php:1084
msgid "View Photos"
msgstr ""
#: src/Content/Item.php:446 src/Model/Contact.php:1075
#: src/Model/Contact.php:1085
msgid "Network Posts"
msgstr ""
#: src/Content/Item.php:447 src/Model/Contact.php:1076
#: src/Model/Contact.php:1086
msgid "View Contact"
msgstr ""
#: src/Content/Item.php:448 src/Model/Contact.php:1088
msgid "Send PM"
msgstr ""
#: src/Content/Item.php:449 src/Module/Admin/Blocklist/Contact.php:84
#: src/Module/Admin/Users/Active.php:140 src/Module/Admin/Users/Index.php:154
#: src/Module/Contact.php:602 src/Module/Contact.php:863
#: src/Module/Contact.php:1133
msgid "Block"
msgstr ""
#: src/Content/Item.php:450 src/Module/Contact.php:603
#: src/Module/Contact.php:864 src/Module/Contact.php:1141
#: src/Module/Notifications/Introductions.php:113
#: src/Module/Notifications/Introductions.php:185
#: src/Module/Notifications/Notification.php:59
msgid "Ignore"
msgstr ""
#: src/Content/Item.php:454 src/Object/Post.php:429
msgid "Languages"
msgstr ""
#: src/Content/Item.php:458 src/Model/Contact.php:1089
msgid "Poke"
msgstr ""
#: src/Content/Nav.php:90
msgid "Nothing new here"
msgstr ""
@ -3076,7 +3077,7 @@ msgstr ""
msgid "End this session"
msgstr ""
#: src/Content/Nav.php:185 src/Module/Bookmarklet.php:45
#: src/Content/Nav.php:185 src/Module/Bookmarklet.php:44
#: src/Module/Security/Login.php:146
msgid "Login"
msgstr ""
@ -3165,7 +3166,7 @@ msgid "Addon applications, utilities, games"
msgstr ""
#: src/Content/Nav.php:230 src/Content/Text/HTML.php:891
#: src/Module/Search/Index.php:99
#: src/Module/Admin/Logs/View.php:86 src/Module/Search/Index.php:99
msgid "Search"
msgstr ""
@ -3331,39 +3332,39 @@ msgstr ""
msgid "last"
msgstr ""
#: src/Content/Text/BBCode.php:985 src/Content/Text/BBCode.php:1773
#: src/Content/Text/BBCode.php:1774
#: src/Content/Text/BBCode.php:987 src/Content/Text/BBCode.php:1775
#: src/Content/Text/BBCode.php:1776
msgid "Image/photo"
msgstr ""
#: src/Content/Text/BBCode.php:1158
#: src/Content/Text/BBCode.php:1160
#, php-format
msgid ""
"<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
msgstr ""
#: src/Content/Text/BBCode.php:1183 src/Model/Item.php:3152
#: src/Content/Text/BBCode.php:1185 src/Model/Item.php:3152
#: src/Model/Item.php:3158 src/Model/Item.php:3159
msgid "Link to source"
msgstr ""
#: src/Content/Text/BBCode.php:1691 src/Content/Text/HTML.php:943
#: src/Content/Text/BBCode.php:1693 src/Content/Text/HTML.php:943
msgid "Click to open/close"
msgstr ""
#: src/Content/Text/BBCode.php:1722
#: src/Content/Text/BBCode.php:1724
msgid "$1 wrote:"
msgstr ""
#: src/Content/Text/BBCode.php:1778 src/Content/Text/BBCode.php:1779
#: src/Content/Text/BBCode.php:1780 src/Content/Text/BBCode.php:1781
msgid "Encrypted content"
msgstr ""
#: src/Content/Text/BBCode.php:1995
#: src/Content/Text/BBCode.php:1997
msgid "Invalid source protocol"
msgstr ""
#: src/Content/Text/BBCode.php:2010
#: src/Content/Text/BBCode.php:2012
msgid "Invalid link protocol"
msgstr ""
@ -4276,7 +4277,7 @@ msgstr ""
msgid "%s: Database update"
msgstr ""
#: src/Database/DBStructure.php:853
#: src/Database/DBStructure.php:803
#, php-format
msgid "%s: updating %s table."
msgstr ""
@ -4587,7 +4588,7 @@ msgstr ""
msgid "View on separate page"
msgstr ""
#: src/Model/Mail.php:136 src/Model/Mail.php:268
#: src/Model/Mail.php:134 src/Model/Mail.php:266
msgid "[no subject]"
msgstr ""
@ -5048,7 +5049,7 @@ msgstr ""
#: src/Module/Admin/Blocklist/Contact.php:78
#: src/Module/Admin/Blocklist/Server.php:88 src/Module/Admin/Federation.php:159
#: src/Module/Admin/Item/Delete.php:65 src/Module/Admin/Logs/Settings.php:80
#: src/Module/Admin/Logs/View.php:84 src/Module/Admin/Queue.php:72
#: src/Module/Admin/Logs/View.php:83 src/Module/Admin/Queue.php:72
#: src/Module/Admin/Site.php:497 src/Module/Admin/Storage.php:131
#: src/Module/Admin/Summary.php:233 src/Module/Admin/Themes/Details.php:90
#: src/Module/Admin/Themes/Index.php:111 src/Module/Admin/Tos.php:58
@ -5483,7 +5484,7 @@ msgstr ""
msgid "Implicit Mention"
msgstr ""
#: src/Module/Admin/Item/Source.php:73
#: src/Module/Admin/Item/Source.php:73 src/Module/Admin/Logs/View.php:98
#: src/Module/Debug/ActivityPubConversion.php:62
msgid "Source"
msgstr ""
@ -5541,24 +5542,85 @@ msgid ""
"'display_errors' is to enable these options, set to '0' to disable them."
msgstr ""
#: src/Module/Admin/Logs/View.php:71
#: src/Module/Admin/Logs/View.php:70
#, php-format
msgid ""
"Error trying to open <strong>%1$s</strong> log file.\\r\\n<br/>Check to see "
"if file %1$s exist and is readable."
"Error trying to open <strong>%1$s</strong> log file.<br/>Check to see if "
"file %1$s exist and is readable."
msgstr ""
#: src/Module/Admin/Logs/View.php:80
#: src/Module/Admin/Logs/View.php:79
#, php-format
msgid ""
"Couldn't open <strong>%1$s</strong> log file.\\r\\n<br/>Check to see if file "
"%1$s is readable."
"Couldn't open <strong>%1$s</strong> log file.<br/>Check to see if file %1$s "
"is readable."
msgstr ""
#: src/Module/Admin/Logs/View.php:85 src/Module/BaseAdmin.php:110
#: src/Module/Admin/Logs/View.php:84 src/Module/BaseAdmin.php:110
msgid "View Logs"
msgstr ""
#: src/Module/Admin/Logs/View.php:87
msgid "Search in logs"
msgstr ""
#: src/Module/Admin/Logs/View.php:88
#: src/Module/Notifications/Notifications.php:138
msgid "Show all"
msgstr ""
#: src/Module/Admin/Logs/View.php:89
msgid "Date"
msgstr ""
#: src/Module/Admin/Logs/View.php:90
msgid "Level"
msgstr ""
#: src/Module/Admin/Logs/View.php:91
msgid "Context"
msgstr ""
#: src/Module/Admin/Logs/View.php:93
msgid "ALL"
msgstr ""
#: src/Module/Admin/Logs/View.php:94
msgid "View details"
msgstr ""
#: src/Module/Admin/Logs/View.php:95
msgid "Click to view details"
msgstr ""
#: src/Module/Admin/Logs/View.php:97
msgid "Data"
msgstr ""
#: src/Module/Admin/Logs/View.php:99
msgid "File"
msgstr ""
#: src/Module/Admin/Logs/View.php:100
msgid "Line"
msgstr ""
#: src/Module/Admin/Logs/View.php:101
msgid "Function"
msgstr ""
#: src/Module/Admin/Logs/View.php:102
msgid "UID"
msgstr ""
#: src/Module/Admin/Logs/View.php:103
msgid "Process ID"
msgstr ""
#: src/Module/Admin/Logs/View.php:104
msgid "Close"
msgstr ""
#: src/Module/Admin/Queue.php:50
msgid "Inspect Deferred Worker Queue"
msgstr ""
@ -7216,11 +7278,11 @@ msgstr ""
msgid "Remove account"
msgstr ""
#: src/Module/Bookmarklet.php:55
#: src/Module/Bookmarklet.php:54
msgid "This page is missing a url parameter."
msgstr ""
#: src/Module/Bookmarklet.php:67
#: src/Module/Bookmarklet.php:66
msgid "The post was created"
msgstr ""
@ -8693,10 +8755,6 @@ msgstr ""
msgid "Show unread"
msgstr ""
#: src/Module/Notifications/Notifications.php:138
msgid "Show all"
msgstr ""
#: src/Module/OAuth/Acknowledge.php:44
msgid "Authorize application connection"
msgstr ""

View file

@ -49,8 +49,8 @@ msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-10 00:27+0000\n"
"PO-Revision-Date: 2021-09-11 05:56+0000\n"
"POT-Creation-Date: 2021-10-01 16:40+0200\n"
"PO-Revision-Date: 2021-10-01 15:32+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
@ -80,9 +80,9 @@ msgid "Monthly posting limit of %d post reached. The post was rejected."
msgstr "Das monatliche Limit von %d Beiträgen wurde erreicht. Der Beitrag wurde verworfen."
#: include/api.php:4437 mod/photos.php:89 mod/photos.php:198
#: mod/photos.php:626 mod/photos.php:1034 mod/photos.php:1051
#: mod/photos.php:1597 src/Model/User.php:1118 src/Model/User.php:1126
#: src/Model/User.php:1134 src/Module/Settings/Profile/Photo/Crop.php:101
#: mod/photos.php:626 mod/photos.php:1035 mod/photos.php:1052
#: mod/photos.php:1599 src/Model/User.php:1169 src/Model/User.php:1177
#: src/Model/User.php:1185 src/Module/Settings/Profile/Photo/Crop.php:101
#: src/Module/Settings/Profile/Photo/Crop.php:117
#: src/Module/Settings/Profile/Photo/Crop.php:133
#: src/Module/Settings/Profile/Photo/Crop.php:179
@ -91,459 +91,6 @@ msgstr "Das monatliche Limit von %d Beiträgen wurde erreicht. Der Beitrag wurde
msgid "Profile Photos"
msgstr "Profilbilder"
#: include/conversation.php:109
#, php-format
msgid "%1$s poked %2$s"
msgstr "%1$s stupste %2$s"
#: include/conversation.php:142 src/Model/Item.php:2609
msgid "event"
msgstr "Veranstaltung"
#: include/conversation.php:145 include/conversation.php:154 mod/tagger.php:90
msgid "status"
msgstr "Status"
#: include/conversation.php:150 mod/tagger.php:90 src/Model/Item.php:2611
msgid "photo"
msgstr "Foto"
#: include/conversation.php:164 mod/tagger.php:123
#, php-format
msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr "%1$s hat %2$ss %3$s mit %4$s getaggt"
#: include/conversation.php:467 mod/photos.php:1459 src/Object/Post.php:226
msgid "Select"
msgstr "Auswählen"
#: include/conversation.php:468 mod/photos.php:1460 mod/settings.php:573
#: src/Module/Admin/Users/Active.php:139
#: src/Module/Admin/Users/Blocked.php:140 src/Module/Admin/Users/Index.php:153
#: src/Module/Contact.php:849 src/Module/Contact.php:1132
msgid "Delete"
msgstr "Löschen"
#: include/conversation.php:503 src/Object/Post.php:453
#: src/Object/Post.php:454
#, php-format
msgid "View %s's profile @ %s"
msgstr "Das Profil von %s auf %s betrachten."
#: include/conversation.php:516 src/Object/Post.php:441
msgid "Categories:"
msgstr "Kategorien:"
#: include/conversation.php:517 src/Object/Post.php:442
msgid "Filed under:"
msgstr "Abgelegt unter:"
#: include/conversation.php:524 src/Object/Post.php:467
#, php-format
msgid "%s from %s"
msgstr "%s von %s"
#: include/conversation.php:539
msgid "View in context"
msgstr "Im Zusammenhang betrachten"
#: include/conversation.php:541 include/conversation.php:1146
#: mod/editpost.php:107 mod/message.php:203 mod/message.php:368
#: mod/photos.php:1524 mod/wallmessage.php:155 src/Module/Item/Compose.php:165
#: src/Object/Post.php:501
msgid "Please wait"
msgstr "Bitte warten"
#: include/conversation.php:605
msgid "remove"
msgstr "löschen"
#: include/conversation.php:609
msgid "Delete Selected Items"
msgstr "Lösche die markierten Beiträge"
#: include/conversation.php:647 include/conversation.php:650
#: include/conversation.php:653 include/conversation.php:656
#, php-format
msgid "You had been addressed (%s)."
msgstr "Du wurdest angeschrieben (%s)."
#: include/conversation.php:659
#, php-format
msgid "You are following %s."
msgstr "Du folgst %s."
#: include/conversation.php:662
msgid "Tagged"
msgstr "Verschlagwortet"
#: include/conversation.php:675 include/conversation.php:1013
#: include/conversation.php:1051
#, php-format
msgid "%s reshared this."
msgstr "%s hat dies geteilt"
#: include/conversation.php:677
msgid "Reshared"
msgstr "Geteilt"
#: include/conversation.php:677
#, php-format
msgid "Reshared by %s <%s>"
msgstr "Geteilt von %s <%s>"
#: include/conversation.php:680
#, php-format
msgid "%s is participating in this thread."
msgstr "%s ist an der Unterhaltung beteiligt."
#: include/conversation.php:683
msgid "Stored"
msgstr "Gespeichert"
#: include/conversation.php:686
msgid "Global"
msgstr "Global"
#: include/conversation.php:689
msgid "Relayed"
msgstr "Übermittelt"
#: include/conversation.php:689
#, php-format
msgid "Relayed by %s <%s>"
msgstr "Weitergeleitet von %s <%s>"
#: include/conversation.php:692
msgid "Fetched"
msgstr "Abgerufen"
#: include/conversation.php:692
#, php-format
msgid "Fetched because of %s <%s>"
msgstr "Wegen %s <%s> abgerufen"
#: include/conversation.php:844 view/theme/frio/theme.php:323
msgid "Follow Thread"
msgstr "Folge der Unterhaltung"
#: include/conversation.php:845 src/Model/Contact.php:1050
msgid "View Status"
msgstr "Status anschauen"
#: include/conversation.php:846 include/conversation.php:868
#: src/Model/Contact.php:976 src/Model/Contact.php:1042
#: src/Model/Contact.php:1051 src/Module/Directory.php:160
#: src/Module/Settings/Profile/Index.php:223
msgid "View Profile"
msgstr "Profil anschauen"
#: include/conversation.php:847 src/Model/Contact.php:1052
msgid "View Photos"
msgstr "Bilder anschauen"
#: include/conversation.php:848 src/Model/Contact.php:1043
#: src/Model/Contact.php:1053
msgid "Network Posts"
msgstr "Netzwerkbeiträge"
#: include/conversation.php:849 src/Model/Contact.php:1044
#: src/Model/Contact.php:1054
msgid "View Contact"
msgstr "Kontakt anzeigen"
#: include/conversation.php:850 src/Model/Contact.php:1056
msgid "Send PM"
msgstr "Private Nachricht senden"
#: include/conversation.php:851 src/Module/Admin/Blocklist/Contact.php:84
#: src/Module/Admin/Users/Active.php:140 src/Module/Admin/Users/Index.php:154
#: src/Module/Contact.php:587 src/Module/Contact.php:847
#: src/Module/Contact.php:1115
msgid "Block"
msgstr "Sperren"
#: include/conversation.php:852 src/Module/Contact.php:588
#: src/Module/Contact.php:848 src/Module/Contact.php:1123
#: src/Module/Notifications/Introductions.php:113
#: src/Module/Notifications/Introductions.php:185
#: src/Module/Notifications/Notification.php:59
msgid "Ignore"
msgstr "Ignorieren"
#: include/conversation.php:856 src/Object/Post.php:428
msgid "Languages"
msgstr "Sprachen"
#: include/conversation.php:860 src/Model/Contact.php:1057
msgid "Poke"
msgstr "Anstupsen"
#: include/conversation.php:865 mod/follow.php:138 src/Content/Widget.php:76
#: src/Model/Contact.php:1045 src/Model/Contact.php:1058
#: view/theme/vier/theme.php:172
msgid "Connect/Follow"
msgstr "Verbinden/Folgen"
#: include/conversation.php:998
#, php-format
msgid "%s likes this."
msgstr "%s mag das."
#: include/conversation.php:1001
#, php-format
msgid "%s doesn't like this."
msgstr "%s mag das nicht."
#: include/conversation.php:1004
#, php-format
msgid "%s attends."
msgstr "%s nimmt teil."
#: include/conversation.php:1007
#, php-format
msgid "%s doesn't attend."
msgstr "%s nimmt nicht teil."
#: include/conversation.php:1010
#, php-format
msgid "%s attends maybe."
msgstr "%s nimmt eventuell teil."
#: include/conversation.php:1019
msgid "and"
msgstr "und"
#: include/conversation.php:1022
#, php-format
msgid "and %d other people"
msgstr "und %dandere"
#: include/conversation.php:1030
#, php-format
msgid "<span %1$s>%2$d people</span> like this"
msgstr "<span %1$s>%2$d Personen</span> mögen das"
#: include/conversation.php:1031
#, php-format
msgid "%s like this."
msgstr "%s mögen das."
#: include/conversation.php:1034
#, php-format
msgid "<span %1$s>%2$d people</span> don't like this"
msgstr "<span %1$s>%2$d Personen</span> mögen das nicht"
#: include/conversation.php:1035
#, php-format
msgid "%s don't like this."
msgstr "%s mögen dies nicht."
#: include/conversation.php:1038
#, php-format
msgid "<span %1$s>%2$d people</span> attend"
msgstr "<span %1$s>%2$d Personen</span> nehmen teil"
#: include/conversation.php:1039
#, php-format
msgid "%s attend."
msgstr "%s nehmen teil."
#: include/conversation.php:1042
#, php-format
msgid "<span %1$s>%2$d people</span> don't attend"
msgstr "<span %1$s>%2$d Personen</span> nehmen nicht teil"
#: include/conversation.php:1043
#, php-format
msgid "%s don't attend."
msgstr "%s nehmen nicht teil."
#: include/conversation.php:1046
#, php-format
msgid "<span %1$s>%2$d people</span> attend maybe"
msgstr "<span %1$s>%2$d Personen</span> nehmen eventuell teil"
#: include/conversation.php:1047
#, php-format
msgid "%s attend maybe."
msgstr "%s nimmt eventuell teil."
#: include/conversation.php:1050
#, php-format
msgid "<span %1$s>%2$d people</span> reshared this"
msgstr "<span %1$s>%2$d Personen</span> haben dies geteilt"
#: include/conversation.php:1098
msgid "Visible to <strong>everybody</strong>"
msgstr "Für <strong>jedermann</strong> sichtbar"
#: include/conversation.php:1099 src/Module/Item/Compose.php:159
#: src/Object/Post.php:972
msgid "Please enter a image/video/audio/webpage URL:"
msgstr "Bitte gib eine Bild/Video/Audio/Webseiten-URL ein:"
#: include/conversation.php:1100
msgid "Tag term:"
msgstr "Tag:"
#: include/conversation.php:1101 src/Module/Filer/SaveTag.php:68
msgid "Save to Folder:"
msgstr "In diesem Ordner speichern:"
#: include/conversation.php:1102
msgid "Where are you right now?"
msgstr "Wo hältst du dich jetzt gerade auf?"
#: include/conversation.php:1103
msgid "Delete item(s)?"
msgstr "Einträge löschen?"
#: include/conversation.php:1113
msgid "New Post"
msgstr "Neuer Beitrag"
#: include/conversation.php:1116
msgid "Share"
msgstr "Teilen"
#: include/conversation.php:1117 mod/editpost.php:92 mod/photos.php:1373
#: src/Module/Contact/Poke.php:157 src/Object/Post.php:963
msgid "Loading..."
msgstr "lädt..."
#: include/conversation.php:1118 mod/editpost.php:93 mod/message.php:201
#: mod/message.php:365 mod/wallmessage.php:153
msgid "Upload photo"
msgstr "Foto hochladen"
#: include/conversation.php:1119 mod/editpost.php:94
msgid "upload photo"
msgstr "Bild hochladen"
#: include/conversation.php:1120 mod/editpost.php:95
msgid "Attach file"
msgstr "Datei anhängen"
#: include/conversation.php:1121 mod/editpost.php:96
msgid "attach file"
msgstr "Datei anhängen"
#: include/conversation.php:1122 src/Module/Item/Compose.php:151
#: src/Object/Post.php:964
msgid "Bold"
msgstr "Fett"
#: include/conversation.php:1123 src/Module/Item/Compose.php:152
#: src/Object/Post.php:965
msgid "Italic"
msgstr "Kursiv"
#: include/conversation.php:1124 src/Module/Item/Compose.php:153
#: src/Object/Post.php:966
msgid "Underline"
msgstr "Unterstrichen"
#: include/conversation.php:1125 src/Module/Item/Compose.php:154
#: src/Object/Post.php:967
msgid "Quote"
msgstr "Zitat"
#: include/conversation.php:1126 src/Module/Item/Compose.php:155
#: src/Object/Post.php:968
msgid "Code"
msgstr "Code"
#: include/conversation.php:1127 src/Module/Item/Compose.php:156
#: src/Object/Post.php:969
msgid "Image"
msgstr "Bild"
#: include/conversation.php:1128 src/Module/Item/Compose.php:157
#: src/Object/Post.php:970
msgid "Link"
msgstr "Link"
#: include/conversation.php:1129 src/Module/Item/Compose.php:158
#: src/Object/Post.php:971
msgid "Link or Media"
msgstr "Link oder Mediendatei"
#: include/conversation.php:1130
msgid "Video"
msgstr "Video"
#: include/conversation.php:1131 mod/editpost.php:103
#: src/Module/Item/Compose.php:161
msgid "Set your location"
msgstr "Deinen Standort festlegen"
#: include/conversation.php:1132 mod/editpost.php:104
msgid "set location"
msgstr "Ort setzen"
#: include/conversation.php:1133 mod/editpost.php:105
msgid "Clear browser location"
msgstr "Browser-Standort leeren"
#: include/conversation.php:1134 mod/editpost.php:106
msgid "clear location"
msgstr "Ort löschen"
#: include/conversation.php:1136 mod/editpost.php:120
#: src/Module/Item/Compose.php:166
msgid "Set title"
msgstr "Titel setzen"
#: include/conversation.php:1138 mod/editpost.php:122
#: src/Module/Item/Compose.php:167
msgid "Categories (comma-separated list)"
msgstr "Kategorien (kommasepariert)"
#: include/conversation.php:1143 src/Module/Item/Compose.php:172
msgid "Scheduled at"
msgstr "Geplant für"
#: include/conversation.php:1147 mod/editpost.php:108
msgid "Permission settings"
msgstr "Berechtigungseinstellungen"
#: include/conversation.php:1148 mod/editpost.php:136 mod/events.php:583
#: mod/photos.php:965 mod/photos.php:1326
msgid "Permissions"
msgstr "Berechtigungen"
#: include/conversation.php:1157 mod/editpost.php:117
msgid "Public post"
msgstr "Öffentlicher Beitrag"
#: include/conversation.php:1161 mod/editpost.php:128 mod/events.php:578
#: mod/photos.php:1372 mod/photos.php:1428 mod/photos.php:1502
#: src/Module/Item/Compose.php:160 src/Object/Post.php:973
msgid "Preview"
msgstr "Vorschau"
#: include/conversation.php:1164 mod/editpost.php:130 mod/fbrowser.php:105
#: mod/fbrowser.php:134 mod/follow.php:144 mod/photos.php:1028
#: mod/photos.php:1134 mod/tagrm.php:37 mod/tagrm.php:129 mod/unfollow.php:97
#: src/Module/Contact.php:422 src/Module/RemoteFollow.php:116
msgid "Cancel"
msgstr "Abbrechen"
#: include/conversation.php:1171 mod/editpost.php:134
#: src/Content/Widget/VCard.php:107 src/Model/Profile.php:459
msgid "Message"
msgstr "Nachricht"
#: include/conversation.php:1172 mod/editpost.php:135
#: src/Module/Settings/TwoFactor/Trusted.php:101
msgid "Browser"
msgstr "Browser"
#: include/conversation.php:1174 mod/editpost.php:138
msgid "Open Compose page"
msgstr "Composer Seite öffnen"
#: include/enotify.php:52 include/enotify.php:559
msgid "[Friendica:Notify]"
msgstr "[Friendica Meldung]"
@ -796,7 +343,7 @@ msgid "%s %s shared a new post"
msgstr "%s%shat einen Beitrag geteilt"
#: mod/api.php:30 mod/editpost.php:38 mod/events.php:236 mod/follow.php:56
#: mod/follow.php:130 mod/item.php:184 mod/item.php:189 mod/item.php:934
#: mod/follow.php:130 mod/item.php:185 mod/item.php:190 mod/item.php:936
#: mod/message.php:69 mod/message.php:111 mod/notes.php:44
#: mod/ostatus_subscribe.php:32 mod/photos.php:163 mod/photos.php:917
#: mod/repair_ostatus.php:31 mod/settings.php:47 mod/settings.php:57
@ -807,16 +354,16 @@ msgstr "%s%shat einen Beitrag geteilt"
#: mod/wallmessage.php:96 mod/wallmessage.php:120 src/Module/Attach.php:55
#: src/Module/BaseApi.php:79 src/Module/BaseApi.php:88
#: src/Module/BaseApi.php:97 src/Module/BaseApi.php:106
#: src/Module/BaseNotifications.php:88 src/Module/Contact.php:346
#: src/Module/Contact/Advanced.php:44 src/Module/Delegation.php:119
#: src/Module/BaseNotifications.php:88 src/Module/Contact.php:356
#: src/Module/Contact/Advanced.php:44 src/Module/Delegation.php:118
#: src/Module/FollowConfirm.php:16 src/Module/FriendSuggest.php:44
#: src/Module/Group.php:45 src/Module/Group.php:90 src/Module/Invite.php:41
#: src/Module/Invite.php:130 src/Module/Notifications/Notification.php:47
#: src/Module/Notifications/Notification.php:76
#: src/Module/Profile/Common.php:56 src/Module/Profile/Contacts.php:56
#: src/Module/Profile/Schedule.php:39 src/Module/Profile/Schedule.php:56
#: src/Module/Register.php:62 src/Module/Register.php:75
#: src/Module/Register.php:193 src/Module/Register.php:232
#: src/Module/Register.php:64 src/Module/Register.php:77
#: src/Module/Register.php:195 src/Module/Register.php:234
#: src/Module/Search/Directory.php:38 src/Module/Settings/Delegation.php:42
#: src/Module/Settings/Delegation.php:70 src/Module/Settings/Display.php:43
#: src/Module/Settings/Display.php:121
@ -843,7 +390,7 @@ msgstr "Zugriff verweigert."
#: src/Model/Profile.php:228 src/Module/HCard.php:52
#: src/Module/Profile/Common.php:41 src/Module/Profile/Common.php:52
#: src/Module/Profile/Contacts.php:40 src/Module/Profile/Contacts.php:50
#: src/Module/Profile/Status.php:58 src/Module/Register.php:254
#: src/Module/Profile/Status.php:58 src/Module/Register.php:256
#: src/Module/RemoteFollow.php:49
msgid "User not found."
msgstr "Benutzer nicht gefunden."
@ -943,6 +490,28 @@ msgstr "Beitrag bearbeiten"
msgid "Save"
msgstr "Speichern"
#: mod/editpost.php:92 mod/photos.php:1375 src/Content/Conversation.php:326
#: src/Module/Contact/Poke.php:157 src/Object/Post.php:964
msgid "Loading..."
msgstr "lädt..."
#: mod/editpost.php:93 mod/message.php:201 mod/message.php:365
#: mod/wallmessage.php:153 src/Content/Conversation.php:327
msgid "Upload photo"
msgstr "Foto hochladen"
#: mod/editpost.php:94 src/Content/Conversation.php:328
msgid "upload photo"
msgstr "Bild hochladen"
#: mod/editpost.php:95 src/Content/Conversation.php:329
msgid "Attach file"
msgstr "Datei anhängen"
#: mod/editpost.php:96 src/Content/Conversation.php:330
msgid "attach file"
msgstr "Datei anhängen"
#: mod/editpost.php:97 mod/message.php:202 mod/message.php:366
#: mod/wallmessage.php:154
msgid "Insert web link"
@ -968,14 +537,89 @@ msgstr "Audio-Adresse einfügen"
msgid "audio link"
msgstr "Audio-Link"
#: mod/editpost.php:103 src/Content/Conversation.php:340
#: src/Module/Item/Compose.php:161
msgid "Set your location"
msgstr "Deinen Standort festlegen"
#: mod/editpost.php:104 src/Content/Conversation.php:341
msgid "set location"
msgstr "Ort setzen"
#: mod/editpost.php:105 src/Content/Conversation.php:342
msgid "Clear browser location"
msgstr "Browser-Standort leeren"
#: mod/editpost.php:106 src/Content/Conversation.php:343
msgid "clear location"
msgstr "Ort löschen"
#: mod/editpost.php:107 mod/message.php:203 mod/message.php:368
#: mod/photos.php:1526 mod/wallmessage.php:155
#: src/Content/Conversation.php:355 src/Content/Conversation.php:689
#: src/Module/Item/Compose.php:165 src/Object/Post.php:502
msgid "Please wait"
msgstr "Bitte warten"
#: mod/editpost.php:108 src/Content/Conversation.php:356
msgid "Permission settings"
msgstr "Berechtigungseinstellungen"
#: mod/editpost.php:116 src/Core/ACL.php:327
msgid "CC: email addresses"
msgstr "Cc: E-Mail-Addressen"
#: mod/editpost.php:117 src/Content/Conversation.php:366
msgid "Public post"
msgstr "Öffentlicher Beitrag"
#: mod/editpost.php:120 src/Content/Conversation.php:345
#: src/Module/Item/Compose.php:166
msgid "Set title"
msgstr "Titel setzen"
#: mod/editpost.php:122 src/Content/Conversation.php:347
#: src/Module/Item/Compose.php:167
msgid "Categories (comma-separated list)"
msgstr "Kategorien (kommasepariert)"
#: mod/editpost.php:123 src/Core/ACL.php:328
msgid "Example: bob@example.com, mary@example.com"
msgstr "Z.B.: bob@example.com, mary@example.com"
#: mod/editpost.php:128 mod/events.php:578 mod/photos.php:1374
#: mod/photos.php:1430 mod/photos.php:1504 src/Content/Conversation.php:370
#: src/Module/Item/Compose.php:160 src/Object/Post.php:974
msgid "Preview"
msgstr "Vorschau"
#: mod/editpost.php:130 mod/fbrowser.php:105 mod/fbrowser.php:134
#: mod/follow.php:144 mod/photos.php:1029 mod/photos.php:1136 mod/tagrm.php:37
#: mod/tagrm.php:129 mod/unfollow.php:97 src/Content/Conversation.php:373
#: src/Module/Contact.php:443 src/Module/RemoteFollow.php:116
msgid "Cancel"
msgstr "Abbrechen"
#: mod/editpost.php:134 src/Content/Conversation.php:380
#: src/Content/Widget/VCard.php:107 src/Model/Profile.php:459
#: src/Module/Admin/Logs/View.php:93
msgid "Message"
msgstr "Nachricht"
#: mod/editpost.php:135 src/Content/Conversation.php:381
#: src/Module/Settings/TwoFactor/Trusted.php:101
msgid "Browser"
msgstr "Browser"
#: mod/editpost.php:136 mod/events.php:583 mod/photos.php:965
#: mod/photos.php:1328 src/Content/Conversation.php:357
msgid "Permissions"
msgstr "Berechtigungen"
#: mod/editpost.php:138 src/Content/Conversation.php:383
msgid "Open Compose page"
msgstr "Composer Seite öffnen"
#: mod/events.php:138 mod/events.php:140
msgid "Event can not end before it has started."
msgstr "Die Veranstaltung kann nicht enden, bevor sie beginnt."
@ -988,7 +632,7 @@ msgstr "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden."
msgid "Create New Event"
msgstr "Neue Veranstaltung erstellen"
#: mod/events.php:536
#: mod/events.php:536 src/Module/Admin/Logs/View.php:97
msgid "Event details"
msgstr "Veranstaltungsdetails"
@ -1011,7 +655,7 @@ msgstr "Veranstaltungsbeginn:"
#: src/Module/Install.php:268 src/Module/Install.php:273
#: src/Module/Install.php:279 src/Module/Install.php:284
#: src/Module/Install.php:298 src/Module/Install.php:313
#: src/Module/Install.php:340 src/Module/Register.php:135
#: src/Module/Install.php:340 src/Module/Register.php:137
#: src/Module/Security/TwoFactor/Verify.php:100
#: src/Module/Settings/TwoFactor/Index.php:133
#: src/Module/Settings/TwoFactor/Verify.php:141
@ -1037,7 +681,7 @@ msgstr "Beschreibung"
#: mod/events.php:568 src/Content/Widget/VCard.php:98 src/Model/Event.php:86
#: src/Model/Event.php:113 src/Model/Event.php:483 src/Model/Event.php:969
#: src/Model/Profile.php:367 src/Module/Contact.php:608
#: src/Model/Profile.php:367 src/Module/Contact.php:623
#: src/Module/Directory.php:150 src/Module/Notifications/Introductions.php:166
#: src/Module/Profile/Profile.php:194
msgid "Location:"
@ -1052,18 +696,18 @@ msgid "Share this event"
msgstr "Veranstaltung teilen"
#: mod/events.php:580 mod/message.php:204 mod/message.php:367
#: mod/photos.php:947 mod/photos.php:1045 mod/photos.php:1330
#: mod/photos.php:1371 mod/photos.php:1427 mod/photos.php:1501
#: src/Module/Admin/Item/Source.php:65 src/Module/Contact.php:566
#: mod/photos.php:947 mod/photos.php:1046 mod/photos.php:1332
#: mod/photos.php:1373 mod/photos.php:1429 mod/photos.php:1503
#: src/Module/Admin/Item/Source.php:65 src/Module/Contact.php:581
#: src/Module/Contact/Advanced.php:133 src/Module/Contact/Poke.php:158
#: src/Module/Debug/ActivityPubConversion.php:141
#: src/Module/Debug/Babel.php:313 src/Module/Debug/Localtime.php:64
#: src/Module/Debug/Probe.php:56 src/Module/Debug/WebFinger.php:53
#: src/Module/Delegation.php:153 src/Module/FriendSuggest.php:129
#: src/Module/Delegation.php:147 src/Module/FriendSuggest.php:129
#: src/Module/Install.php:245 src/Module/Install.php:287
#: src/Module/Install.php:324 src/Module/Invite.php:177
#: src/Module/Item/Compose.php:150 src/Module/Profile/Profile.php:247
#: src/Module/Settings/Profile/Index.php:220 src/Object/Post.php:962
#: src/Module/Settings/Profile/Index.php:220 src/Object/Post.php:963
#: view/theme/duepuntozero/config.php:69 view/theme/frio/config.php:160
#: view/theme/quattro/config.php:71 view/theme/vier/config.php:119
msgid "Submit"
@ -1073,7 +717,7 @@ msgstr "Senden"
msgid "Basic"
msgstr "Allgemein"
#: mod/events.php:582 src/Module/Admin/Site.php:505 src/Module/Contact.php:916
#: mod/events.php:582 src/Module/Admin/Site.php:505 src/Module/Contact.php:932
#: src/Module/Profile/Profile.php:249
msgid "Advanced"
msgstr "Erweitert"
@ -1116,6 +760,12 @@ msgstr "Diaspora-Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zuge
msgid "OStatus support is disabled. Contact can't be added."
msgstr "OStatus-Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden."
#: mod/follow.php:138 src/Content/Item.php:463 src/Content/Widget.php:76
#: src/Model/Contact.php:1051 src/Model/Contact.php:1064
#: view/theme/vier/theme.php:172
msgid "Connect/Follow"
msgstr "Verbinden/Folgen"
#: mod/follow.php:139 src/Module/RemoteFollow.php:114
msgid "Please answer the following:"
msgstr "Bitte beantworte folgendes:"
@ -1125,13 +775,13 @@ msgid "Your Identity Address:"
msgstr "Adresse Deines Profils:"
#: mod/follow.php:141 mod/unfollow.php:100
#: src/Module/Admin/Blocklist/Contact.php:100 src/Module/Contact.php:604
#: src/Module/Admin/Blocklist/Contact.php:100 src/Module/Contact.php:619
#: src/Module/Notifications/Introductions.php:108
#: src/Module/Notifications/Introductions.php:177
msgid "Profile URL"
msgstr "Profil URL"
#: mod/follow.php:142 src/Module/Contact.php:616
#: mod/follow.php:142 src/Module/Contact.php:631
#: src/Module/Notifications/Introductions.php:170
#: src/Module/Profile/Profile.php:207
msgid "Tags:"
@ -1147,7 +797,7 @@ msgid "Add a personal note:"
msgstr "Eine persönliche Notiz beifügen:"
#: mod/follow.php:163 mod/unfollow.php:109 src/Module/BaseProfile.php:59
#: src/Module/Contact.php:894
#: src/Module/Contact.php:910
msgid "Status Messages and Posts"
msgstr "Statusnachrichten und Beiträge"
@ -1159,23 +809,23 @@ msgstr "Der Kontakt konnte nicht hinzugefügt werden."
msgid "Unable to locate original post."
msgstr "Konnte den Originalbeitrag nicht finden."
#: mod/item.php:340 mod/item.php:345
#: mod/item.php:341 mod/item.php:346
msgid "Empty post discarded."
msgstr "Leerer Beitrag wurde verworfen."
#: mod/item.php:741
#: mod/item.php:742
msgid "Post updated."
msgstr "Beitrag aktualisiert."
#: mod/item.php:751 mod/item.php:756
#: mod/item.php:752 mod/item.php:757
msgid "Item wasn't stored."
msgstr "Eintrag wurde nicht gespeichert"
#: mod/item.php:767
#: mod/item.php:768
msgid "Item couldn't be fetched."
msgstr "Eintrag konnte nicht geholt werden."
#: mod/item.php:913 src/Module/Admin/Themes/Details.php:39
#: mod/item.php:914 src/Module/Admin/Themes/Details.php:39
#: src/Module/Admin/Themes/Index.php:59 src/Module/Debug/ItemBody.php:41
#: src/Module/Debug/ItemBody.php:56
msgid "Item not found."
@ -1502,11 +1152,11 @@ msgstr "Lasse dieses Fenster offen, bis der Vorgang abgeschlossen ist."
msgid "Photo Albums"
msgstr "Fotoalben"
#: mod/photos.php:112 mod/photos.php:1626
#: mod/photos.php:112 mod/photos.php:1628
msgid "Recent Photos"
msgstr "Neueste Fotos"
#: mod/photos.php:114 mod/photos.php:1096 mod/photos.php:1628
#: mod/photos.php:114 mod/photos.php:1097 mod/photos.php:1630
msgid "Upload New Photos"
msgstr "Neue Fotos hochladen"
@ -1589,7 +1239,7 @@ msgstr "Zugriff zu diesem Eintrag wurde eingeschränkt."
msgid "Upload Photos"
msgstr "Bilder hochladen"
#: mod/photos.php:961 mod/photos.php:1041
#: mod/photos.php:961 mod/photos.php:1042
msgid "New album name: "
msgstr "Name des neuen Albums: "
@ -1605,139 +1255,151 @@ msgstr "Keine Status-Mitteilung für diesen Beitrag anzeigen"
msgid "Do you really want to delete this photo album and all its photos?"
msgstr "Möchtest du wirklich dieses Foto-Album und all seine Foto löschen?"
#: mod/photos.php:1025 mod/photos.php:1046
#: mod/photos.php:1025 mod/photos.php:1047
msgid "Delete Album"
msgstr "Album löschen"
#: mod/photos.php:1052
#: mod/photos.php:1053
msgid "Edit Album"
msgstr "Album bearbeiten"
#: mod/photos.php:1053
#: mod/photos.php:1054
msgid "Drop Album"
msgstr "Album löschen"
#: mod/photos.php:1058
#: mod/photos.php:1059
msgid "Show Newest First"
msgstr "Zeige neueste zuerst"
#: mod/photos.php:1060
#: mod/photos.php:1061
msgid "Show Oldest First"
msgstr "Zeige älteste zuerst"
#: mod/photos.php:1081 mod/photos.php:1611
#: mod/photos.php:1082 mod/photos.php:1613
msgid "View Photo"
msgstr "Foto betrachten"
#: mod/photos.php:1118
#: mod/photos.php:1119
msgid "Permission denied. Access to this item may be restricted."
msgstr "Zugriff verweigert. Zugriff zu diesem Eintrag könnte eingeschränkt sein."
#: mod/photos.php:1120
#: mod/photos.php:1121
msgid "Photo not available"
msgstr "Foto nicht verfügbar"
#: mod/photos.php:1130
#: mod/photos.php:1131
msgid "Do you really want to delete this photo?"
msgstr "Möchtest du wirklich dieses Foto löschen?"
#: mod/photos.php:1131 mod/photos.php:1331
#: mod/photos.php:1132 mod/photos.php:1333
msgid "Delete Photo"
msgstr "Foto löschen"
#: mod/photos.php:1222
#: mod/photos.php:1224
msgid "View photo"
msgstr "Fotos ansehen"
#: mod/photos.php:1224
#: mod/photos.php:1226
msgid "Edit photo"
msgstr "Foto bearbeiten"
#: mod/photos.php:1225
#: mod/photos.php:1227
msgid "Delete photo"
msgstr "Foto löschen"
#: mod/photos.php:1226
#: mod/photos.php:1228
msgid "Use as profile photo"
msgstr "Als Profilbild verwenden"
#: mod/photos.php:1233
#: mod/photos.php:1235
msgid "Private Photo"
msgstr "Privates Foto"
#: mod/photos.php:1239
#: mod/photos.php:1241
msgid "View Full Size"
msgstr "Betrachte Originalgröße"
#: mod/photos.php:1299
#: mod/photos.php:1301
msgid "Tags: "
msgstr "Tags: "
#: mod/photos.php:1302
#: mod/photos.php:1304
msgid "[Select tags to remove]"
msgstr "[Zu entfernende Tags auswählen]"
#: mod/photos.php:1317
#: mod/photos.php:1319
msgid "New album name"
msgstr "Name des neuen Albums"
#: mod/photos.php:1318
#: mod/photos.php:1320
msgid "Caption"
msgstr "Bildunterschrift"
#: mod/photos.php:1319
#: mod/photos.php:1321
msgid "Add a Tag"
msgstr "Tag hinzufügen"
#: mod/photos.php:1319
#: mod/photos.php:1321
msgid ""
"Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
msgstr "Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
#: mod/photos.php:1320
#: mod/photos.php:1322
msgid "Do not rotate"
msgstr "Nicht rotieren"
#: mod/photos.php:1321
#: mod/photos.php:1323
msgid "Rotate CW (right)"
msgstr "Drehen US (rechts)"
#: mod/photos.php:1322
#: mod/photos.php:1324
msgid "Rotate CCW (left)"
msgstr "Drehen EUS (links)"
#: mod/photos.php:1368 mod/photos.php:1424 mod/photos.php:1498
#: src/Module/Contact.php:1046 src/Module/Item/Compose.php:148
#: src/Object/Post.php:959
#: mod/photos.php:1370 mod/photos.php:1426 mod/photos.php:1500
#: src/Module/Contact.php:1062 src/Module/Item/Compose.php:148
#: src/Object/Post.php:960
msgid "This is you"
msgstr "Das bist du"
#: mod/photos.php:1370 mod/photos.php:1426 mod/photos.php:1500
#: src/Object/Post.php:495 src/Object/Post.php:961
#: mod/photos.php:1372 mod/photos.php:1428 mod/photos.php:1502
#: src/Object/Post.php:496 src/Object/Post.php:962
msgid "Comment"
msgstr "Kommentar"
#: mod/photos.php:1521 src/Object/Post.php:348
#: mod/photos.php:1461 src/Content/Conversation.php:615
#: src/Object/Post.php:227
msgid "Select"
msgstr "Auswählen"
#: mod/photos.php:1462 mod/settings.php:573 src/Content/Conversation.php:616
#: src/Module/Admin/Users/Active.php:139
#: src/Module/Admin/Users/Blocked.php:140 src/Module/Admin/Users/Index.php:153
#: src/Module/Contact.php:865 src/Module/Contact.php:1150
msgid "Delete"
msgstr "Löschen"
#: mod/photos.php:1523 src/Object/Post.php:349
msgid "Like"
msgstr "Mag ich"
#: mod/photos.php:1522 src/Object/Post.php:348
#: mod/photos.php:1524 src/Object/Post.php:349
msgid "I like this (toggle)"
msgstr "Ich mag das (toggle)"
#: mod/photos.php:1523 src/Object/Post.php:349
#: mod/photos.php:1525 src/Object/Post.php:350
msgid "Dislike"
msgstr "Mag ich nicht"
#: mod/photos.php:1525 src/Object/Post.php:349
#: mod/photos.php:1527 src/Object/Post.php:350
msgid "I don't like this (toggle)"
msgstr "Ich mag das nicht (toggle)"
#: mod/photos.php:1547
#: mod/photos.php:1549
msgid "Map"
msgstr "Karte"
#: mod/photos.php:1617 mod/videos.php:243
#: mod/photos.php:1619 mod/videos.php:243
msgid "View Album"
msgstr "Album betrachten"
@ -2220,7 +1882,7 @@ msgstr "Kontoeinstellungen"
msgid "Password Settings"
msgstr "Passwort-Einstellungen"
#: mod/settings.php:719 src/Module/Register.php:149
#: mod/settings.php:719 src/Module/Register.php:151
msgid "New Password:"
msgstr "Neues Passwort:"
@ -2230,7 +1892,7 @@ msgid ""
"spaces, accentuated letters and colon (:)."
msgstr "Erlaubte Zeichen sind a-z, A-Z, 0-9 und Sonderzeichen, abgesehen von Leerzeichen, Doppelpunkten (:) und akzentuierten Buchstaben."
#: mod/settings.php:720 src/Module/Register.php:150
#: mod/settings.php:720 src/Module/Register.php:152
msgid "Confirm:"
msgstr "Bestätigen:"
@ -2588,6 +2250,19 @@ msgstr "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde,
msgid "Friend Suggestions"
msgstr "Kontaktvorschläge"
#: mod/tagger.php:90 src/Content/Item.php:346 src/Model/Item.php:2624
msgid "photo"
msgstr "Foto"
#: mod/tagger.php:90 src/Content/Item.php:341 src/Content/Item.php:350
msgid "status"
msgstr "Status"
#: mod/tagger.php:123 src/Content/Item.php:360
#, php-format
msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr "%1$s hat %2$ss %3$s mit %4$s getaggt"
#: mod/tagrm.php:115
msgid "Remove Item Tag"
msgstr "Gegenstands-Tag entfernen"
@ -2605,13 +2280,13 @@ msgstr "Entfernen"
msgid "User imports on closed servers can only be done by an administrator."
msgstr "Auf geschlossenen Servern können ausschließlich die Administratoren Benutzerkonten importieren."
#: mod/uimport.php:54 src/Module/Register.php:84
#: mod/uimport.php:54 src/Module/Register.php:86
msgid ""
"This site has exceeded the number of allowed daily account registrations. "
"Please try again tomorrow."
msgstr "Die maximale Anzahl täglicher Registrierungen auf dieser Seite wurde überschritten. Bitte versuche es morgen noch einmal."
#: mod/uimport.php:61 src/Module/Register.php:160
#: mod/uimport.php:61 src/Module/Register.php:162
msgid "Import"
msgstr "Import"
@ -2721,7 +2396,7 @@ msgid ""
"your site allow private mail from unknown senders."
msgstr "Wenn du möchtest, dass %s dir antworten kann, überprüfe deine Privatsphären-Einstellungen und erlaube private Nachrichten von unbekannten Absendern."
#: src/App.php:452
#: src/App.php:453
msgid "No system theme config value set."
msgstr "Es wurde kein Konfigurationswert für das systemweite Theme gesetzt."
@ -2763,18 +2438,18 @@ msgid "All contacts"
msgstr "Alle Kontakte"
#: src/BaseModule.php:212 src/Content/Widget.php:238 src/Core/ACL.php:195
#: src/Module/Contact.php:816 src/Module/PermissionTooltip.php:77
#: src/Module/Contact.php:831 src/Module/PermissionTooltip.php:77
#: src/Module/PermissionTooltip.php:99
msgid "Followers"
msgstr "Folgende"
#: src/BaseModule.php:217 src/Content/Widget.php:239
#: src/Module/Contact.php:817
#: src/Module/Contact.php:832
msgid "Following"
msgstr "Gefolgte"
#: src/BaseModule.php:222 src/Content/Widget.php:240
#: src/Module/Contact.php:818
#: src/Module/Contact.php:833
msgid "Mutual friends"
msgstr "Beidseitige Freundschaft"
@ -2992,6 +2667,268 @@ msgstr "pnut"
msgid "%s (via %s)"
msgstr "%s (via %s)"
#: src/Content/Conversation.php:207
#, php-format
msgid "%s likes this."
msgstr "%s mag das."
#: src/Content/Conversation.php:210
#, php-format
msgid "%s doesn't like this."
msgstr "%s mag das nicht."
#: src/Content/Conversation.php:213
#, php-format
msgid "%s attends."
msgstr "%s nimmt teil."
#: src/Content/Conversation.php:216
#, php-format
msgid "%s doesn't attend."
msgstr "%s nimmt nicht teil."
#: src/Content/Conversation.php:219
#, php-format
msgid "%s attends maybe."
msgstr "%s nimmt eventuell teil."
#: src/Content/Conversation.php:222 src/Content/Conversation.php:260
#: src/Content/Conversation.php:848
#, php-format
msgid "%s reshared this."
msgstr "%s hat dies geteilt"
#: src/Content/Conversation.php:228
msgid "and"
msgstr "und"
#: src/Content/Conversation.php:231
#, php-format
msgid "and %d other people"
msgstr "und %dandere"
#: src/Content/Conversation.php:239
#, php-format
msgid "<span %1$s>%2$d people</span> like this"
msgstr "<span %1$s>%2$d Personen</span> mögen das"
#: src/Content/Conversation.php:240
#, php-format
msgid "%s like this."
msgstr "%s mögen das."
#: src/Content/Conversation.php:243
#, php-format
msgid "<span %1$s>%2$d people</span> don't like this"
msgstr "<span %1$s>%2$d Personen</span> mögen das nicht"
#: src/Content/Conversation.php:244
#, php-format
msgid "%s don't like this."
msgstr "%s mögen dies nicht."
#: src/Content/Conversation.php:247
#, php-format
msgid "<span %1$s>%2$d people</span> attend"
msgstr "<span %1$s>%2$d Personen</span> nehmen teil"
#: src/Content/Conversation.php:248
#, php-format
msgid "%s attend."
msgstr "%s nehmen teil."
#: src/Content/Conversation.php:251
#, php-format
msgid "<span %1$s>%2$d people</span> don't attend"
msgstr "<span %1$s>%2$d Personen</span> nehmen nicht teil"
#: src/Content/Conversation.php:252
#, php-format
msgid "%s don't attend."
msgstr "%s nehmen nicht teil."
#: src/Content/Conversation.php:255
#, php-format
msgid "<span %1$s>%2$d people</span> attend maybe"
msgstr "<span %1$s>%2$d Personen</span> nehmen eventuell teil"
#: src/Content/Conversation.php:256
#, php-format
msgid "%s attend maybe."
msgstr "%s nimmt eventuell teil."
#: src/Content/Conversation.php:259
#, php-format
msgid "<span %1$s>%2$d people</span> reshared this"
msgstr "<span %1$s>%2$d Personen</span> haben dies geteilt"
#: src/Content/Conversation.php:307
msgid "Visible to <strong>everybody</strong>"
msgstr "Für <strong>jedermann</strong> sichtbar"
#: src/Content/Conversation.php:308 src/Module/Item/Compose.php:159
#: src/Object/Post.php:973
msgid "Please enter a image/video/audio/webpage URL:"
msgstr "Bitte gib eine Bild/Video/Audio/Webseiten-URL ein:"
#: src/Content/Conversation.php:309
msgid "Tag term:"
msgstr "Tag:"
#: src/Content/Conversation.php:310 src/Module/Filer/SaveTag.php:68
msgid "Save to Folder:"
msgstr "In diesem Ordner speichern:"
#: src/Content/Conversation.php:311
msgid "Where are you right now?"
msgstr "Wo hältst du dich jetzt gerade auf?"
#: src/Content/Conversation.php:312
msgid "Delete item(s)?"
msgstr "Einträge löschen?"
#: src/Content/Conversation.php:322
msgid "New Post"
msgstr "Neuer Beitrag"
#: src/Content/Conversation.php:325
msgid "Share"
msgstr "Teilen"
#: src/Content/Conversation.php:331 src/Module/Item/Compose.php:151
#: src/Object/Post.php:965
msgid "Bold"
msgstr "Fett"
#: src/Content/Conversation.php:332 src/Module/Item/Compose.php:152
#: src/Object/Post.php:966
msgid "Italic"
msgstr "Kursiv"
#: src/Content/Conversation.php:333 src/Module/Item/Compose.php:153
#: src/Object/Post.php:967
msgid "Underline"
msgstr "Unterstrichen"
#: src/Content/Conversation.php:334 src/Module/Item/Compose.php:154
#: src/Object/Post.php:968
msgid "Quote"
msgstr "Zitat"
#: src/Content/Conversation.php:335 src/Module/Item/Compose.php:155
#: src/Object/Post.php:969
msgid "Code"
msgstr "Code"
#: src/Content/Conversation.php:336 src/Module/Item/Compose.php:156
#: src/Object/Post.php:970
msgid "Image"
msgstr "Bild"
#: src/Content/Conversation.php:337 src/Module/Item/Compose.php:157
#: src/Object/Post.php:971
msgid "Link"
msgstr "Link"
#: src/Content/Conversation.php:338 src/Module/Item/Compose.php:158
#: src/Object/Post.php:972
msgid "Link or Media"
msgstr "Link oder Mediendatei"
#: src/Content/Conversation.php:339
msgid "Video"
msgstr "Video"
#: src/Content/Conversation.php:352 src/Module/Item/Compose.php:172
msgid "Scheduled at"
msgstr "Geplant für"
#: src/Content/Conversation.php:651 src/Object/Post.php:454
#: src/Object/Post.php:455
#, php-format
msgid "View %s's profile @ %s"
msgstr "Das Profil von %s auf %s betrachten."
#: src/Content/Conversation.php:664 src/Object/Post.php:442
msgid "Categories:"
msgstr "Kategorien:"
#: src/Content/Conversation.php:665 src/Object/Post.php:443
msgid "Filed under:"
msgstr "Abgelegt unter:"
#: src/Content/Conversation.php:672 src/Object/Post.php:468
#, php-format
msgid "%s from %s"
msgstr "%s von %s"
#: src/Content/Conversation.php:687
msgid "View in context"
msgstr "Im Zusammenhang betrachten"
#: src/Content/Conversation.php:752
msgid "remove"
msgstr "löschen"
#: src/Content/Conversation.php:756
msgid "Delete Selected Items"
msgstr "Lösche die markierten Beiträge"
#: src/Content/Conversation.php:820 src/Content/Conversation.php:823
#: src/Content/Conversation.php:826 src/Content/Conversation.php:829
#, php-format
msgid "You had been addressed (%s)."
msgstr "Du wurdest angeschrieben (%s)."
#: src/Content/Conversation.php:832
#, php-format
msgid "You are following %s."
msgstr "Du folgst %s."
#: src/Content/Conversation.php:835
msgid "Tagged"
msgstr "Verschlagwortet"
#: src/Content/Conversation.php:850
msgid "Reshared"
msgstr "Geteilt"
#: src/Content/Conversation.php:850
#, php-format
msgid "Reshared by %s <%s>"
msgstr "Geteilt von %s <%s>"
#: src/Content/Conversation.php:853
#, php-format
msgid "%s is participating in this thread."
msgstr "%s ist an der Unterhaltung beteiligt."
#: src/Content/Conversation.php:856
msgid "Stored"
msgstr "Gespeichert"
#: src/Content/Conversation.php:859
msgid "Global"
msgstr "Global"
#: src/Content/Conversation.php:862
msgid "Relayed"
msgstr "Übermittelt"
#: src/Content/Conversation.php:862
#, php-format
msgid "Relayed by %s <%s>"
msgstr "Weitergeleitet von %s <%s>"
#: src/Content/Conversation.php:865
msgid "Fetched"
msgstr "Abgerufen"
#: src/Content/Conversation.php:865
#, php-format
msgid "Fetched because of %s <%s>"
msgstr "Wegen %s <%s> abgerufen"
#: src/Content/Feature.php:96
msgid "General Features"
msgstr "Allgemeine Features"
@ -3097,6 +3034,70 @@ msgstr "weniger anzeigen"
msgid "show more"
msgstr "mehr anzeigen"
#: src/Content/Item.php:305
#, php-format
msgid "%1$s poked %2$s"
msgstr "%1$s stupste %2$s"
#: src/Content/Item.php:338 src/Model/Item.php:2622
msgid "event"
msgstr "Veranstaltung"
#: src/Content/Item.php:442 view/theme/frio/theme.php:323
msgid "Follow Thread"
msgstr "Folge der Unterhaltung"
#: src/Content/Item.php:443 src/Model/Contact.php:1056
msgid "View Status"
msgstr "Status anschauen"
#: src/Content/Item.php:444 src/Content/Item.php:466 src/Model/Contact.php:982
#: src/Model/Contact.php:1048 src/Model/Contact.php:1057
#: src/Module/Directory.php:160 src/Module/Settings/Profile/Index.php:223
msgid "View Profile"
msgstr "Profil anschauen"
#: src/Content/Item.php:445 src/Model/Contact.php:1058
msgid "View Photos"
msgstr "Bilder anschauen"
#: src/Content/Item.php:446 src/Model/Contact.php:1049
#: src/Model/Contact.php:1059
msgid "Network Posts"
msgstr "Netzwerkbeiträge"
#: src/Content/Item.php:447 src/Model/Contact.php:1050
#: src/Model/Contact.php:1060
msgid "View Contact"
msgstr "Kontakt anzeigen"
#: src/Content/Item.php:448 src/Model/Contact.php:1062
msgid "Send PM"
msgstr "Private Nachricht senden"
#: src/Content/Item.php:449 src/Module/Admin/Blocklist/Contact.php:84
#: src/Module/Admin/Users/Active.php:140 src/Module/Admin/Users/Index.php:154
#: src/Module/Contact.php:602 src/Module/Contact.php:863
#: src/Module/Contact.php:1133
msgid "Block"
msgstr "Sperren"
#: src/Content/Item.php:450 src/Module/Contact.php:603
#: src/Module/Contact.php:864 src/Module/Contact.php:1141
#: src/Module/Notifications/Introductions.php:113
#: src/Module/Notifications/Introductions.php:185
#: src/Module/Notifications/Notification.php:59
msgid "Ignore"
msgstr "Ignorieren"
#: src/Content/Item.php:454 src/Object/Post.php:429
msgid "Languages"
msgstr "Sprachen"
#: src/Content/Item.php:458 src/Model/Contact.php:1063
msgid "Poke"
msgstr "Anstupsen"
#: src/Content/Nav.php:90
msgid "Nothing new here"
msgstr "Keine Neuigkeiten"
@ -3121,7 +3122,7 @@ msgstr "Abmelden"
msgid "End this session"
msgstr "Diese Sitzung beenden"
#: src/Content/Nav.php:185 src/Module/Bookmarklet.php:45
#: src/Content/Nav.php:185 src/Module/Bookmarklet.php:44
#: src/Module/Security/Login.php:146
msgid "Login"
msgstr "Anmeldung"
@ -3131,7 +3132,7 @@ msgid "Sign in"
msgstr "Anmelden"
#: src/Content/Nav.php:190 src/Module/BaseProfile.php:56
#: src/Module/Contact.php:619 src/Module/Contact.php:883
#: src/Module/Contact.php:634 src/Module/Contact.php:899
#: src/Module/Settings/TwoFactor/Index.php:112 view/theme/frio/theme.php:226
msgid "Status"
msgstr "Status"
@ -3142,8 +3143,8 @@ msgid "Your posts and conversations"
msgstr "Deine Beiträge und Unterhaltungen"
#: src/Content/Nav.php:191 src/Module/BaseProfile.php:48
#: src/Module/BaseSettings.php:57 src/Module/Contact.php:621
#: src/Module/Contact.php:899 src/Module/Profile/Profile.php:241
#: src/Module/BaseSettings.php:57 src/Module/Contact.php:636
#: src/Module/Contact.php:915 src/Module/Profile/Profile.php:241
#: src/Module/Welcome.php:57 view/theme/frio/theme.php:227
msgid "Profile"
msgstr "Profil"
@ -3180,7 +3181,7 @@ msgstr "Deine persönlichen Notizen"
msgid "Home"
msgstr "Pinnwand"
#: src/Content/Nav.php:216 src/Module/Register.php:155
#: src/Content/Nav.php:216 src/Module/Register.php:157
#: src/Module/Security/Login.php:106
msgid "Register"
msgstr "Registrieren"
@ -3210,7 +3211,7 @@ msgid "Addon applications, utilities, games"
msgstr "Zusätzliche Anwendungen, Dienstprogramme, Spiele"
#: src/Content/Nav.php:230 src/Content/Text/HTML.php:891
#: src/Module/Search/Index.php:99
#: src/Module/Admin/Logs/View.php:87 src/Module/Search/Index.php:99
msgid "Search"
msgstr "Suche"
@ -3229,8 +3230,8 @@ msgstr "Tags"
#: src/Content/Nav.php:235 src/Content/Nav.php:294
#: src/Content/Text/HTML.php:902 src/Module/BaseProfile.php:126
#: src/Module/BaseProfile.php:129 src/Module/Contact.php:819
#: src/Module/Contact.php:906 view/theme/frio/theme.php:237
#: src/Module/BaseProfile.php:129 src/Module/Contact.php:834
#: src/Module/Contact.php:922 view/theme/frio/theme.php:237
msgid "Contacts"
msgstr "Kontakte"
@ -3264,7 +3265,7 @@ msgid "Information about this friendica instance"
msgstr "Informationen zu dieser Friendica-Instanz"
#: src/Content/Nav.php:266 src/Module/Admin/Tos.php:59
#: src/Module/BaseAdmin.php:96 src/Module/Register.php:163
#: src/Module/BaseAdmin.php:96 src/Module/Register.php:165
#: src/Module/Tos.php:84
msgid "Terms of Service"
msgstr "Nutzungsbedingungen"
@ -3376,38 +3377,38 @@ msgstr "nächste"
msgid "last"
msgstr "letzte"
#: src/Content/Text/BBCode.php:980 src/Content/Text/BBCode.php:1768
#: src/Content/Text/BBCode.php:1769
#: src/Content/Text/BBCode.php:987 src/Content/Text/BBCode.php:1775
#: src/Content/Text/BBCode.php:1776
msgid "Image/photo"
msgstr "Bild/Foto"
#: src/Content/Text/BBCode.php:1153
#: src/Content/Text/BBCode.php:1160
#, php-format
msgid "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
msgstr "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a>%3$s"
#: src/Content/Text/BBCode.php:1178 src/Model/Item.php:3139
#: src/Model/Item.php:3145 src/Model/Item.php:3146
#: src/Content/Text/BBCode.php:1185 src/Model/Item.php:3152
#: src/Model/Item.php:3158 src/Model/Item.php:3159
msgid "Link to source"
msgstr "Link zum Originalbeitrag"
#: src/Content/Text/BBCode.php:1686 src/Content/Text/HTML.php:943
#: src/Content/Text/BBCode.php:1693 src/Content/Text/HTML.php:943
msgid "Click to open/close"
msgstr "Zum Öffnen/Schließen klicken"
#: src/Content/Text/BBCode.php:1717
#: src/Content/Text/BBCode.php:1724
msgid "$1 wrote:"
msgstr "$1 hat geschrieben:"
#: src/Content/Text/BBCode.php:1773 src/Content/Text/BBCode.php:1774
#: src/Content/Text/BBCode.php:1780 src/Content/Text/BBCode.php:1781
msgid "Encrypted content"
msgstr "Verschlüsselter Inhalt"
#: src/Content/Text/BBCode.php:1990
#: src/Content/Text/BBCode.php:1997
msgid "Invalid source protocol"
msgstr "Ungültiges Quell-Protokoll"
#: src/Content/Text/BBCode.php:2005
#: src/Content/Text/BBCode.php:2012
msgid "Invalid link protocol"
msgstr "Ungültiges Link-Protokoll"
@ -3459,7 +3460,7 @@ msgstr "Name oder Interessen eingeben"
msgid "Examples: Robert Morgenstein, Fishing"
msgstr "Beispiel: Robert Morgenstein, Angeln"
#: src/Content/Widget.php:78 src/Module/Contact.php:840
#: src/Content/Widget.php:78 src/Module/Contact.php:855
#: src/Module/Directory.php:99 view/theme/vier/theme.php:174
msgid "Find"
msgstr "Finde"
@ -3486,7 +3487,7 @@ msgid "Local Directory"
msgstr "Lokales Verzeichnis"
#: src/Content/Widget.php:214 src/Model/Group.php:535
#: src/Module/Contact.php:803 src/Module/Welcome.php:76
#: src/Module/Contact.php:818 src/Module/Welcome.php:76
msgid "Groups"
msgstr "Gruppen"
@ -3498,7 +3499,7 @@ msgstr "Jeder"
msgid "Relationships"
msgstr "Beziehungen"
#: src/Content/Widget.php:247 src/Module/Contact.php:755
#: src/Content/Widget.php:247 src/Module/Contact.php:770
#: src/Module/Group.php:292
msgid "All Contacts"
msgstr "Alle Kontakte"
@ -3542,7 +3543,7 @@ msgstr "Personen"
msgid "Organisations"
msgstr "Organisationen"
#: src/Content/Widget.php:529 src/Model/Contact.php:1474
#: src/Content/Widget.php:529 src/Model/Contact.php:1480
msgid "News"
msgstr "Nachrichten"
@ -3562,18 +3563,18 @@ msgstr "Kalender als ical exportieren"
msgid "Export calendar as csv"
msgstr "Kalender als csv exportieren"
#: src/Content/Widget/ContactBlock.php:73
#: src/Content/Widget/ContactBlock.php:79
msgid "No contacts"
msgstr "Keine Kontakte"
#: src/Content/Widget/ContactBlock.php:105
#: src/Content/Widget/ContactBlock.php:108
#, php-format
msgid "%d Contact"
msgid_plural "%d Contacts"
msgstr[0] "%d Kontakt"
msgstr[1] "%d Kontakte"
#: src/Content/Widget/ContactBlock.php:124
#: src/Content/Widget/ContactBlock.php:125
msgid "View Contacts"
msgstr "Kontakte anzeigen"
@ -3597,12 +3598,12 @@ msgid "More Trending Tags"
msgstr "mehr Trending Tags"
#: src/Content/Widget/VCard.php:96 src/Model/Profile.php:372
#: src/Module/Contact.php:610 src/Module/Profile/Profile.php:176
#: src/Module/Contact.php:625 src/Module/Profile/Profile.php:176
msgid "XMPP:"
msgstr "XMPP:"
#: src/Content/Widget/VCard.php:97 src/Model/Profile.php:373
#: src/Module/Contact.php:612 src/Module/Profile/Profile.php:180
#: src/Module/Contact.php:627 src/Module/Profile/Profile.php:180
msgid "Matrix:"
msgstr "Matrix:"
@ -4320,7 +4321,7 @@ msgstr "Es läuft bereits ein anderes Datenbank Update"
msgid "%s: Database update"
msgstr "%s: Datenbank Aktualisierung"
#: src/Database/DBStructure.php:853
#: src/Database/DBStructure.php:803
#, php-format
msgid "%s: updating %s table."
msgstr "%s: aktualisiere Tabelle %s"
@ -4406,85 +4407,85 @@ msgstr "%s ist jetzt mit %s befreundet"
msgid "Legacy module file not found: %s"
msgstr "Legacy-Moduldatei nicht gefunden: %s"
#: src/Model/Contact.php:1046 src/Model/Contact.php:1059
#: src/Model/Contact.php:1052 src/Model/Contact.php:1065
msgid "UnFollow"
msgstr "Entfolgen"
#: src/Model/Contact.php:1055
#: src/Model/Contact.php:1061
msgid "Drop Contact"
msgstr "Kontakt löschen"
#: src/Model/Contact.php:1065 src/Module/Admin/Users/Pending.php:107
#: src/Model/Contact.php:1071 src/Module/Admin/Users/Pending.php:107
#: src/Module/Notifications/Introductions.php:111
#: src/Module/Notifications/Introductions.php:183
msgid "Approve"
msgstr "Genehmigen"
#: src/Model/Contact.php:1470
#: src/Model/Contact.php:1476
msgid "Organisation"
msgstr "Organisation"
#: src/Model/Contact.php:1478
#: src/Model/Contact.php:1484
msgid "Forum"
msgstr "Forum"
#: src/Model/Contact.php:2334
#: src/Model/Contact.php:2340
msgid "Disallowed profile URL."
msgstr "Nicht erlaubte Profil-URL."
#: src/Model/Contact.php:2339 src/Module/Friendica.php:81
#: src/Model/Contact.php:2345 src/Module/Friendica.php:81
msgid "Blocked domain"
msgstr "Blockierte Domain"
#: src/Model/Contact.php:2344
#: src/Model/Contact.php:2350
msgid "Connect URL missing."
msgstr "Connect-URL fehlt"
#: src/Model/Contact.php:2353
#: src/Model/Contact.php:2359
msgid ""
"The contact could not be added. Please check the relevant network "
"credentials in your Settings -> Social Networks page."
msgstr "Der Kontakt konnte nicht hinzugefügt werden. Bitte überprüfe die Einstellungen unter Einstellungen -> Soziale Netzwerke"
#: src/Model/Contact.php:2390
#: src/Model/Contact.php:2396
msgid "The profile address specified does not provide adequate information."
msgstr "Die angegebene Profiladresse liefert unzureichende Informationen."
#: src/Model/Contact.php:2392
#: src/Model/Contact.php:2398
msgid "No compatible communication protocols or feeds were discovered."
msgstr "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden."
#: src/Model/Contact.php:2395
#: src/Model/Contact.php:2401
msgid "An author or name was not found."
msgstr "Es wurde kein Autor oder Name gefunden."
#: src/Model/Contact.php:2398
#: src/Model/Contact.php:2404
msgid "No browser URL could be matched to this address."
msgstr "Zu dieser Adresse konnte keine passende Browser-URL gefunden werden."
#: src/Model/Contact.php:2401
#: src/Model/Contact.php:2407
msgid ""
"Unable to match @-style Identity Address with a known protocol or email "
"contact."
msgstr "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen."
#: src/Model/Contact.php:2402
#: src/Model/Contact.php:2408
msgid "Use mailto: in front of address to force email check."
msgstr "Verwende mailto: vor der E-Mail-Adresse, um eine Überprüfung der E-Mail-Adresse zu erzwingen."
#: src/Model/Contact.php:2408
#: src/Model/Contact.php:2414
msgid ""
"The profile address specified belongs to a network which has been disabled "
"on this site."
msgstr "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde."
#: src/Model/Contact.php:2413
#: src/Model/Contact.php:2419
msgid ""
"Limited profile. This person will be unable to receive direct/personal "
"notifications from you."
msgstr "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von dir erhalten können."
#: src/Model/Contact.php:2472
#: src/Model/Contact.php:2478
msgid "Unable to retrieve contact information."
msgstr "Konnte die Kontaktinformationen nicht empfangen."
@ -4601,37 +4602,37 @@ msgstr "Gruppenname:"
msgid "Edit groups"
msgstr "Gruppen bearbeiten"
#: src/Model/Item.php:1663
#: src/Model/Item.php:1676
#, php-format
msgid "Detected languages in this post:\\n%s"
msgstr "Erkannte Sprachen in diesem Beitrag:\\n%s"
#: src/Model/Item.php:2613
#: src/Model/Item.php:2626
msgid "activity"
msgstr "Aktivität"
#: src/Model/Item.php:2615
#: src/Model/Item.php:2628
msgid "comment"
msgstr "Kommentar"
#: src/Model/Item.php:2618
#: src/Model/Item.php:2631
msgid "post"
msgstr "Beitrag"
#: src/Model/Item.php:2755
#: src/Model/Item.php:2768
#, php-format
msgid "Content warning: %s"
msgstr "Inhaltswarnung: %s"
#: src/Model/Item.php:3104
#: src/Model/Item.php:3117
msgid "bytes"
msgstr "Byte"
#: src/Model/Item.php:3133 src/Model/Item.php:3134
#: src/Model/Item.php:3146 src/Model/Item.php:3147
msgid "View on separate page"
msgstr "Auf separater Seite ansehen"
#: src/Model/Mail.php:136 src/Model/Mail.php:268
#: src/Model/Mail.php:134 src/Model/Mail.php:266
msgid "[no subject]"
msgstr "[kein Betreff]"
@ -4754,7 +4755,7 @@ msgstr "Profilbild ändern"
msgid "Homepage:"
msgstr "Homepage:"
#: src/Model/Profile.php:371 src/Module/Contact.php:614
#: src/Model/Profile.php:371 src/Module/Contact.php:629
#: src/Module/Notifications/Introductions.php:168
msgid "About:"
msgstr "Über:"
@ -4814,7 +4815,7 @@ msgstr "Verzeichnis, in das Dateien hochgeladen werden. Für maximale Sicherheit
msgid "Enter a valid existing folder"
msgstr "Gib einen gültigen, existierenden Ordner ein"
#: src/Model/User.php:208 src/Model/User.php:1004
#: src/Model/User.php:208 src/Model/User.php:1055
msgid "SERIOUS ERROR: Generation of security keys failed."
msgstr "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden."
@ -4845,107 +4846,107 @@ msgid ""
"The password can't contain accentuated letters, white spaces or colons (:)"
msgstr "Das Passwort darf keine akzentuierten Buchstaben, Leerzeichen oder Doppelpunkte (:) beinhalten"
#: src/Model/User.php:884
#: src/Model/User.php:935
msgid "Passwords do not match. Password unchanged."
msgstr "Die Passwörter stimmen nicht überein. Das Passwort bleibt unverändert."
#: src/Model/User.php:891
#: src/Model/User.php:942
msgid "An invitation is required."
msgstr "Du benötigst eine Einladung."
#: src/Model/User.php:895
#: src/Model/User.php:946
msgid "Invitation could not be verified."
msgstr "Die Einladung konnte nicht überprüft werden."
#: src/Model/User.php:903
#: src/Model/User.php:954
msgid "Invalid OpenID url"
msgstr "Ungültige OpenID URL"
#: src/Model/User.php:916 src/Security/Authentication.php:223
#: src/Model/User.php:967 src/Security/Authentication.php:223
msgid ""
"We encountered a problem while logging in with the OpenID you provided. "
"Please check the correct spelling of the ID."
msgstr "Beim Versuch, dich mit der von dir angegebenen OpenID anzumelden, trat ein Problem auf. Bitte überprüfe, dass du die OpenID richtig geschrieben hast."
#: src/Model/User.php:916 src/Security/Authentication.php:223
#: src/Model/User.php:967 src/Security/Authentication.php:223
msgid "The error message was:"
msgstr "Die Fehlermeldung lautete:"
#: src/Model/User.php:922
#: src/Model/User.php:973
msgid "Please enter the required information."
msgstr "Bitte trage die erforderlichen Informationen ein."
#: src/Model/User.php:936
#: src/Model/User.php:987
#, php-format
msgid ""
"system.username_min_length (%s) and system.username_max_length (%s) are "
"excluding each other, swapping values."
msgstr "system.username_min_length (%s) and system.username_max_length (%s) schließen sich gegenseitig aus, tausche Werte aus."
#: src/Model/User.php:943
#: src/Model/User.php:994
#, php-format
msgid "Username should be at least %s character."
msgid_plural "Username should be at least %s characters."
msgstr[0] "Der Benutzername sollte aus mindestens %s Zeichen bestehen."
msgstr[1] "Der Benutzername sollte aus mindestens %s Zeichen bestehen."
#: src/Model/User.php:947
#: src/Model/User.php:998
#, php-format
msgid "Username should be at most %s character."
msgid_plural "Username should be at most %s characters."
msgstr[0] "Der Benutzername sollte aus maximal %s Zeichen bestehen."
msgstr[1] "Der Benutzername sollte aus maximal %s Zeichen bestehen."
#: src/Model/User.php:955
#: src/Model/User.php:1006
msgid "That doesn't appear to be your full (First Last) name."
msgstr "Das scheint nicht dein kompletter Name (Vor- und Nachname) zu sein."
#: src/Model/User.php:960
#: src/Model/User.php:1011
msgid "Your email domain is not among those allowed on this site."
msgstr "Die Domain Deiner E-Mail-Adresse ist auf dieser Seite nicht erlaubt."
#: src/Model/User.php:964
#: src/Model/User.php:1015
msgid "Not a valid email address."
msgstr "Keine gültige E-Mail-Adresse."
#: src/Model/User.php:967
#: src/Model/User.php:1018
msgid "The nickname was blocked from registration by the nodes admin."
msgstr "Der Admin des Knotens hat den Spitznamen für die Registrierung gesperrt."
#: src/Model/User.php:971 src/Model/User.php:979
#: src/Model/User.php:1022 src/Model/User.php:1030
msgid "Cannot use that email."
msgstr "Konnte diese E-Mail-Adresse nicht verwenden."
#: src/Model/User.php:986
#: src/Model/User.php:1037
msgid "Your nickname can only contain a-z, 0-9 and _."
msgstr "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\" und \"_\") bestehen."
#: src/Model/User.php:994 src/Model/User.php:1051
#: src/Model/User.php:1045 src/Model/User.php:1102
msgid "Nickname is already registered. Please choose another."
msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."
#: src/Model/User.php:1038 src/Model/User.php:1042
#: src/Model/User.php:1089 src/Model/User.php:1093
msgid "An error occurred during registration. Please try again."
msgstr "Während der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal."
#: src/Model/User.php:1065
#: src/Model/User.php:1116
msgid "An error occurred creating your default profile. Please try again."
msgstr "Bei der Erstellung des Standardprofils ist ein Fehler aufgetreten. Bitte versuche es noch einmal."
#: src/Model/User.php:1072
#: src/Model/User.php:1123
msgid "An error occurred creating your self contact. Please try again."
msgstr "Bei der Erstellung deines self-Kontakts ist ein Fehler aufgetreten. Bitte versuche es erneut."
#: src/Model/User.php:1077
#: src/Model/User.php:1128
msgid "Friends"
msgstr "Kontakte"
#: src/Model/User.php:1081
#: src/Model/User.php:1132
msgid ""
"An error occurred creating your default contact group. Please try again."
msgstr "Bei der Erstellung deiner Standardgruppe für Kontakte ist ein Fehler aufgetreten. Bitte versuche es erneut."
#: src/Model/User.php:1310
#: src/Model/User.php:1361
#, php-format
msgid ""
"\n"
@ -4953,7 +4954,7 @@ msgid ""
"\t\t\tthe administrator of %2$s has set up an account for you."
msgstr "\nHallo %1$s\nein Admin von %2$s hat dir ein Nutzerkonto angelegt."
#: src/Model/User.php:1313
#: src/Model/User.php:1364
#, php-format
msgid ""
"\n"
@ -4985,12 +4986,12 @@ msgid ""
"\t\tThank you and welcome to %4$s."
msgstr "\nNachfolgend die Anmeldedetails:\n\nAdresse der Seite: %1$s\nBenutzername: %2$s\nPasswort: %3$s\n\nDu kannst dein Passwort unter \"Einstellungen\" ändern, sobald du dich angemeldet hast.Bitte nimm dir ein paar Minuten, um die anderen Einstellungen auf dieser Seite zu kontrollieren.Eventuell magst du ja auch einige Informationen über dich in deinem Profil veröffentlichen, damit andere Leute dich einfacher finden können.Bearbeite hierfür einfach dein Standard-Profil (über die Profil-Seite).Wir empfehlen dir, deinen kompletten Namen anzugeben und ein zu dir passendes Profilbild zu wählen, damit dich alte Bekannte wiederfinden.Außerdem ist es nützlich, wenn du auf deinem Profil Schlüsselwörter angibst. Das erleichtert es, Leute zu finden, die deine Interessen teilen.Wir respektieren deine Privatsphäre - keine dieser Angaben ist nötig.Wenn du neu im Netzwerk bist und noch niemanden kennst, dann können sie allerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nDu kannst dein Nutzerkonto jederzeit unter %1$s/removeme wieder löschen.\n\nDanke und willkommen auf %4$s."
#: src/Model/User.php:1346 src/Model/User.php:1453
#: src/Model/User.php:1397 src/Model/User.php:1504
#, php-format
msgid "Registration details for %s"
msgstr "Details der Registration von %s"
#: src/Model/User.php:1366
#: src/Model/User.php:1417
#, php-format
msgid ""
"\n"
@ -5005,12 +5006,12 @@ msgid ""
"\t\t"
msgstr "\n\t\t\tHallo %1$s,\n\t\t\t\tdanke für deine Registrierung auf %2$s. Dein Account muss noch vom Admin des Knotens freigeschaltet werden.\n\n\t\t\tDeine Zugangsdaten lauten wie folgt:\n\n\t\t\tSeitenadresse:\t%3$s\n\t\t\tAnmeldename:\t\t%4$s\n\t\t\tPasswort:\t\t%5$s\n\t\t"
#: src/Model/User.php:1385
#: src/Model/User.php:1436
#, php-format
msgid "Registration at %s"
msgstr "Registrierung als %s"
#: src/Model/User.php:1409
#: src/Model/User.php:1460
#, php-format
msgid ""
"\n"
@ -5019,7 +5020,7 @@ msgid ""
"\t\t\t"
msgstr "\n\t\t\t\tHallo %1$s,\n\t\t\t\tDanke für die Registrierung auf %2$s. Dein Account wurde angelegt.\n\t\t\t"
#: src/Model/User.php:1417
#: src/Model/User.php:1468
#, php-format
msgid ""
"\n"
@ -5082,7 +5083,7 @@ msgstr "Einschalten"
#: src/Module/Admin/Federation.php:159 src/Module/Admin/Item/Delete.php:65
#: src/Module/Admin/Logs/Settings.php:80 src/Module/Admin/Logs/View.php:84
#: src/Module/Admin/Queue.php:72 src/Module/Admin/Site.php:497
#: src/Module/Admin/Storage.php:131 src/Module/Admin/Summary.php:232
#: src/Module/Admin/Storage.php:131 src/Module/Admin/Summary.php:233
#: src/Module/Admin/Themes/Details.php:90
#: src/Module/Admin/Themes/Index.php:111 src/Module/Admin/Tos.php:58
#: src/Module/Admin/Users/Active.php:136
@ -5146,8 +5147,8 @@ msgstr "Aktive"
msgid "List of active accounts"
msgstr "Liste der aktiven Benutzerkonten"
#: src/Module/Admin/BaseUsers.php:66 src/Module/Contact.php:763
#: src/Module/Contact.php:823
#: src/Module/Admin/BaseUsers.php:66 src/Module/Contact.php:778
#: src/Module/Contact.php:838
msgid "Pending"
msgstr "Ausstehend"
@ -5155,8 +5156,8 @@ msgstr "Ausstehend"
msgid "List of pending registrations"
msgstr "Liste der anstehenden Benutzerkonten"
#: src/Module/Admin/BaseUsers.php:74 src/Module/Contact.php:771
#: src/Module/Contact.php:824
#: src/Module/Admin/BaseUsers.php:74 src/Module/Contact.php:786
#: src/Module/Contact.php:839
msgid "Blocked"
msgstr "Geblockt"
@ -5214,8 +5215,8 @@ msgstr "Auswahl aufheben"
#: src/Module/Admin/Blocklist/Contact.php:85
#: src/Module/Admin/Users/Blocked.php:142 src/Module/Admin/Users/Index.php:156
#: src/Module/Contact.php:587 src/Module/Contact.php:847
#: src/Module/Contact.php:1115
#: src/Module/Contact.php:602 src/Module/Contact.php:863
#: src/Module/Contact.php:1133
msgid "Unblock"
msgstr "Entsperren"
@ -5518,7 +5519,7 @@ msgstr "Mention"
msgid "Implicit Mention"
msgstr "Implicit Mention"
#: src/Module/Admin/Item/Source.php:73
#: src/Module/Admin/Item/Source.php:73 src/Module/Admin/Logs/View.php:99
#: src/Module/Debug/ActivityPubConversion.php:62
msgid "Source"
msgstr "Quelle"
@ -5579,21 +5580,82 @@ msgstr "Um die Protokollierung von PHP-Fehlern und Warnungen vorübergehend zu a
#: src/Module/Admin/Logs/View.php:71
#, php-format
msgid ""
"Error trying to open <strong>%1$s</strong> log file.\\r\\n<br/>Check to see "
"if file %1$s exist and is readable."
msgstr "Fehler beim Öffnen der Logdatei <strong>%1$s</strong>.\\r\\n<br/>Bitte überprüfe ob die Datei %1$s existiert und gelesen werden kann."
"Error trying to open <strong>%1$s</strong> log file.<br/>Check to see if "
"file %1$s exist and is readable."
msgstr "Fehler beim Öffnen der Logdatei <strong>%1$s</strong>.<br/>Bitte überprüfe ob die Datei %1$s existiert und gelesen werden kann."
#: src/Module/Admin/Logs/View.php:80
#, php-format
msgid ""
"Couldn't open <strong>%1$s</strong> log file.\\r\\n<br/>Check to see if file"
" %1$s is readable."
msgstr "Konnte die Logdatei <strong>%1$s</strong> nicht öffnen.\\r\\n<br/>Bitte stelle sicher, dass die Datei %1$s lesbar ist."
"Couldn't open <strong>%1$s</strong> log file.<br/>Check to see if file %1$s "
"is readable."
msgstr "Konnte die Logdatei <strong>%1$s</strong> nicht öffnen.<br/>Bitte stelle sicher, dass die Datei %1$s lesbar ist."
#: src/Module/Admin/Logs/View.php:85 src/Module/BaseAdmin.php:110
msgid "View Logs"
msgstr "Protokolle anzeigen"
#: src/Module/Admin/Logs/View.php:88
msgid "Search in logs"
msgstr "Logs durchsuchen"
#: src/Module/Admin/Logs/View.php:89
#: src/Module/Notifications/Notifications.php:138
msgid "Show all"
msgstr "Alle anzeigen"
#: src/Module/Admin/Logs/View.php:90
msgid "Date"
msgstr "Datum"
#: src/Module/Admin/Logs/View.php:91
msgid "Level"
msgstr "Level"
#: src/Module/Admin/Logs/View.php:92
msgid "Context"
msgstr "Zusammenhang"
#: src/Module/Admin/Logs/View.php:94
msgid "ALL"
msgstr "ALLE"
#: src/Module/Admin/Logs/View.php:95
msgid "View details"
msgstr "Details anzeigen"
#: src/Module/Admin/Logs/View.php:96
msgid "Click to view details"
msgstr "Anklicken zum Anzeigen der Details"
#: src/Module/Admin/Logs/View.php:98
msgid "Data"
msgstr "Daten"
#: src/Module/Admin/Logs/View.php:100
msgid "File"
msgstr "Datei"
#: src/Module/Admin/Logs/View.php:101
msgid "Line"
msgstr "Zeile"
#: src/Module/Admin/Logs/View.php:102
msgid "Function"
msgstr "Funktion"
#: src/Module/Admin/Logs/View.php:103
msgid "UID"
msgstr "UID"
#: src/Module/Admin/Logs/View.php:104
msgid "Process ID"
msgstr "Prozess ID"
#: src/Module/Admin/Logs/View.php:105
msgid "Close"
msgstr "Schließen"
#: src/Module/Admin/Queue.php:50
msgid "Inspect Deferred Worker Queue"
msgstr "Verzögerte Worker-Warteschlange inspizieren"
@ -5731,7 +5793,7 @@ msgstr "Allgemeine Informationen"
msgid "Republish users to directory"
msgstr "Nutzer erneut im globalen Verzeichnis veröffentlichen."
#: src/Module/Admin/Site.php:502 src/Module/Register.php:139
#: src/Module/Admin/Site.php:502 src/Module/Register.php:141
msgid "Registration"
msgstr "Registrierung"
@ -6500,7 +6562,7 @@ msgid ""
"received."
msgstr "Der Wert kann entweder 'Alle' oder 'Schlagwörter' sein. 'Alle' bedeutet, dass alle öffentliche Beiträge empfangen werden sollen. 'Schlagwörter' schränkt dem Empfang auf Beiträge ein, die bestimmte Schlagwörter beinhalten."
#: src/Module/Admin/Site.php:609 src/Module/Contact.php:516
#: src/Module/Admin/Site.php:609 src/Module/Contact.php:531
#: src/Module/Settings/TwoFactor/Index.php:118
msgid "Disabled"
msgstr "Deaktiviert"
@ -6589,12 +6651,12 @@ msgstr "Dieses Backend hat keine zusätzlichen Einstellungen"
msgid "Database (legacy)"
msgstr "Datenbank (legacy)"
#: src/Module/Admin/Summary.php:53
#: src/Module/Admin/Summary.php:54
#, php-format
msgid "Template engine (%s) error: %s"
msgstr "Template engine (%s) Fehler: %s"
#: src/Module/Admin/Summary.php:57
#: src/Module/Admin/Summary.php:58
#, php-format
msgid ""
"Your DB still runs with MyISAM tables. You should change the engine type to "
@ -6605,7 +6667,7 @@ msgid ""
" an automatic conversion.<br />"
msgstr "Deine DB verwendet derzeit noch MyISAM Tabellen. Du solltest die Datenbank Engine auf InnoDB umstellen, da Friendica in Zukunft InnoDB-Features verwenden wird. Eine Anleitung zur Umstellung der Datenbank kannst du <a href=\"%s\">hier</a> finden. Du kannst außerdem mit dem Befehl <tt>php bin/console.php dbstructure toinnodb</tt> auf der Kommandozeile die Umstellung automatisch vornehmen lassen."
#: src/Module/Admin/Summary.php:62
#: src/Module/Admin/Summary.php:63
#, php-format
msgid ""
"Your DB still runs with InnoDB tables in the Antelope file format. You "
@ -6616,7 +6678,7 @@ msgid ""
" installation for an automatic conversion.<br />"
msgstr "Deine DB verwendet derzeit noch InnoDB Tabellen im Antelope Dateiformat. Du solltest diese auf das Barracuda Format ändern. Friendica verwendet einige Features, die nicht vom Antelope Format unterstützt werden. <a href=\"%s\">Hier</a> findest du eine Anleitung für die Umstellung. Alternativ kannst du auch den Befehl <tt>php bin/console.php dbstructure toinnodb</tt> In der Kommandozeile deiner Friendica Instanz verwenden um die Formate automatisch anzupassen.<br />"
#: src/Module/Admin/Summary.php:72
#: src/Module/Admin/Summary.php:73
#, php-format
msgid ""
"Your table_definition_cache is too low (%d). This can lead to the database "
@ -6624,39 +6686,39 @@ msgid ""
" to %d. See <a href=\"%s\">here</a> for more information.<br />"
msgstr "Der Wert table_definition_cache ist zu niedrig (%d). Dadurch können Datenbank Fehler \"Prepared statement needs to be re-prepared\" hervor gerufen werden. Bitte setze den Wert auf mindestens %d. Weiterführende Informationen <a href=\"%s\">findest du hier</a>."
#: src/Module/Admin/Summary.php:82
#: src/Module/Admin/Summary.php:83
#, php-format
msgid ""
"There is a new version of Friendica available for download. Your current "
"version is %1$s, upstream version is %2$s"
msgstr "Es gibt eine neue Version von Friendica. Du verwendest derzeit die Version %1$s, die aktuelle Version ist %2$s."
#: src/Module/Admin/Summary.php:91
#: src/Module/Admin/Summary.php:92
msgid ""
"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."
msgstr "Das Update der Datenbank ist fehlgeschlagen. Bitte führe 'php bin/console.php dbstructure update' in der Kommandozeile aus und achte auf eventuell auftretende Fehlermeldungen."
#: src/Module/Admin/Summary.php:95
#: src/Module/Admin/Summary.php:96
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 "Das letzte Update ist fehlgeschlagen. Bitte führe \"php bin/console.php dbstructure update\" auf der Kommandozeile aus und werfe einen Blick auf eventuell auftretende Fehler. (Zusätzliche Informationen zu Fehlern könnten in den Logdateien stehen.)"
#: src/Module/Admin/Summary.php:100
#: src/Module/Admin/Summary.php:101
msgid "The worker was never executed. Please check your database structure!"
msgstr "Der Hintergrundprozess (worker) wurde noch nie gestartet. Bitte überprüfe deine Datenbankstruktur."
#: src/Module/Admin/Summary.php:102
#: src/Module/Admin/Summary.php:103
#, php-format
msgid ""
"The last worker execution was on %s UTC. This is older than one hour. Please"
" check your crontab settings."
msgstr "Der Hintergrundprozess (worker) wurde zuletzt um %s UTC ausgeführt. Das war vor mehr als einer Stunde. Bitte überprüfe deine crontab-Einstellungen."
#: src/Module/Admin/Summary.php:107
#: src/Module/Admin/Summary.php:108
#, php-format
msgid ""
"Friendica's configuration now is stored in config/local.config.php, please "
@ -6665,7 +6727,7 @@ msgid ""
"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 <code>.htconfig.php</code>. Wie die Übertragung der Werte aussehen muss, kannst du der <a href=\"%s\">Konfiguration Hilfeseite</a> entnehmen."
#: src/Module/Admin/Summary.php:111
#: src/Module/Admin/Summary.php:112
#, php-format
msgid ""
"Friendica's configuration now is stored in config/local.config.php, please "
@ -6674,7 +6736,7 @@ msgid ""
"page</a> 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 <code>config/local.ini.php</code>. Wie die Übertragung der Werte aussehen muss, kannst du der <a href=\"%s\">Konfiguration Hilfeseite</a> entnehmen."
#: src/Module/Admin/Summary.php:117
#: src/Module/Admin/Summary.php:118
#, php-format
msgid ""
"<a href=\"%s\">%s</a> is not reachable on your system. This is a severe "
@ -6682,87 +6744,87 @@ msgid ""
"href=\"%s\">the installation page</a> for help."
msgstr "<a href=\"%s\">%s</a> konnte von deinem System nicht aufgerufen werden. Dies deutet auf ein schwerwiegendes Problem deiner Konfiguration hin. Bitte konsultiere <a href=\"%s\">die Installations-Dokumentation</a> zum Beheben des Problems."
#: src/Module/Admin/Summary.php:135
#: src/Module/Admin/Summary.php:136
#, php-format
msgid "The logfile '%s' is not usable. No logging possible (error: '%s')"
msgstr "Die Logdatei '%s' ist nicht beschreibbar. Derzeit ist keine Aufzeichnung möglich (Fehler: '%s')"
#: src/Module/Admin/Summary.php:149
#: src/Module/Admin/Summary.php:150
#, php-format
msgid ""
"The debug logfile '%s' is not usable. No logging possible (error: '%s')"
msgstr "Die Logdatei '%s' ist nicht beschreibbar. Derzeit ist keine Aufzeichnung möglich (Fehler: '%s')"
#: src/Module/Admin/Summary.php:165
#: src/Module/Admin/Summary.php:166
#, 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 wurde aktualisiert '%s' von '%s'. Bitte entferne system.basepath aus der Datenbank um Unterschiede zu vermeiden."
#: src/Module/Admin/Summary.php:173
#: src/Module/Admin/Summary.php:174
#, 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:181
#: src/Module/Admin/Summary.php:182
#, 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 korrigiere deine Konfiguration."
#: src/Module/Admin/Summary.php:188
#: src/Module/Admin/Summary.php:189
msgid "Normal Account"
msgstr "Normales Konto"
#: src/Module/Admin/Summary.php:189
#: src/Module/Admin/Summary.php:190
msgid "Automatic Follower Account"
msgstr "Automatisch folgendes Konto (Marktschreier)"
#: src/Module/Admin/Summary.php:190
#: src/Module/Admin/Summary.php:191
msgid "Public Forum Account"
msgstr "Öffentliches Forum-Konto"
#: src/Module/Admin/Summary.php:191
#: src/Module/Admin/Summary.php:192
msgid "Automatic Friend Account"
msgstr "Automatische Freunde-Seite"
#: src/Module/Admin/Summary.php:192
#: src/Module/Admin/Summary.php:193
msgid "Blog Account"
msgstr "Blog-Konto"
#: src/Module/Admin/Summary.php:193
#: src/Module/Admin/Summary.php:194
msgid "Private Forum Account"
msgstr "Privates Forum-Konto"
#: src/Module/Admin/Summary.php:213
#: src/Module/Admin/Summary.php:214
msgid "Message queues"
msgstr "Nachrichten-Warteschlangen"
#: src/Module/Admin/Summary.php:219
#: src/Module/Admin/Summary.php:220
msgid "Server Settings"
msgstr "Servereinstellungen"
#: src/Module/Admin/Summary.php:233 src/Repository/ProfileField.php:285
#: src/Module/Admin/Summary.php:234 src/Repository/ProfileField.php:285
msgid "Summary"
msgstr "Zusammenfassung"
#: src/Module/Admin/Summary.php:235
#: src/Module/Admin/Summary.php:236
msgid "Registered users"
msgstr "Registrierte Personen"
#: src/Module/Admin/Summary.php:237
#: src/Module/Admin/Summary.php:238
msgid "Pending registrations"
msgstr "Anstehende Anmeldungen"
#: src/Module/Admin/Summary.php:238
#: src/Module/Admin/Summary.php:239
msgid "Version"
msgstr "Version"
#: src/Module/Admin/Summary.php:242
#: src/Module/Admin/Summary.php:243
msgid "Active addons"
msgstr "Aktivierte Addons"
@ -7075,8 +7137,8 @@ msgstr "Nur die ersten Beiträge einer Unterhaltung können wieder auf laut gest
msgid "Posts from %s can't be unshared"
msgstr "Beiträge von %s können nicht ungeteilt werden"
#: src/Module/Api/Twitter/ContactEndpoint.php:63 src/Module/Contact.php:361
#: src/Module/Contact.php:366
#: src/Module/Api/Twitter/ContactEndpoint.php:63 src/Module/Contact.php:371
#: src/Module/Contact.php:386
msgid "Contact not found"
msgstr "Kontakt nicht gefunden"
@ -7197,7 +7259,7 @@ msgstr "The API endpoint is currently not implemented but might be in the future
msgid "Too Many Requests"
msgstr "Zu viele Abfragen"
#: src/Module/BaseProfile.php:51 src/Module/Contact.php:902
#: src/Module/BaseProfile.php:51 src/Module/Contact.php:918
msgid "Profile Details"
msgstr "Profildetails"
@ -7256,373 +7318,373 @@ msgstr "Persönliche Daten exportieren"
msgid "Remove account"
msgstr "Konto löschen"
#: src/Module/Bookmarklet.php:55
#: src/Module/Bookmarklet.php:54
msgid "This page is missing a url parameter."
msgstr "Der Seite fehlt ein URL Parameter."
#: src/Module/Bookmarklet.php:67
#: src/Module/Bookmarklet.php:66
msgid "The post was created"
msgstr "Der Beitrag wurde angelegt"
#: src/Module/Contact.php:93
#: src/Module/Contact.php:97
#, php-format
msgid "%d contact edited."
msgid_plural "%d contacts edited."
msgstr[0] "%d Kontakt bearbeitet."
msgstr[1] "%d Kontakte bearbeitet."
#: src/Module/Contact.php:118
#: src/Module/Contact.php:122
msgid "Could not access contact record."
msgstr "Konnte nicht auf die Kontaktdaten zugreifen."
#: src/Module/Contact.php:154
#: src/Module/Contact.php:158
msgid "Failed to update contact record."
msgstr "Aktualisierung der Kontaktdaten fehlgeschlagen."
#: src/Module/Contact.php:383
#: src/Module/Contact.php:403
msgid "You can't block yourself"
msgstr "Du kannst dich nicht selbst blockieren"
#: src/Module/Contact.php:389
#: src/Module/Contact.php:409
msgid "Contact has been blocked"
msgstr "Kontakt wurde blockiert"
#: src/Module/Contact.php:389
#: src/Module/Contact.php:409
msgid "Contact has been unblocked"
msgstr "Kontakt wurde wieder freigegeben"
#: src/Module/Contact.php:397
#: src/Module/Contact.php:417
msgid "You can't ignore yourself"
msgstr "Du kannst dich nicht selbst ignorieren"
#: src/Module/Contact.php:403
#: src/Module/Contact.php:423
msgid "Contact has been ignored"
msgstr "Kontakt wurde ignoriert"
#: src/Module/Contact.php:403
#: src/Module/Contact.php:423
msgid "Contact has been unignored"
msgstr "Kontakt wird nicht mehr ignoriert"
#: src/Module/Contact.php:415
#: src/Module/Contact.php:435
msgid "Drop contact"
msgstr "Kontakt löschen"
#: src/Module/Contact.php:418 src/Module/Contact.php:843
#: src/Module/Contact.php:438 src/Module/Contact.php:859
msgid "Do you really want to delete this contact?"
msgstr "Möchtest Du wirklich diesen Kontakt löschen?"
#: src/Module/Contact.php:419 src/Module/Notifications/Introductions.php:123
#: src/Module/OAuth/Acknowledge.php:47 src/Module/Register.php:115
#: src/Module/Contact.php:439 src/Module/Notifications/Introductions.php:123
#: src/Module/OAuth/Acknowledge.php:47 src/Module/Register.php:117
msgid "Yes"
msgstr "Ja"
#: src/Module/Contact.php:431
#: src/Module/Contact.php:452
msgid "Contact has been removed."
msgstr "Kontakt wurde entfernt."
#: src/Module/Contact.php:458
#: src/Module/Contact.php:473
#, php-format
msgid "You are mutual friends with %s"
msgstr "Du hast mit %s eine beidseitige Freundschaft"
#: src/Module/Contact.php:462
#: src/Module/Contact.php:477
#, php-format
msgid "You are sharing with %s"
msgstr "Du teilst mit %s"
#: src/Module/Contact.php:466
#: src/Module/Contact.php:481
#, php-format
msgid "%s is sharing with you"
msgstr "%s teilt mit dir"
#: src/Module/Contact.php:490
#: src/Module/Contact.php:505
msgid "Private communications are not available for this contact."
msgstr "Private Kommunikation ist für diesen Kontakt nicht verfügbar."
#: src/Module/Contact.php:492
#: src/Module/Contact.php:507
msgid "Never"
msgstr "Niemals"
#: src/Module/Contact.php:495
#: src/Module/Contact.php:510
msgid "(Update was not successful)"
msgstr "(Aktualisierung war nicht erfolgreich)"
#: src/Module/Contact.php:495
#: src/Module/Contact.php:510
msgid "(Update was successful)"
msgstr "(Aktualisierung war erfolgreich)"
#: src/Module/Contact.php:497 src/Module/Contact.php:1086
#: src/Module/Contact.php:512 src/Module/Contact.php:1104
msgid "Suggest friends"
msgstr "Kontakte vorschlagen"
#: src/Module/Contact.php:501
#: src/Module/Contact.php:516
#, php-format
msgid "Network type: %s"
msgstr "Netzwerktyp: %s"
#: src/Module/Contact.php:506
#: src/Module/Contact.php:521
msgid "Communications lost with this contact!"
msgstr "Verbindungen mit diesem Kontakt verloren!"
#: src/Module/Contact.php:512
#: src/Module/Contact.php:527
msgid "Fetch further information for feeds"
msgstr "Weitere Informationen zu Feeds holen"
#: src/Module/Contact.php:514
#: src/Module/Contact.php:529
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:517
#: src/Module/Contact.php:532
msgid "Fetch information"
msgstr "Beziehe Information"
#: src/Module/Contact.php:518
#: src/Module/Contact.php:533
msgid "Fetch keywords"
msgstr "Schlüsselwörter abrufen"
#: src/Module/Contact.php:519
#: src/Module/Contact.php:534
msgid "Fetch information and keywords"
msgstr "Beziehe Information und Schlüsselworte"
#: src/Module/Contact.php:531 src/Module/Contact.php:535
#: src/Module/Contact.php:538 src/Module/Contact.php:542
#: src/Module/Contact.php:546 src/Module/Contact.php:550
#: src/Module/Contact.php:553 src/Module/Contact.php:557
msgid "No mirroring"
msgstr "Kein Spiegeln"
#: src/Module/Contact.php:532
#: src/Module/Contact.php:547
msgid "Mirror as forwarded posting"
msgstr "Spiegeln als weitergeleitete Beiträge"
#: src/Module/Contact.php:533 src/Module/Contact.php:539
#: src/Module/Contact.php:543
#: src/Module/Contact.php:548 src/Module/Contact.php:554
#: src/Module/Contact.php:558
msgid "Mirror as my own posting"
msgstr "Spiegeln als meine eigenen Beiträge"
#: src/Module/Contact.php:536 src/Module/Contact.php:540
#: src/Module/Contact.php:551 src/Module/Contact.php:555
msgid "Native reshare"
msgstr "Natives Teilen"
#: src/Module/Contact.php:555
#: src/Module/Contact.php:570
msgid "Contact Information / Notes"
msgstr "Kontakt-Informationen / -Notizen"
#: src/Module/Contact.php:556
#: src/Module/Contact.php:571
msgid "Contact Settings"
msgstr "Kontakteinstellungen"
#: src/Module/Contact.php:564
#: src/Module/Contact.php:579
msgid "Contact"
msgstr "Kontakt"
#: src/Module/Contact.php:568
#: src/Module/Contact.php:583
msgid "Their personal note"
msgstr "Die persönliche Mitteilung"
#: src/Module/Contact.php:570
#: src/Module/Contact.php:585
msgid "Edit contact notes"
msgstr "Notizen zum Kontakt bearbeiten"
#: src/Module/Contact.php:573 src/Module/Contact.php:1054
#: src/Module/Contact.php:588 src/Module/Contact.php:1070
#, php-format
msgid "Visit %s's profile [%s]"
msgstr "Besuche %ss Profil [%s]"
#: src/Module/Contact.php:574
#: src/Module/Contact.php:589
msgid "Block/Unblock contact"
msgstr "Kontakt blockieren/freischalten"
#: src/Module/Contact.php:575
#: src/Module/Contact.php:590
msgid "Ignore contact"
msgstr "Ignoriere den Kontakt"
#: src/Module/Contact.php:576
#: src/Module/Contact.php:591
msgid "View conversations"
msgstr "Unterhaltungen anzeigen"
#: src/Module/Contact.php:581
#: src/Module/Contact.php:596
msgid "Last update:"
msgstr "Letzte Aktualisierung: "
#: src/Module/Contact.php:583
#: src/Module/Contact.php:598
msgid "Update public posts"
msgstr "Öffentliche Beiträge aktualisieren"
#: src/Module/Contact.php:585 src/Module/Contact.php:1096
#: src/Module/Contact.php:600 src/Module/Contact.php:1114
msgid "Update now"
msgstr "Jetzt aktualisieren"
#: src/Module/Contact.php:588 src/Module/Contact.php:848
#: src/Module/Contact.php:1123
#: src/Module/Contact.php:603 src/Module/Contact.php:864
#: src/Module/Contact.php:1141
msgid "Unignore"
msgstr "Ignorieren aufheben"
#: src/Module/Contact.php:592
#: src/Module/Contact.php:607
msgid "Currently blocked"
msgstr "Derzeit geblockt"
#: src/Module/Contact.php:593
#: src/Module/Contact.php:608
msgid "Currently ignored"
msgstr "Derzeit ignoriert"
#: src/Module/Contact.php:594
#: src/Module/Contact.php:609
msgid "Currently archived"
msgstr "Momentan archiviert"
#: src/Module/Contact.php:595
#: src/Module/Contact.php:610
msgid "Awaiting connection acknowledge"
msgstr "Bedarf der Bestätigung des Kontakts"
#: src/Module/Contact.php:596 src/Module/Notifications/Introductions.php:171
#: src/Module/Contact.php:611 src/Module/Notifications/Introductions.php:171
msgid "Hide this contact from others"
msgstr "Verbirg diesen Kontakt vor Anderen"
#: src/Module/Contact.php:596
#: src/Module/Contact.php:611
msgid ""
"Replies/likes to your public posts <strong>may</strong> still be visible"
msgstr "Antworten/Likes auf deine öffentlichen Beiträge <strong>könnten</strong> weiterhin sichtbar sein"
#: src/Module/Contact.php:597
#: src/Module/Contact.php:612
msgid "Notification for new posts"
msgstr "Benachrichtigung bei neuen Beiträgen"
#: src/Module/Contact.php:597
#: src/Module/Contact.php:612
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:599
#: src/Module/Contact.php:614
msgid "Keyword Deny List"
msgstr "Liste der gesperrten Schlüsselwörter"
#: src/Module/Contact.php:599
#: src/Module/Contact.php:614
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:617 src/Module/Settings/TwoFactor/Index.php:132
#: src/Module/Contact.php:632 src/Module/Settings/TwoFactor/Index.php:132
msgid "Actions"
msgstr "Aktionen"
#: src/Module/Contact.php:624
#: src/Module/Contact.php:639
msgid "Mirror postings from this contact"
msgstr "Spiegle Beiträge dieses Kontakts"
#: src/Module/Contact.php:626
#: src/Module/Contact.php:641
msgid ""
"Mark this contact as remote_self, this will cause friendica to repost new "
"entries from this contact."
msgstr "Markiere diesen Kontakt als remote_self (entferntes Konto), dies veranlasst Friendica, alle Top-Level Beiträge dieses Kontakts an all Deine Kontakte zu senden (spiegeln)."
#: src/Module/Contact.php:758
#: src/Module/Contact.php:773
msgid "Show all contacts"
msgstr "Alle Kontakte anzeigen"
#: src/Module/Contact.php:766
#: src/Module/Contact.php:781
msgid "Only show pending contacts"
msgstr "Zeige nur noch ausstehende Kontakte."
#: src/Module/Contact.php:774
#: src/Module/Contact.php:789
msgid "Only show blocked contacts"
msgstr "Nur blockierte Kontakte anzeigen"
#: src/Module/Contact.php:779 src/Module/Contact.php:826
#: src/Object/Post.php:308
#: src/Module/Contact.php:794 src/Module/Contact.php:841
#: src/Object/Post.php:309
msgid "Ignored"
msgstr "Ignoriert"
#: src/Module/Contact.php:782
#: src/Module/Contact.php:797
msgid "Only show ignored contacts"
msgstr "Nur ignorierte Kontakte anzeigen"
#: src/Module/Contact.php:787 src/Module/Contact.php:827
#: src/Module/Contact.php:802 src/Module/Contact.php:842
msgid "Archived"
msgstr "Archiviert"
#: src/Module/Contact.php:790
#: src/Module/Contact.php:805
msgid "Only show archived contacts"
msgstr "Nur archivierte Kontakte anzeigen"
#: src/Module/Contact.php:795 src/Module/Contact.php:825
#: src/Module/Contact.php:810 src/Module/Contact.php:840
msgid "Hidden"
msgstr "Verborgen"
#: src/Module/Contact.php:798
#: src/Module/Contact.php:813
msgid "Only show hidden contacts"
msgstr "Nur verborgene Kontakte anzeigen"
#: src/Module/Contact.php:806
#: src/Module/Contact.php:821
msgid "Organize your contact groups"
msgstr "Verwalte deine Kontaktgruppen"
#: src/Module/Contact.php:838
#: src/Module/Contact.php:853
msgid "Search your contacts"
msgstr "Suche in deinen Kontakten"
#: src/Module/Contact.php:839 src/Module/Search/Index.php:194
#: src/Module/Contact.php:854 src/Module/Search/Index.php:194
#, php-format
msgid "Results for: %s"
msgstr "Ergebnisse für: %s"
#: src/Module/Contact.php:846
#: src/Module/Contact.php:862
msgid "Update"
msgstr "Aktualisierungen"
#: src/Module/Contact.php:851
#: src/Module/Contact.php:867
msgid "Batch Actions"
msgstr "Stapelverarbeitung"
#: src/Module/Contact.php:886
#: src/Module/Contact.php:902
msgid "Conversations started by this contact"
msgstr "Unterhaltungen, die von diesem Kontakt begonnen wurden"
#: src/Module/Contact.php:891
#: src/Module/Contact.php:907
msgid "Posts and Comments"
msgstr "Statusnachrichten und Kommentare"
#: src/Module/Contact.php:909
#: src/Module/Contact.php:925
msgid "View all known contacts"
msgstr "Alle bekannten Kontakte anzeigen"
#: src/Module/Contact.php:919
#: src/Module/Contact.php:935
msgid "Advanced Contact Settings"
msgstr "Fortgeschrittene Kontakteinstellungen"
#: src/Module/Contact.php:1013
#: src/Module/Contact.php:1029
msgid "Mutual Friendship"
msgstr "Beidseitige Freundschaft"
#: src/Module/Contact.php:1017
#: src/Module/Contact.php:1033
msgid "is a fan of yours"
msgstr "ist ein Fan von dir"
#: src/Module/Contact.php:1021
#: src/Module/Contact.php:1037
msgid "you are a fan of"
msgstr "Du bist Fan von"
#: src/Module/Contact.php:1039
#: src/Module/Contact.php:1055
msgid "Pending outgoing contact request"
msgstr "Ausstehende ausgehende Kontaktanfrage"
#: src/Module/Contact.php:1041
#: src/Module/Contact.php:1057
msgid "Pending incoming contact request"
msgstr "Ausstehende eingehende Kontaktanfrage"
#: src/Module/Contact.php:1106
#: src/Module/Contact.php:1124
msgid "Refetch contact data"
msgstr "Kontaktdaten neu laden"
#: src/Module/Contact.php:1117
#: src/Module/Contact.php:1135
msgid "Toggle Blocked status"
msgstr "Geblockt-Status ein-/ausschalten"
#: src/Module/Contact.php:1125
#: src/Module/Contact.php:1143
msgid "Toggle Ignored status"
msgstr "Ignoriert-Status ein-/ausschalten"
#: src/Module/Contact.php:1134
#: src/Module/Contact.php:1152
msgid "Delete contact"
msgstr "Lösche den Kontakt"
@ -7846,7 +7908,7 @@ msgstr "Persönlich"
msgid "Posts that mention or involve you"
msgstr "Beiträge, in denen es um dich geht"
#: src/Module/Conversation/Network.php:258 src/Object/Post.php:320
#: src/Module/Conversation/Network.php:258 src/Object/Post.php:321
msgid "Starred"
msgstr "Markierte"
@ -8123,21 +8185,21 @@ msgstr "Webfinger Diagnostik"
msgid "Lookup address:"
msgstr "Adresse nachschlagen:"
#: src/Module/Delegation.php:148
#: src/Module/Delegation.php:142
msgid "Switch between your accounts"
msgstr "Wechsle deine Konten"
#: src/Module/Delegation.php:149
#: src/Module/Delegation.php:143
msgid "Manage your accounts"
msgstr "Verwalte deine Konten"
#: src/Module/Delegation.php:150
#: src/Module/Delegation.php:144
msgid ""
"Toggle between different identities or community/group pages which share "
"your account details or which you have been granted \"manage\" permissions"
msgstr "Zwischen verschiedenen Identitäten oder Gemeinschafts-/Gruppenseiten wechseln, die deine Kontoinformationen teilen oder zu denen du „Verwalten“-Befugnisse bekommen hast."
#: src/Module/Delegation.php:151
#: src/Module/Delegation.php:145
msgid "Select an identity to manage: "
msgstr "Wähle eine Identität zum Verwalten aus: "
@ -8669,7 +8731,7 @@ msgid "Claims to be known to you: "
msgstr "Behauptet, dich zu kennen: "
#: src/Module/Notifications/Introductions.php:123
#: src/Module/OAuth/Acknowledge.php:48 src/Module/Register.php:116
#: src/Module/OAuth/Acknowledge.php:48 src/Module/Register.php:118
msgid "No"
msgstr "Nein"
@ -8733,10 +8795,6 @@ msgstr "Pinnwandbenachrichtigungen"
msgid "Show unread"
msgstr "Ungelesene anzeigen"
#: src/Module/Notifications/Notifications.php:138
msgid "Show all"
msgstr "Alle anzeigen"
#: src/Module/OAuth/Acknowledge.php:44
msgid "Authorize application connection"
msgstr "Verbindung der Applikation autorisieren"
@ -8885,137 +8943,137 @@ msgstr "Inhalt"
msgid "Remove post"
msgstr "Beitrag entfernen"
#: src/Module/Register.php:69
#: src/Module/Register.php:71
msgid "Only parent users can create additional accounts."
msgstr "Zusätzliche Nutzerkonten können nur von Verwaltern angelegt werden."
#: src/Module/Register.php:101
#: src/Module/Register.php:103
msgid ""
"You may (optionally) fill in this form via OpenID by supplying your OpenID "
"and clicking \"Register\"."
msgstr "Du kannst dieses Formular auch (optional) mit deiner OpenID ausfüllen, indem du deine OpenID angibst und 'Registrieren' klickst."
#: src/Module/Register.php:102
#: src/Module/Register.php:104
msgid ""
"If you are not familiar with OpenID, please leave that field blank and fill "
"in the rest of the items."
msgstr "Wenn du nicht mit OpenID vertraut bist, lass dieses Feld bitte leer und fülle die restlichen Felder aus."
#: src/Module/Register.php:103
#: src/Module/Register.php:105
msgid "Your OpenID (optional): "
msgstr "Deine OpenID (optional): "
#: src/Module/Register.php:112
#: src/Module/Register.php:114
msgid "Include your profile in member directory?"
msgstr "Soll dein Profil im Nutzerverzeichnis angezeigt werden?"
#: src/Module/Register.php:135
#: src/Module/Register.php:137
msgid "Note for the admin"
msgstr "Hinweis für den Admin"
#: src/Module/Register.php:135
#: src/Module/Register.php:137
msgid "Leave a message for the admin, why you want to join this node"
msgstr "Hinterlasse eine Nachricht an den Admin, warum du einen Account auf dieser Instanz haben möchtest."
#: src/Module/Register.php:136
#: src/Module/Register.php:138
msgid "Membership on this site is by invitation only."
msgstr "Mitgliedschaft auf dieser Seite ist nur nach vorheriger Einladung möglich."
#: src/Module/Register.php:137
#: src/Module/Register.php:139
msgid "Your invitation code: "
msgstr "Dein Ein­la­dungs­code"
#: src/Module/Register.php:145
#: src/Module/Register.php:147
msgid "Your Full Name (e.g. Joe Smith, real or real-looking): "
msgstr "Dein vollständiger Name (z.B. Hans Mustermann, echt oder echt erscheinend):"
#: src/Module/Register.php:146
#: src/Module/Register.php:148
msgid ""
"Your Email Address: (Initial information will be send there, so this has to "
"be an existing address.)"
msgstr "Deine E-Mail Adresse (Informationen zur Registrierung werden an diese Adresse gesendet, darum muss sie existieren.)"
#: src/Module/Register.php:147
#: src/Module/Register.php:149
msgid "Please repeat your e-mail address:"
msgstr "Bitte wiederhole deine E-Mail Adresse"
#: src/Module/Register.php:149
#: src/Module/Register.php:151
msgid "Leave empty for an auto generated password."
msgstr "Leer lassen, um das Passwort automatisch zu generieren."
#: src/Module/Register.php:151
#: src/Module/Register.php:153
#, php-format
msgid ""
"Choose a profile nickname. This must begin with a text character. Your "
"profile address on this site will then be \"<strong>nickname@%s</strong>\"."
msgstr "Wähle einen Spitznamen für dein Profil. Dieser muss mit einem Buchstaben beginnen. Die Adresse deines Profils auf dieser Seite wird '<strong>spitzname@%s</strong>' sein."
#: src/Module/Register.php:152
#: src/Module/Register.php:154
msgid "Choose a nickname: "
msgstr "Spitznamen wählen: "
#: src/Module/Register.php:161
#: src/Module/Register.php:163
msgid "Import your profile to this friendica instance"
msgstr "Importiere dein Profil auf diese Friendica-Instanz"
#: src/Module/Register.php:168
#: src/Module/Register.php:170
msgid "Note: This node explicitly contains adult content"
msgstr "Hinweis: Dieser Knoten enthält explizit Inhalte für Erwachsene"
#: src/Module/Register.php:170 src/Module/Settings/Delegation.php:155
#: src/Module/Register.php:172 src/Module/Settings/Delegation.php:155
msgid "Parent Password:"
msgstr "Passwort des Verwalters"
#: src/Module/Register.php:170 src/Module/Settings/Delegation.php:155
#: src/Module/Register.php:172 src/Module/Settings/Delegation.php:155
msgid ""
"Please enter the password of the parent account to legitimize your request."
msgstr "Bitte gib das Passwort des Verwalters ein, um deine Anfrage zu bestätigen."
#: src/Module/Register.php:199
#: src/Module/Register.php:201
msgid "Password doesn't match."
msgstr "Das Passwort stimmt nicht."
#: src/Module/Register.php:205
#: src/Module/Register.php:207
msgid "Please enter your password."
msgstr "Bitte gib dein Passwort an."
#: src/Module/Register.php:247
#: src/Module/Register.php:249
msgid "You have entered too much information."
msgstr "Du hast zu viele Informationen eingegeben."
#: src/Module/Register.php:270
#: src/Module/Register.php:272
msgid "Please enter the identical mail address in the second field."
msgstr "Bitte gib die gleiche E-Mail Adresse noch einmal an."
#: src/Module/Register.php:297
#: src/Module/Register.php:299
msgid "The additional account was created."
msgstr "Das zusätzliche Nutzerkonto wurde angelegt."
#: src/Module/Register.php:322
#: src/Module/Register.php:324
msgid ""
"Registration successful. Please check your email for further instructions."
msgstr "Registrierung erfolgreich. Eine E-Mail mit weiteren Anweisungen wurde an dich gesendet."
#: src/Module/Register.php:326
#: src/Module/Register.php:328
#, php-format
msgid ""
"Failed to send email message. Here your accout details:<br> login: %s<br> "
"password: %s<br><br>You can change your password after login."
msgstr "Versenden der E-Mail fehlgeschlagen. Hier sind Deine Account-Details:\n\nLogin: %s\nPasswort: %s\n\nDu kannst das Passwort nach dem Anmelden ändern."
#: src/Module/Register.php:332
#: src/Module/Register.php:334
msgid "Registration successful."
msgstr "Registrierung erfolgreich."
#: src/Module/Register.php:337 src/Module/Register.php:344
#: src/Module/Register.php:339 src/Module/Register.php:346
msgid "Your registration can not be processed."
msgstr "Deine Registrierung konnte nicht verarbeitet werden."
#: src/Module/Register.php:343
#: src/Module/Register.php:345
msgid "You have to leave a request note for the admin."
msgstr "Du musst eine Nachricht für den Administrator als Begründung deiner Anfrage hinterlegen."
#: src/Module/Register.php:389
#: src/Module/Register.php:391
msgid "Your registration is pending approval by the site owner."
msgstr "Deine Registrierung muss noch vom Betreiber der Seite freigegeben werden."
@ -10222,197 +10280,197 @@ msgstr "Falls du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den
msgid "%s posted an update."
msgstr "%s hat ein Update veröffentlicht."
#: src/Object/Post.php:148
#: src/Object/Post.php:149
msgid "This entry was edited"
msgstr "Dieser Beitrag wurde bearbeitet."
#: src/Object/Post.php:176
#: src/Object/Post.php:177
msgid "Private Message"
msgstr "Private Nachricht"
#: src/Object/Post.php:192 src/Object/Post.php:194
#: src/Object/Post.php:193 src/Object/Post.php:195
msgid "Edit"
msgstr "Bearbeiten"
#: src/Object/Post.php:214
#: src/Object/Post.php:215
msgid "Pinned item"
msgstr "Angehefteter Beitrag"
#: src/Object/Post.php:218
#: src/Object/Post.php:219
msgid "Delete globally"
msgstr "Global löschen"
#: src/Object/Post.php:218
#: src/Object/Post.php:219
msgid "Remove locally"
msgstr "Lokal entfernen"
#: src/Object/Post.php:234
#: src/Object/Post.php:235
#, php-format
msgid "Block %s"
msgstr "Blockiere %s"
#: src/Object/Post.php:239
#: src/Object/Post.php:240
msgid "Save to folder"
msgstr "In Ordner speichern"
#: src/Object/Post.php:273
#: src/Object/Post.php:274
msgid "I will attend"
msgstr "Ich werde teilnehmen"
#: src/Object/Post.php:273
#: src/Object/Post.php:274
msgid "I will not attend"
msgstr "Ich werde nicht teilnehmen"
#: src/Object/Post.php:273
#: src/Object/Post.php:274
msgid "I might attend"
msgstr "Ich werde eventuell teilnehmen"
#: src/Object/Post.php:303
#: src/Object/Post.php:304
msgid "Ignore thread"
msgstr "Thread ignorieren"
#: src/Object/Post.php:304
#: src/Object/Post.php:305
msgid "Unignore thread"
msgstr "Thread nicht mehr ignorieren"
#: src/Object/Post.php:305
#: src/Object/Post.php:306
msgid "Toggle ignore status"
msgstr "Ignoriert-Status ein-/ausschalten"
#: src/Object/Post.php:315
#: src/Object/Post.php:316
msgid "Add star"
msgstr "Markieren"
#: src/Object/Post.php:316
#: src/Object/Post.php:317
msgid "Remove star"
msgstr "Markierung entfernen"
#: src/Object/Post.php:317
#: src/Object/Post.php:318
msgid "Toggle star status"
msgstr "Markierung umschalten"
#: src/Object/Post.php:328
#: src/Object/Post.php:329
msgid "Pin"
msgstr "Anheften"
#: src/Object/Post.php:329
#: src/Object/Post.php:330
msgid "Unpin"
msgstr "Losmachen"
#: src/Object/Post.php:330
#: src/Object/Post.php:331
msgid "Toggle pin status"
msgstr "Angeheftet Status ändern"
#: src/Object/Post.php:333
#: src/Object/Post.php:334
msgid "Pinned"
msgstr "Angeheftet"
#: src/Object/Post.php:338
#: src/Object/Post.php:339
msgid "Add tag"
msgstr "Tag hinzufügen"
#: src/Object/Post.php:351
#: src/Object/Post.php:352
msgid "Quote share this"
msgstr "Teile und zitiere dies"
#: src/Object/Post.php:351
#: src/Object/Post.php:352
msgid "Quote Share"
msgstr "Zitat teilen"
#: src/Object/Post.php:354
#: src/Object/Post.php:355
msgid "Reshare this"
msgstr "Teile dies"
#: src/Object/Post.php:354
#: src/Object/Post.php:355
msgid "Reshare"
msgstr "Teilen"
#: src/Object/Post.php:355
#: src/Object/Post.php:356
msgid "Cancel your Reshare"
msgstr "Teilen aufheben"
#: src/Object/Post.php:355
#: src/Object/Post.php:356
msgid "Unshare"
msgstr "Nicht mehr teilen"
#: src/Object/Post.php:400
#: src/Object/Post.php:401
#, php-format
msgid "%s (Received %s)"
msgstr "%s (Empfangen %s)"
#: src/Object/Post.php:405
#: src/Object/Post.php:406
msgid "Comment this item on your system"
msgstr "Kommentiere diesen Beitrag von deinem System aus"
#: src/Object/Post.php:405
#: src/Object/Post.php:406
msgid "Remote comment"
msgstr "Entfernter Kommentar"
#: src/Object/Post.php:421
#: src/Object/Post.php:422
msgid "Pushed"
msgstr "Pushed"
#: src/Object/Post.php:421
#: src/Object/Post.php:422
msgid "Pulled"
msgstr "Pulled"
#: src/Object/Post.php:455
#: src/Object/Post.php:456
msgid "to"
msgstr "zu"
#: src/Object/Post.php:456
#: src/Object/Post.php:457
msgid "via"
msgstr "via"
#: src/Object/Post.php:457
#: src/Object/Post.php:458
msgid "Wall-to-Wall"
msgstr "Wall-to-Wall"
#: src/Object/Post.php:458
#: src/Object/Post.php:459
msgid "via Wall-To-Wall:"
msgstr "via Wall-To-Wall:"
#: src/Object/Post.php:496
#: src/Object/Post.php:497
#, php-format
msgid "Reply to %s"
msgstr "Antworte %s"
#: src/Object/Post.php:499
#: src/Object/Post.php:500
msgid "More"
msgstr "Mehr"
#: src/Object/Post.php:517
#: src/Object/Post.php:518
msgid "Notifier task is pending"
msgstr "Die Benachrichtigungsaufgabe ist ausstehend"
#: src/Object/Post.php:518
#: src/Object/Post.php:519
msgid "Delivery to remote servers is pending"
msgstr "Die Auslieferung an Remote-Server steht noch aus"
#: src/Object/Post.php:519
#: src/Object/Post.php:520
msgid "Delivery to remote servers is underway"
msgstr "Die Auslieferung an Remote-Server ist unterwegs"
#: src/Object/Post.php:520
#: src/Object/Post.php:521
msgid "Delivery to remote servers is mostly done"
msgstr "Die Zustellung an Remote-Server ist fast erledigt"
#: src/Object/Post.php:521
#: src/Object/Post.php:522
msgid "Delivery to remote servers is done"
msgstr "Die Zustellung an die Remote-Server ist erledigt"
#: src/Object/Post.php:541
#: src/Object/Post.php:542
#, php-format
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%d Kommentar"
msgstr[1] "%d Kommentare"
#: src/Object/Post.php:542
#: src/Object/Post.php:543
msgid "Show more"
msgstr "Zeige mehr"
#: src/Object/Post.php:543
#: src/Object/Post.php:544
msgid "Show fewer"
msgstr "Zeige weniger"

View file

@ -16,101 +16,6 @@ $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["%1\$s poked %2\$s"] = "%1\$s stupste %2\$s";
$a->strings["event"] = "Veranstaltung";
$a->strings["status"] = "Status";
$a->strings["photo"] = "Foto";
$a->strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s hat %2\$ss %3\$s mit %4\$s getaggt";
$a->strings["Select"] = "Auswählen";
$a->strings["Delete"] = "Löschen";
$a->strings["View %s's profile @ %s"] = "Das Profil von %s auf %s betrachten.";
$a->strings["Categories:"] = "Kategorien:";
$a->strings["Filed under:"] = "Abgelegt unter:";
$a->strings["%s from %s"] = "%s von %s";
$a->strings["View in context"] = "Im Zusammenhang betrachten";
$a->strings["Please wait"] = "Bitte warten";
$a->strings["remove"] = "löschen";
$a->strings["Delete Selected Items"] = "Lösche die markierten Beiträge";
$a->strings["You had been addressed (%s)."] = "Du wurdest angeschrieben (%s).";
$a->strings["You are following %s."] = "Du folgst %s.";
$a->strings["Tagged"] = "Verschlagwortet";
$a->strings["%s reshared this."] = "%s hat dies geteilt";
$a->strings["Reshared"] = "Geteilt";
$a->strings["Reshared by %s <%s>"] = "Geteilt von %s <%s>";
$a->strings["%s is participating in this thread."] = "%s ist an der Unterhaltung beteiligt.";
$a->strings["Stored"] = "Gespeichert";
$a->strings["Global"] = "Global";
$a->strings["Relayed"] = "Übermittelt";
$a->strings["Relayed by %s <%s>"] = "Weitergeleitet von %s <%s>";
$a->strings["Fetched"] = "Abgerufen";
$a->strings["Fetched because of %s <%s>"] = "Wegen %s <%s> abgerufen";
$a->strings["Follow Thread"] = "Folge der Unterhaltung";
$a->strings["View Status"] = "Status anschauen";
$a->strings["View Profile"] = "Profil anschauen";
$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["Languages"] = "Sprachen";
$a->strings["Poke"] = "Anstupsen";
$a->strings["Connect/Follow"] = "Verbinden/Folgen";
$a->strings["%s likes this."] = "%s mag das.";
$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["and"] = "und";
$a->strings["and %d other people"] = "und %dandere";
$a->strings["<span %1\$s>%2\$d people</span> like this"] = "<span %1\$s>%2\$d Personen</span> mögen das";
$a->strings["%s like this."] = "%s mögen das.";
$a->strings["<span %1\$s>%2\$d people</span> don't like this"] = "<span %1\$s>%2\$d Personen</span> mögen das nicht";
$a->strings["%s don't like this."] = "%s mögen dies nicht.";
$a->strings["<span %1\$s>%2\$d people</span> attend"] = "<span %1\$s>%2\$d Personen</span> nehmen teil";
$a->strings["%s attend."] = "%s nehmen teil.";
$a->strings["<span %1\$s>%2\$d people</span> don't attend"] = "<span %1\$s>%2\$d Personen</span> nehmen nicht teil";
$a->strings["%s don't attend."] = "%s nehmen nicht teil.";
$a->strings["<span %1\$s>%2\$d people</span> attend maybe"] = "<span %1\$s>%2\$d Personen</span> nehmen eventuell teil";
$a->strings["%s attend maybe."] = "%s nimmt eventuell teil.";
$a->strings["<span %1\$s>%2\$d people</span> reshared this"] = "<span %1\$s>%2\$d Personen</span> haben dies geteilt";
$a->strings["Visible to <strong>everybody</strong>"] = "Für <strong>jedermann</strong> 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:";
$a->strings["Save to Folder:"] = "In diesem Ordner speichern:";
$a->strings["Where are you right now?"] = "Wo hältst du dich jetzt gerade auf?";
$a->strings["Delete item(s)?"] = "Einträge löschen?";
$a->strings["New Post"] = "Neuer Beitrag";
$a->strings["Share"] = "Teilen";
$a->strings["Loading..."] = "lädt...";
$a->strings["Upload photo"] = "Foto hochladen";
$a->strings["upload photo"] = "Bild hochladen";
$a->strings["Attach file"] = "Datei anhängen";
$a->strings["attach file"] = "Datei anhängen";
$a->strings["Bold"] = "Fett";
$a->strings["Italic"] = "Kursiv";
$a->strings["Underline"] = "Unterstrichen";
$a->strings["Quote"] = "Zitat";
$a->strings["Code"] = "Code";
$a->strings["Image"] = "Bild";
$a->strings["Link"] = "Link";
$a->strings["Link or Media"] = "Link oder Mediendatei";
$a->strings["Video"] = "Video";
$a->strings["Set your location"] = "Deinen Standort festlegen";
$a->strings["set location"] = "Ort setzen";
$a->strings["Clear browser location"] = "Browser-Standort leeren";
$a->strings["clear location"] = "Ort löschen";
$a->strings["Set title"] = "Titel setzen";
$a->strings["Categories (comma-separated list)"] = "Kategorien (kommasepariert)";
$a->strings["Scheduled at"] = "Geplant für";
$a->strings["Permission settings"] = "Berechtigungseinstellungen";
$a->strings["Permissions"] = "Berechtigungen";
$a->strings["Public post"] = "Öffentlicher Beitrag";
$a->strings["Preview"] = "Vorschau";
$a->strings["Cancel"] = "Abbrechen";
$a->strings["Message"] = "Nachricht";
$a->strings["Browser"] = "Browser";
$a->strings["Open Compose page"] = "Composer Seite öffnen";
$a->strings["[Friendica:Notify]"] = "[Friendica Meldung]";
$a->strings["%s New mail received at %s"] = "%sNeue Nachricht auf %s empfangen";
$a->strings["%1\$s sent you a new private message at %2\$s."] = "%1\$s hat dir eine neue, private Nachricht auf %2\$s geschickt.";
@ -183,14 +88,34 @@ $a->strings["The feed for this item is unavailable."] = "Der Feed für diesen Be
$a->strings["Item not found"] = "Beitrag nicht gefunden";
$a->strings["Edit post"] = "Beitrag bearbeiten";
$a->strings["Save"] = "Speichern";
$a->strings["Loading..."] = "lädt...";
$a->strings["Upload photo"] = "Foto hochladen";
$a->strings["upload photo"] = "Bild hochladen";
$a->strings["Attach file"] = "Datei anhängen";
$a->strings["attach file"] = "Datei anhängen";
$a->strings["Insert web link"] = "Einen Link einfügen";
$a->strings["web link"] = "Weblink";
$a->strings["Insert video link"] = "Video-Adresse einfügen";
$a->strings["video link"] = "Video-Link";
$a->strings["Insert audio link"] = "Audio-Adresse einfügen";
$a->strings["audio link"] = "Audio-Link";
$a->strings["Set your location"] = "Deinen Standort festlegen";
$a->strings["set location"] = "Ort setzen";
$a->strings["Clear browser location"] = "Browser-Standort leeren";
$a->strings["clear location"] = "Ort löschen";
$a->strings["Please wait"] = "Bitte warten";
$a->strings["Permission settings"] = "Berechtigungseinstellungen";
$a->strings["CC: email addresses"] = "Cc: E-Mail-Addressen";
$a->strings["Public post"] = "Öffentlicher Beitrag";
$a->strings["Set title"] = "Titel setzen";
$a->strings["Categories (comma-separated list)"] = "Kategorien (kommasepariert)";
$a->strings["Example: bob@example.com, mary@example.com"] = "Z.B.: bob@example.com, mary@example.com";
$a->strings["Preview"] = "Vorschau";
$a->strings["Cancel"] = "Abbrechen";
$a->strings["Message"] = "Nachricht";
$a->strings["Browser"] = "Browser";
$a->strings["Permissions"] = "Berechtigungen";
$a->strings["Open Compose page"] = "Composer Seite öffnen";
$a->strings["Event can not end before it has started."] = "Die Veranstaltung kann nicht enden, bevor sie beginnt.";
$a->strings["Event title and start time are required."] = "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden.";
$a->strings["Create New Event"] = "Neue Veranstaltung erstellen";
@ -217,6 +142,7 @@ $a->strings["You already added this contact."] = "Du hast den Kontakt bereits hi
$a->strings["The network type couldn't be detected. Contact can't be added."] = "Der Netzwerktyp wurde nicht erkannt. Der Kontakt kann nicht hinzugefügt werden.";
$a->strings["Diaspora support isn't enabled. Contact can't be added."] = "Diaspora-Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden.";
$a->strings["OStatus support is disabled. Contact can't be added."] = "OStatus-Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden.";
$a->strings["Connect/Follow"] = "Verbinden/Folgen";
$a->strings["Please answer the following:"] = "Bitte beantworte folgendes:";
$a->strings["Your Identity Address:"] = "Adresse Deines Profils:";
$a->strings["Profile URL"] = "Profil URL";
@ -350,6 +276,8 @@ $a->strings["Rotate CW (right)"] = "Drehen US (rechts)";
$a->strings["Rotate CCW (left)"] = "Drehen EUS (links)";
$a->strings["This is you"] = "Das bist du";
$a->strings["Comment"] = "Kommentar";
$a->strings["Select"] = "Auswählen";
$a->strings["Delete"] = "Löschen";
$a->strings["Like"] = "Mag ich";
$a->strings["I like this (toggle)"] = "Ich mag das (toggle)";
$a->strings["Dislike"] = "Mag ich nicht";
@ -545,6 +473,9 @@ $a->strings["If you have moved this profile from another server, and some of you
$a->strings["Resend relocate message to contacts"] = "Umzugsbenachrichtigung erneut an Kontakte senden";
$a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde, versuche es bitte in 24 Stunden noch einmal.";
$a->strings["Friend Suggestions"] = "Kontaktvorschläge";
$a->strings["photo"] = "Foto";
$a->strings["status"] = "Status";
$a->strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s hat %2\$ss %3\$s mit %4\$s getaggt";
$a->strings["Remove Item Tag"] = "Gegenstands-Tag entfernen";
$a->strings["Select a tag to remove: "] = "Wähle ein Tag zum Entfernen aus: ";
$a->strings["Remove"] = "Entfernen";
@ -637,6 +568,62 @@ $a->strings["GNU Social Connector"] = "GNU Social Connector";
$a->strings["ActivityPub"] = "ActivityPub";
$a->strings["pnut"] = "pnut";
$a->strings["%s (via %s)"] = "%s (via %s)";
$a->strings["%s likes this."] = "%s mag das.";
$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["<span %1\$s>%2\$d people</span> like this"] = "<span %1\$s>%2\$d Personen</span> mögen das";
$a->strings["%s like this."] = "%s mögen das.";
$a->strings["<span %1\$s>%2\$d people</span> don't like this"] = "<span %1\$s>%2\$d Personen</span> mögen das nicht";
$a->strings["%s don't like this."] = "%s mögen dies nicht.";
$a->strings["<span %1\$s>%2\$d people</span> attend"] = "<span %1\$s>%2\$d Personen</span> nehmen teil";
$a->strings["%s attend."] = "%s nehmen teil.";
$a->strings["<span %1\$s>%2\$d people</span> don't attend"] = "<span %1\$s>%2\$d Personen</span> nehmen nicht teil";
$a->strings["%s don't attend."] = "%s nehmen nicht teil.";
$a->strings["<span %1\$s>%2\$d people</span> attend maybe"] = "<span %1\$s>%2\$d Personen</span> nehmen eventuell teil";
$a->strings["%s attend maybe."] = "%s nimmt eventuell teil.";
$a->strings["<span %1\$s>%2\$d people</span> reshared this"] = "<span %1\$s>%2\$d Personen</span> haben dies geteilt";
$a->strings["Visible to <strong>everybody</strong>"] = "Für <strong>jedermann</strong> 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:";
$a->strings["Save to Folder:"] = "In diesem Ordner speichern:";
$a->strings["Where are you right now?"] = "Wo hältst du dich jetzt gerade auf?";
$a->strings["Delete item(s)?"] = "Einträge löschen?";
$a->strings["New Post"] = "Neuer Beitrag";
$a->strings["Share"] = "Teilen";
$a->strings["Bold"] = "Fett";
$a->strings["Italic"] = "Kursiv";
$a->strings["Underline"] = "Unterstrichen";
$a->strings["Quote"] = "Zitat";
$a->strings["Code"] = "Code";
$a->strings["Image"] = "Bild";
$a->strings["Link"] = "Link";
$a->strings["Link or Media"] = "Link oder Mediendatei";
$a->strings["Video"] = "Video";
$a->strings["Scheduled at"] = "Geplant für";
$a->strings["View %s's profile @ %s"] = "Das Profil von %s auf %s betrachten.";
$a->strings["Categories:"] = "Kategorien:";
$a->strings["Filed under:"] = "Abgelegt unter:";
$a->strings["%s from %s"] = "%s von %s";
$a->strings["View in context"] = "Im Zusammenhang betrachten";
$a->strings["remove"] = "löschen";
$a->strings["Delete Selected Items"] = "Lösche die markierten Beiträge";
$a->strings["You had been addressed (%s)."] = "Du wurdest angeschrieben (%s).";
$a->strings["You are following %s."] = "Du folgst %s.";
$a->strings["Tagged"] = "Verschlagwortet";
$a->strings["Reshared"] = "Geteilt";
$a->strings["Reshared by %s <%s>"] = "Geteilt von %s <%s>";
$a->strings["%s is participating in this thread."] = "%s ist an der Unterhaltung beteiligt.";
$a->strings["Stored"] = "Gespeichert";
$a->strings["Global"] = "Global";
$a->strings["Relayed"] = "Übermittelt";
$a->strings["Relayed by %s <%s>"] = "Weitergeleitet von %s <%s>";
$a->strings["Fetched"] = "Abgerufen";
$a->strings["Fetched because of %s <%s>"] = "Wegen %s <%s> abgerufen";
$a->strings["General Features"] = "Allgemeine Features";
$a->strings["Photo Location"] = "Aufnahmeort";
$a->strings["Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map."] = "Die Foto-Metadaten werden ausgelesen. Dadurch kann der Aufnahmeort (wenn vorhanden) in einer Karte angezeigt werden.";
@ -661,6 +648,19 @@ $a->strings["Forums"] = "Foren";
$a->strings["External link to forum"] = "Externer Link zum Forum";
$a->strings["show less"] = "weniger anzeigen";
$a->strings["show more"] = "mehr anzeigen";
$a->strings["%1\$s poked %2\$s"] = "%1\$s stupste %2\$s";
$a->strings["event"] = "Veranstaltung";
$a->strings["Follow Thread"] = "Folge der Unterhaltung";
$a->strings["View Status"] = "Status anschauen";
$a->strings["View Profile"] = "Profil anschauen";
$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["Languages"] = "Sprachen";
$a->strings["Poke"] = "Anstupsen";
$a->strings["Nothing new here"] = "Keine Neuigkeiten";
$a->strings["Go back"] = "Geh zurück";
$a->strings["Clear notifications"] = "Bereinige Benachrichtigungen";
@ -1212,9 +1212,24 @@ $a->strings["Must be writable by web server. Relative to your Friendica top-leve
$a->strings["Log level"] = "Protokoll-Level";
$a->strings["PHP logging"] = "PHP Protokollieren";
$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."] = "Um die Protokollierung von PHP-Fehlern und Warnungen vorübergehend zu aktivieren, kannst du der Datei index.php deiner Installation Folgendes voranstellen. Der in der Datei 'error_log' angegebene Dateiname ist relativ zum obersten Verzeichnis von Friendica und muss vom Webserver beschreibbar sein. Die Option '1' für 'log_errors' und 'display_errors' aktiviert diese Optionen, ersetze die '1' durch eine '0', um sie zu deaktivieren.";
$a->strings["Error trying to open <strong>%1\$s</strong> log file.\\r\\n<br/>Check to see if file %1\$s exist and is readable."] = "Fehler beim Öffnen der Logdatei <strong>%1\$s</strong>.\\r\\n<br/>Bitte überprüfe ob die Datei %1\$s existiert und gelesen werden kann.";
$a->strings["Couldn't open <strong>%1\$s</strong> log file.\\r\\n<br/>Check to see if file %1\$s is readable."] = "Konnte die Logdatei <strong>%1\$s</strong> nicht öffnen.\\r\\n<br/>Bitte stelle sicher, dass die Datei %1\$s lesbar ist.";
$a->strings["Error trying to open <strong>%1\$s</strong> log file.<br/>Check to see if file %1\$s exist and is readable."] = "Fehler beim Öffnen der Logdatei <strong>%1\$s</strong>.<br/>Bitte überprüfe ob die Datei %1\$s existiert und gelesen werden kann.";
$a->strings["Couldn't open <strong>%1\$s</strong> log file.<br/>Check to see if file %1\$s is readable."] = "Konnte die Logdatei <strong>%1\$s</strong> nicht öffnen.<br/>Bitte stelle sicher, dass die Datei %1\$s lesbar ist.";
$a->strings["View Logs"] = "Protokolle anzeigen";
$a->strings["Search in logs"] = "Logs durchsuchen";
$a->strings["Show all"] = "Alle anzeigen";
$a->strings["Date"] = "Datum";
$a->strings["Level"] = "Level";
$a->strings["Context"] = "Zusammenhang";
$a->strings["ALL"] = "ALLE";
$a->strings["View details"] = "Details anzeigen";
$a->strings["Click to view details"] = "Anklicken zum Anzeigen der Details";
$a->strings["Data"] = "Daten";
$a->strings["File"] = "Datei";
$a->strings["Line"] = "Zeile";
$a->strings["Function"] = "Funktion";
$a->strings["UID"] = "UID";
$a->strings["Process ID"] = "Prozess ID";
$a->strings["Close"] = "Schließen";
$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";
@ -1935,7 +1950,6 @@ $a->strings["System Notifications"] = "Systembenachrichtigungen";
$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen";
$a->strings["Home Notifications"] = "Pinnwandbenachrichtigungen";
$a->strings["Show unread"] = "Ungelesene anzeigen";
$a->strings["Show all"] = "Alle anzeigen";
$a->strings["Authorize application connection"] = "Verbindung der Applikation autorisieren";
$a->strings["Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?"] = "Möchtest du dieser Anwendung den Zugriff auf Deine Beiträge und Kontakte sowie das Erstellen neuer Beiträge in Deinem Namen gestatten?";
$a->strings["Unsupported or missing response type"] = "Der Typ der Antwort fehlt oder wird nicht unterstützt";

View file

@ -24,8 +24,8 @@ msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-10 00:27+0000\n"
"PO-Revision-Date: 2021-09-22 05:47+0000\n"
"POT-Creation-Date: 2021-09-26 03:57+0000\n"
"PO-Revision-Date: 2021-09-28 07:18+0000\n"
"Last-Translator: Alexander An <ravnina@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n"
"MIME-Version: 1.0\n"
@ -59,9 +59,9 @@ msgid "Monthly posting limit of %d post reached. The post was rejected."
msgstr "Месячный лимит в %d записей достигнут. Запись была отклонена."
#: include/api.php:4437 mod/photos.php:89 mod/photos.php:198
#: mod/photos.php:626 mod/photos.php:1034 mod/photos.php:1051
#: mod/photos.php:1597 src/Model/User.php:1118 src/Model/User.php:1126
#: src/Model/User.php:1134 src/Module/Settings/Profile/Photo/Crop.php:101
#: mod/photos.php:626 mod/photos.php:1035 mod/photos.php:1052
#: mod/photos.php:1599 src/Model/User.php:1169 src/Model/User.php:1177
#: src/Model/User.php:1185 src/Module/Settings/Profile/Photo/Crop.php:101
#: src/Module/Settings/Profile/Photo/Crop.php:117
#: src/Module/Settings/Profile/Photo/Crop.php:133
#: src/Module/Settings/Profile/Photo/Crop.php:179
@ -70,459 +70,6 @@ msgstr "Месячный лимит в %d записей достигнут. З
msgid "Profile Photos"
msgstr "Фотографии профиля"
#: include/conversation.php:109
#, php-format
msgid "%1$s poked %2$s"
msgstr "%1$s ткнул %2$s"
#: include/conversation.php:142 src/Model/Item.php:2609
msgid "event"
msgstr "мероприятие"
#: include/conversation.php:145 include/conversation.php:154 mod/tagger.php:90
msgid "status"
msgstr "статус"
#: include/conversation.php:150 mod/tagger.php:90 src/Model/Item.php:2611
msgid "photo"
msgstr "фото"
#: include/conversation.php:164 mod/tagger.php:123
#, php-format
msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr "%1$s tagged %2$s's %3$s в %4$s"
#: include/conversation.php:467 mod/photos.php:1459 src/Object/Post.php:226
msgid "Select"
msgstr "Выберите"
#: include/conversation.php:468 mod/photos.php:1460 mod/settings.php:573
#: src/Module/Admin/Users/Active.php:139
#: src/Module/Admin/Users/Blocked.php:140 src/Module/Admin/Users/Index.php:153
#: src/Module/Contact.php:849 src/Module/Contact.php:1132
msgid "Delete"
msgstr "Удалить"
#: include/conversation.php:503 src/Object/Post.php:453
#: src/Object/Post.php:454
#, php-format
msgid "View %s's profile @ %s"
msgstr "Просмотреть профиль %s [@ %s]"
#: include/conversation.php:516 src/Object/Post.php:441
msgid "Categories:"
msgstr "Категории:"
#: include/conversation.php:517 src/Object/Post.php:442
msgid "Filed under:"
msgstr "В рубрике:"
#: include/conversation.php:524 src/Object/Post.php:467
#, php-format
msgid "%s from %s"
msgstr "%s из %s"
#: include/conversation.php:539
msgid "View in context"
msgstr "Смотреть в контексте"
#: include/conversation.php:541 include/conversation.php:1146
#: mod/editpost.php:107 mod/message.php:203 mod/message.php:368
#: mod/photos.php:1524 mod/wallmessage.php:155 src/Module/Item/Compose.php:165
#: src/Object/Post.php:501
msgid "Please wait"
msgstr "Пожалуйста, подождите"
#: include/conversation.php:605
msgid "remove"
msgstr "удалить"
#: include/conversation.php:609
msgid "Delete Selected Items"
msgstr "Удалить выбранные позиции"
#: include/conversation.php:647 include/conversation.php:650
#: include/conversation.php:653 include/conversation.php:656
#, php-format
msgid "You had been addressed (%s)."
msgstr "К вам обратились (%s)."
#: include/conversation.php:659
#, php-format
msgid "You are following %s."
msgstr "Вы подписаны на %s."
#: include/conversation.php:662
msgid "Tagged"
msgstr "Отмечено"
#: include/conversation.php:675 include/conversation.php:1013
#: include/conversation.php:1051
#, php-format
msgid "%s reshared this."
msgstr "%s поделился этим."
#: include/conversation.php:677
msgid "Reshared"
msgstr "Репост"
#: include/conversation.php:677
#, php-format
msgid "Reshared by %s <%s>"
msgstr ""
#: include/conversation.php:680
#, php-format
msgid "%s is participating in this thread."
msgstr "%s участвует в этом обсуждении"
#: include/conversation.php:683
msgid "Stored"
msgstr ""
#: include/conversation.php:686
msgid "Global"
msgstr ""
#: include/conversation.php:689
msgid "Relayed"
msgstr "Ретранслировано"
#: include/conversation.php:689
#, php-format
msgid "Relayed by %s <%s>"
msgstr ""
#: include/conversation.php:692
msgid "Fetched"
msgstr "Загружено"
#: include/conversation.php:692
#, php-format
msgid "Fetched because of %s <%s>"
msgstr ""
#: include/conversation.php:844 view/theme/frio/theme.php:323
msgid "Follow Thread"
msgstr "Подписаться на обсуждение"
#: include/conversation.php:845 src/Model/Contact.php:1050
msgid "View Status"
msgstr "Просмотреть статус"
#: include/conversation.php:846 include/conversation.php:868
#: src/Model/Contact.php:976 src/Model/Contact.php:1042
#: src/Model/Contact.php:1051 src/Module/Directory.php:160
#: src/Module/Settings/Profile/Index.php:223
msgid "View Profile"
msgstr "Просмотреть профиль"
#: include/conversation.php:847 src/Model/Contact.php:1052
msgid "View Photos"
msgstr "Просмотреть фото"
#: include/conversation.php:848 src/Model/Contact.php:1043
#: src/Model/Contact.php:1053
msgid "Network Posts"
msgstr "Записи сети"
#: include/conversation.php:849 src/Model/Contact.php:1044
#: src/Model/Contact.php:1054
msgid "View Contact"
msgstr "Просмотреть контакт"
#: include/conversation.php:850 src/Model/Contact.php:1056
msgid "Send PM"
msgstr "Отправить ЛС"
#: include/conversation.php:851 src/Module/Admin/Blocklist/Contact.php:84
#: src/Module/Admin/Users/Active.php:140 src/Module/Admin/Users/Index.php:154
#: src/Module/Contact.php:587 src/Module/Contact.php:847
#: src/Module/Contact.php:1115
msgid "Block"
msgstr "Заблокировать"
#: include/conversation.php:852 src/Module/Contact.php:588
#: src/Module/Contact.php:848 src/Module/Contact.php:1123
#: src/Module/Notifications/Introductions.php:113
#: src/Module/Notifications/Introductions.php:185
#: src/Module/Notifications/Notification.php:59
msgid "Ignore"
msgstr "Игнорировать"
#: include/conversation.php:856 src/Object/Post.php:428
msgid "Languages"
msgstr "Языки"
#: include/conversation.php:860 src/Model/Contact.php:1057
msgid "Poke"
msgstr "потыкать"
#: include/conversation.php:865 mod/follow.php:138 src/Content/Widget.php:76
#: src/Model/Contact.php:1045 src/Model/Contact.php:1058
#: view/theme/vier/theme.php:172
msgid "Connect/Follow"
msgstr "Подключиться/Подписаться"
#: include/conversation.php:998
#, php-format
msgid "%s likes this."
msgstr "%s нравится это."
#: include/conversation.php:1001
#, php-format
msgid "%s doesn't like this."
msgstr "%s не нравится это."
#: include/conversation.php:1004
#, php-format
msgid "%s attends."
msgstr "%s посещает."
#: include/conversation.php:1007
#, php-format
msgid "%s doesn't attend."
msgstr "%s не посетит."
#: include/conversation.php:1010
#, php-format
msgid "%s attends maybe."
msgstr "%s может быть посетит."
#: include/conversation.php:1019
msgid "and"
msgstr "и"
#: include/conversation.php:1022
#, php-format
msgid "and %d other people"
msgstr "и еще %d человек"
#: include/conversation.php:1030
#, php-format
msgid "<span %1$s>%2$d people</span> like this"
msgstr "<span %1$s>%2$d людям</span> нравится это"
#: include/conversation.php:1031
#, php-format
msgid "%s like this."
msgstr "%s нравится это."
#: include/conversation.php:1034
#, php-format
msgid "<span %1$s>%2$d people</span> don't like this"
msgstr "<span %1$s>%2$d людям</span> не нравится это"
#: include/conversation.php:1035
#, php-format
msgid "%s don't like this."
msgstr "%s не нравится это"
#: include/conversation.php:1038
#, php-format
msgid "<span %1$s>%2$d people</span> attend"
msgstr "<span %1$s>%2$d человека</span> посетят"
#: include/conversation.php:1039
#, php-format
msgid "%s attend."
msgstr "%s посетит."
#: include/conversation.php:1042
#, php-format
msgid "<span %1$s>%2$d people</span> don't attend"
msgstr "<span %1$s>%2$d человек</span> не посетит"
#: include/conversation.php:1043
#, php-format
msgid "%s don't attend."
msgstr "%s не посетит"
#: include/conversation.php:1046
#, php-format
msgid "<span %1$s>%2$d people</span> attend maybe"
msgstr "<span %1$s>%2$d человек</span> может быть посетят"
#: include/conversation.php:1047
#, php-format
msgid "%s attend maybe."
msgstr "%s может быть посетит."
#: include/conversation.php:1050
#, php-format
msgid "<span %1$s>%2$d people</span> reshared this"
msgstr "<span %1$s>%2$d людей</span> поделились этим"
#: include/conversation.php:1098
msgid "Visible to <strong>everybody</strong>"
msgstr "Видимое <strong>всем</strong>"
#: include/conversation.php:1099 src/Module/Item/Compose.php:159
#: src/Object/Post.php:972
msgid "Please enter a image/video/audio/webpage URL:"
msgstr "Пожалуйста, введите адрес картинки/видео/аудио/странички:"
#: include/conversation.php:1100
msgid "Tag term:"
msgstr "Тег:"
#: include/conversation.php:1101 src/Module/Filer/SaveTag.php:68
msgid "Save to Folder:"
msgstr "Сохранить в папку:"
#: include/conversation.php:1102
msgid "Where are you right now?"
msgstr "И где вы сейчас?"
#: include/conversation.php:1103
msgid "Delete item(s)?"
msgstr "Удалить елемент(ты)?"
#: include/conversation.php:1113
msgid "New Post"
msgstr "Новая запись"
#: include/conversation.php:1116
msgid "Share"
msgstr "Поделиться"
#: include/conversation.php:1117 mod/editpost.php:92 mod/photos.php:1373
#: src/Module/Contact/Poke.php:157 src/Object/Post.php:963
msgid "Loading..."
msgstr "Загрузка..."
#: include/conversation.php:1118 mod/editpost.php:93 mod/message.php:201
#: mod/message.php:365 mod/wallmessage.php:153
msgid "Upload photo"
msgstr "Загрузить фото"
#: include/conversation.php:1119 mod/editpost.php:94
msgid "upload photo"
msgstr "загрузить фото"
#: include/conversation.php:1120 mod/editpost.php:95
msgid "Attach file"
msgstr "Прикрепить файл"
#: include/conversation.php:1121 mod/editpost.php:96
msgid "attach file"
msgstr "приложить файл"
#: include/conversation.php:1122 src/Module/Item/Compose.php:151
#: src/Object/Post.php:964
msgid "Bold"
msgstr "Жирный"
#: include/conversation.php:1123 src/Module/Item/Compose.php:152
#: src/Object/Post.php:965
msgid "Italic"
msgstr "Kурсивный"
#: include/conversation.php:1124 src/Module/Item/Compose.php:153
#: src/Object/Post.php:966
msgid "Underline"
msgstr "Подчеркнутый"
#: include/conversation.php:1125 src/Module/Item/Compose.php:154
#: src/Object/Post.php:967
msgid "Quote"
msgstr "Цитата"
#: include/conversation.php:1126 src/Module/Item/Compose.php:155
#: src/Object/Post.php:968
msgid "Code"
msgstr "Код"
#: include/conversation.php:1127 src/Module/Item/Compose.php:156
#: src/Object/Post.php:969
msgid "Image"
msgstr "Изображение / Фото"
#: include/conversation.php:1128 src/Module/Item/Compose.php:157
#: src/Object/Post.php:970
msgid "Link"
msgstr "Ссылка"
#: include/conversation.php:1129 src/Module/Item/Compose.php:158
#: src/Object/Post.php:971
msgid "Link or Media"
msgstr "Ссылка или медиа"
#: include/conversation.php:1130
msgid "Video"
msgstr ""
#: include/conversation.php:1131 mod/editpost.php:103
#: src/Module/Item/Compose.php:161
msgid "Set your location"
msgstr "Задать ваше местоположение"
#: include/conversation.php:1132 mod/editpost.php:104
msgid "set location"
msgstr "установить местонахождение"
#: include/conversation.php:1133 mod/editpost.php:105
msgid "Clear browser location"
msgstr "Очистить местонахождение браузера"
#: include/conversation.php:1134 mod/editpost.php:106
msgid "clear location"
msgstr "убрать местонахождение"
#: include/conversation.php:1136 mod/editpost.php:120
#: src/Module/Item/Compose.php:166
msgid "Set title"
msgstr "Установить заголовок"
#: include/conversation.php:1138 mod/editpost.php:122
#: src/Module/Item/Compose.php:167
msgid "Categories (comma-separated list)"
msgstr "Категории (список через запятую)"
#: include/conversation.php:1143 src/Module/Item/Compose.php:172
msgid "Scheduled at"
msgstr "Запланировано на"
#: include/conversation.php:1147 mod/editpost.php:108
msgid "Permission settings"
msgstr "Настройки разрешений"
#: include/conversation.php:1148 mod/editpost.php:136 mod/events.php:583
#: mod/photos.php:965 mod/photos.php:1326
msgid "Permissions"
msgstr "Разрешения"
#: include/conversation.php:1157 mod/editpost.php:117
msgid "Public post"
msgstr "Публичное сообщение"
#: include/conversation.php:1161 mod/editpost.php:128 mod/events.php:578
#: mod/photos.php:1372 mod/photos.php:1428 mod/photos.php:1502
#: src/Module/Item/Compose.php:160 src/Object/Post.php:973
msgid "Preview"
msgstr "Просмотр"
#: include/conversation.php:1164 mod/editpost.php:130 mod/fbrowser.php:105
#: mod/fbrowser.php:134 mod/follow.php:144 mod/photos.php:1028
#: mod/photos.php:1134 mod/tagrm.php:37 mod/tagrm.php:129 mod/unfollow.php:97
#: src/Module/Contact.php:422 src/Module/RemoteFollow.php:116
msgid "Cancel"
msgstr "Отмена"
#: include/conversation.php:1171 mod/editpost.php:134
#: src/Content/Widget/VCard.php:107 src/Model/Profile.php:459
msgid "Message"
msgstr "Сообщение"
#: include/conversation.php:1172 mod/editpost.php:135
#: src/Module/Settings/TwoFactor/Trusted.php:101
msgid "Browser"
msgstr "Браузер"
#: include/conversation.php:1174 mod/editpost.php:138
msgid "Open Compose page"
msgstr "Развернуть редактор"
#: include/enotify.php:52 include/enotify.php:559
msgid "[Friendica:Notify]"
msgstr "[Friendica]"
@ -786,16 +333,16 @@ msgstr "%s %s поделился(-ась) новым сообщением"
#: mod/wallmessage.php:96 mod/wallmessage.php:120 src/Module/Attach.php:55
#: src/Module/BaseApi.php:79 src/Module/BaseApi.php:88
#: src/Module/BaseApi.php:97 src/Module/BaseApi.php:106
#: src/Module/BaseNotifications.php:88 src/Module/Contact.php:346
#: src/Module/Contact/Advanced.php:44 src/Module/Delegation.php:119
#: src/Module/BaseNotifications.php:88 src/Module/Contact.php:356
#: src/Module/Contact/Advanced.php:44 src/Module/Delegation.php:118
#: src/Module/FollowConfirm.php:16 src/Module/FriendSuggest.php:44
#: src/Module/Group.php:45 src/Module/Group.php:90 src/Module/Invite.php:41
#: src/Module/Invite.php:130 src/Module/Notifications/Notification.php:47
#: src/Module/Notifications/Notification.php:76
#: src/Module/Profile/Common.php:56 src/Module/Profile/Contacts.php:56
#: src/Module/Profile/Schedule.php:39 src/Module/Profile/Schedule.php:56
#: src/Module/Register.php:62 src/Module/Register.php:75
#: src/Module/Register.php:193 src/Module/Register.php:232
#: src/Module/Register.php:64 src/Module/Register.php:77
#: src/Module/Register.php:195 src/Module/Register.php:234
#: src/Module/Search/Directory.php:38 src/Module/Settings/Delegation.php:42
#: src/Module/Settings/Delegation.php:70 src/Module/Settings/Display.php:43
#: src/Module/Settings/Display.php:121
@ -822,7 +369,7 @@ msgstr "Доступ запрещен."
#: src/Model/Profile.php:228 src/Module/HCard.php:52
#: src/Module/Profile/Common.php:41 src/Module/Profile/Common.php:52
#: src/Module/Profile/Contacts.php:40 src/Module/Profile/Contacts.php:50
#: src/Module/Profile/Status.php:58 src/Module/Register.php:254
#: src/Module/Profile/Status.php:58 src/Module/Register.php:256
#: src/Module/RemoteFollow.php:49
msgid "User not found."
msgstr "Пользователь не найден."
@ -922,6 +469,28 @@ msgstr "Редактировать запись"
msgid "Save"
msgstr "Сохранить"
#: mod/editpost.php:92 mod/photos.php:1375 src/Content/Conversation.php:326
#: src/Module/Contact/Poke.php:157 src/Object/Post.php:964
msgid "Loading..."
msgstr "Загрузка..."
#: mod/editpost.php:93 mod/message.php:201 mod/message.php:365
#: mod/wallmessage.php:153 src/Content/Conversation.php:327
msgid "Upload photo"
msgstr "Загрузить фото"
#: mod/editpost.php:94 src/Content/Conversation.php:328
msgid "upload photo"
msgstr "загрузить фото"
#: mod/editpost.php:95 src/Content/Conversation.php:329
msgid "Attach file"
msgstr "Прикрепить файл"
#: mod/editpost.php:96 src/Content/Conversation.php:330
msgid "attach file"
msgstr "приложить файл"
#: mod/editpost.php:97 mod/message.php:202 mod/message.php:366
#: mod/wallmessage.php:154
msgid "Insert web link"
@ -947,14 +516,88 @@ msgstr "Вставить ссылку аудио"
msgid "audio link"
msgstr "аудио-ссылка"
#: mod/editpost.php:103 src/Content/Conversation.php:340
#: src/Module/Item/Compose.php:161
msgid "Set your location"
msgstr "Задать ваше местоположение"
#: mod/editpost.php:104 src/Content/Conversation.php:341
msgid "set location"
msgstr "установить местонахождение"
#: mod/editpost.php:105 src/Content/Conversation.php:342
msgid "Clear browser location"
msgstr "Очистить местонахождение браузера"
#: mod/editpost.php:106 src/Content/Conversation.php:343
msgid "clear location"
msgstr "убрать местонахождение"
#: mod/editpost.php:107 mod/message.php:203 mod/message.php:368
#: mod/photos.php:1526 mod/wallmessage.php:155
#: src/Content/Conversation.php:355 src/Content/Conversation.php:689
#: src/Module/Item/Compose.php:165 src/Object/Post.php:502
msgid "Please wait"
msgstr "Пожалуйста, подождите"
#: mod/editpost.php:108 src/Content/Conversation.php:356
msgid "Permission settings"
msgstr "Настройки разрешений"
#: mod/editpost.php:116 src/Core/ACL.php:327
msgid "CC: email addresses"
msgstr "Копии на email адреса"
#: mod/editpost.php:117 src/Content/Conversation.php:366
msgid "Public post"
msgstr "Публичное сообщение"
#: mod/editpost.php:120 src/Content/Conversation.php:345
#: src/Module/Item/Compose.php:166
msgid "Set title"
msgstr "Установить заголовок"
#: mod/editpost.php:122 src/Content/Conversation.php:347
#: src/Module/Item/Compose.php:167
msgid "Categories (comma-separated list)"
msgstr "Категории (список через запятую)"
#: mod/editpost.php:123 src/Core/ACL.php:328
msgid "Example: bob@example.com, mary@example.com"
msgstr "Пример: bob@example.com, mary@example.com"
#: mod/editpost.php:128 mod/events.php:578 mod/photos.php:1374
#: mod/photos.php:1430 mod/photos.php:1504 src/Content/Conversation.php:370
#: src/Module/Item/Compose.php:160 src/Object/Post.php:974
msgid "Preview"
msgstr "Просмотр"
#: mod/editpost.php:130 mod/fbrowser.php:105 mod/fbrowser.php:134
#: mod/follow.php:144 mod/photos.php:1029 mod/photos.php:1136 mod/tagrm.php:37
#: mod/tagrm.php:129 mod/unfollow.php:97 src/Content/Conversation.php:373
#: src/Module/Contact.php:443 src/Module/RemoteFollow.php:116
msgid "Cancel"
msgstr "Отмена"
#: mod/editpost.php:134 src/Content/Conversation.php:380
#: src/Content/Widget/VCard.php:107 src/Model/Profile.php:459
msgid "Message"
msgstr "Сообщение"
#: mod/editpost.php:135 src/Content/Conversation.php:381
#: src/Module/Settings/TwoFactor/Trusted.php:101
msgid "Browser"
msgstr "Браузер"
#: mod/editpost.php:136 mod/events.php:583 mod/photos.php:965
#: mod/photos.php:1328 src/Content/Conversation.php:357
msgid "Permissions"
msgstr "Разрешения"
#: mod/editpost.php:138 src/Content/Conversation.php:383
msgid "Open Compose page"
msgstr "Развернуть редактор"
#: mod/events.php:138 mod/events.php:140
msgid "Event can not end before it has started."
msgstr "Эвент не может закончится до старта."
@ -990,7 +633,7 @@ msgstr "Начало мероприятия:"
#: src/Module/Install.php:268 src/Module/Install.php:273
#: src/Module/Install.php:279 src/Module/Install.php:284
#: src/Module/Install.php:298 src/Module/Install.php:313
#: src/Module/Install.php:340 src/Module/Register.php:135
#: src/Module/Install.php:340 src/Module/Register.php:137
#: src/Module/Security/TwoFactor/Verify.php:100
#: src/Module/Settings/TwoFactor/Index.php:133
#: src/Module/Settings/TwoFactor/Verify.php:141
@ -1016,7 +659,7 @@ msgstr "Описание:"
#: mod/events.php:568 src/Content/Widget/VCard.php:98 src/Model/Event.php:86
#: src/Model/Event.php:113 src/Model/Event.php:483 src/Model/Event.php:969
#: src/Model/Profile.php:367 src/Module/Contact.php:608
#: src/Model/Profile.php:367 src/Module/Contact.php:623
#: src/Module/Directory.php:150 src/Module/Notifications/Introductions.php:166
#: src/Module/Profile/Profile.php:194
msgid "Location:"
@ -1031,18 +674,18 @@ msgid "Share this event"
msgstr "Поделиться этим мероприятием"
#: mod/events.php:580 mod/message.php:204 mod/message.php:367
#: mod/photos.php:947 mod/photos.php:1045 mod/photos.php:1330
#: mod/photos.php:1371 mod/photos.php:1427 mod/photos.php:1501
#: src/Module/Admin/Item/Source.php:65 src/Module/Contact.php:566
#: mod/photos.php:947 mod/photos.php:1046 mod/photos.php:1332
#: mod/photos.php:1373 mod/photos.php:1429 mod/photos.php:1503
#: src/Module/Admin/Item/Source.php:65 src/Module/Contact.php:581
#: src/Module/Contact/Advanced.php:133 src/Module/Contact/Poke.php:158
#: src/Module/Debug/ActivityPubConversion.php:141
#: src/Module/Debug/Babel.php:313 src/Module/Debug/Localtime.php:64
#: src/Module/Debug/Probe.php:56 src/Module/Debug/WebFinger.php:53
#: src/Module/Delegation.php:153 src/Module/FriendSuggest.php:129
#: src/Module/Delegation.php:147 src/Module/FriendSuggest.php:129
#: src/Module/Install.php:245 src/Module/Install.php:287
#: src/Module/Install.php:324 src/Module/Invite.php:177
#: src/Module/Item/Compose.php:150 src/Module/Profile/Profile.php:247
#: src/Module/Settings/Profile/Index.php:220 src/Object/Post.php:962
#: src/Module/Settings/Profile/Index.php:220 src/Object/Post.php:963
#: view/theme/duepuntozero/config.php:69 view/theme/frio/config.php:160
#: view/theme/quattro/config.php:71 view/theme/vier/config.php:119
msgid "Submit"
@ -1052,7 +695,7 @@ msgstr "Отправить"
msgid "Basic"
msgstr "Базовый"
#: mod/events.php:582 src/Module/Admin/Site.php:505 src/Module/Contact.php:916
#: mod/events.php:582 src/Module/Admin/Site.php:505 src/Module/Contact.php:932
#: src/Module/Profile/Profile.php:249
msgid "Advanced"
msgstr "Расширенный"
@ -1095,6 +738,12 @@ msgstr "Поддержка Diaspora не включена. Контакт не
msgid "OStatus support is disabled. Contact can't be added."
msgstr "Поддержка OStatus выключена. Контакт не может быть добавлен."
#: mod/follow.php:138 src/Content/Item.php:463 src/Content/Widget.php:76
#: src/Model/Contact.php:1051 src/Model/Contact.php:1064
#: view/theme/vier/theme.php:172
msgid "Connect/Follow"
msgstr "Подключиться/Подписаться"
#: mod/follow.php:139 src/Module/RemoteFollow.php:114
msgid "Please answer the following:"
msgstr "Пожалуйста, ответьте следующее:"
@ -1104,13 +753,13 @@ msgid "Your Identity Address:"
msgstr "Ваш адрес:"
#: mod/follow.php:141 mod/unfollow.php:100
#: src/Module/Admin/Blocklist/Contact.php:100 src/Module/Contact.php:604
#: src/Module/Admin/Blocklist/Contact.php:100 src/Module/Contact.php:619
#: src/Module/Notifications/Introductions.php:108
#: src/Module/Notifications/Introductions.php:177
msgid "Profile URL"
msgstr "URL профиля"
#: mod/follow.php:142 src/Module/Contact.php:616
#: mod/follow.php:142 src/Module/Contact.php:631
#: src/Module/Notifications/Introductions.php:170
#: src/Module/Profile/Profile.php:207
msgid "Tags:"
@ -1126,7 +775,7 @@ msgid "Add a personal note:"
msgstr "Добавить личную заметку:"
#: mod/follow.php:163 mod/unfollow.php:109 src/Module/BaseProfile.php:59
#: src/Module/Contact.php:894
#: src/Module/Contact.php:910
msgid "Status Messages and Posts"
msgstr "Ваши записи"
@ -1483,11 +1132,11 @@ msgstr "Держать окно открытым до завершения."
msgid "Photo Albums"
msgstr "Фотоальбомы"
#: mod/photos.php:112 mod/photos.php:1626
#: mod/photos.php:112 mod/photos.php:1628
msgid "Recent Photos"
msgstr "Последние фото"
#: mod/photos.php:114 mod/photos.php:1096 mod/photos.php:1628
#: mod/photos.php:114 mod/photos.php:1097 mod/photos.php:1630
msgid "Upload New Photos"
msgstr "Загрузить новые фото"
@ -1570,7 +1219,7 @@ msgstr "Доступ к этому пункту ограничен."
msgid "Upload Photos"
msgstr "Загрузить фото"
#: mod/photos.php:961 mod/photos.php:1041
#: mod/photos.php:961 mod/photos.php:1042
msgid "New album name: "
msgstr "Название нового альбома: "
@ -1586,139 +1235,151 @@ msgstr "Не показывать статус-сообщение для это
msgid "Do you really want to delete this photo album and all its photos?"
msgstr "Вы действительно хотите удалить этот альбом и все его фотографии?"
#: mod/photos.php:1025 mod/photos.php:1046
#: mod/photos.php:1025 mod/photos.php:1047
msgid "Delete Album"
msgstr "Удалить альбом"
#: mod/photos.php:1052
#: mod/photos.php:1053
msgid "Edit Album"
msgstr "Редактировать альбом"
#: mod/photos.php:1053
#: mod/photos.php:1054
msgid "Drop Album"
msgstr "Удалить альбом"
#: mod/photos.php:1058
#: mod/photos.php:1059
msgid "Show Newest First"
msgstr "Показать новые первыми"
#: mod/photos.php:1060
#: mod/photos.php:1061
msgid "Show Oldest First"
msgstr "Показать старые первыми"
#: mod/photos.php:1081 mod/photos.php:1611
#: mod/photos.php:1082 mod/photos.php:1613
msgid "View Photo"
msgstr "Просмотр фото"
#: mod/photos.php:1118
#: mod/photos.php:1119
msgid "Permission denied. Access to this item may be restricted."
msgstr "Нет разрешения. Доступ к этому элементу ограничен."
#: mod/photos.php:1120
#: mod/photos.php:1121
msgid "Photo not available"
msgstr "Фото недоступно"
#: mod/photos.php:1130
#: mod/photos.php:1131
msgid "Do you really want to delete this photo?"
msgstr "Вы действительно хотите удалить эту фотографию?"
#: mod/photos.php:1131 mod/photos.php:1331
#: mod/photos.php:1132 mod/photos.php:1333
msgid "Delete Photo"
msgstr "Удалить фото"
#: mod/photos.php:1222
#: mod/photos.php:1224
msgid "View photo"
msgstr "Просмотр фото"
#: mod/photos.php:1224
#: mod/photos.php:1226
msgid "Edit photo"
msgstr "Редактировать фото"
#: mod/photos.php:1225
#: mod/photos.php:1227
msgid "Delete photo"
msgstr "Удалить фото"
#: mod/photos.php:1226
#: mod/photos.php:1228
msgid "Use as profile photo"
msgstr "Использовать как фото профиля"
#: mod/photos.php:1233
#: mod/photos.php:1235
msgid "Private Photo"
msgstr "Закрытое фото"
#: mod/photos.php:1239
#: mod/photos.php:1241
msgid "View Full Size"
msgstr "Просмотреть полный размер"
#: mod/photos.php:1299
#: mod/photos.php:1301
msgid "Tags: "
msgstr "Ключевые слова: "
#: mod/photos.php:1302
#: mod/photos.php:1304
msgid "[Select tags to remove]"
msgstr "[выберите тэги для удаления]"
#: mod/photos.php:1317
#: mod/photos.php:1319
msgid "New album name"
msgstr "Название нового альбома"
#: mod/photos.php:1318
#: mod/photos.php:1320
msgid "Caption"
msgstr "Подпись"
#: mod/photos.php:1319
#: mod/photos.php:1321
msgid "Add a Tag"
msgstr "Добавить тег"
#: mod/photos.php:1319
#: mod/photos.php:1321
msgid ""
"Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
msgstr "Пример: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
#: mod/photos.php:1320
#: mod/photos.php:1322
msgid "Do not rotate"
msgstr "Не поворачивать"
#: mod/photos.php:1321
#: mod/photos.php:1323
msgid "Rotate CW (right)"
msgstr "Поворот по часовой стрелке (направо)"
#: mod/photos.php:1322
#: mod/photos.php:1324
msgid "Rotate CCW (left)"
msgstr "Поворот против часовой стрелки (налево)"
#: mod/photos.php:1368 mod/photos.php:1424 mod/photos.php:1498
#: src/Module/Contact.php:1046 src/Module/Item/Compose.php:148
#: src/Object/Post.php:959
#: mod/photos.php:1370 mod/photos.php:1426 mod/photos.php:1500
#: src/Module/Contact.php:1062 src/Module/Item/Compose.php:148
#: src/Object/Post.php:960
msgid "This is you"
msgstr "Это вы"
#: mod/photos.php:1370 mod/photos.php:1426 mod/photos.php:1500
#: src/Object/Post.php:495 src/Object/Post.php:961
#: mod/photos.php:1372 mod/photos.php:1428 mod/photos.php:1502
#: src/Object/Post.php:496 src/Object/Post.php:962
msgid "Comment"
msgstr "Комментировать"
#: mod/photos.php:1521 src/Object/Post.php:348
#: mod/photos.php:1461 src/Content/Conversation.php:615
#: src/Object/Post.php:227
msgid "Select"
msgstr "Выберите"
#: mod/photos.php:1462 mod/settings.php:573 src/Content/Conversation.php:616
#: src/Module/Admin/Users/Active.php:139
#: src/Module/Admin/Users/Blocked.php:140 src/Module/Admin/Users/Index.php:153
#: src/Module/Contact.php:865 src/Module/Contact.php:1150
msgid "Delete"
msgstr "Удалить"
#: mod/photos.php:1523 src/Object/Post.php:349
msgid "Like"
msgstr ""
#: mod/photos.php:1522 src/Object/Post.php:348
#: mod/photos.php:1524 src/Object/Post.php:349
msgid "I like this (toggle)"
msgstr "Нравится"
#: mod/photos.php:1523 src/Object/Post.php:349
#: mod/photos.php:1525 src/Object/Post.php:350
msgid "Dislike"
msgstr ""
#: mod/photos.php:1525 src/Object/Post.php:349
#: mod/photos.php:1527 src/Object/Post.php:350
msgid "I don't like this (toggle)"
msgstr "Не нравится"
#: mod/photos.php:1547
#: mod/photos.php:1549
msgid "Map"
msgstr "Карта"
#: mod/photos.php:1617 mod/videos.php:243
#: mod/photos.php:1619 mod/videos.php:243
msgid "View Album"
msgstr "Просмотреть альбом"
@ -1949,7 +1610,7 @@ msgstr "Система автоматически загружает диало
#: mod/settings.php:551
msgid "Enable Content Warning"
msgstr ""
msgstr "Включить предупреждение о контенте"
#: mod/settings.php:551
msgid ""
@ -1957,7 +1618,7 @@ msgid ""
" field which collapse their post by default. This enables the automatic "
"collapsing instead of setting the content warning as the post title. Doesn't"
" affect any other content filtering you eventually set up."
msgstr ""
msgstr "Пользователи некоторых сетей, таких как Mastodon или Pleroma, могут использовать \"предупреждение о контенте\", сворачивающее их записи. Эта настройка выключает это свёртывание вместо обычного помещения \"предупреждения о контенте\" в заголовок записи. Это не влияет на другие фильтры, которые вы можете настроить."
#: mod/settings.php:552
msgid "Enable intelligent shortening"
@ -2203,7 +1864,7 @@ msgstr "Настройки аккаунта"
msgid "Password Settings"
msgstr "Смена пароля"
#: mod/settings.php:719 src/Module/Register.php:149
#: mod/settings.php:719 src/Module/Register.php:151
msgid "New Password:"
msgstr "Новый пароль:"
@ -2213,7 +1874,7 @@ msgid ""
"spaces, accentuated letters and colon (:)."
msgstr "Разрешенные символы: a-z, A-Z, 0-9 специальные символы за исключением пробелов, букв с акцентами и двоеточия (:)."
#: mod/settings.php:720 src/Module/Register.php:150
#: mod/settings.php:720 src/Module/Register.php:152
msgid "Confirm:"
msgstr "Подтвердите:"
@ -2571,6 +2232,19 @@ msgstr "Нет предложений. Если это новый сайт, по
msgid "Friend Suggestions"
msgstr "Предложения друзей"
#: mod/tagger.php:90 src/Content/Item.php:346 src/Model/Item.php:2624
msgid "photo"
msgstr "фото"
#: mod/tagger.php:90 src/Content/Item.php:341 src/Content/Item.php:350
msgid "status"
msgstr "статус"
#: mod/tagger.php:123 src/Content/Item.php:360
#, php-format
msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr "%1$s tagged %2$s's %3$s в %4$s"
#: mod/tagrm.php:115
msgid "Remove Item Tag"
msgstr "Удалить ключевое слово"
@ -2588,13 +2262,13 @@ msgstr "Удалить"
msgid "User imports on closed servers can only be done by an administrator."
msgstr "Импорт пользователей на закрытых серверах может быть произведён только администратором."
#: mod/uimport.php:54 src/Module/Register.php:84
#: mod/uimport.php:54 src/Module/Register.php:86
msgid ""
"This site has exceeded the number of allowed daily account registrations. "
"Please try again tomorrow."
msgstr "Этот сайт превысил допустимое количество ежедневных регистраций. Пожалуйста, повторите попытку завтра."
#: mod/uimport.php:61 src/Module/Register.php:160
#: mod/uimport.php:61 src/Module/Register.php:162
msgid "Import"
msgstr "Импорт"
@ -2704,7 +2378,7 @@ msgid ""
"your site allow private mail from unknown senders."
msgstr "Если Вы хотите ответить %s, пожалуйста, проверьте, позволяют ли настройки конфиденциальности на Вашем сайте принимать личные сообщения от неизвестных отправителей."
#: src/App.php:452
#: src/App.php:453
msgid "No system theme config value set."
msgstr "Настройки системной темы не установлены."
@ -2746,18 +2420,18 @@ msgid "All contacts"
msgstr "Все контакты"
#: src/BaseModule.php:212 src/Content/Widget.php:238 src/Core/ACL.php:195
#: src/Module/Contact.php:816 src/Module/PermissionTooltip.php:77
#: src/Module/Contact.php:831 src/Module/PermissionTooltip.php:77
#: src/Module/PermissionTooltip.php:99
msgid "Followers"
msgstr "Подписаны на вас"
#: src/BaseModule.php:217 src/Content/Widget.php:239
#: src/Module/Contact.php:817
#: src/Module/Contact.php:832
msgid "Following"
msgstr "Ваши подписки"
#: src/BaseModule.php:222 src/Content/Widget.php:240
#: src/Module/Contact.php:818
#: src/Module/Contact.php:833
msgid "Mutual friends"
msgstr "Взаимные друзья"
@ -2975,6 +2649,268 @@ msgstr "pnut"
msgid "%s (via %s)"
msgstr "%s (через %s)"
#: src/Content/Conversation.php:207
#, php-format
msgid "%s likes this."
msgstr "%s нравится это."
#: src/Content/Conversation.php:210
#, php-format
msgid "%s doesn't like this."
msgstr "%s не нравится это."
#: src/Content/Conversation.php:213
#, php-format
msgid "%s attends."
msgstr "%s посещает."
#: src/Content/Conversation.php:216
#, php-format
msgid "%s doesn't attend."
msgstr "%s не посетит."
#: src/Content/Conversation.php:219
#, php-format
msgid "%s attends maybe."
msgstr "%s может быть посетит."
#: src/Content/Conversation.php:222 src/Content/Conversation.php:260
#: src/Content/Conversation.php:848
#, php-format
msgid "%s reshared this."
msgstr "%s поделился этим."
#: src/Content/Conversation.php:228
msgid "and"
msgstr "и"
#: src/Content/Conversation.php:231
#, php-format
msgid "and %d other people"
msgstr "и еще %d человек"
#: src/Content/Conversation.php:239
#, php-format
msgid "<span %1$s>%2$d people</span> like this"
msgstr "<span %1$s>%2$d людям</span> нравится это"
#: src/Content/Conversation.php:240
#, php-format
msgid "%s like this."
msgstr "%s нравится это."
#: src/Content/Conversation.php:243
#, php-format
msgid "<span %1$s>%2$d people</span> don't like this"
msgstr "<span %1$s>%2$d людям</span> не нравится это"
#: src/Content/Conversation.php:244
#, php-format
msgid "%s don't like this."
msgstr "%s не нравится это"
#: src/Content/Conversation.php:247
#, php-format
msgid "<span %1$s>%2$d people</span> attend"
msgstr "<span %1$s>%2$d человека</span> посетят"
#: src/Content/Conversation.php:248
#, php-format
msgid "%s attend."
msgstr "%s посетит."
#: src/Content/Conversation.php:251
#, php-format
msgid "<span %1$s>%2$d people</span> don't attend"
msgstr "<span %1$s>%2$d человек</span> не посетит"
#: src/Content/Conversation.php:252
#, php-format
msgid "%s don't attend."
msgstr "%s не посетит"
#: src/Content/Conversation.php:255
#, php-format
msgid "<span %1$s>%2$d people</span> attend maybe"
msgstr "<span %1$s>%2$d человек</span> может быть посетят"
#: src/Content/Conversation.php:256
#, php-format
msgid "%s attend maybe."
msgstr "%s может быть посетит."
#: src/Content/Conversation.php:259
#, php-format
msgid "<span %1$s>%2$d people</span> reshared this"
msgstr "<span %1$s>%2$d людей</span> поделились этим"
#: src/Content/Conversation.php:307
msgid "Visible to <strong>everybody</strong>"
msgstr "Видимое <strong>всем</strong>"
#: src/Content/Conversation.php:308 src/Module/Item/Compose.php:159
#: src/Object/Post.php:973
msgid "Please enter a image/video/audio/webpage URL:"
msgstr "Пожалуйста, введите адрес картинки/видео/аудио/странички:"
#: src/Content/Conversation.php:309
msgid "Tag term:"
msgstr "Тег:"
#: src/Content/Conversation.php:310 src/Module/Filer/SaveTag.php:68
msgid "Save to Folder:"
msgstr "Сохранить в папку:"
#: src/Content/Conversation.php:311
msgid "Where are you right now?"
msgstr "И где вы сейчас?"
#: src/Content/Conversation.php:312
msgid "Delete item(s)?"
msgstr "Удалить елемент(ты)?"
#: src/Content/Conversation.php:322
msgid "New Post"
msgstr "Новая запись"
#: src/Content/Conversation.php:325
msgid "Share"
msgstr "Поделиться"
#: src/Content/Conversation.php:331 src/Module/Item/Compose.php:151
#: src/Object/Post.php:965
msgid "Bold"
msgstr "Жирный"
#: src/Content/Conversation.php:332 src/Module/Item/Compose.php:152
#: src/Object/Post.php:966
msgid "Italic"
msgstr "Kурсивный"
#: src/Content/Conversation.php:333 src/Module/Item/Compose.php:153
#: src/Object/Post.php:967
msgid "Underline"
msgstr "Подчеркнутый"
#: src/Content/Conversation.php:334 src/Module/Item/Compose.php:154
#: src/Object/Post.php:968
msgid "Quote"
msgstr "Цитата"
#: src/Content/Conversation.php:335 src/Module/Item/Compose.php:155
#: src/Object/Post.php:969
msgid "Code"
msgstr "Код"
#: src/Content/Conversation.php:336 src/Module/Item/Compose.php:156
#: src/Object/Post.php:970
msgid "Image"
msgstr "Изображение / Фото"
#: src/Content/Conversation.php:337 src/Module/Item/Compose.php:157
#: src/Object/Post.php:971
msgid "Link"
msgstr "Ссылка"
#: src/Content/Conversation.php:338 src/Module/Item/Compose.php:158
#: src/Object/Post.php:972
msgid "Link or Media"
msgstr "Ссылка или медиа"
#: src/Content/Conversation.php:339
msgid "Video"
msgstr ""
#: src/Content/Conversation.php:352 src/Module/Item/Compose.php:172
msgid "Scheduled at"
msgstr "Запланировано на"
#: src/Content/Conversation.php:651 src/Object/Post.php:454
#: src/Object/Post.php:455
#, php-format
msgid "View %s's profile @ %s"
msgstr "Просмотреть профиль %s [@ %s]"
#: src/Content/Conversation.php:664 src/Object/Post.php:442
msgid "Categories:"
msgstr "Категории:"
#: src/Content/Conversation.php:665 src/Object/Post.php:443
msgid "Filed under:"
msgstr "В рубрике:"
#: src/Content/Conversation.php:672 src/Object/Post.php:468
#, php-format
msgid "%s from %s"
msgstr "%s из %s"
#: src/Content/Conversation.php:687
msgid "View in context"
msgstr "Смотреть в контексте"
#: src/Content/Conversation.php:752
msgid "remove"
msgstr "удалить"
#: src/Content/Conversation.php:756
msgid "Delete Selected Items"
msgstr "Удалить выбранные позиции"
#: src/Content/Conversation.php:820 src/Content/Conversation.php:823
#: src/Content/Conversation.php:826 src/Content/Conversation.php:829
#, php-format
msgid "You had been addressed (%s)."
msgstr "К вам обратились (%s)."
#: src/Content/Conversation.php:832
#, php-format
msgid "You are following %s."
msgstr "Вы подписаны на %s."
#: src/Content/Conversation.php:835
msgid "Tagged"
msgstr "Отмечено"
#: src/Content/Conversation.php:850
msgid "Reshared"
msgstr "Репост"
#: src/Content/Conversation.php:850
#, php-format
msgid "Reshared by %s <%s>"
msgstr ""
#: src/Content/Conversation.php:853
#, php-format
msgid "%s is participating in this thread."
msgstr "%s участвует в этом обсуждении"
#: src/Content/Conversation.php:856
msgid "Stored"
msgstr ""
#: src/Content/Conversation.php:859
msgid "Global"
msgstr ""
#: src/Content/Conversation.php:862
msgid "Relayed"
msgstr "Ретранслировано"
#: src/Content/Conversation.php:862
#, php-format
msgid "Relayed by %s <%s>"
msgstr ""
#: src/Content/Conversation.php:865
msgid "Fetched"
msgstr "Загружено"
#: src/Content/Conversation.php:865
#, php-format
msgid "Fetched because of %s <%s>"
msgstr ""
#: src/Content/Feature.php:96
msgid "General Features"
msgstr "Основные возможности"
@ -3080,6 +3016,70 @@ msgstr ""
msgid "show more"
msgstr "показать больше"
#: src/Content/Item.php:305
#, php-format
msgid "%1$s poked %2$s"
msgstr "%1$s ткнул %2$s"
#: src/Content/Item.php:338 src/Model/Item.php:2622
msgid "event"
msgstr "мероприятие"
#: src/Content/Item.php:442 view/theme/frio/theme.php:323
msgid "Follow Thread"
msgstr "Подписаться на обсуждение"
#: src/Content/Item.php:443 src/Model/Contact.php:1056
msgid "View Status"
msgstr "Просмотреть статус"
#: src/Content/Item.php:444 src/Content/Item.php:466 src/Model/Contact.php:982
#: src/Model/Contact.php:1048 src/Model/Contact.php:1057
#: src/Module/Directory.php:160 src/Module/Settings/Profile/Index.php:223
msgid "View Profile"
msgstr "Просмотреть профиль"
#: src/Content/Item.php:445 src/Model/Contact.php:1058
msgid "View Photos"
msgstr "Просмотреть фото"
#: src/Content/Item.php:446 src/Model/Contact.php:1049
#: src/Model/Contact.php:1059
msgid "Network Posts"
msgstr "Записи сети"
#: src/Content/Item.php:447 src/Model/Contact.php:1050
#: src/Model/Contact.php:1060
msgid "View Contact"
msgstr "Просмотреть контакт"
#: src/Content/Item.php:448 src/Model/Contact.php:1062
msgid "Send PM"
msgstr "Отправить ЛС"
#: src/Content/Item.php:449 src/Module/Admin/Blocklist/Contact.php:84
#: src/Module/Admin/Users/Active.php:140 src/Module/Admin/Users/Index.php:154
#: src/Module/Contact.php:602 src/Module/Contact.php:863
#: src/Module/Contact.php:1133
msgid "Block"
msgstr "Заблокировать"
#: src/Content/Item.php:450 src/Module/Contact.php:603
#: src/Module/Contact.php:864 src/Module/Contact.php:1141
#: src/Module/Notifications/Introductions.php:113
#: src/Module/Notifications/Introductions.php:185
#: src/Module/Notifications/Notification.php:59
msgid "Ignore"
msgstr "Игнорировать"
#: src/Content/Item.php:454 src/Object/Post.php:429
msgid "Languages"
msgstr "Языки"
#: src/Content/Item.php:458 src/Model/Contact.php:1063
msgid "Poke"
msgstr "потыкать"
#: src/Content/Nav.php:90
msgid "Nothing new here"
msgstr "Ничего нового здесь"
@ -3104,7 +3104,7 @@ msgstr "Выход"
msgid "End this session"
msgstr "Завершить эту сессию"
#: src/Content/Nav.php:185 src/Module/Bookmarklet.php:45
#: src/Content/Nav.php:185 src/Module/Bookmarklet.php:44
#: src/Module/Security/Login.php:146
msgid "Login"
msgstr "Вход"
@ -3114,7 +3114,7 @@ msgid "Sign in"
msgstr "Вход"
#: src/Content/Nav.php:190 src/Module/BaseProfile.php:56
#: src/Module/Contact.php:619 src/Module/Contact.php:883
#: src/Module/Contact.php:634 src/Module/Contact.php:899
#: src/Module/Settings/TwoFactor/Index.php:112 view/theme/frio/theme.php:226
msgid "Status"
msgstr "Записи"
@ -3125,8 +3125,8 @@ msgid "Your posts and conversations"
msgstr "Ваши записи и диалоги"
#: src/Content/Nav.php:191 src/Module/BaseProfile.php:48
#: src/Module/BaseSettings.php:57 src/Module/Contact.php:621
#: src/Module/Contact.php:899 src/Module/Profile/Profile.php:241
#: src/Module/BaseSettings.php:57 src/Module/Contact.php:636
#: src/Module/Contact.php:915 src/Module/Profile/Profile.php:241
#: src/Module/Welcome.php:57 view/theme/frio/theme.php:227
msgid "Profile"
msgstr "Информация"
@ -3163,7 +3163,7 @@ msgstr "Ваши личные заметки"
msgid "Home"
msgstr "Мой профиль"
#: src/Content/Nav.php:216 src/Module/Register.php:155
#: src/Content/Nav.php:216 src/Module/Register.php:157
#: src/Module/Security/Login.php:106
msgid "Register"
msgstr "Регистрация"
@ -3212,8 +3212,8 @@ msgstr "Тэги"
#: src/Content/Nav.php:235 src/Content/Nav.php:294
#: src/Content/Text/HTML.php:902 src/Module/BaseProfile.php:126
#: src/Module/BaseProfile.php:129 src/Module/Contact.php:819
#: src/Module/Contact.php:906 view/theme/frio/theme.php:237
#: src/Module/BaseProfile.php:129 src/Module/Contact.php:834
#: src/Module/Contact.php:922 view/theme/frio/theme.php:237
msgid "Contacts"
msgstr "Контакты"
@ -3247,7 +3247,7 @@ msgid "Information about this friendica instance"
msgstr "Информация об этом экземпляре Friendica"
#: src/Content/Nav.php:266 src/Module/Admin/Tos.php:59
#: src/Module/BaseAdmin.php:96 src/Module/Register.php:163
#: src/Module/BaseAdmin.php:96 src/Module/Register.php:165
#: src/Module/Tos.php:84
msgid "Terms of Service"
msgstr "Условия оказания услуг"
@ -3359,38 +3359,38 @@ msgstr "след."
msgid "last"
msgstr "последний"
#: src/Content/Text/BBCode.php:980 src/Content/Text/BBCode.php:1768
#: src/Content/Text/BBCode.php:1769
#: src/Content/Text/BBCode.php:985 src/Content/Text/BBCode.php:1773
#: src/Content/Text/BBCode.php:1774
msgid "Image/photo"
msgstr "Изображение / Фото"
#: src/Content/Text/BBCode.php:1153
#: src/Content/Text/BBCode.php:1158
#, php-format
msgid "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
msgstr "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
#: src/Content/Text/BBCode.php:1178 src/Model/Item.php:3139
#: src/Model/Item.php:3145 src/Model/Item.php:3146
#: src/Content/Text/BBCode.php:1183 src/Model/Item.php:3152
#: src/Model/Item.php:3158 src/Model/Item.php:3159
msgid "Link to source"
msgstr ""
#: src/Content/Text/BBCode.php:1686 src/Content/Text/HTML.php:943
#: src/Content/Text/BBCode.php:1691 src/Content/Text/HTML.php:943
msgid "Click to open/close"
msgstr "Нажмите, чтобы открыть / закрыть"
#: src/Content/Text/BBCode.php:1717
#: src/Content/Text/BBCode.php:1722
msgid "$1 wrote:"
msgstr "$1 написал:"
#: src/Content/Text/BBCode.php:1773 src/Content/Text/BBCode.php:1774
#: src/Content/Text/BBCode.php:1778 src/Content/Text/BBCode.php:1779
msgid "Encrypted content"
msgstr "Зашифрованный контент"
#: src/Content/Text/BBCode.php:1990
#: src/Content/Text/BBCode.php:1995
msgid "Invalid source protocol"
msgstr "Неправильный протокол источника"
#: src/Content/Text/BBCode.php:2005
#: src/Content/Text/BBCode.php:2010
msgid "Invalid link protocol"
msgstr "Неправильная протокольная ссылка"
@ -3444,7 +3444,7 @@ msgstr "Введите имя или интерес"
msgid "Examples: Robert Morgenstein, Fishing"
msgstr "Примеры: Роберт Morgenstein, Рыбалка"
#: src/Content/Widget.php:78 src/Module/Contact.php:840
#: src/Content/Widget.php:78 src/Module/Contact.php:855
#: src/Module/Directory.php:99 view/theme/vier/theme.php:174
msgid "Find"
msgstr "Найти"
@ -3471,7 +3471,7 @@ msgid "Local Directory"
msgstr "Локальный каталог"
#: src/Content/Widget.php:214 src/Model/Group.php:535
#: src/Module/Contact.php:803 src/Module/Welcome.php:76
#: src/Module/Contact.php:818 src/Module/Welcome.php:76
msgid "Groups"
msgstr "Группы"
@ -3483,7 +3483,7 @@ msgstr "Все"
msgid "Relationships"
msgstr "Отношения"
#: src/Content/Widget.php:247 src/Module/Contact.php:755
#: src/Content/Widget.php:247 src/Module/Contact.php:770
#: src/Module/Group.php:292
msgid "All Contacts"
msgstr "Все контакты"
@ -3529,7 +3529,7 @@ msgstr "Люди"
msgid "Organisations"
msgstr "Организации"
#: src/Content/Widget.php:529 src/Model/Contact.php:1474
#: src/Content/Widget.php:529 src/Model/Contact.php:1480
msgid "News"
msgstr "Новости"
@ -3549,11 +3549,11 @@ msgstr "Экспортировать календарь в формат ical"
msgid "Export calendar as csv"
msgstr "Экспортировать календарь в формат csv"
#: src/Content/Widget/ContactBlock.php:73
#: src/Content/Widget/ContactBlock.php:79
msgid "No contacts"
msgstr "Нет контактов"
#: src/Content/Widget/ContactBlock.php:105
#: src/Content/Widget/ContactBlock.php:108
#, php-format
msgid "%d Contact"
msgid_plural "%d Contacts"
@ -3562,7 +3562,7 @@ msgstr[1] "%d контактов"
msgstr[2] "%d контактов"
msgstr[3] "%d контактов"
#: src/Content/Widget/ContactBlock.php:124
#: src/Content/Widget/ContactBlock.php:125
msgid "View Contacts"
msgstr "Просмотр контактов"
@ -3588,12 +3588,12 @@ msgid "More Trending Tags"
msgstr "Больше популярных тэгов"
#: src/Content/Widget/VCard.php:96 src/Model/Profile.php:372
#: src/Module/Contact.php:610 src/Module/Profile/Profile.php:176
#: src/Module/Contact.php:625 src/Module/Profile/Profile.php:176
msgid "XMPP:"
msgstr "XMPP:"
#: src/Content/Widget/VCard.php:97 src/Model/Profile.php:373
#: src/Module/Contact.php:612 src/Module/Profile/Profile.php:180
#: src/Module/Contact.php:627 src/Module/Profile/Profile.php:180
msgid "Matrix:"
msgstr ""
@ -4399,85 +4399,85 @@ msgstr "%s теперь друзья с %s"
msgid "Legacy module file not found: %s"
msgstr "Legacy-модуль не найден: %s"
#: src/Model/Contact.php:1046 src/Model/Contact.php:1059
#: src/Model/Contact.php:1052 src/Model/Contact.php:1065
msgid "UnFollow"
msgstr "Отписаться"
#: src/Model/Contact.php:1055
#: src/Model/Contact.php:1061
msgid "Drop Contact"
msgstr "Удалить контакт"
#: src/Model/Contact.php:1065 src/Module/Admin/Users/Pending.php:107
#: src/Model/Contact.php:1071 src/Module/Admin/Users/Pending.php:107
#: src/Module/Notifications/Introductions.php:111
#: src/Module/Notifications/Introductions.php:183
msgid "Approve"
msgstr "Одобрить"
#: src/Model/Contact.php:1470
#: src/Model/Contact.php:1476
msgid "Organisation"
msgstr "Организация"
#: src/Model/Contact.php:1478
#: src/Model/Contact.php:1484
msgid "Forum"
msgstr "Форум"
#: src/Model/Contact.php:2334
#: src/Model/Contact.php:2340
msgid "Disallowed profile URL."
msgstr "Запрещенный URL профиля."
#: src/Model/Contact.php:2339 src/Module/Friendica.php:81
#: src/Model/Contact.php:2345 src/Module/Friendica.php:81
msgid "Blocked domain"
msgstr "Заблокированный домен"
#: src/Model/Contact.php:2344
#: src/Model/Contact.php:2350
msgid "Connect URL missing."
msgstr "Connect-URL отсутствует."
#: src/Model/Contact.php:2353
#: src/Model/Contact.php:2359
msgid ""
"The contact could not be added. Please check the relevant network "
"credentials in your Settings -> Social Networks page."
msgstr "Контакт не может быть добавлен. Пожалуйста проверьте учётные данные на странице Настройки -> Социальные сети."
#: src/Model/Contact.php:2390
#: src/Model/Contact.php:2396
msgid "The profile address specified does not provide adequate information."
msgstr "Указанный адрес профиля не дает адекватной информации."
#: src/Model/Contact.php:2392
#: src/Model/Contact.php:2398
msgid "No compatible communication protocols or feeds were discovered."
msgstr "Обнаружены несовместимые протоколы связи или каналы."
#: src/Model/Contact.php:2395
#: src/Model/Contact.php:2401
msgid "An author or name was not found."
msgstr "Автор или имя не найдены."
#: src/Model/Contact.php:2398
#: src/Model/Contact.php:2404
msgid "No browser URL could be matched to this address."
msgstr "Нет URL браузера, который соответствует этому адресу."
#: src/Model/Contact.php:2401
#: src/Model/Contact.php:2407
msgid ""
"Unable to match @-style Identity Address with a known protocol or email "
"contact."
msgstr "Не получается совместить этот адрес с известным протоколом или контактом электронной почты."
#: src/Model/Contact.php:2402
#: src/Model/Contact.php:2408
msgid "Use mailto: in front of address to force email check."
msgstr "Bcgjkmpeqnt mailto: перед адресом для быстрого доступа к email."
#: src/Model/Contact.php:2408
#: src/Model/Contact.php:2414
msgid ""
"The profile address specified belongs to a network which has been disabled "
"on this site."
msgstr "Указанный адрес профиля принадлежит сети, недоступной на этом сайта."
#: src/Model/Contact.php:2413
#: src/Model/Contact.php:2419
msgid ""
"Limited profile. This person will be unable to receive direct/personal "
"notifications from you."
msgstr "Ограниченный профиль. Этот человек не сможет получить прямые / личные уведомления от вас."
#: src/Model/Contact.php:2472
#: src/Model/Contact.php:2478
msgid "Unable to retrieve contact information."
msgstr "Невозможно получить контактную информацию."
@ -4594,33 +4594,33 @@ msgstr "Название группы: "
msgid "Edit groups"
msgstr "Редактировать группы"
#: src/Model/Item.php:1663
#: src/Model/Item.php:1676
#, php-format
msgid "Detected languages in this post:\\n%s"
msgstr "Обнаруженные в этой записи языки:\\n%s"
#: src/Model/Item.php:2613
#: src/Model/Item.php:2626
msgid "activity"
msgstr "активность"
#: src/Model/Item.php:2615
#: src/Model/Item.php:2628
msgid "comment"
msgstr ""
#: src/Model/Item.php:2618
#: src/Model/Item.php:2631
msgid "post"
msgstr "пост"
#: src/Model/Item.php:2755
#: src/Model/Item.php:2768
#, php-format
msgid "Content warning: %s"
msgstr "Предупреждение о контенте: %s"
#: src/Model/Item.php:3104
#: src/Model/Item.php:3117
msgid "bytes"
msgstr "байт"
#: src/Model/Item.php:3133 src/Model/Item.php:3134
#: src/Model/Item.php:3146 src/Model/Item.php:3147
msgid "View on separate page"
msgstr "Посмотреть в отдельной вкладке"
@ -4676,7 +4676,7 @@ msgstr ""
#: src/Model/Notification.php:293
#, php-format
msgid "%1$s replied to you on %2$s"
msgstr ""
msgstr "%1$s ответил(а) вам на %2$s"
#: src/Model/Notification.php:297
#, php-format
@ -4747,7 +4747,7 @@ msgstr "Изменить фото профиля"
msgid "Homepage:"
msgstr "Домашняя страничка:"
#: src/Model/Profile.php:371 src/Module/Contact.php:614
#: src/Model/Profile.php:371 src/Module/Contact.php:629
#: src/Module/Notifications/Introductions.php:168
msgid "About:"
msgstr "О себе:"
@ -4807,7 +4807,7 @@ msgstr "Каталог, куда сохраняются загруженные
msgid "Enter a valid existing folder"
msgstr "Введите путь к существующему каталогу"
#: src/Model/User.php:208 src/Model/User.php:1004
#: src/Model/User.php:208 src/Model/User.php:1055
msgid "SERIOUS ERROR: Generation of security keys failed."
msgstr "СЕРЬЕЗНАЯ ОШИБКА: генерация ключей безопасности не удалась."
@ -4838,44 +4838,44 @@ msgid ""
"The password can't contain accentuated letters, white spaces or colons (:)"
msgstr "Пароль не может содержать символы с акцентами, пробелы или двоеточия (:)"
#: src/Model/User.php:884
#: src/Model/User.php:935
msgid "Passwords do not match. Password unchanged."
msgstr "Пароли не совпадают. Пароль не изменен."
#: src/Model/User.php:891
#: src/Model/User.php:942
msgid "An invitation is required."
msgstr "Требуется приглашение."
#: src/Model/User.php:895
#: src/Model/User.php:946
msgid "Invitation could not be verified."
msgstr "Приглашение не может быть проверено."
#: src/Model/User.php:903
#: src/Model/User.php:954
msgid "Invalid OpenID url"
msgstr "Неверный URL OpenID"
#: src/Model/User.php:916 src/Security/Authentication.php:223
#: src/Model/User.php:967 src/Security/Authentication.php:223
msgid ""
"We encountered a problem while logging in with the OpenID you provided. "
"Please check the correct spelling of the ID."
msgstr "Мы столкнулись с проблемой при входе с OpenID, который вы указали. Пожалуйста, проверьте правильность написания ID."
#: src/Model/User.php:916 src/Security/Authentication.php:223
#: src/Model/User.php:967 src/Security/Authentication.php:223
msgid "The error message was:"
msgstr "Сообщение об ошибке было:"
#: src/Model/User.php:922
#: src/Model/User.php:973
msgid "Please enter the required information."
msgstr "Пожалуйста, введите необходимую информацию."
#: src/Model/User.php:936
#: src/Model/User.php:987
#, php-format
msgid ""
"system.username_min_length (%s) and system.username_max_length (%s) are "
"excluding each other, swapping values."
msgstr "system.username_min_length (%s) и system.username_max_length (%s) противоречат друг другу, меняем их местами."
#: src/Model/User.php:943
#: src/Model/User.php:994
#, php-format
msgid "Username should be at least %s character."
msgid_plural "Username should be at least %s characters."
@ -4884,7 +4884,7 @@ msgstr[1] "Имя пользователя должно быть хотя бы %
msgstr[2] "Имя пользователя должно быть хотя бы %s символов."
msgstr[3] "Имя пользователя должно быть хотя бы %s символов."
#: src/Model/User.php:947
#: src/Model/User.php:998
#, php-format
msgid "Username should be at most %s character."
msgid_plural "Username should be at most %s characters."
@ -4893,56 +4893,56 @@ msgstr[1] "Имя пользователя должно быть не больш
msgstr[2] "Имя пользователя должно быть не больше %s символов."
msgstr[3] "Имя пользователя должно быть не больше %s символов."
#: src/Model/User.php:955
#: src/Model/User.php:1006
msgid "That doesn't appear to be your full (First Last) name."
msgstr "Кажется, что это ваше неполное (Имя Фамилия) имя."
#: src/Model/User.php:960
#: src/Model/User.php:1011
msgid "Your email domain is not among those allowed on this site."
msgstr "Домен вашего адреса электронной почты не относится к числу разрешенных на этом сайте."
#: src/Model/User.php:964
#: src/Model/User.php:1015
msgid "Not a valid email address."
msgstr "Неверный адрес электронной почты."
#: src/Model/User.php:967
#: src/Model/User.php:1018
msgid "The nickname was blocked from registration by the nodes admin."
msgstr "Этот ник был заблокирован для регистрации администратором узла."
#: src/Model/User.php:971 src/Model/User.php:979
#: src/Model/User.php:1022 src/Model/User.php:1030
msgid "Cannot use that email."
msgstr "Нельзя использовать этот Email."
#: src/Model/User.php:986
#: src/Model/User.php:1037
msgid "Your nickname can only contain a-z, 0-9 and _."
msgstr "Ваш ник может содержать только символы a-z, 0-9 и _."
#: src/Model/User.php:994 src/Model/User.php:1051
#: src/Model/User.php:1045 src/Model/User.php:1102
msgid "Nickname is already registered. Please choose another."
msgstr "Такой ник уже зарегистрирован. Пожалуйста, выберите другой."
#: src/Model/User.php:1038 src/Model/User.php:1042
#: src/Model/User.php:1089 src/Model/User.php:1093
msgid "An error occurred during registration. Please try again."
msgstr "Ошибка при регистрации. Пожалуйста, попробуйте еще раз."
#: src/Model/User.php:1065
#: src/Model/User.php:1116
msgid "An error occurred creating your default profile. Please try again."
msgstr "Ошибка создания вашего профиля. Пожалуйста, попробуйте еще раз."
#: src/Model/User.php:1072
#: src/Model/User.php:1123
msgid "An error occurred creating your self contact. Please try again."
msgstr "При создании вашего контакта возникла проблема. Пожалуйста, попробуйте ещё раз."
#: src/Model/User.php:1077
#: src/Model/User.php:1128
msgid "Friends"
msgstr "Друзья"
#: src/Model/User.php:1081
#: src/Model/User.php:1132
msgid ""
"An error occurred creating your default contact group. Please try again."
msgstr "При создании группы контактов по-умолчанию возникла ошибка. Пожалуйста, попробуйте ещё раз."
#: src/Model/User.php:1310
#: src/Model/User.php:1361
#, php-format
msgid ""
"\n"
@ -4950,7 +4950,7 @@ msgid ""
"\t\t\tthe administrator of %2$s has set up an account for you."
msgstr "\n\t\tУважаемый(ая) %1$s,\n\t\t\tадминистратор %2$s создал для вас учётную запись."
#: src/Model/User.php:1313
#: src/Model/User.php:1364
#, php-format
msgid ""
"\n"
@ -4982,12 +4982,12 @@ msgid ""
"\t\tThank you and welcome to %4$s."
msgstr "\n\t\tДанные для входа в систему:\n\n\t\tМестоположение сайта:\t%1$s\n\t\tЛогин:\t\t%2$s\n\t\tПароль:\t\t%3$s\n\n\t\tВы можете изменить пароль на странице \"Настройки\" после авторизации.\n\n\t\tПожалуйста, уделите время ознакомлению с другими другие настройками аккаунта на этой странице.\n\n\n\t\tВы также можете захотеть добавить немного базовой информации к вашему стандартному профилю\n\t\t(на странице \"Информация\") чтобы другим людям было проще вас найти.\n\n\t\tМы рекомендуем указать ваше полное имя, добавить фотографию,\n\t\tнемного \"ключевых слов\" (очень полезно, чтобы завести новых друзей)\n\t\tи возможно страну вашего проживания; если вы не хотите быть более конкретным.\n\n\t\tМы полностью уважаем ваше право на приватность, поэтому ничего из этого не является обязательным.\n\t\tЕсли же вы новичок и никого не знаете, это может помочь\n\t\tвам завести новых интересных друзей.\n\n\t\tЕсли вы когда-нибудь захотите удалить свой аккаунт, вы можете сделать это перейдя по ссылке %1$s/removeme\n\n\t\tСпасибо и добро пожаловать в %4$s."
#: src/Model/User.php:1346 src/Model/User.php:1453
#: src/Model/User.php:1397 src/Model/User.php:1504
#, php-format
msgid "Registration details for %s"
msgstr "Подробности регистрации для %s"
#: src/Model/User.php:1366
#: src/Model/User.php:1417
#, php-format
msgid ""
"\n"
@ -5002,12 +5002,12 @@ msgid ""
"\t\t"
msgstr "\n\t\t\tУважаемый %1$s,\n\t\t\t\tБлагодарим Вас за регистрацию на %2$s. Ваш аккаунт ожидает подтверждения администратором.\n\n\t\t\tВаши данные для входа в систему:\n\n\t\t\tМестоположение сайта:\t%3$s\n\t\t\tЛогин:\t\t%4$s\n\t\t\tПароль:\t\t%5$s\n\t\t"
#: src/Model/User.php:1385
#: src/Model/User.php:1436
#, php-format
msgid "Registration at %s"
msgstr "Регистрация на %s"
#: src/Model/User.php:1409
#: src/Model/User.php:1460
#, php-format
msgid ""
"\n"
@ -5016,7 +5016,7 @@ msgid ""
"\t\t\t"
msgstr "\n\t\t\t\tУважаемый(ая) %1$s,\n\t\t\t\tСпасибо за регистрацию на %2$s. Ваша учётная запись создана.\n\t\t\t"
#: src/Model/User.php:1417
#: src/Model/User.php:1468
#, php-format
msgid ""
"\n"
@ -5079,7 +5079,7 @@ msgstr "Включить"
#: src/Module/Admin/Federation.php:159 src/Module/Admin/Item/Delete.php:65
#: src/Module/Admin/Logs/Settings.php:80 src/Module/Admin/Logs/View.php:84
#: src/Module/Admin/Queue.php:72 src/Module/Admin/Site.php:497
#: src/Module/Admin/Storage.php:131 src/Module/Admin/Summary.php:232
#: src/Module/Admin/Storage.php:131 src/Module/Admin/Summary.php:233
#: src/Module/Admin/Themes/Details.php:90
#: src/Module/Admin/Themes/Index.php:111 src/Module/Admin/Tos.php:58
#: src/Module/Admin/Users/Active.php:136
@ -5143,8 +5143,8 @@ msgstr ""
msgid "List of active accounts"
msgstr ""
#: src/Module/Admin/BaseUsers.php:66 src/Module/Contact.php:763
#: src/Module/Contact.php:823
#: src/Module/Admin/BaseUsers.php:66 src/Module/Contact.php:778
#: src/Module/Contact.php:838
msgid "Pending"
msgstr "В ожидании"
@ -5152,8 +5152,8 @@ msgstr "В ожидании"
msgid "List of pending registrations"
msgstr ""
#: src/Module/Admin/BaseUsers.php:74 src/Module/Contact.php:771
#: src/Module/Contact.php:824
#: src/Module/Admin/BaseUsers.php:74 src/Module/Contact.php:786
#: src/Module/Contact.php:839
msgid "Blocked"
msgstr "Заблокированы"
@ -5213,8 +5213,8 @@ msgstr "сбросить выбор"
#: src/Module/Admin/Blocklist/Contact.php:85
#: src/Module/Admin/Users/Blocked.php:142 src/Module/Admin/Users/Index.php:156
#: src/Module/Contact.php:587 src/Module/Contact.php:847
#: src/Module/Contact.php:1115
#: src/Module/Contact.php:602 src/Module/Contact.php:863
#: src/Module/Contact.php:1133
msgid "Unblock"
msgstr "Разблокировать"
@ -5732,7 +5732,7 @@ msgstr ""
msgid "Republish users to directory"
msgstr "Переопубликовать пользователей в каталог"
#: src/Module/Admin/Site.php:502 src/Module/Register.php:139
#: src/Module/Admin/Site.php:502 src/Module/Register.php:141
msgid "Registration"
msgstr "Регистрация"
@ -6501,7 +6501,7 @@ msgid ""
"received."
msgstr "Допустимые значения \"all\" или \"tags\". \"all\" означает, что любые публичные записи будут получены. \"tags\" включает приём публичных записей с выбранными тэгами."
#: src/Module/Admin/Site.php:609 src/Module/Contact.php:516
#: src/Module/Admin/Site.php:609 src/Module/Contact.php:531
#: src/Module/Settings/TwoFactor/Index.php:118
msgid "Disabled"
msgstr "Отключенный"
@ -6590,12 +6590,12 @@ msgstr ""
msgid "Database (legacy)"
msgstr "База данных (устаревшее)"
#: src/Module/Admin/Summary.php:53
#: src/Module/Admin/Summary.php:54
#, php-format
msgid "Template engine (%s) error: %s"
msgstr ""
#: src/Module/Admin/Summary.php:57
#: src/Module/Admin/Summary.php:58
#, php-format
msgid ""
"Your DB still runs with MyISAM tables. You should change the engine type to "
@ -6606,7 +6606,7 @@ msgid ""
" an automatic conversion.<br />"
msgstr ""
#: src/Module/Admin/Summary.php:62
#: src/Module/Admin/Summary.php:63
#, php-format
msgid ""
"Your DB still runs with InnoDB tables in the Antelope file format. You "
@ -6617,7 +6617,7 @@ msgid ""
" installation for an automatic conversion.<br />"
msgstr ""
#: src/Module/Admin/Summary.php:72
#: src/Module/Admin/Summary.php:73
#, php-format
msgid ""
"Your table_definition_cache is too low (%d). This can lead to the database "
@ -6625,39 +6625,39 @@ msgid ""
" to %d. See <a href=\"%s\">here</a> for more information.<br />"
msgstr ""
#: src/Module/Admin/Summary.php:82
#: src/Module/Admin/Summary.php:83
#, php-format
msgid ""
"There is a new version of Friendica available for download. Your current "
"version is %1$s, upstream version is %2$s"
msgstr ""
#: src/Module/Admin/Summary.php:91
#: src/Module/Admin/Summary.php:92
msgid ""
"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."
msgstr ""
#: src/Module/Admin/Summary.php:95
#: src/Module/Admin/Summary.php:96
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:100
#: src/Module/Admin/Summary.php:101
msgid "The worker was never executed. Please check your database structure!"
msgstr "Фоновые задания ни разу не выполнялись. Пожалуйста, проверьте структуру базы данных!"
#: src/Module/Admin/Summary.php:102
#: src/Module/Admin/Summary.php:103
#, php-format
msgid ""
"The last worker execution was on %s UTC. This is older than one hour. Please"
" check your crontab settings."
msgstr "Последний раз фоновое задание выполнялось %s UTC. Это более одного часа назад. Пожалуйста, проверьте настройки crontab."
#: src/Module/Admin/Summary.php:107
#: src/Module/Admin/Summary.php:108
#, php-format
msgid ""
"Friendica's configuration now is stored in config/local.config.php, please "
@ -6666,7 +6666,7 @@ msgid ""
"help with the transition."
msgstr ""
#: src/Module/Admin/Summary.php:111
#: src/Module/Admin/Summary.php:112
#, php-format
msgid ""
"Friendica's configuration now is stored in config/local.config.php, please "
@ -6675,7 +6675,7 @@ msgid ""
"page</a> for help with the transition."
msgstr ""
#: src/Module/Admin/Summary.php:117
#: src/Module/Admin/Summary.php:118
#, php-format
msgid ""
"<a href=\"%s\">%s</a> is not reachable on your system. This is a severe "
@ -6683,87 +6683,87 @@ msgid ""
"href=\"%s\">the installation page</a> for help."
msgstr ""
#: src/Module/Admin/Summary.php:135
#: src/Module/Admin/Summary.php:136
#, php-format
msgid "The logfile '%s' is not usable. No logging possible (error: '%s')"
msgstr ""
#: src/Module/Admin/Summary.php:149
#: src/Module/Admin/Summary.php:150
#, php-format
msgid ""
"The debug logfile '%s' is not usable. No logging possible (error: '%s')"
msgstr ""
#: src/Module/Admin/Summary.php:165
#: src/Module/Admin/Summary.php:166
#, 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:173
#: src/Module/Admin/Summary.php:174
#, 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:181
#: src/Module/Admin/Summary.php:182
#, 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:188
#: src/Module/Admin/Summary.php:189
msgid "Normal Account"
msgstr "Обычный аккаунт"
#: src/Module/Admin/Summary.php:189
#: src/Module/Admin/Summary.php:190
msgid "Automatic Follower Account"
msgstr ""
#: src/Module/Admin/Summary.php:190
#: src/Module/Admin/Summary.php:191
msgid "Public Forum Account"
msgstr "Публичный форум"
#: src/Module/Admin/Summary.php:191
#: src/Module/Admin/Summary.php:192
msgid "Automatic Friend Account"
msgstr "\"Автоматический друг\" Аккаунт"
#: src/Module/Admin/Summary.php:192
#: src/Module/Admin/Summary.php:193
msgid "Blog Account"
msgstr "Аккаунт блога"
#: src/Module/Admin/Summary.php:193
#: src/Module/Admin/Summary.php:194
msgid "Private Forum Account"
msgstr "Закрытый форум"
#: src/Module/Admin/Summary.php:213
#: src/Module/Admin/Summary.php:214
msgid "Message queues"
msgstr "Очереди сообщений"
#: src/Module/Admin/Summary.php:219
#: src/Module/Admin/Summary.php:220
msgid "Server Settings"
msgstr "Настройки сервера"
#: src/Module/Admin/Summary.php:233 src/Repository/ProfileField.php:285
#: src/Module/Admin/Summary.php:234 src/Repository/ProfileField.php:285
msgid "Summary"
msgstr "Резюме"
#: src/Module/Admin/Summary.php:235
#: src/Module/Admin/Summary.php:236
msgid "Registered users"
msgstr "Зарегистрированные пользователи"
#: src/Module/Admin/Summary.php:237
#: src/Module/Admin/Summary.php:238
msgid "Pending registrations"
msgstr "Ожидающие регистрации"
#: src/Module/Admin/Summary.php:238
#: src/Module/Admin/Summary.php:239
msgid "Version"
msgstr "Версия"
#: src/Module/Admin/Summary.php:242
#: src/Module/Admin/Summary.php:243
msgid "Active addons"
msgstr "Активные дополнения"
@ -7086,8 +7086,8 @@ msgstr ""
msgid "Posts from %s can't be unshared"
msgstr ""
#: src/Module/Api/Twitter/ContactEndpoint.php:63 src/Module/Contact.php:361
#: src/Module/Contact.php:366
#: src/Module/Api/Twitter/ContactEndpoint.php:63 src/Module/Contact.php:371
#: src/Module/Contact.php:386
msgid "Contact not found"
msgstr "Контакт не найден"
@ -7208,7 +7208,7 @@ msgstr ""
msgid "Too Many Requests"
msgstr ""
#: src/Module/BaseProfile.php:51 src/Module/Contact.php:902
#: src/Module/BaseProfile.php:51 src/Module/Contact.php:918
msgid "Profile Details"
msgstr "Информация о вас"
@ -7267,15 +7267,15 @@ msgstr "Экспорт личных данных"
msgid "Remove account"
msgstr "Удалить аккаунт"
#: src/Module/Bookmarklet.php:55
#: src/Module/Bookmarklet.php:54
msgid "This page is missing a url parameter."
msgstr ""
#: src/Module/Bookmarklet.php:67
#: src/Module/Bookmarklet.php:66
msgid "The post was created"
msgstr "Запись создана"
#: src/Module/Contact.php:93
#: src/Module/Contact.php:97
#, php-format
msgid "%d contact edited."
msgid_plural "%d contacts edited."
@ -7284,358 +7284,358 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
#: src/Module/Contact.php:118
#: src/Module/Contact.php:122
msgid "Could not access contact record."
msgstr "Не удалось получить доступ к записи контакта."
#: src/Module/Contact.php:154
#: src/Module/Contact.php:158
msgid "Failed to update contact record."
msgstr "Не удалось обновить запись контакта."
#: src/Module/Contact.php:383
#: src/Module/Contact.php:403
msgid "You can't block yourself"
msgstr "Вы не можете заблокировать сами себя"
#: src/Module/Contact.php:389
#: src/Module/Contact.php:409
msgid "Contact has been blocked"
msgstr "Контакт заблокирован"
#: src/Module/Contact.php:389
#: src/Module/Contact.php:409
msgid "Contact has been unblocked"
msgstr "Контакт разблокирован"
#: src/Module/Contact.php:397
#: src/Module/Contact.php:417
msgid "You can't ignore yourself"
msgstr "Вы не можете игнорировать сами себя"
#: src/Module/Contact.php:403
#: src/Module/Contact.php:423
msgid "Contact has been ignored"
msgstr "Контакт проигнорирован"
#: src/Module/Contact.php:403
#: src/Module/Contact.php:423
msgid "Contact has been unignored"
msgstr "У контакта отменено игнорирование"
#: src/Module/Contact.php:415
#: src/Module/Contact.php:435
msgid "Drop contact"
msgstr "Удалить контакт"
#: src/Module/Contact.php:418 src/Module/Contact.php:843
#: src/Module/Contact.php:438 src/Module/Contact.php:859
msgid "Do you really want to delete this contact?"
msgstr "Вы действительно хотите удалить этот контакт?"
#: src/Module/Contact.php:419 src/Module/Notifications/Introductions.php:123
#: src/Module/OAuth/Acknowledge.php:47 src/Module/Register.php:115
#: src/Module/Contact.php:439 src/Module/Notifications/Introductions.php:123
#: src/Module/OAuth/Acknowledge.php:47 src/Module/Register.php:117
msgid "Yes"
msgstr "Да"
#: src/Module/Contact.php:431
#: src/Module/Contact.php:452
msgid "Contact has been removed."
msgstr "Контакт удален."
#: src/Module/Contact.php:458
#: src/Module/Contact.php:473
#, php-format
msgid "You are mutual friends with %s"
msgstr "У Вас взаимная дружба с %s"
#: src/Module/Contact.php:462
#: src/Module/Contact.php:477
#, php-format
msgid "You are sharing with %s"
msgstr "Вы делитесь с %s"
#: src/Module/Contact.php:466
#: src/Module/Contact.php:481
#, php-format
msgid "%s is sharing with you"
msgstr "%s делится с Вами"
#: src/Module/Contact.php:490
#: src/Module/Contact.php:505
msgid "Private communications are not available for this contact."
msgstr "Приватные коммуникации недоступны для этого контакта."
#: src/Module/Contact.php:492
#: src/Module/Contact.php:507
msgid "Never"
msgstr "Никогда"
#: src/Module/Contact.php:495
#: src/Module/Contact.php:510
msgid "(Update was not successful)"
msgstr "(Обновление не удалось)"
#: src/Module/Contact.php:495
#: src/Module/Contact.php:510
msgid "(Update was successful)"
msgstr "(Обновление было успешно)"
#: src/Module/Contact.php:497 src/Module/Contact.php:1086
#: src/Module/Contact.php:512 src/Module/Contact.php:1104
msgid "Suggest friends"
msgstr "Предложить друзей"
#: src/Module/Contact.php:501
#: src/Module/Contact.php:516
#, php-format
msgid "Network type: %s"
msgstr "Сеть: %s"
#: src/Module/Contact.php:506
#: src/Module/Contact.php:521
msgid "Communications lost with this contact!"
msgstr "Связь с контактом утеряна!"
#: src/Module/Contact.php:512
#: src/Module/Contact.php:527
msgid "Fetch further information for feeds"
msgstr "Получить подробную информацию о фидах"
#: src/Module/Contact.php:514
#: src/Module/Contact.php:529
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:517
#: src/Module/Contact.php:532
msgid "Fetch information"
msgstr "Получить информацию"
#: src/Module/Contact.php:518
#: src/Module/Contact.php:533
msgid "Fetch keywords"
msgstr "Получить ключевые слова"
#: src/Module/Contact.php:519
#: src/Module/Contact.php:534
msgid "Fetch information and keywords"
msgstr "Получить информацию и ключевые слова"
#: src/Module/Contact.php:531 src/Module/Contact.php:535
#: src/Module/Contact.php:538 src/Module/Contact.php:542
#: src/Module/Contact.php:546 src/Module/Contact.php:550
#: src/Module/Contact.php:553 src/Module/Contact.php:557
msgid "No mirroring"
msgstr "Не зеркалировать"
#: src/Module/Contact.php:532
#: src/Module/Contact.php:547
msgid "Mirror as forwarded posting"
msgstr "Зеркалировать как переадресованные сообщения"
#: src/Module/Contact.php:533 src/Module/Contact.php:539
#: src/Module/Contact.php:543
#: src/Module/Contact.php:548 src/Module/Contact.php:554
#: src/Module/Contact.php:558
msgid "Mirror as my own posting"
msgstr "Зеркалировать как мои сообщения"
#: src/Module/Contact.php:536 src/Module/Contact.php:540
#: src/Module/Contact.php:551 src/Module/Contact.php:555
msgid "Native reshare"
msgstr ""
#: src/Module/Contact.php:555
#: src/Module/Contact.php:570
msgid "Contact Information / Notes"
msgstr "Информация о контакте / Заметки"
#: src/Module/Contact.php:556
#: src/Module/Contact.php:571
msgid "Contact Settings"
msgstr "Настройки контакта"
#: src/Module/Contact.php:564
#: src/Module/Contact.php:579
msgid "Contact"
msgstr "Контакт"
#: src/Module/Contact.php:568
#: src/Module/Contact.php:583
msgid "Their personal note"
msgstr "Персональная заметка"
#: src/Module/Contact.php:570
#: src/Module/Contact.php:585
msgid "Edit contact notes"
msgstr "Редактировать заметки контакта"
#: src/Module/Contact.php:573 src/Module/Contact.php:1054
#: src/Module/Contact.php:588 src/Module/Contact.php:1070
#, php-format
msgid "Visit %s's profile [%s]"
msgstr "Посетить профиль %s [%s]"
#: src/Module/Contact.php:574
#: src/Module/Contact.php:589
msgid "Block/Unblock contact"
msgstr "Блокировать / Разблокировать контакт"
#: src/Module/Contact.php:575
#: src/Module/Contact.php:590
msgid "Ignore contact"
msgstr "Игнорировать контакт"
#: src/Module/Contact.php:576
#: src/Module/Contact.php:591
msgid "View conversations"
msgstr "Просмотр бесед"
#: src/Module/Contact.php:581
#: src/Module/Contact.php:596
msgid "Last update:"
msgstr "Последнее обновление: "
#: src/Module/Contact.php:583
#: src/Module/Contact.php:598
msgid "Update public posts"
msgstr "Обновить публичные сообщения"
#: src/Module/Contact.php:585 src/Module/Contact.php:1096
#: src/Module/Contact.php:600 src/Module/Contact.php:1114
msgid "Update now"
msgstr "Обновить сейчас"
#: src/Module/Contact.php:588 src/Module/Contact.php:848
#: src/Module/Contact.php:1123
#: src/Module/Contact.php:603 src/Module/Contact.php:864
#: src/Module/Contact.php:1141
msgid "Unignore"
msgstr "Не игнорировать"
#: src/Module/Contact.php:592
#: src/Module/Contact.php:607
msgid "Currently blocked"
msgstr "В настоящее время заблокирован"
#: src/Module/Contact.php:593
#: src/Module/Contact.php:608
msgid "Currently ignored"
msgstr "В настоящее время игнорируется"
#: src/Module/Contact.php:594
#: src/Module/Contact.php:609
msgid "Currently archived"
msgstr "В данный момент архивирован"
#: src/Module/Contact.php:595
#: src/Module/Contact.php:610
msgid "Awaiting connection acknowledge"
msgstr "Ожидаем подтверждения соединения"
#: src/Module/Contact.php:596 src/Module/Notifications/Introductions.php:171
#: src/Module/Contact.php:611 src/Module/Notifications/Introductions.php:171
msgid "Hide this contact from others"
msgstr "Скрыть этот контакт от других"
#: src/Module/Contact.php:596
#: src/Module/Contact.php:611
msgid ""
"Replies/likes to your public posts <strong>may</strong> still be visible"
msgstr "Ответы/лайки ваших публичных сообщений <strong>будут</strong> видимы."
#: src/Module/Contact.php:597
#: src/Module/Contact.php:612
msgid "Notification for new posts"
msgstr "Уведомление о новых записях"
#: src/Module/Contact.php:597
#: src/Module/Contact.php:612
msgid "Send a notification of every new post of this contact"
msgstr "Отправлять уведомление о каждом новой записи контакта"
#: src/Module/Contact.php:599
#: src/Module/Contact.php:614
msgid "Keyword Deny List"
msgstr "Запретный список слов"
#: src/Module/Contact.php:599
#: src/Module/Contact.php:614
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:617 src/Module/Settings/TwoFactor/Index.php:132
#: src/Module/Contact.php:632 src/Module/Settings/TwoFactor/Index.php:132
msgid "Actions"
msgstr "Действия"
#: src/Module/Contact.php:624
#: src/Module/Contact.php:639
msgid "Mirror postings from this contact"
msgstr "Зекралировать сообщения от этого контакта"
#: src/Module/Contact.php:626
#: src/Module/Contact.php:641
msgid ""
"Mark this contact as remote_self, this will cause friendica to repost new "
"entries from this contact."
msgstr "Пометить этот контакт как remote_self, что заставит Friendica отправлять сообщения от этого контакта."
#: src/Module/Contact.php:758
#: src/Module/Contact.php:773
msgid "Show all contacts"
msgstr "Показать все контакты"
#: src/Module/Contact.php:766
#: src/Module/Contact.php:781
msgid "Only show pending contacts"
msgstr "Показать только контакты \"в ожидании\""
#: src/Module/Contact.php:774
#: src/Module/Contact.php:789
msgid "Only show blocked contacts"
msgstr "Показать только блокированные контакты"
#: src/Module/Contact.php:779 src/Module/Contact.php:826
#: src/Object/Post.php:308
#: src/Module/Contact.php:794 src/Module/Contact.php:841
#: src/Object/Post.php:309
msgid "Ignored"
msgstr "Игнорируются"
#: src/Module/Contact.php:782
#: src/Module/Contact.php:797
msgid "Only show ignored contacts"
msgstr "Показать только игнорируемые контакты"
#: src/Module/Contact.php:787 src/Module/Contact.php:827
#: src/Module/Contact.php:802 src/Module/Contact.php:842
msgid "Archived"
msgstr "Архивированные"
#: src/Module/Contact.php:790
#: src/Module/Contact.php:805
msgid "Only show archived contacts"
msgstr "Показывать только архивные контакты"
#: src/Module/Contact.php:795 src/Module/Contact.php:825
#: src/Module/Contact.php:810 src/Module/Contact.php:840
msgid "Hidden"
msgstr "Скрытые"
#: src/Module/Contact.php:798
#: src/Module/Contact.php:813
msgid "Only show hidden contacts"
msgstr "Показывать только скрытые контакты"
#: src/Module/Contact.php:806
#: src/Module/Contact.php:821
msgid "Organize your contact groups"
msgstr "Настроить группы контактов"
#: src/Module/Contact.php:838
#: src/Module/Contact.php:853
msgid "Search your contacts"
msgstr "Поиск ваших контактов"
#: src/Module/Contact.php:839 src/Module/Search/Index.php:194
#: src/Module/Contact.php:854 src/Module/Search/Index.php:194
#, php-format
msgid "Results for: %s"
msgstr "Результаты для: %s"
#: src/Module/Contact.php:846
#: src/Module/Contact.php:862
msgid "Update"
msgstr "Обновление"
#: src/Module/Contact.php:851
#: src/Module/Contact.php:867
msgid "Batch Actions"
msgstr "Пакетные действия"
#: src/Module/Contact.php:886
#: src/Module/Contact.php:902
msgid "Conversations started by this contact"
msgstr "Диалоги этого контакта"
#: src/Module/Contact.php:891
#: src/Module/Contact.php:907
msgid "Posts and Comments"
msgstr "Записи и комментарии"
#: src/Module/Contact.php:909
#: src/Module/Contact.php:925
msgid "View all known contacts"
msgstr "Показать все известные контакты"
#: src/Module/Contact.php:919
#: src/Module/Contact.php:935
msgid "Advanced Contact Settings"
msgstr "Дополнительные Настройки Контакта"
#: src/Module/Contact.php:1013
#: src/Module/Contact.php:1029
msgid "Mutual Friendship"
msgstr "Взаимная дружба"
#: src/Module/Contact.php:1017
#: src/Module/Contact.php:1033
msgid "is a fan of yours"
msgstr "является вашим поклонником"
#: src/Module/Contact.php:1021
#: src/Module/Contact.php:1037
msgid "you are a fan of"
msgstr "Вы - поклонник"
#: src/Module/Contact.php:1039
#: src/Module/Contact.php:1055
msgid "Pending outgoing contact request"
msgstr "Исходящий запрос на подписку"
#: src/Module/Contact.php:1041
#: src/Module/Contact.php:1057
msgid "Pending incoming contact request"
msgstr "Входящий запрос на подписку"
#: src/Module/Contact.php:1106
#: src/Module/Contact.php:1124
msgid "Refetch contact data"
msgstr "Обновить данные контакта"
#: src/Module/Contact.php:1117
#: src/Module/Contact.php:1135
msgid "Toggle Blocked status"
msgstr "Изменить статус блокированности (заблокировать/разблокировать)"
#: src/Module/Contact.php:1125
#: src/Module/Contact.php:1143
msgid "Toggle Ignored status"
msgstr "Изменить статус игнорирования"
#: src/Module/Contact.php:1134
#: src/Module/Contact.php:1152
msgid "Delete contact"
msgstr "Удалить контакт"
@ -7869,7 +7869,7 @@ msgstr "Личные"
msgid "Posts that mention or involve you"
msgstr "Записи, которые упоминают вас или в которых вы участвуете"
#: src/Module/Conversation/Network.php:258 src/Object/Post.php:320
#: src/Module/Conversation/Network.php:258 src/Object/Post.php:321
msgid "Starred"
msgstr "Избранное"
@ -8146,21 +8146,21 @@ msgstr ""
msgid "Lookup address:"
msgstr ""
#: src/Module/Delegation.php:148
#: src/Module/Delegation.php:142
msgid "Switch between your accounts"
msgstr ""
#: src/Module/Delegation.php:149
#: src/Module/Delegation.php:143
msgid "Manage your accounts"
msgstr ""
#: src/Module/Delegation.php:150
#: src/Module/Delegation.php:144
msgid ""
"Toggle between different identities or community/group pages which share "
"your account details or which you have been granted \"manage\" permissions"
msgstr "Переключайтесь между разными профилями или страницами сообществ/групп, которые зарегистрированы на одинаковые контактные данные, либо вам предоставлено право управления ими."
#: src/Module/Delegation.php:151
#: src/Module/Delegation.php:145
msgid "Select an identity to manage: "
msgstr "Выберите учётную запись:"
@ -8694,7 +8694,7 @@ msgid "Claims to be known to you: "
msgstr "Утверждения, о которых должно быть вам известно: "
#: src/Module/Notifications/Introductions.php:123
#: src/Module/OAuth/Acknowledge.php:48 src/Module/Register.php:116
#: src/Module/OAuth/Acknowledge.php:48 src/Module/Register.php:118
msgid "No"
msgstr "Нет"
@ -8906,143 +8906,143 @@ msgstr "Запланировано"
#: src/Module/Profile/Schedule.php:85
msgid "Content"
msgstr ""
msgstr "Содержание"
#: src/Module/Profile/Schedule.php:86
msgid "Remove post"
msgstr ""
#: src/Module/Register.php:69
#: src/Module/Register.php:71
msgid "Only parent users can create additional accounts."
msgstr "Только основные пользователи могут создавать дополнительные учётные записи."
#: src/Module/Register.php:101
#: src/Module/Register.php:103
msgid ""
"You may (optionally) fill in this form via OpenID by supplying your OpenID "
"and clicking \"Register\"."
msgstr ""
#: src/Module/Register.php:102
#: src/Module/Register.php:104
msgid ""
"If you are not familiar with OpenID, please leave that field blank and fill "
"in the rest of the items."
msgstr "Если вы не знакомы с OpenID, пожалуйста, оставьте это поле пустым и заполните остальные элементы."
#: src/Module/Register.php:103
#: src/Module/Register.php:105
msgid "Your OpenID (optional): "
msgstr "Ваш OpenID (необязательно):"
#: src/Module/Register.php:112
#: src/Module/Register.php:114
msgid "Include your profile in member directory?"
msgstr "Включить ваш профиль в каталог участников?"
#: src/Module/Register.php:135
#: src/Module/Register.php:137
msgid "Note for the admin"
msgstr "Сообщение для администратора"
#: src/Module/Register.php:135
#: src/Module/Register.php:137
msgid "Leave a message for the admin, why you want to join this node"
msgstr "Сообщения для администратора сайта на тему \"почему я хочу присоединиться к вам\""
#: src/Module/Register.php:136
#: src/Module/Register.php:138
msgid "Membership on this site is by invitation only."
msgstr "Членство на сайте только по приглашению."
#: src/Module/Register.php:137
#: src/Module/Register.php:139
msgid "Your invitation code: "
msgstr "Ваш код приглашения:"
#: src/Module/Register.php:145
#: src/Module/Register.php:147
msgid "Your Full Name (e.g. Joe Smith, real or real-looking): "
msgstr "Ваше полное имя (например, Иван Иванов):"
#: src/Module/Register.php:146
#: src/Module/Register.php:148
msgid ""
"Your Email Address: (Initial information will be send there, so this has to "
"be an existing address.)"
msgstr "Ваш адрес электронной почты: (Информация для входа будет отправлена туда, это должен быть существующий адрес.)"
#: src/Module/Register.php:147
#: src/Module/Register.php:149
msgid "Please repeat your e-mail address:"
msgstr "Пожалуйста, введите адрес электронной почты ещё раз:"
#: src/Module/Register.php:149
#: src/Module/Register.php:151
msgid "Leave empty for an auto generated password."
msgstr "Оставьте пустым для автоматической генерации пароля."
#: src/Module/Register.php:151
#: src/Module/Register.php:153
#, php-format
msgid ""
"Choose a profile nickname. This must begin with a text character. Your "
"profile address on this site will then be \"<strong>nickname@%s</strong>\"."
msgstr ""
#: src/Module/Register.php:152
#: src/Module/Register.php:154
msgid "Choose a nickname: "
msgstr "Выберите псевдоним: "
#: src/Module/Register.php:161
#: src/Module/Register.php:163
msgid "Import your profile to this friendica instance"
msgstr "Импорт своего профиля в этот экземпляр friendica"
#: src/Module/Register.php:168
#: src/Module/Register.php:170
msgid "Note: This node explicitly contains adult content"
msgstr "Внимание: на этом сервере размещаются материалы для взрослых."
#: src/Module/Register.php:170 src/Module/Settings/Delegation.php:155
#: src/Module/Register.php:172 src/Module/Settings/Delegation.php:155
msgid "Parent Password:"
msgstr "Родительский пароль:"
#: src/Module/Register.php:170 src/Module/Settings/Delegation.php:155
#: src/Module/Register.php:172 src/Module/Settings/Delegation.php:155
msgid ""
"Please enter the password of the parent account to legitimize your request."
msgstr ""
#: src/Module/Register.php:199
#: src/Module/Register.php:201
msgid "Password doesn't match."
msgstr "Пароль не совпадает"
#: src/Module/Register.php:205
#: src/Module/Register.php:207
msgid "Please enter your password."
msgstr "Пожалуйста, введите ваш пароль."
#: src/Module/Register.php:247
#: src/Module/Register.php:249
msgid "You have entered too much information."
msgstr "Вы ввели слишком много информации."
#: src/Module/Register.php:270
#: src/Module/Register.php:272
msgid "Please enter the identical mail address in the second field."
msgstr "Пожалуйста, введите тот же самый адрес почты во второе поле."
#: src/Module/Register.php:297
#: src/Module/Register.php:299
msgid "The additional account was created."
msgstr "Дополнительная учётная запись создана."
#: src/Module/Register.php:322
#: src/Module/Register.php:324
msgid ""
"Registration successful. Please check your email for further instructions."
msgstr "Регистрация успешна. Пожалуйста, проверьте свою электронную почту для получения дальнейших инструкций."
#: src/Module/Register.php:326
#: src/Module/Register.php:328
#, php-format
msgid ""
"Failed to send email message. Here your accout details:<br> login: %s<br> "
"password: %s<br><br>You can change your password after login."
msgstr "Ошибка отправки письма. Вот ваши учетные данные: <br> логин: %s<br> пароль: %s<br><br>Вы сможете изменить пароль после входа."
#: src/Module/Register.php:332
#: src/Module/Register.php:334
msgid "Registration successful."
msgstr "Регистрация успешна."
#: src/Module/Register.php:337 src/Module/Register.php:344
#: src/Module/Register.php:339 src/Module/Register.php:346
msgid "Your registration can not be processed."
msgstr "Ваша регистрация не может быть обработана."
#: src/Module/Register.php:343
#: src/Module/Register.php:345
msgid "You have to leave a request note for the admin."
msgstr ""
#: src/Module/Register.php:389
#: src/Module/Register.php:391
msgid "Your registration is pending approval by the site owner."
msgstr "Ваша регистрация в ожидании одобрения владельцем сайта."
@ -10249,186 +10249,186 @@ msgstr "Пожалуйста, свяжитесь с отправителем, о
msgid "%s posted an update."
msgstr "%s отправил/а/ обновление."
#: src/Object/Post.php:148
#: src/Object/Post.php:149
msgid "This entry was edited"
msgstr "Эта запись была отредактирована"
#: src/Object/Post.php:176
#: src/Object/Post.php:177
msgid "Private Message"
msgstr "Личное сообщение"
#: src/Object/Post.php:192 src/Object/Post.php:194
#: src/Object/Post.php:193 src/Object/Post.php:195
msgid "Edit"
msgstr "Редактировать"
#: src/Object/Post.php:214
#: src/Object/Post.php:215
msgid "Pinned item"
msgstr "Закреплённая запись"
#: src/Object/Post.php:218
#: src/Object/Post.php:219
msgid "Delete globally"
msgstr "Удалить везде"
#: src/Object/Post.php:218
#: src/Object/Post.php:219
msgid "Remove locally"
msgstr "Убрать для себя"
#: src/Object/Post.php:234
#: src/Object/Post.php:235
#, php-format
msgid "Block %s"
msgstr "Заблокировать %s"
#: src/Object/Post.php:239
#: src/Object/Post.php:240
msgid "Save to folder"
msgstr "Сохранить в папку"
#: src/Object/Post.php:273
#: src/Object/Post.php:274
msgid "I will attend"
msgstr "Я буду"
#: src/Object/Post.php:273
#: src/Object/Post.php:274
msgid "I will not attend"
msgstr "Меня не будет"
#: src/Object/Post.php:273
#: src/Object/Post.php:274
msgid "I might attend"
msgstr "Возможно"
#: src/Object/Post.php:303
#: src/Object/Post.php:304
msgid "Ignore thread"
msgstr "Игнорировать обсуждение"
#: src/Object/Post.php:304
#: src/Object/Post.php:305
msgid "Unignore thread"
msgstr "Не игнорировать обсуждение"
#: src/Object/Post.php:305
#: src/Object/Post.php:306
msgid "Toggle ignore status"
msgstr "Переключить игнорирование"
#: src/Object/Post.php:315
#: src/Object/Post.php:316
msgid "Add star"
msgstr "Добавить в Избранное"
#: src/Object/Post.php:316
#: src/Object/Post.php:317
msgid "Remove star"
msgstr "Убрать из Избранного"
#: src/Object/Post.php:317
#: src/Object/Post.php:318
msgid "Toggle star status"
msgstr "Добавить/убрать из Избранного"
#: src/Object/Post.php:328
#: src/Object/Post.php:329
msgid "Pin"
msgstr "Закрепить"
#: src/Object/Post.php:329
#: src/Object/Post.php:330
msgid "Unpin"
msgstr "Открепить"
#: src/Object/Post.php:330
#: src/Object/Post.php:331
msgid "Toggle pin status"
msgstr "Закрепить/открепить"
#: src/Object/Post.php:333
#: src/Object/Post.php:334
msgid "Pinned"
msgstr "Закреплено"
#: src/Object/Post.php:338
#: src/Object/Post.php:339
msgid "Add tag"
msgstr "Добавить тег"
#: src/Object/Post.php:351
#: src/Object/Post.php:352
msgid "Quote share this"
msgstr "Поделиться с комментарием"
#: src/Object/Post.php:351
#: src/Object/Post.php:352
msgid "Quote Share"
msgstr "Цитировать"
#: src/Object/Post.php:354
#: src/Object/Post.php:355
msgid "Reshare this"
msgstr "Поделиться этим с подписчиками"
#: src/Object/Post.php:354
#: src/Object/Post.php:355
msgid "Reshare"
msgstr "Поделиться"
#: src/Object/Post.php:355
#: src/Object/Post.php:356
msgid "Cancel your Reshare"
msgstr "Отменить репост"
#: src/Object/Post.php:355
#: src/Object/Post.php:356
msgid "Unshare"
msgstr ""
#: src/Object/Post.php:400
#: src/Object/Post.php:401
#, php-format
msgid "%s (Received %s)"
msgstr "%s (Получено %s)"
#: src/Object/Post.php:405
#: src/Object/Post.php:406
msgid "Comment this item on your system"
msgstr "Прокомментировать это на вашем узле"
#: src/Object/Post.php:405
#: src/Object/Post.php:406
msgid "Remote comment"
msgstr ""
#: src/Object/Post.php:421
#: src/Object/Post.php:422
msgid "Pushed"
msgstr ""
#: src/Object/Post.php:421
#: src/Object/Post.php:422
msgid "Pulled"
msgstr ""
#: src/Object/Post.php:455
#: src/Object/Post.php:456
msgid "to"
msgstr "к"
#: src/Object/Post.php:456
#: src/Object/Post.php:457
msgid "via"
msgstr "через"
#: src/Object/Post.php:457
#: src/Object/Post.php:458
msgid "Wall-to-Wall"
msgstr "Стена-на-Стену"
#: src/Object/Post.php:458
#: src/Object/Post.php:459
msgid "via Wall-To-Wall:"
msgstr "через Стена-на-Стену:"
#: src/Object/Post.php:496
#: src/Object/Post.php:497
#, php-format
msgid "Reply to %s"
msgstr "Ответ %s"
#: src/Object/Post.php:499
#: src/Object/Post.php:500
msgid "More"
msgstr "Ещё"
#: src/Object/Post.php:517
#: src/Object/Post.php:518
msgid "Notifier task is pending"
msgstr "Постановка в очередь"
#: src/Object/Post.php:518
#: src/Object/Post.php:519
msgid "Delivery to remote servers is pending"
msgstr "Ожидается отправка адресатам"
#: src/Object/Post.php:519
#: src/Object/Post.php:520
msgid "Delivery to remote servers is underway"
msgstr "Отправка адресатам в процессе"
#: src/Object/Post.php:520
#: src/Object/Post.php:521
msgid "Delivery to remote servers is mostly done"
msgstr "Отправка адресатам почти завершилась"
#: src/Object/Post.php:521
#: src/Object/Post.php:522
msgid "Delivery to remote servers is done"
msgstr "Отправка адресатам завершена"
#: src/Object/Post.php:541
#: src/Object/Post.php:542
#, php-format
msgid "%d comment"
msgid_plural "%d comments"
@ -10437,11 +10437,11 @@ msgstr[1] "%d комментариев"
msgstr[2] "%d комментариев"
msgstr[3] "%d комментариев"
#: src/Object/Post.php:542
#: src/Object/Post.php:543
msgid "Show more"
msgstr "Показать больше"
#: src/Object/Post.php:543
#: src/Object/Post.php:544
msgid "Show fewer"
msgstr "Показать меньше"

View file

@ -20,95 +20,6 @@ $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."] = "Месячный лимит в %d записей достигнут. Запись была отклонена.";
$a->strings["Profile Photos"] = "Фотографии профиля";
$a->strings["%1\$s poked %2\$s"] = "%1\$s ткнул %2\$s";
$a->strings["event"] = "мероприятие";
$a->strings["status"] = "статус";
$a->strings["photo"] = "фото";
$a->strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s tagged %2\$s's %3\$s в %4\$s";
$a->strings["Select"] = "Выберите";
$a->strings["Delete"] = "Удалить";
$a->strings["View %s's profile @ %s"] = "Просмотреть профиль %s [@ %s]";
$a->strings["Categories:"] = "Категории:";
$a->strings["Filed under:"] = "В рубрике:";
$a->strings["%s from %s"] = "%s из %s";
$a->strings["View in context"] = "Смотреть в контексте";
$a->strings["Please wait"] = "Пожалуйста, подождите";
$a->strings["remove"] = "удалить";
$a->strings["Delete Selected Items"] = "Удалить выбранные позиции";
$a->strings["You had been addressed (%s)."] = "К вам обратились (%s).";
$a->strings["You are following %s."] = "Вы подписаны на %s.";
$a->strings["Tagged"] = "Отмечено";
$a->strings["%s reshared this."] = "%s поделился этим.";
$a->strings["Reshared"] = "Репост";
$a->strings["%s is participating in this thread."] = "%s участвует в этом обсуждении";
$a->strings["Relayed"] = "Ретранслировано";
$a->strings["Fetched"] = "Загружено";
$a->strings["Follow Thread"] = "Подписаться на обсуждение";
$a->strings["View Status"] = "Просмотреть статус";
$a->strings["View Profile"] = "Просмотреть профиль";
$a->strings["View Photos"] = "Просмотреть фото";
$a->strings["Network Posts"] = "Записи сети";
$a->strings["View Contact"] = "Просмотреть контакт";
$a->strings["Send PM"] = "Отправить ЛС";
$a->strings["Block"] = "Заблокировать";
$a->strings["Ignore"] = "Игнорировать";
$a->strings["Languages"] = "Языки";
$a->strings["Poke"] = "потыкать";
$a->strings["Connect/Follow"] = "Подключиться/Подписаться";
$a->strings["%s likes this."] = "%s нравится это.";
$a->strings["%s doesn't like this."] = "%s не нравится это.";
$a->strings["%s attends."] = "%s посещает.";
$a->strings["%s doesn't attend."] = "%s не посетит.";
$a->strings["%s attends maybe."] = "%s может быть посетит.";
$a->strings["and"] = "и";
$a->strings["and %d other people"] = "и еще %d человек";
$a->strings["<span %1\$s>%2\$d people</span> like this"] = "<span %1\$s>%2\$d людям</span> нравится это";
$a->strings["%s like this."] = "%s нравится это.";
$a->strings["<span %1\$s>%2\$d people</span> don't like this"] = "<span %1\$s>%2\$d людям</span> не нравится это";
$a->strings["%s don't like this."] = "%s не нравится это";
$a->strings["<span %1\$s>%2\$d people</span> attend"] = "<span %1\$s>%2\$d человека</span> посетят";
$a->strings["%s attend."] = "%s посетит.";
$a->strings["<span %1\$s>%2\$d people</span> don't attend"] = "<span %1\$s>%2\$d человек</span> не посетит";
$a->strings["%s don't attend."] = "%s не посетит";
$a->strings["<span %1\$s>%2\$d people</span> attend maybe"] = "<span %1\$s>%2\$d человек</span> может быть посетят";
$a->strings["%s attend maybe."] = "%s может быть посетит.";
$a->strings["<span %1\$s>%2\$d people</span> reshared this"] = "<span %1\$s>%2\$d людей</span> поделились этим";
$a->strings["Visible to <strong>everybody</strong>"] = "Видимое <strong>всем</strong>";
$a->strings["Please enter a image/video/audio/webpage URL:"] = "Пожалуйста, введите адрес картинки/видео/аудио/странички:";
$a->strings["Tag term:"] = "Тег:";
$a->strings["Save to Folder:"] = "Сохранить в папку:";
$a->strings["Where are you right now?"] = "И где вы сейчас?";
$a->strings["Delete item(s)?"] = "Удалить елемент(ты)?";
$a->strings["New Post"] = "Новая запись";
$a->strings["Share"] = "Поделиться";
$a->strings["Loading..."] = "Загрузка...";
$a->strings["Upload photo"] = "Загрузить фото";
$a->strings["upload photo"] = "загрузить фото";
$a->strings["Attach file"] = "Прикрепить файл";
$a->strings["attach file"] = "приложить файл";
$a->strings["Bold"] = "Жирный";
$a->strings["Italic"] = "Kурсивный";
$a->strings["Underline"] = "Подчеркнутый";
$a->strings["Quote"] = "Цитата";
$a->strings["Code"] = "Код";
$a->strings["Image"] = "Изображение / Фото";
$a->strings["Link"] = "Ссылка";
$a->strings["Link or Media"] = "Ссылка или медиа";
$a->strings["Set your location"] = "Задать ваше местоположение";
$a->strings["set location"] = "установить местонахождение";
$a->strings["Clear browser location"] = "Очистить местонахождение браузера";
$a->strings["clear location"] = "убрать местонахождение";
$a->strings["Set title"] = "Установить заголовок";
$a->strings["Categories (comma-separated list)"] = "Категории (список через запятую)";
$a->strings["Scheduled at"] = "Запланировано на";
$a->strings["Permission settings"] = "Настройки разрешений";
$a->strings["Permissions"] = "Разрешения";
$a->strings["Public post"] = "Публичное сообщение";
$a->strings["Preview"] = "Просмотр";
$a->strings["Cancel"] = "Отмена";
$a->strings["Message"] = "Сообщение";
$a->strings["Browser"] = "Браузер";
$a->strings["Open Compose page"] = "Развернуть редактор";
$a->strings["[Friendica:Notify]"] = "[Friendica]";
$a->strings["%s New mail received at %s"] = "%s Новая почта получена в %s";
$a->strings["%1\$s sent you a new private message at %2\$s."] = "%1\$s отправил вам новое личное сообщение на %2\$s.";
@ -181,14 +92,34 @@ $a->strings["The feed for this item is unavailable."] = "Лента недост
$a->strings["Item not found"] = "Элемент не найден";
$a->strings["Edit post"] = "Редактировать запись";
$a->strings["Save"] = "Сохранить";
$a->strings["Loading..."] = "Загрузка...";
$a->strings["Upload photo"] = "Загрузить фото";
$a->strings["upload photo"] = "загрузить фото";
$a->strings["Attach file"] = "Прикрепить файл";
$a->strings["attach file"] = "приложить файл";
$a->strings["Insert web link"] = "Вставить веб-ссылку";
$a->strings["web link"] = "веб-ссылка";
$a->strings["Insert video link"] = "Вставить ссылку видео";
$a->strings["video link"] = "видео-ссылка";
$a->strings["Insert audio link"] = "Вставить ссылку аудио";
$a->strings["audio link"] = "аудио-ссылка";
$a->strings["Set your location"] = "Задать ваше местоположение";
$a->strings["set location"] = "установить местонахождение";
$a->strings["Clear browser location"] = "Очистить местонахождение браузера";
$a->strings["clear location"] = "убрать местонахождение";
$a->strings["Please wait"] = "Пожалуйста, подождите";
$a->strings["Permission settings"] = "Настройки разрешений";
$a->strings["CC: email addresses"] = "Копии на email адреса";
$a->strings["Public post"] = "Публичное сообщение";
$a->strings["Set title"] = "Установить заголовок";
$a->strings["Categories (comma-separated list)"] = "Категории (список через запятую)";
$a->strings["Example: bob@example.com, mary@example.com"] = "Пример: bob@example.com, mary@example.com";
$a->strings["Preview"] = "Просмотр";
$a->strings["Cancel"] = "Отмена";
$a->strings["Message"] = "Сообщение";
$a->strings["Browser"] = "Браузер";
$a->strings["Permissions"] = "Разрешения";
$a->strings["Open Compose page"] = "Развернуть редактор";
$a->strings["Event can not end before it has started."] = "Эвент не может закончится до старта.";
$a->strings["Event title and start time are required."] = "Название мероприятия и время начала обязательны для заполнения.";
$a->strings["Create New Event"] = "Создать новое мероприятие";
@ -215,6 +146,7 @@ $a->strings["You already added this contact."] = "Вы уже добавили
$a->strings["The network type couldn't be detected. Contact can't be added."] = "Тип сети не может быть определен. Контакт не может быть добавлен.";
$a->strings["Diaspora support isn't enabled. Contact can't be added."] = "Поддержка Diaspora не включена. Контакт не может быть добавлен.";
$a->strings["OStatus support is disabled. Contact can't be added."] = "Поддержка OStatus выключена. Контакт не может быть добавлен.";
$a->strings["Connect/Follow"] = "Подключиться/Подписаться";
$a->strings["Please answer the following:"] = "Пожалуйста, ответьте следующее:";
$a->strings["Your Identity Address:"] = "Ваш адрес:";
$a->strings["Profile URL"] = "URL профиля";
@ -346,6 +278,8 @@ $a->strings["Rotate CW (right)"] = "Поворот по часовой стре
$a->strings["Rotate CCW (left)"] = "Поворот против часовой стрелки (налево)";
$a->strings["This is you"] = "Это вы";
$a->strings["Comment"] = "Комментировать";
$a->strings["Select"] = "Выберите";
$a->strings["Delete"] = "Удалить";
$a->strings["I like this (toggle)"] = "Нравится";
$a->strings["I don't like this (toggle)"] = "Не нравится";
$a->strings["Map"] = "Карта";
@ -403,6 +337,8 @@ $a->strings["Social Networks"] = "Социальные сети";
$a->strings["General Social Media Settings"] = "Общие настройки социальных медиа";
$a->strings["Accept only top level posts by contacts you follow"] = "Получать начальные записи только от ваших контактов";
$a->strings["The system does an auto completion of threads when a comment arrives. This has got the side effect that you can receive posts that had been started by a non-follower but had been commented by someone you follow. This setting deactivates this behaviour. When activated, you strictly only will receive posts from people you really do follow."] = "Система автоматически загружает диалоги, когда получает комментарии. Это может приводить к тому, что вы можете видеть записи от людей, на которых вы не подписаны, потому что их прокомментировал кто-то из ваших контактов. Эта настройка отключает такое поведение и вы будете видеть только записи тех людей, на которых подписаны.";
$a->strings["Enable Content Warning"] = "Включить предупреждение о контенте";
$a->strings["Users on networks like Mastodon or Pleroma are able to set a content warning field which collapse their post by default. This enables the automatic collapsing instead of setting the content warning as the post title. Doesn't affect any other content filtering you eventually set up."] = "Пользователи некоторых сетей, таких как Mastodon или Pleroma, могут использовать \"предупреждение о контенте\", сворачивающее их записи. Эта настройка выключает это свёртывание вместо обычного помещения \"предупреждения о контенте\" в заголовок записи. Это не влияет на другие фильтры, которые вы можете настроить.";
$a->strings["Attach the link title"] = "Присоединять заголовок ссылок";
$a->strings["When activated, the title of the attached link will be added as a title on posts to Diaspora. This is mostly helpful with \"remote-self\" contacts that share feed content."] = "Если включено. заголовок добавленной ссылки будет добавлен к записи в Диаспоре как заголовок. Это в основном нужно для контактов \"мой двойник\", которые публикуют содержимое ленты.";
$a->strings["Repair OStatus subscriptions"] = "Починить подписки OStatus";
@ -529,6 +465,9 @@ $a->strings["If you have moved this profile from another server, and some of you
$a->strings["Resend relocate message to contacts"] = "Отправить перемещённые сообщения контактам";
$a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Нет предложений. Если это новый сайт, пожалуйста, попробуйте снова через 24 часа.";
$a->strings["Friend Suggestions"] = "Предложения друзей";
$a->strings["photo"] = "фото";
$a->strings["status"] = "статус";
$a->strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s tagged %2\$s's %3\$s в %4\$s";
$a->strings["Remove Item Tag"] = "Удалить ключевое слово";
$a->strings["Select a tag to remove: "] = "Выберите ключевое слово для удаления: ";
$a->strings["Remove"] = "Удалить";
@ -614,6 +553,56 @@ $a->strings["GNU Social Connector"] = "GNU Social Connector";
$a->strings["ActivityPub"] = "ActivityPub";
$a->strings["pnut"] = "pnut";
$a->strings["%s (via %s)"] = "%s (через %s)";
$a->strings["%s likes this."] = "%s нравится это.";
$a->strings["%s doesn't like this."] = "%s не нравится это.";
$a->strings["%s attends."] = "%s посещает.";
$a->strings["%s doesn't attend."] = "%s не посетит.";
$a->strings["%s attends maybe."] = "%s может быть посетит.";
$a->strings["%s reshared this."] = "%s поделился этим.";
$a->strings["and"] = "и";
$a->strings["and %d other people"] = "и еще %d человек";
$a->strings["<span %1\$s>%2\$d people</span> like this"] = "<span %1\$s>%2\$d людям</span> нравится это";
$a->strings["%s like this."] = "%s нравится это.";
$a->strings["<span %1\$s>%2\$d people</span> don't like this"] = "<span %1\$s>%2\$d людям</span> не нравится это";
$a->strings["%s don't like this."] = "%s не нравится это";
$a->strings["<span %1\$s>%2\$d people</span> attend"] = "<span %1\$s>%2\$d человека</span> посетят";
$a->strings["%s attend."] = "%s посетит.";
$a->strings["<span %1\$s>%2\$d people</span> don't attend"] = "<span %1\$s>%2\$d человек</span> не посетит";
$a->strings["%s don't attend."] = "%s не посетит";
$a->strings["<span %1\$s>%2\$d people</span> attend maybe"] = "<span %1\$s>%2\$d человек</span> может быть посетят";
$a->strings["%s attend maybe."] = "%s может быть посетит.";
$a->strings["<span %1\$s>%2\$d people</span> reshared this"] = "<span %1\$s>%2\$d людей</span> поделились этим";
$a->strings["Visible to <strong>everybody</strong>"] = "Видимое <strong>всем</strong>";
$a->strings["Please enter a image/video/audio/webpage URL:"] = "Пожалуйста, введите адрес картинки/видео/аудио/странички:";
$a->strings["Tag term:"] = "Тег:";
$a->strings["Save to Folder:"] = "Сохранить в папку:";
$a->strings["Where are you right now?"] = "И где вы сейчас?";
$a->strings["Delete item(s)?"] = "Удалить елемент(ты)?";
$a->strings["New Post"] = "Новая запись";
$a->strings["Share"] = "Поделиться";
$a->strings["Bold"] = "Жирный";
$a->strings["Italic"] = "Kурсивный";
$a->strings["Underline"] = "Подчеркнутый";
$a->strings["Quote"] = "Цитата";
$a->strings["Code"] = "Код";
$a->strings["Image"] = "Изображение / Фото";
$a->strings["Link"] = "Ссылка";
$a->strings["Link or Media"] = "Ссылка или медиа";
$a->strings["Scheduled at"] = "Запланировано на";
$a->strings["View %s's profile @ %s"] = "Просмотреть профиль %s [@ %s]";
$a->strings["Categories:"] = "Категории:";
$a->strings["Filed under:"] = "В рубрике:";
$a->strings["%s from %s"] = "%s из %s";
$a->strings["View in context"] = "Смотреть в контексте";
$a->strings["remove"] = "удалить";
$a->strings["Delete Selected Items"] = "Удалить выбранные позиции";
$a->strings["You had been addressed (%s)."] = "К вам обратились (%s).";
$a->strings["You are following %s."] = "Вы подписаны на %s.";
$a->strings["Tagged"] = "Отмечено";
$a->strings["Reshared"] = "Репост";
$a->strings["%s is participating in this thread."] = "%s участвует в этом обсуждении";
$a->strings["Relayed"] = "Ретранслировано";
$a->strings["Fetched"] = "Загружено";
$a->strings["General Features"] = "Основные возможности";
$a->strings["Photo Location"] = "Место фотографирования";
$a->strings["Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map."] = "Метаданные фотографий обычно вырезаются. Эта настройка получает местоположение (если есть) до вырезки метаданных и связывает с координатами на карте.";
@ -637,6 +626,19 @@ $a->strings["Display membership date in profile"] = "Дата вашей рег
$a->strings["Forums"] = "Форумы";
$a->strings["External link to forum"] = "Внешняя ссылка на форум";
$a->strings["show more"] = "показать больше";
$a->strings["%1\$s poked %2\$s"] = "%1\$s ткнул %2\$s";
$a->strings["event"] = "мероприятие";
$a->strings["Follow Thread"] = "Подписаться на обсуждение";
$a->strings["View Status"] = "Просмотреть статус";
$a->strings["View Profile"] = "Просмотреть профиль";
$a->strings["View Photos"] = "Просмотреть фото";
$a->strings["Network Posts"] = "Записи сети";
$a->strings["View Contact"] = "Просмотреть контакт";
$a->strings["Send PM"] = "Отправить ЛС";
$a->strings["Block"] = "Заблокировать";
$a->strings["Ignore"] = "Игнорировать";
$a->strings["Languages"] = "Языки";
$a->strings["Poke"] = "потыкать";
$a->strings["Nothing new here"] = "Ничего нового здесь";
$a->strings["Go back"] = "Назад";
$a->strings["Clear notifications"] = "Стереть уведомления";
@ -977,6 +979,7 @@ $a->strings["bytes"] = "байт";
$a->strings["View on separate page"] = "Посмотреть в отдельной вкладке";
$a->strings["[no subject]"] = "[без темы]";
$a->strings["%1\$s had started following you"] = "%1\$s подписались на вас";
$a->strings["%1\$s replied to you on %2\$s"] = "%1\$s ответил(а) вам на %2\$s";
$a->strings["%1\$s commented in your thread %2\$s"] = "%1\$s ответил в вашем обсуждении %2\$s";
$a->strings["%1\$s commented in their thread %2\$s"] = "%1\$s ответил в своём обсуждении %2\$s";
$a->strings["%1\$s commented in their thread"] = "%1\$s ответил в своём обсуждении";
@ -1779,6 +1782,7 @@ $a->strings["%s's timeline"] = "Лента %s";
$a->strings["%s's posts"] = "Записи %s";
$a->strings["%s's comments"] = "Комментарии %s";
$a->strings["Scheduled"] = "Запланировано";
$a->strings["Content"] = "Содержание";
$a->strings["Only parent users can create additional accounts."] = "Только основные пользователи могут создавать дополнительные учётные записи.";
$a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Если вы не знакомы с OpenID, пожалуйста, оставьте это поле пустым и заполните остальные элементы.";
$a->strings["Your OpenID (optional): "] = "Ваш OpenID (необязательно):";

View file

@ -9,16 +9,16 @@
{{else}}
<form>
<p>
<input type="search" name="q" value="{{$q}}" placeholder="search"></input>
<input type="Submit" value="search">
<a href="/admin/logs/view">clear</a>
<input type="search" name="q" value="{{$q}}" placeholder="{{$l10n.Search}}"></input>
<input type="submit" value="{{$l10n.Search}}">
<a href="/admin/logs/view">{{$l10n.Show_all}}</a>
</p>
<table>
<thead>
<tr>
<th>Date</th>
<th>{{$l10n.Date}}</th>
<th>
<select name="level" onchange="this.form.submit()">
{{foreach $filtersvalues.level as $v }}
@ -39,22 +39,22 @@
{{/foreach}}
</select>
</th>
<th>Message</th>
<th>{{$l10n.Message}}</th>
</tr>
</thead>
<tbody>
{{foreach $data as $row}}
<tr id="ev-{{$row->id}}" class="log-event"
role="button" tabIndex="0"
aria-label="View details" aria-haspopup="true" aria-expanded="false"
aria-label="{{$l10n.View_details}}" aria-haspopup="true" aria-expanded="false"
style="cursor:pointer;"
title="Click to view details">
title="{{$l10n.Click_to_view_details}}">
<td>{{$row->date}}</td>
<td>{{$row->level}}</td>
<td>{{$row->context}}</td>
<td>{{$row->message}}</td>
</tr>
<tr class="hidden" data-id="ev-{{$row->id}}"><th colspan="4">Data</th></tr>
<tr class="hidden" data-id="ev-{{$row->id}}"><th colspan="4">{{$l10n.Event_details}}</th></tr>
{{foreach $row->getData() as $k=>$v}}
<tr class="hidden" data-id="ev-{{$row->id}}">
<th>{{$k}}</th>
@ -63,7 +63,7 @@
</td>
</tr>
{{/foreach}}
<tr class="hidden" data-id="ev-{{$row->id}}"><th colspan="4">Source</th></tr>
<tr class="hidden" data-id="ev-{{$row->id}}"><th colspan="4">{{$l10n.Source}}</th></tr>
{{foreach $row->getSource() as $k=>$v}}
<tr class="hidden" data-id="ev-{{$row->id}}">
<th>{{$k}}</th>

View file

@ -152,7 +152,7 @@
<form action="{{$baseurl}}/admin/site" method="post">
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
<h2>{{$relocate}}</h2>
<p>{{$relocate_warning}}</p>
<p>{{$relocate_warning nofilter}}</p>
{{include file="field_input.tpl" field=$relocate_url}}
<input type="hidden" name="page_site" value="{{$submit}}">
<div class="submit"><input type="submit" name="relocate" value="{{$relocate_button}}"/></div>

View file

@ -8,33 +8,33 @@
</div>
{{else}}
<form method="get" class="row">
<div class="col-xs-10">
<div class="col-xs-8">
<div class="form-group form-group-search">
<input accesskey="s" id="nav-search-input-field" class="form-control form-search"
type="text" name="q" data-toggle="tooltip" title="Search in logs"
placeholder="Search" value="{{$q}}">
type="text" name="q" data-toggle="tooltip" title="{{$l10n.Search_in_logs}}"
placeholder="{{$l10n.Search}}" value="{{$q}}">
<button class="btn btn-default btn-sm form-button-search"
type="submit">Search</button>
type="submit">{{$l10n.Search}}</button>
</div>
</div>
<div class="xol-xs-2">
<a href="/admin/logs/view" class="btn btn-default">Show all</a>
<div class="xol-xs-4">
<a href="/admin/logs/view" class="btn btn-default">{{$l10n.Show_all}}</a>
</div>
</form>
<table class="table table-hover">
<thead>
<tr>
<th>Date</th>
<th>{{$l10n.Date}}</th>
<th class="dropdown">
<a class="dropdown-toggle text-nowrap" type="button" id="level" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Level {{if $filters.level}}({{$filters.level}}){{/if}}<span class="caret"></span>
{{$l10n.Level}} {{if $filters.level}}({{$filters.level}}){{/if}}<span class="caret"></span>
</a>
<ul class="dropdown-menu" aria-labelledby="level">
{{foreach $filtersvalues.level as $v }}
<li {{if $filters.level == $v}}class="active"{{/if}}>
<a href="/admin/logs/view?level={{$v}}" data-filter="level" data-filter-value="{{$v}}">
{{if $v == ""}}ALL{{/if}}{{$v}}
{{if $v == ""}}{{$l10n.ALL}}{{/if}}{{$v}}
</a>
</li>
{{/foreach}}
@ -42,26 +42,26 @@
</th>
<th class="dropdown">
<a class="dropdown-toggle text-nowrap" type="button" id="context" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Context {{if $filters.context}}({{$filters.context}}){{/if}}<span class="caret"></span>
{{$l10n.Context}} {{if $filters.context}}({{$filters.context}}){{/if}}<span class="caret"></span>
</a>
<ul class="dropdown-menu" aria-labelledby="context">
{{foreach $filtersvalues.context as $v }}
<li {{if $filters.context == $v}}class="active"{{/if}}>
<a href="/admin/logs/view?context={{$v}}" data-filter="context" data-filter-value="{{$v}}">
{{if $v == ""}}ALL{{/if}}{{$v}}
{{if $v == ""}}{{$l10n.ALL}}{{/if}}{{$v}}
</a>
</li>
{{/foreach}}
</ul>
</th>
<th>Message</th>
<th>{{$l10n.Message}}</th>
</tr>
</thead>
<tbody>
{{foreach $data as $row}}
<tr id="ev-{{$row->id}}" class="log-event"
role="button" tabIndex="0"
aria-label="View details" aria-haspopup="true" aria-expanded="false"
aria-label="{{$l10n.View_details}}" aria-haspopup="true" aria-expanded="false"
data-data="{{$row->data}}" data-source="{{$row->source}}">
<td>{{$row->date}}</td>
<td class="
@ -86,16 +86,16 @@
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">Event details</h4>
<h4 class="modal-title">{{$l10n.Event_details}}</h4>
</div>
<div class="modal-body">
<table class="table main-data">
<thead>
<tr>
<th>Date</th>
<th>Level</th>
<th>Context</th>
<th>Message</th>
<th>{{$l10n.Date}}</th>
<th>{{$l10n.Level}}</th>
<th>{{$l10n.Context}}</th>
<th>{{$l10n.Message}}</th>
</tr>
</thead>
<tbody><tr></tr></tbody>
@ -103,11 +103,11 @@
<table class="table source-data">
<thead>
<tr>
<th>File</th>
<th>Line</th>
<th>Function</th>
<th>UID</th>
<th>Process ID</th>
<th>{{$l10n.File}}</th>
<th>{{$l10n.Line}}</th>
<th>{{$l10n.Function}}</th>
<th>{{$l10n.UID}}</th>
<th>{{$l10n.Process_ID}}</th>
</tr>
</thead>
<tbody>
@ -131,7 +131,7 @@
<div class="modal-footer">
<button type="button" class="btn btn-default" data-previous>&lt;</button>
<button type="button" class="btn btn-default" data-next>&gt;</button>
<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" data-dismiss="modal">{{$l10n.Close}}</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->

View file

@ -339,7 +339,7 @@
<div id="admin-settings-relocate-collapse" class="panel-collapse collapse" role="tabpanel" aria-labelledby="admin-settings-relocate">
<div class="panel-body">
<div class="alert alert-danger alert-dismissible">
{{$relocate_warning}}
{{$relocate_warning nofilter}}
</div>
{{include file="field_input.tpl" field=$relocate_url}}
</div>