diff --git a/.php_cs.dist b/.php_cs.dist index 1d16a11ef..897c6f110 100644 --- a/.php_cs.dist +++ b/.php_cs.dist @@ -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'] ], diff --git a/Vagrantfile b/Vagrantfile index 81676df61..a7740d327 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -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. diff --git a/bin/dev/vagrant_provision.sh b/bin/dev/vagrant_provision.sh index c8e62f291..2dc386a4b 100755 --- a/bin/dev/vagrant_provision.sh +++ b/bin/dev/vagrant_provision.sh @@ -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" diff --git a/composer.json b/composer.json index bf0559254..0efba3664 100644 --- a/composer.json +++ b/composer.json @@ -84,7 +84,6 @@ "Friendica\\Addon\\": "addon/" }, "files": [ - "include/conversation.php", "include/dba.php", "include/enotify.php", "boot.php" diff --git a/doc/Addons.md b/doc/Addons.md index 72adb0372..10949c2c4 100644 --- a/doc/Addons.md +++ b/doc/Addons.md @@ -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); diff --git a/doc/Install.md b/doc/Install.md index 80cf05102..6c301a062 100644 --- a/doc/Install.md +++ b/doc/Install.md @@ -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. diff --git a/doc/Vagrant.md b/doc/Vagrant.md index 4040495ca..3751b7bc0 100644 --- a/doc/Vagrant.md +++ b/doc/Vagrant.md @@ -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/). \ No newline at end of file diff --git a/doc/de/Addons.md b/doc/de/Addons.md index fe2735482..b242d1307 100644 --- a/doc/de/Addons.md +++ b/doc/de/Addons.md @@ -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); diff --git a/doc/de/Install.md b/doc/de/Install.md index c0101f2c2..c557a5a61 100644 --- a/doc/de/Install.md +++ b/doc/de/Install.md @@ -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. diff --git a/include/api.php b/include/api.php index 7758a5eaf..7656f5029 100644 --- a/include/api.php +++ b/include/api.php @@ -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 diff --git a/include/conversation.php b/include/conversation.php deleted file mode 100644 index 507add97d..000000000 --- a/include/conversation.php +++ /dev/null @@ -1,1462 +0,0 @@ -. - * - */ - -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 = '
' . "\r\n" - . "\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 = '
' . "\r\n" - . "\r\n"; - } - } - } elseif ($mode === 'notes') { - $items = conversation_add_children($items, false, $order, local_user()); - - if (!$update) { - $live_update_div = '
' . "\r\n" - . "\r\n"; - } - } elseif ($mode === 'display') { - $items = conversation_add_children($items, false, $order, $uid); - - if (!$update) { - $live_update_div = '
' . "\r\n" - . ""; - } - } elseif ($mode === 'community') { - $items = conversation_add_children($items, true, $order, $uid); - - if (!$update) { - $live_update_div = '
' . "\r\n" - . "\r\n"; - } - } elseif ($mode === 'contacts') { - $items = conversation_add_children($items, false, $order, $uid); - - if (!$update) { - $live_update_div = '
' . "\r\n" - . "\r\n"; - } - } elseif ($mode === 'search') { - $live_update_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.', '' . htmlentities($row['causer-name']) . ''); - } - $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 .= '
  • ' . $k . '
  • ' . PHP_EOL; - } elseif ($v) { - $o .= '
  • ' . $k . '
  • ' . 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 = '' . htmlentities($activity['author-name']) . ''; - - 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('%2$d people like this', $spanatts, $total); - $explikers = DI::l10n()->t('%s like this.', $likers); - break; - case 'dislike': - $phrase = DI::l10n()->t('%2$d people don\'t like this', $spanatts, $total); - $explikers = DI::l10n()->t('%s don\'t like this.', $likers); - break; - case 'attendyes': - $phrase = DI::l10n()->t('%2$d people attend', $spanatts, $total); - $explikers = DI::l10n()->t('%s attend.', $likers); - break; - case 'attendno': - $phrase = DI::l10n()->t('%2$d people don\'t attend', $spanatts, $total); - $explikers = DI::l10n()->t('%s don\'t attend.', $likers); - break; - case 'attendmaybe': - $phrase = DI::l10n()->t('%2$d people attend maybe', $spanatts, $total); - $explikers = DI::l10n()->t('%s attend maybe.', $likers); - break; - case 'announce': - $phrase = DI::l10n()->t('%2$d people reshared this', $spanatts, $total); - $explikers = DI::l10n()->t('%s reshared this.', $likers); - break; - } - - $expanded .= "\t" . ''; - } - - $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 everybody'), - '$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 = ''; - } - - 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']); -} diff --git a/mod/display.php b/mod/display.php index bb69a611c..87775126e 100644 --- a/mod/display.php +++ b/mod/display.php @@ -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 .= ""; } - $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'])); diff --git a/mod/item.php b/mod/item.php index 7693b28c6..f40f6ad45 100644 --- a/mod/item.php +++ b/mod/item.php @@ -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 diff --git a/mod/notes.php b/mod/notes.php index 11ec8a035..5996c140f 100644 --- a/mod/notes.php +++ b/mod/notes.php @@ -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); diff --git a/mod/photos.php b/mod/photos.php index 1c9e85be8..209b9fb7b 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -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))) { diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php new file mode 100644 index 000000000..879e47c24 --- /dev/null +++ b/src/Content/Conversation.php @@ -0,0 +1,1226 @@ +. + * + */ + +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 = '' . htmlentities($activity['author-name']) . ''; + + 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('%2$d people like this', $spanatts, $total); + $explikers = $this->l10n->t('%s like this.', $likers); + break; + case 'dislike': + $phrase = $this->l10n->t('%2$d people don\'t like this', $spanatts, $total); + $explikers = $this->l10n->t('%s don\'t like this.', $likers); + break; + case 'attendyes': + $phrase = $this->l10n->t('%2$d people attend', $spanatts, $total); + $explikers = $this->l10n->t('%s attend.', $likers); + break; + case 'attendno': + $phrase = $this->l10n->t('%2$d people don\'t attend', $spanatts, $total); + $explikers = $this->l10n->t('%s don\'t attend.', $likers); + break; + case 'attendmaybe': + $phrase = $this->l10n->t('%2$d people attend maybe', $spanatts, $total); + $explikers = $this->l10n->t('%s attend maybe.', $likers); + break; + case 'announce': + $phrase = $this->l10n->t('%2$d people reshared this', $spanatts, $total); + $explikers = $this->l10n->t('%s reshared this.', $likers); + break; + } + + $expanded .= "\t" . ''; + } + + $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 everybody'), + '$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 = ''; + } + + $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 = '
    ' . "\r\n" + . "\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 = '
    ' . "\r\n" + . "\r\n"; + } + } + } elseif ($mode === 'notes') { + $items = $this->addChildren($items, false, $order, local_user()); + + if (!$update) { + $live_update_div = '
    ' . "\r\n" + . "\r\n"; + } + } elseif ($mode === 'display') { + $items = $this->addChildren($items, false, $order, $uid); + + if (!$update) { + $live_update_div = '
    ' . "\r\n" + . ""; + } + } elseif ($mode === 'community') { + $items = $this->addChildren($items, true, $order, $uid); + + if (!$update) { + $live_update_div = '
    ' . "\r\n" + . "\r\n"; + } + } elseif ($mode === 'contacts') { + $items = $this->addChildren($items, false, $order, $uid); + + if (!$update) { + $live_update_div = '
    ' . "\r\n" + . "\r\n"; + } + } elseif ($mode === 'search') { + $live_update_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.', '' . htmlentities($row['causer-name']) . ''); + } + $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']); + } +} diff --git a/src/Content/Item.php b/src/Content/Item.php index e3a61bfec..91bf79f17 100644 --- a/src/Content/Item.php +++ b/src/Content/Item.php @@ -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 .= '
  • ' . $k . '
  • ' . PHP_EOL; + } elseif ($v) { + $o .= '
  • ' . $k . '
  • ' . 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; + } } diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index b2fb1da7a..d0c19c616 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -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 { diff --git a/src/Core/Addon.php b/src/Core/Addon.php index db358db45..a1b35471f 100644 --- a/src/Core/Addon.php +++ b/src/Core/Addon.php @@ -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]; diff --git a/src/DI.php b/src/DI.php index 4645ea252..ed67efe00 100644 --- a/src/DI.php +++ b/src/DI.php @@ -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 */ diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php index d7f1179d0..02a29b404 100644 --- a/src/Database/DBStructure.php +++ b/src/Database/DBStructure.php @@ -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 * diff --git a/src/Model/APContact.php b/src/Model/APContact.php index 13add7e65..a919a67f3 100644 --- a/src/Model/APContact.php +++ b/src/Model/APContact.php @@ -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 []; } diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 6452101f4..18e498b97 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -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) { diff --git a/src/Model/Mail.php b/src/Model/Mail.php index 7eaeb09b5..75515c5df 100644 --- a/src/Model/Mail.php +++ b/src/Model/Mail.php @@ -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 { diff --git a/src/Module/Admin/Logs/View.php b/src/Module/Admin/Logs/View.php index 222052380..e0e12760b 100644 --- a/src/Module/Admin/Logs/View.php +++ b/src/Module/Admin/Logs/View.php @@ -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 %1$s log file.\r\n
    Check to see if file %1$s exist and is readable.', $f); + $error = DI::l10n()->t('Error trying to open %1$s log file.
    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 %1$s log file.\r\n
    Check to see if file %1$s is readable.', $f); + $error = DI::l10n()->t('Couldn\'t open %1$s log file.
    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, diff --git a/src/Module/Bookmarklet.php b/src/Module/Bookmarklet.php index d581b81e8..3551cfd17 100644 --- a/src/Module/Bookmarklet.php +++ b/src/Module/Bookmarklet.php @@ -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 .= ""; } else { $output = '

    ' . DI::l10n()->t('The post was created') . '

    '; diff --git a/src/Module/Contact.php b/src/Module/Contact.php index 432d0d0a4..bf0e3bfaf 100644 --- a/src/Module/Contact.php +++ b/src/Module/Contact.php @@ -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); } } diff --git a/src/Module/Conversation/Community.php b/src/Module/Conversation/Community.php index d80c4aae2..3a30f3799 100644 --- a/src/Module/Conversation/Community.php +++ b/src/Module/Conversation/Community.php @@ -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(), diff --git a/src/Module/Conversation/Network.php b/src/Module/Conversation/Network.php index d9f34e3e8..3585d52ed 100644 --- a/src/Module/Conversation/Network.php +++ b/src/Module/Conversation/Network.php @@ -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(); diff --git a/src/Module/Profile/Status.php b/src/Module/Profile/Status.php index c6a9e272a..3c1ed8c5a 100644 --- a/src/Module/Profile/Status.php +++ b/src/Module/Profile/Status.php @@ -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)); diff --git a/src/Module/Search/Filed.php b/src/Module/Search/Filed.php index f5ec0d70f..7bfc14f6f 100644 --- a/src/Module/Search/Filed.php +++ b/src/Module/Search/Filed.php @@ -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(); diff --git a/src/Module/Search/Index.php b/src/Module/Search/Index.php index 1a7d4bf61..7be5058c2 100644 --- a/src/Module/Search/Index.php +++ b/src/Module/Search/Index.php @@ -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(); diff --git a/src/Module/Update/Community.php b/src/Module/Update/Community.php index 0915cf7d4..78d6f0bd3 100644 --- a/src/Module/Update/Community.php +++ b/src/Module/Update/Community.php @@ -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); diff --git a/src/Module/Update/Network.php b/src/Module/Update/Network.php index dbde3bab6..df37c82a8 100644 --- a/src/Module/Update/Network.php +++ b/src/Module/Update/Network.php @@ -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); diff --git a/src/Module/Update/Profile.php b/src/Module/Update/Profile.php index e9e8681af..cc738f501 100644 --- a/src/Module/Update/Profile.php +++ b/src/Module/Update/Profile.php @@ -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); } diff --git a/src/Network/Probe.php b/src/Network/Probe.php index bb805b2d0..4aa50b4be 100644 --- a/src/Network/Probe.php +++ b/src/Network/Probe.php @@ -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; diff --git a/src/Object/Post.php b/src/Object/Post.php index 5722582d2..7a8e67404 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -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, diff --git a/src/Protocol/Feed.php b/src/Protocol/Feed.php index 2dae7ea9e..680e8803b 100644 --- a/src/Protocol/Feed.php +++ b/src/Protocol/Feed.php @@ -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']]); } } diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php index 8f2f317a9..4155fb084 100644 --- a/src/Protocol/OStatus.php +++ b/src/Protocol/OStatus.php @@ -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) { diff --git a/src/Security/Security.php b/src/Security/Security.php index c4f8f4a5b..c6c2d806e 100644 --- a/src/Security/Security.php +++ b/src/Security/Security.php @@ -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 { diff --git a/src/Util/ReversedFileReader.php b/src/Util/ReversedFileReader.php index bdc31f0cb..92c8cced1 100644 --- a/src/Util/ReversedFileReader.php +++ b/src/Util/ReversedFileReader.php @@ -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); } diff --git a/tests/datasets/log/empty.friendica.log.txt b/tests/datasets/log/empty.friendica.log.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tests/legacy/ApiTest.php b/tests/legacy/ApiTest.php index eaf596fb6..8e0edaeef 100644 --- a/tests/legacy/ApiTest.php +++ b/tests/legacy/ApiTest.php @@ -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. * diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php index e2c4d9288..730e0b6da 100644 --- a/tests/src/Content/Text/BBCodeTest.php +++ b/tests/src/Content/Text/BBCodeTest.php @@ -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' => '', @@ -282,6 +282,16 @@ class BBCodeTest extends MockedTest 'expectedHTML' => 'Test', '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.
    Karl Marx - Die ursprüngliche Akkumulation
    https://wohlstandfueralle.podigee.io/107-urspruengliche-akkumulation
    #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üngliche Akkumulation' publisher_name='Wohlstand fü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, + ], ]; } diff --git a/tests/src/Model/Log/ParsedLogIteratorTest.php b/tests/src/Model/Log/ParsedLogIteratorTest.php index df9f8393a..c278621e7 100644 --- a/tests/src/Model/Log/ParsedLogIteratorTest.php +++ b/tests/src/Model/Log/ParsedLogIteratorTest.php @@ -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); + } } diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index a0252cd5f..46d072b32 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -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 \n" "Language-Team: LANGUAGE \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 "%2$d people like this" -msgstr "" - -#: include/conversation.php:1040 -#, php-format -msgid "%s like this." -msgstr "" - -#: include/conversation.php:1043 -#, php-format -msgid "%2$d people 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 "%2$d people attend" -msgstr "" - -#: include/conversation.php:1048 -#, php-format -msgid "%s attend." -msgstr "" - -#: include/conversation.php:1051 -#, php-format -msgid "%2$d people don't attend" -msgstr "" - -#: include/conversation.php:1052 -#, php-format -msgid "%s don't attend." -msgstr "" - -#: include/conversation.php:1055 -#, php-format -msgid "%2$d people attend maybe" -msgstr "" - -#: include/conversation.php:1056 -#, php-format -msgid "%s attend maybe." -msgstr "" - -#: include/conversation.php:1059 -#, php-format -msgid "%2$d people reshared this" -msgstr "" - -#: include/conversation.php:1107 -msgid "Visible to everybody" -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 "%2$d people like this" +msgstr "" + +#: src/Content/Conversation.php:240 +#, php-format +msgid "%s like this." +msgstr "" + +#: src/Content/Conversation.php:243 +#, php-format +msgid "%2$d people 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 "%2$d people attend" +msgstr "" + +#: src/Content/Conversation.php:248 +#, php-format +msgid "%s attend." +msgstr "" + +#: src/Content/Conversation.php:251 +#, php-format +msgid "%2$d people 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 "%2$d people attend maybe" +msgstr "" + +#: src/Content/Conversation.php:256 +#, php-format +msgid "%s attend maybe." +msgstr "" + +#: src/Content/Conversation.php:259 +#, php-format +msgid "%2$d people reshared this" +msgstr "" + +#: src/Content/Conversation.php:307 +msgid "Visible to everybody" +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 "" "%2$s %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 %1$s log file.\\r\\n
    Check to see " -"if file %1$s exist and is readable." +"Error trying to open %1$s log file.
    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 %1$s log file.\\r\\n
    Check to see if file " -"%1$s is readable." +"Couldn't open %1$s log file.
    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 "" diff --git a/view/lang/de/messages.po b/view/lang/de/messages.po index d0c354710..c502a79e9 100644 --- a/view/lang/de/messages.po +++ b/view/lang/de/messages.po @@ -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 \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 "%2$d people like this" -msgstr "%2$d Personen 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 "%2$d people don't like this" -msgstr "%2$d Personen 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 "%2$d people attend" -msgstr "%2$d Personen nehmen teil" - -#: include/conversation.php:1039 -#, php-format -msgid "%s attend." -msgstr "%s nehmen teil." - -#: include/conversation.php:1042 -#, php-format -msgid "%2$d people don't attend" -msgstr "%2$d Personen 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 "%2$d people attend maybe" -msgstr "%2$d Personen 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 "%2$d people reshared this" -msgstr "%2$d Personen haben dies geteilt" - -#: include/conversation.php:1098 -msgid "Visible to everybody" -msgstr "Für jedermann 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 "%2$d people like this" +msgstr "%2$d Personen 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 "%2$d people don't like this" +msgstr "%2$d Personen 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 "%2$d people attend" +msgstr "%2$d Personen nehmen teil" + +#: src/Content/Conversation.php:248 +#, php-format +msgid "%s attend." +msgstr "%s nehmen teil." + +#: src/Content/Conversation.php:251 +#, php-format +msgid "%2$d people don't attend" +msgstr "%2$d Personen 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 "%2$d people attend maybe" +msgstr "%2$d Personen 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 "%2$d people reshared this" +msgstr "%2$d Personen haben dies geteilt" + +#: src/Content/Conversation.php:307 +msgid "Visible to everybody" +msgstr "Für jedermann 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 "%2$s %3$s" msgstr "%2$s%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 %1$s log file.\\r\\n
    Check to see " -"if file %1$s exist and is readable." -msgstr "Fehler beim Öffnen der Logdatei %1$s.\\r\\n
    Bitte überprüfe ob die Datei %1$s existiert und gelesen werden kann." +"Error trying to open %1$s log file.
    Check to see if " +"file %1$s exist and is readable." +msgstr "Fehler beim Öffnen der Logdatei %1$s.
    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 %1$s log file.\\r\\n
    Check to see if file" -" %1$s is readable." -msgstr "Konnte die Logdatei %1$s nicht öffnen.\\r\\n
    Bitte stelle sicher, dass die Datei %1$s lesbar ist." +"Couldn't open %1$s log file.
    Check to see if file %1$s " +"is readable." +msgstr "Konnte die Logdatei %1$s nicht öffnen.
    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.
    " 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 hier finden. Du kannst außerdem mit dem Befehl php bin/console.php dbstructure toinnodb 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.
    " 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. Hier findest du eine Anleitung für die Umstellung. Alternativ kannst du auch den Befehl php bin/console.php dbstructure toinnodb In der Kommandozeile deiner Friendica Instanz verwenden um die Formate automatisch anzupassen.
    " -#: 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 here for more information.
    " 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 findest du hier." -#: 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 .htconfig.php. Wie die Übertragung der Werte aussehen muss, kannst du der Konfiguration Hilfeseite 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 for help with the transition." msgstr "Die Konfiguration von Friendica befindet sich ab jetzt in der 'config/local.config.php' Datei. Kopiere bitte die Datei 'config/local-sample.config.php' nach 'config/local.config.php' und setze die Konfigurationvariablen so wie in der alten config/local.ini.php. Wie die Übertragung der Werte aussehen muss, kannst du der Konfiguration Hilfeseite entnehmen." -#: src/Module/Admin/Summary.php:117 +#: src/Module/Admin/Summary.php:118 #, php-format msgid "" "%s is not reachable on your system. This is a severe " @@ -6682,87 +6744,87 @@ msgid "" "href=\"%s\">the installation page for help." msgstr "%s konnte von deinem System nicht aufgerufen werden. Dies deutet auf ein schwerwiegendes Problem deiner Konfiguration hin. Bitte konsultiere die Installations-Dokumentation zum Beheben des Problems." -#: src/Module/Admin/Summary.php: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 may still be visible" msgstr "Antworten/Likes auf deine öffentlichen Beiträge könnten 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 \"nickname@%s\"." msgstr "Wähle einen Spitznamen für dein Profil. Dieser muss mit einem Buchstaben beginnen. Die Adresse deines Profils auf dieser Seite wird 'spitzname@%s' 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:
    login: %s
    " "password: %s

    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" diff --git a/view/lang/de/strings.php b/view/lang/de/strings.php index 48c3cdc5f..fe0c0ae59 100644 --- a/view/lang/de/strings.php +++ b/view/lang/de/strings.php @@ -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["%2\$d people like this"] = "%2\$d Personen mögen das"; -$a->strings["%s like this."] = "%s mögen das."; -$a->strings["%2\$d people don't like this"] = "%2\$d Personen mögen das nicht"; -$a->strings["%s don't like this."] = "%s mögen dies nicht."; -$a->strings["%2\$d people attend"] = "%2\$d Personen nehmen teil"; -$a->strings["%s attend."] = "%s nehmen teil."; -$a->strings["%2\$d people don't attend"] = "%2\$d Personen nehmen nicht teil"; -$a->strings["%s don't attend."] = "%s nehmen nicht teil."; -$a->strings["%2\$d people attend maybe"] = "%2\$d Personen nehmen eventuell teil"; -$a->strings["%s attend maybe."] = "%s nimmt eventuell teil."; -$a->strings["%2\$d people reshared this"] = "%2\$d Personen haben dies geteilt"; -$a->strings["Visible to everybody"] = "Für jedermann sichtbar"; -$a->strings["Please enter a image/video/audio/webpage URL:"] = "Bitte gib eine Bild/Video/Audio/Webseiten-URL ein:"; -$a->strings["Tag term:"] = "Tag:"; -$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["%2\$d people like this"] = "%2\$d Personen mögen das"; +$a->strings["%s like this."] = "%s mögen das."; +$a->strings["%2\$d people don't like this"] = "%2\$d Personen mögen das nicht"; +$a->strings["%s don't like this."] = "%s mögen dies nicht."; +$a->strings["%2\$d people attend"] = "%2\$d Personen nehmen teil"; +$a->strings["%s attend."] = "%s nehmen teil."; +$a->strings["%2\$d people don't attend"] = "%2\$d Personen nehmen nicht teil"; +$a->strings["%s don't attend."] = "%s nehmen nicht teil."; +$a->strings["%2\$d people attend maybe"] = "%2\$d Personen nehmen eventuell teil"; +$a->strings["%s attend maybe."] = "%s nimmt eventuell teil."; +$a->strings["%2\$d people reshared this"] = "%2\$d Personen haben dies geteilt"; +$a->strings["Visible to everybody"] = "Für jedermann sichtbar"; +$a->strings["Please enter a image/video/audio/webpage URL:"] = "Bitte gib eine Bild/Video/Audio/Webseiten-URL ein:"; +$a->strings["Tag term:"] = "Tag:"; +$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 %1\$s log file.\\r\\n
    Check to see if file %1\$s exist and is readable."] = "Fehler beim Öffnen der Logdatei %1\$s.\\r\\n
    Bitte überprüfe ob die Datei %1\$s existiert und gelesen werden kann."; -$a->strings["Couldn't open %1\$s log file.\\r\\n
    Check to see if file %1\$s is readable."] = "Konnte die Logdatei %1\$s nicht öffnen.\\r\\n
    Bitte stelle sicher, dass die Datei %1\$s lesbar ist."; +$a->strings["Error trying to open %1\$s log file.
    Check to see if file %1\$s exist and is readable."] = "Fehler beim Öffnen der Logdatei %1\$s.
    Bitte überprüfe ob die Datei %1\$s existiert und gelesen werden kann."; +$a->strings["Couldn't open %1\$s log file.
    Check to see if file %1\$s is readable."] = "Konnte die Logdatei %1\$s nicht öffnen.
    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"; diff --git a/view/lang/ru/messages.po b/view/lang/ru/messages.po index acfe19679..149cdae0b 100644 --- a/view/lang/ru/messages.po +++ b/view/lang/ru/messages.po @@ -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 \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 "%2$d people like this" -msgstr "%2$d людям нравится это" - -#: include/conversation.php:1031 -#, php-format -msgid "%s like this." -msgstr "%s нравится это." - -#: include/conversation.php:1034 -#, php-format -msgid "%2$d people don't like this" -msgstr "%2$d людям не нравится это" - -#: include/conversation.php:1035 -#, php-format -msgid "%s don't like this." -msgstr "%s не нравится это" - -#: include/conversation.php:1038 -#, php-format -msgid "%2$d people attend" -msgstr "%2$d человека посетят" - -#: include/conversation.php:1039 -#, php-format -msgid "%s attend." -msgstr "%s посетит." - -#: include/conversation.php:1042 -#, php-format -msgid "%2$d people don't attend" -msgstr "%2$d человек не посетит" - -#: include/conversation.php:1043 -#, php-format -msgid "%s don't attend." -msgstr "%s не посетит" - -#: include/conversation.php:1046 -#, php-format -msgid "%2$d people attend maybe" -msgstr "%2$d человек может быть посетят" - -#: include/conversation.php:1047 -#, php-format -msgid "%s attend maybe." -msgstr "%s может быть посетит." - -#: include/conversation.php:1050 -#, php-format -msgid "%2$d people reshared this" -msgstr "%2$d людей поделились этим" - -#: include/conversation.php:1098 -msgid "Visible to everybody" -msgstr "Видимое всем" - -#: 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 "%2$d people like this" +msgstr "%2$d людям нравится это" + +#: src/Content/Conversation.php:240 +#, php-format +msgid "%s like this." +msgstr "%s нравится это." + +#: src/Content/Conversation.php:243 +#, php-format +msgid "%2$d people don't like this" +msgstr "%2$d людям не нравится это" + +#: src/Content/Conversation.php:244 +#, php-format +msgid "%s don't like this." +msgstr "%s не нравится это" + +#: src/Content/Conversation.php:247 +#, php-format +msgid "%2$d people attend" +msgstr "%2$d человека посетят" + +#: src/Content/Conversation.php:248 +#, php-format +msgid "%s attend." +msgstr "%s посетит." + +#: src/Content/Conversation.php:251 +#, php-format +msgid "%2$d people don't attend" +msgstr "%2$d человек не посетит" + +#: src/Content/Conversation.php:252 +#, php-format +msgid "%s don't attend." +msgstr "%s не посетит" + +#: src/Content/Conversation.php:255 +#, php-format +msgid "%2$d people attend maybe" +msgstr "%2$d человек может быть посетят" + +#: src/Content/Conversation.php:256 +#, php-format +msgid "%s attend maybe." +msgstr "%s может быть посетит." + +#: src/Content/Conversation.php:259 +#, php-format +msgid "%2$d people reshared this" +msgstr "%2$d людей поделились этим" + +#: src/Content/Conversation.php:307 +msgid "Visible to everybody" +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 "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 "%2$s %3$s" msgstr "%2$s %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.
    " 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.
    " 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 here for more information.
    " 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 for help with the transition." msgstr "" -#: src/Module/Admin/Summary.php:117 +#: src/Module/Admin/Summary.php:118 #, php-format msgid "" "%s is not reachable on your system. This is a severe " @@ -6683,87 +6683,87 @@ msgid "" "href=\"%s\">the installation page 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 may still be visible" msgstr "Ответы/лайки ваших публичных сообщений будут видимы." -#: 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 \"nickname@%s\"." 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:
    login: %s
    " "password: %s

    You can change your password after login." msgstr "Ошибка отправки письма. Вот ваши учетные данные:
    логин: %s
    пароль: %s

    Вы сможете изменить пароль после входа." -#: 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 "Показать меньше" diff --git a/view/lang/ru/strings.php b/view/lang/ru/strings.php index a308cca7a..e41731a93 100644 --- a/view/lang/ru/strings.php +++ b/view/lang/ru/strings.php @@ -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["%2\$d people like this"] = "%2\$d людям нравится это"; -$a->strings["%s like this."] = "%s нравится это."; -$a->strings["%2\$d people don't like this"] = "%2\$d людям не нравится это"; -$a->strings["%s don't like this."] = "%s не нравится это"; -$a->strings["%2\$d people attend"] = "%2\$d человека посетят"; -$a->strings["%s attend."] = "%s посетит."; -$a->strings["%2\$d people don't attend"] = "%2\$d человек не посетит"; -$a->strings["%s don't attend."] = "%s не посетит"; -$a->strings["%2\$d people attend maybe"] = "%2\$d человек может быть посетят"; -$a->strings["%s attend maybe."] = "%s может быть посетит."; -$a->strings["%2\$d people reshared this"] = "%2\$d людей поделились этим"; -$a->strings["Visible to everybody"] = "Видимое всем"; -$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["%2\$d people like this"] = "%2\$d людям нравится это"; +$a->strings["%s like this."] = "%s нравится это."; +$a->strings["%2\$d people don't like this"] = "%2\$d людям не нравится это"; +$a->strings["%s don't like this."] = "%s не нравится это"; +$a->strings["%2\$d people attend"] = "%2\$d человека посетят"; +$a->strings["%s attend."] = "%s посетит."; +$a->strings["%2\$d people don't attend"] = "%2\$d человек не посетит"; +$a->strings["%s don't attend."] = "%s не посетит"; +$a->strings["%2\$d people attend maybe"] = "%2\$d человек может быть посетят"; +$a->strings["%s attend maybe."] = "%s может быть посетит."; +$a->strings["%2\$d people reshared this"] = "%2\$d людей поделились этим"; +$a->strings["Visible to everybody"] = "Видимое всем"; +$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 (необязательно):"; diff --git a/view/templates/admin/logs/view.tpl b/view/templates/admin/logs/view.tpl index e15a4a01b..97b5c0625 100644 --- a/view/templates/admin/logs/view.tpl +++ b/view/templates/admin/logs/view.tpl @@ -9,16 +9,16 @@ {{else}}

    - - - clear + + + {{$l10n.Show_all}}

    - + - + {{foreach $data as $row}} + title="{{$l10n.Click_to_view_details}}"> - + {{foreach $row->getData() as $k=>$v}} @@ -63,7 +63,7 @@ {{/foreach}} - + {{foreach $row->getSource() as $k=>$v}} diff --git a/view/templates/admin/site.tpl b/view/templates/admin/site.tpl index 72fba2b80..a1226bdf8 100644 --- a/view/templates/admin/site.tpl +++ b/view/templates/admin/site.tpl @@ -152,7 +152,7 @@

    {{$relocate}}

    -

    {{$relocate_warning}}

    +

    {{$relocate_warning nofilter}}

    {{include file="field_input.tpl" field=$relocate_url}}
    diff --git a/view/theme/frio/templates/admin/logs/view.tpl b/view/theme/frio/templates/admin/logs/view.tpl index 1e1123fbd..cab888268 100755 --- a/view/theme/frio/templates/admin/logs/view.tpl +++ b/view/theme/frio/templates/admin/logs/view.tpl @@ -8,33 +8,33 @@ {{else}} -
    +
    -
    Date{{$l10n.Date}} Message{{$l10n.Message}}
    - + - + {{foreach $data as $row}}
    Date{{$l10n.Date}} Message{{$l10n.Message}}