diff --git a/database.sql b/database.sql index 466a8d9b77..fcbcbb3941 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 2021.12-dev (Siberian Iris) --- DB_UPDATE_VERSION 1441 +-- DB_UPDATE_VERSION 1442 -- ------------------------------------------ @@ -715,11 +715,11 @@ CREATE TABLE IF NOT EXISTS `intro` ( `contact-id` int unsigned NOT NULL DEFAULT 0 COMMENT '', `suggest-cid` int unsigned COMMENT 'Suggested contact', `knowyou` boolean NOT NULL DEFAULT '0' COMMENT '', - `duplex` boolean NOT NULL DEFAULT '0' COMMENT '', + `duplex` boolean NOT NULL DEFAULT '0' COMMENT 'deprecated', `note` text COMMENT '', `hash` varchar(255) NOT NULL DEFAULT '' COMMENT '', `datetime` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', - `blocked` boolean NOT NULL DEFAULT '1' COMMENT '', + `blocked` boolean NOT NULL DEFAULT '0' COMMENT 'deprecated', `ignore` boolean NOT NULL DEFAULT '0' COMMENT '', PRIMARY KEY(`id`), INDEX `contact-id` (`contact-id`), diff --git a/doc/Developer-Domain-Driven-Design.md b/doc/Developer-Domain-Driven-Design.md index b8d886aa0d..1e77dd2f0b 100644 --- a/doc/Developer-Domain-Driven-Design.md +++ b/doc/Developer-Domain-Driven-Design.md @@ -36,17 +36,18 @@ doSomething($intros); ``` After: + ```php -function doSomething(\Friendica\Collection\Introductions $intros) +function doSomething(\Friendica\Contact\Introductions\Collection\Introductions $intros) { foreach ($intros as $intro) { - /** @var $intro \Friendica\Model\Introduction */ + /** @var $intro \Friendica\Contact\Introductions\Entity\Introduction */ $introId = $intro->id; } } -/** @var $intros \Friendica\Collection\Introductions */ -$intros = \Friendica\DI::intro()->select(['uid' => local_user()]); +/** @var $intros \Friendica\Contact\Introductions\Collection\Introductions */ +$intros = \Friendica\DI::intro()->selecForUser(local_user()); doSomething($intros); ``` diff --git a/doc/database/db_intro.md b/doc/database/db_intro.md index da0cbe26ab..3db6240d03 100644 --- a/doc/database/db_intro.md +++ b/doc/database/db_intro.md @@ -14,11 +14,11 @@ Fields | contact-id | | int unsigned | NO | | 0 | | | suggest-cid | Suggested contact | int unsigned | YES | | NULL | | | knowyou | | boolean | NO | | 0 | | -| duplex | | boolean | NO | | 0 | | +| duplex | deprecated | boolean | NO | | 0 | | | note | | text | YES | | NULL | | | hash | | varchar(255) | NO | | | | | datetime | | datetime | NO | | 0001-01-01 00:00:00 | | -| blocked | | boolean | NO | | 1 | | +| blocked | deprecated | boolean | NO | | 0 | | | ignore | | boolean | NO | | 0 | | Indexes diff --git a/src/Collection/Introductions.php b/src/Collection/Introductions.php deleted file mode 100644 index e95433193f..0000000000 --- a/src/Collection/Introductions.php +++ /dev/null @@ -1,29 +0,0 @@ -. - * - */ - -namespace Friendica\Collection; - -use Friendica\BaseCollection; - -class Introductions extends BaseCollection -{ - -} diff --git a/src/Contact/Introduction/Collection/Introductions.php b/src/Contact/Introduction/Collection/Introductions.php new file mode 100644 index 0000000000..4df89cee43 --- /dev/null +++ b/src/Contact/Introduction/Collection/Introductions.php @@ -0,0 +1,9 @@ +. + * + */ + +namespace Friendica\Contact\Introduction\Depository; + +use Friendica\BaseDepository; +use Friendica\Contact\Introduction\Exception\IntroductionNotFoundException; +use Friendica\Contact\Introduction\Exception\IntroductionPersistenceException; +use Friendica\Contact\Introduction\Collection; +use Friendica\Contact\Introduction\Entity; +use Friendica\Contact\Introduction\Factory; +use Friendica\Database\Database; +use Friendica\Network\HTTPException\NotFoundException; +use Friendica\Util\DateTimeFormat; +use Psr\Log\LoggerInterface; + +class Introduction extends BaseDepository +{ + /** @var Factory\Introduction */ + protected $factory; + + protected static $table_name = 'intro'; + + public function __construct(Database $database, LoggerInterface $logger, Factory\Introduction $factory) + { + parent::__construct($database, $logger, $factory); + } + + /** + * @param array $condition + * @param array $params + * + * @return Entity\Introduction + * + * @throws NotFoundException the underlying exception if there's no Introduction with the given conditions + */ + private function selectOne(array $condition, array $params = []): Entity\Introduction + { + return parent::_selectOne($condition, $params); + } + + /** + * Converts a given Introduction into a DB compatible row array + * + * @param Entity\Introduction $introduction + * + * @return array + */ + protected function convertToTableRow(Entity\Introduction $introduction): array + { + return [ + 'uid' => $introduction->uid, + 'contact-id' => $introduction->cid, + 'suggest-cid' => $introduction->sid, + 'knowyou' => $introduction->knowyou ? 1 : 0, + 'note' => $introduction->note, + 'hash' => $introduction->hash, + 'ignore' => $introduction->ignore ? 1 : 0, + 'datetime' => $introduction->datetime->format(DateTimeFormat::MYSQL), + ]; + } + + /** + * @param int $id + * @param int $uid + * + * @return Entity\Introduction + * + * @throws IntroductionNotFoundException in case there is no Introduction with this id + */ + public function selectOneById(int $id, int $uid): Entity\Introduction + { + try { + return $this->selectOne(['id' => $id, 'uid' => $uid]); + } catch (NotFoundException $exception) { + throw new IntroductionNotFoundException(sprintf('There is no Introduction with the ID %d for the user %d', $id, $uid), $exception); + } + } + + /** + * Selects introductions for a given user + * + * @param int $uid + * @param int|null $min_id + * @param int|null $max_id + * @param int $limit + * + * @return Collection\Introductions + */ + public function selectForUser(int $uid, int $min_id = null, int $max_id = null, int $limit = self::LIMIT): Collection\Introductions + { + try { + $BaseCollection = parent::_selectByBoundaries( + ['`uid = ?` AND NOT `ignore`',$uid], + ['order' => ['id' => 'DESC']], + $min_id, $max_id, $limit); + } catch (\Exception $e) { + throw new IntroductionPersistenceException(sprintf('Cannot select Introductions for used %d', $uid), $e); + } + + return new Collection\Introductions($BaseCollection->getArrayCopy(), $BaseCollection->getTotalCount()); + } + + /** + * Selects the introduction for a given contact + * + * @param int $cid + * + * @return Entity\Introduction + * + * @throws IntroductionNotFoundException in case there is not Introduction for this contact + */ + public function selectForContact(int $cid): Entity\Introduction + { + try { + return $this->selectOne(['contact-id' => $cid]); + } catch (NotFoundException $exception) { + throw new IntroductionNotFoundException(sprintf('There is no Introduction for the contact %d', $cid), $exception); + } + } + + public function countActiveForUser($uid, array $params = []): int + { + try { + return $this->count(['ignore' => false, 'uid' => $uid], $params); + } catch (\Exception $e) { + throw new IntroductionPersistenceException(sprintf('Cannot count Introductions for used %d', $uid), $e); + } + } + + /** + * Checks, if the suggested contact already exists for the user + * + * @param int $sid + * @param int $uid + * + * @return bool + */ + public function suggestionExistsForUser(int $sid, int $uid): bool + { + try { + return $this->exists(['uid' => $uid, 'suggest-cid' => $sid]); + } catch (\Exception $e) { + throw new IntroductionPersistenceException(sprintf('Cannot check suggested Introduction for contact %d and user %d', $sid, $uid), $e); + } + } + + /** + * @param Entity\Introduction $introduction + * + * @return bool + * + * @throws IntroductionPersistenceException in case the underlying storage cannot delete the Introduction + */ + public function delete(Entity\Introduction $introduction): bool + { + if (!$introduction->id) { + return false; + } + + try { + return $this->db->delete(self::$table_name, ['id' => $introduction->id]); + } catch (\Exception $e) { + throw new IntroductionPersistenceException(sprintf('Cannot delete Introduction with id %d', $introduction->id), $e); + } + } + + /** + * @param Entity\Introduction $introduction + * + * @return Entity\Introduction + * + * @throws IntroductionPersistenceException In case the underlying storage cannot save the Introduction + */ + public function save(Entity\Introduction $introduction): Entity\Introduction + { + try { + $fields = $this->convertToTableRow($introduction); + + if ($introduction->id) { + $this->db->update(self::$table_name, $fields, ['id' => $introduction->id]); + return $this->factory->createFromTableRow($fields); + } else { + $this->db->insert(self::$table_name, $fields); + return $this->selectOneById($this->db->lastInsertId(), $introduction->uid); + } + } catch (\Exception $exception) { + throw new IntroductionPersistenceException(sprintf('Cannot insert/update the Introduction %d for user %d', $introduction->id, $introduction->uid), $exception); + } + } +} diff --git a/src/Contact/Introduction/Entity/Introduction.php b/src/Contact/Introduction/Entity/Introduction.php new file mode 100644 index 0000000000..9c5fb060ec --- /dev/null +++ b/src/Contact/Introduction/Entity/Introduction.php @@ -0,0 +1,89 @@ +. + * + */ + +namespace Friendica\Contact\Introduction\Entity; + +use Friendica\BaseEntity; + +/** + * @property-read int $uid + * @property-read int $cid + * @property-read int|null $sid + * @property-read bool $knowyou + * @property-read string $note + * @property-read string $hash + * @property-read \DateTime $datetime + * @property-read bool $ignore + * @property-read int|null $id + */ +class Introduction extends BaseEntity +{ + /** @var int */ + protected $uid; + /** @var int */ + protected $cid; + /** @var int|null */ + protected $sid; + /** @var bool */ + protected $knowyou; + /** @var string */ + protected $note; + /** @var string */ + protected $hash; + /** @var \DateTime */ + protected $datetime; + /** @var bool */ + protected $ignore; + /** @var int|null */ + protected $id; + + /** + * @param int $uid + * @param int $cid + * @param int|null $sid + * @param bool $knowyou + * @param string $note + * @param string $hash + * @param \DateTime $datetime + * @param bool $ignore + * @param int|null $id + */ + public function __construct(int $uid, int $cid, ?int $sid, bool $knowyou, string $note, string $hash, \DateTime $datetime, bool $ignore, ?int $id) + { + $this->uid = $uid; + $this->cid = $cid; + $this->sid = $sid; + $this->knowyou = $knowyou; + $this->note = $note; + $this->hash = $hash; + $this->datetime = $datetime; + $this->ignore = $ignore; + $this->id = $id; + } + + /** + * Ignore the current Introduction + */ + public function ignore() + { + $this->ignore = true; + } +} diff --git a/src/Contact/Introduction/Exception/IntroductionNotFoundException.php b/src/Contact/Introduction/Exception/IntroductionNotFoundException.php new file mode 100644 index 0000000000..f48c9ea22c --- /dev/null +++ b/src/Contact/Introduction/Exception/IntroductionNotFoundException.php @@ -0,0 +1,11 @@ +. + * + */ + +namespace Friendica\Contact\Introduction\Factory; + +use Friendica\BaseFactory; +use Friendica\Contact\Introduction\Entity; +use Friendica\Capabilities\ICanCreateFromTableRow; +use Friendica\Util\DateTimeFormat; +use Friendica\Util\Strings; + +class Introduction extends BaseFactory implements ICanCreateFromTableRow +{ + /** + * @inheritDoc + */ + public function createFromTableRow(array $row): Entity\Introduction + { + return new Entity\Introduction( + $row['uid'] ?? 0, + $row['contact-id'] ?? 0, + $row['suggest-cid'] ?? null, + !empty($row['knowyou']), + $row['note'] ?? '', + $row['hash'] ?? '', + new \DateTime($row['datetime'] ?? 'now', new \DateTimeZone('UTC')), + !empty($row['ignore']), + $row['id'] ?? null + ); + } + + public function createNew( + int $uid, + int $cid, + string $note, + int $sid = null, + bool $knowyou = false + ): Entity\Introduction { + return $this->createFromTableRow([ + 'uid' => $uid, + 'suggest-cid' => $sid, + 'contact-id' => $cid, + 'knowyou' => $knowyou, + 'note' => $note, + 'hash' => Strings::getRandomHex(), + 'datetime' => DateTimeFormat::utcNow(), + 'ignore' => false, + ]); + } + + public function createDummy(?int $id): Entity\Introduction + { + return $this->createFromTableRow(['id' => $id]); + } +} diff --git a/src/Content/Nav.php b/src/Content/Nav.php index b9f61dacb2..db3eddfe23 100644 --- a/src/Content/Nav.php +++ b/src/Content/Nav.php @@ -190,7 +190,7 @@ class Nav $nav['usermenu'][] = ['profile/' . $a->getLoggedInUserNickname(), DI::l10n()->t('Status'), '', DI::l10n()->t('Your posts and conversations')]; $nav['usermenu'][] = ['profile/' . $a->getLoggedInUserNickname() . '/profile', DI::l10n()->t('Profile'), '', DI::l10n()->t('Your profile page')]; $nav['usermenu'][] = ['photos/' . $a->getLoggedInUserNickname(), DI::l10n()->t('Photos'), '', DI::l10n()->t('Your photos')]; - $nav['usermenu'][] = ['videos/' . $a->getLoggedInUserNickname(), DI::l10n()->t('Videos'), '', DI::l10n()->t('Your videos')]; + $nav['usermenu'][] = ['media/' . $a->getLoggedInUserNickname(), DI::l10n()->t('Media'), '', DI::l10n()->t('Your postings with media')]; $nav['usermenu'][] = ['events/', DI::l10n()->t('Events'), '', DI::l10n()->t('Your events')]; $nav['usermenu'][] = ['notes/', DI::l10n()->t('Personal notes'), '', DI::l10n()->t('Your personal notes')]; diff --git a/src/DI.php b/src/DI.php index 31542e3d52..28df28a325 100644 --- a/src/DI.php +++ b/src/DI.php @@ -435,11 +435,19 @@ abstract class DI } /** - * @return Repository\Introduction + * @return Contact\Introduction\Depository\Introduction */ public static function intro() { - return self::$dice->create(Repository\Introduction::class); + return self::$dice->create(Contact\Introduction\Depository\Introduction::class); + } + + /** + * @return Contact\Introduction\Factory\Introduction + */ + public static function introFactory() + { + return self::$dice->create(Contact\Introduction\Factory\Introduction::class); } public static function permissionSet(): Security\PermissionSet\Depository\PermissionSet diff --git a/src/Factory/Api/Mastodon/FollowRequest.php b/src/Factory/Api/Mastodon/FollowRequest.php index f2be0e589a..1d90c55f04 100644 --- a/src/Factory/Api/Mastodon/FollowRequest.php +++ b/src/Factory/Api/Mastodon/FollowRequest.php @@ -23,9 +23,9 @@ namespace Friendica\Factory\Api\Mastodon; use Friendica\App\BaseURL; use Friendica\BaseFactory; +use Friendica\Contact\Introduction\Entity\Introduction; use Friendica\Model\APContact; use Friendica\Model\Contact; -use Friendica\Model\Introduction; use Friendica\Network\HTTPException; use ImagickException; use Psr\Log\LoggerInterface; @@ -49,7 +49,7 @@ class FollowRequest extends BaseFactory */ public function createFromIntroduction(Introduction $introduction): \Friendica\Object\Api\Mastodon\FollowRequest { - $cdata = Contact::getPublicAndUserContactID($introduction->{'contact-id'}, $introduction->uid); + $cdata = Contact::getPublicAndUserContactID($introduction->cid, $introduction->uid); if (empty($cdata)) { $this->logger->warning('Wrong introduction data', ['Introduction' => $introduction]); diff --git a/src/Model/Contact.php b/src/Model/Contact.php index f2e2bf92f3..eea98b7e65 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -22,6 +22,7 @@ namespace Friendica\Model; use Friendica\App\BaseURL; +use Friendica\Contact\Introduction\Exception\IntroductionNotFoundException; use Friendica\Content\Pager; use Friendica\Content\Text\HTML; use Friendica\Core\Hook; @@ -1085,9 +1086,11 @@ class Contact ]; if (!empty($contact['pending'])) { - $intro = DBA::selectFirst('intro', ['id'], ['contact-id' => $contact['id']]); - if (DBA::isResult($intro)) { - $menu['follow'] = [DI::l10n()->t('Approve'), 'notifications/intros/' . $intro['id'], true]; + try { + $intro = DI::intro()->selectForContact($contact['id']); + $menu['follow'] = [DI::l10n()->t('Approve'), 'notifications/intros/' . $intro->id, true]; + } catch (IntroductionNotFoundException $exception) { + DI::logger()->error('Pending contact doesn\'t have an introduction.', ['exception' => $exception]); } } } @@ -2706,12 +2709,13 @@ class Contact $user = DBA::selectFirst('user', $fields, ['uid' => $importer['uid']]); if (DBA::isResult($user) && !in_array($user['page-flags'], [User::PAGE_FLAGS_SOAPBOX, User::PAGE_FLAGS_FREELOVE, User::PAGE_FLAGS_COMMUNITY])) { // create notification - $hash = Strings::getRandomHex(); - if (is_array($contact_record)) { - DBA::insert('intro', ['uid' => $importer['uid'], 'contact-id' => $contact_record['id'], - 'blocked' => false, 'knowyou' => false, 'note' => $note, - 'hash' => $hash, 'datetime' => DateTimeFormat::utcNow()]); + $intro = DI::introFactory()->createNew( + $importer['uid'], + $contact_record['id'], + $note + ); + DI::intro()->save($intro); } Group::addMember(User::getDefaultGroup($importer['uid'], $contact_record["network"]), $contact_record['id']); diff --git a/src/Model/Introduction.php b/src/Model/Contact/Introduction.php similarity index 56% rename from src/Model/Introduction.php rename to src/Model/Contact/Introduction.php index aa71891214..b85e90eaed 100644 --- a/src/Model/Introduction.php +++ b/src/Model/Contact/Introduction.php @@ -19,64 +19,43 @@ * */ -namespace Friendica\Model; +namespace Friendica\Model\Contact; -use Friendica\BaseModel; +use Friendica\Contact\Introduction\Entity; use Friendica\Core\Protocol; -use Friendica\Database\Database; +use Friendica\DI; use Friendica\Network\HTTPException; +use Friendica\Model\Contact; +use Friendica\Model\User; use Friendica\Protocol\ActivityPub; use Friendica\Protocol\Diaspora; -use Friendica\Repository; use Friendica\Util\DateTimeFormat; -use Psr\Log\LoggerInterface; -/** - * @property int uid - * @property int fid - * @property int contact-id - * @property bool knowyou - * @property bool duplex - * @property string note - * @property string hash - * @property string datetime - * @property bool blocked - * @property bool ignore - */ -class Introduction extends BaseModel +class Introduction { - /** @var Repository\Introduction */ - protected $intro; - - public function __construct(Database $dba, LoggerInterface $logger, Repository\Introduction $intro, array $data = []) - { - parent::__construct($dba, $logger, $data); - - $this->intro = $intro; - } - /** * Confirms a follow request and sends a notice to the remote contact. * - * @param bool $duplex Is it a follow back? - * @param bool|null $hidden Should this contact be hidden? null = no change - * @return bool + * @param Entity\Introduction $introduction + * @param bool $duplex Is it a follow back? + * @param bool|null $hidden Should this contact be hidden? null = no change + * * @throws HTTPException\InternalServerErrorException * @throws HTTPException\NotFoundException * @throws \ImagickException */ - public function confirm(bool $duplex = false, bool $hidden = null) + public static function confirm(Entity\Introduction $introduction, bool $duplex = false, ?bool $hidden = null): void { - $this->logger->info('Confirming follower', ['cid' => $this->{'contact-id'}]); + DI::logger()->info('Confirming follower', ['cid' => $introduction->cid]); - $contact = Contact::selectFirst([], ['id' => $this->{'contact-id'}, 'uid' => $this->uid]); + $contact = Contact::selectFirst([], ['id' => $introduction->cid, 'uid' => $introduction->uid]); if (!$contact) { throw new HTTPException\NotFoundException('Contact record not found.'); } $newRelation = $contact['rel']; - $writable = $contact['writable']; + $writable = $contact['writable']; if (!empty($contact['protocol'])) { $protocol = $contact['protocol']; @@ -117,53 +96,24 @@ class Introduction extends BaseModel if ($newRelation == Contact::FRIEND) { if ($protocol == Protocol::DIASPORA) { $ret = Diaspora::sendShare(User::getById($contact['uid']), $contact); - $this->logger->info('share returns', ['return' => $ret]); + DI::logger()->info('share returns', ['return' => $ret]); } elseif ($protocol == Protocol::ACTIVITYPUB) { ActivityPub\Transmitter::sendActivity('Follow', $contact['url'], $contact['uid']); } } - - return $this->intro->delete($this); - } - - /** - * Silently ignores the introduction, hides it from notifications and prevents the remote contact from submitting - * additional follow requests. - * - * @return bool - * @throws \Exception - */ - public function ignore() - { - $this->ignore = true; - - return $this->intro->update($this); } /** * Discards the introduction and sends a rejection message to AP contacts. * - * @return bool + * @param Entity\Introduction $introduction + * * @throws HTTPException\InternalServerErrorException - * @throws HTTPException\NotFoundException * @throws \ImagickException */ - public function discard() + public static function discard(Entity\Introduction $introduction): void { - // If it is a friend suggestion, the contact is not a new friend but an existing friend - // that should not be deleted. - if (!$this->fid) { - // When the contact entry had been created just for that intro, we want to get rid of it now - $condition = ['id' => $this->{'contact-id'}, 'uid' => $this->uid, - 'self' => false, 'pending' => true, 'rel' => [0, Contact::FOLLOWER]]; - if ($this->dba->exists('contact', $condition)) { - Contact::remove($this->{'contact-id'}); - } else { - Contact::update(['pending' => false], ['id' => $this->{'contact-id'}]); - } - } - - $contact = Contact::selectFirst([], ['id' => $this->{'contact-id'}, 'uid' => $this->uid]); + $contact = Contact::selectFirst([], ['id' => $introduction->cid, 'uid' => $introduction->uid]); if (!empty($contact)) { if (!empty($contact['protocol'])) { $protocol = $contact['protocol']; @@ -175,7 +125,5 @@ class Introduction extends BaseModel ActivityPub\Transmitter::sendContactReject($contact['url'], $contact['hub-verify'], $contact['uid']); } } - - return $this->intro->delete($this); } } diff --git a/src/Module/Api/Mastodon/FollowRequests.php b/src/Module/Api/Mastodon/FollowRequests.php index cb7d5da220..bc7cc31bbe 100644 --- a/src/Module/Api/Mastodon/FollowRequests.php +++ b/src/Module/Api/Mastodon/FollowRequests.php @@ -23,6 +23,7 @@ namespace Friendica\Module\Api\Mastodon; use Friendica\Core\System; use Friendica\DI; +use Friendica\Model\Contact; use Friendica\Module\BaseApi; use Friendica\Network\HTTPException; @@ -34,7 +35,6 @@ class FollowRequests extends BaseApi /** * @param array $parameters * @throws HTTPException\BadRequestException - * @throws HTTPException\ForbiddenException * @throws HTTPException\InternalServerErrorException * @throws HTTPException\NotFoundException * @throws HTTPException\UnauthorizedException @@ -48,25 +48,28 @@ class FollowRequests extends BaseApi self::checkAllowedScope(self::SCOPE_FOLLOW); $uid = self::getCurrentUserID(); - $introduction = DI::intro()->selectFirst(['id' => $parameters['id'], 'uid' => $uid]); + $introduction = DI::intro()->selectOneById($parameters['id'], $uid); - $contactId = $introduction->{'contact-id'}; + $contactId = $introduction->cid; switch ($parameters['action']) { case 'authorize': - $introduction->confirm(); - + Contact\Introduction::confirm($introduction); $relationship = DI::mstdnRelationship()->createFromContactId($contactId, $uid); + + DI::intro()->delete($introduction); break; case 'ignore': $introduction->ignore(); - $relationship = DI::mstdnRelationship()->createFromContactId($contactId, $uid); + + DI::intro()->save($introduction); break; case 'reject': - $introduction->discard(); - + Contact\Introduction::discard($introduction); $relationship = DI::mstdnRelationship()->createFromContactId($contactId, $uid); + + DI::intro()->delete($introduction); break; default: throw new HTTPException\BadRequestException('Unexpected action parameter, expecting "authorize", "ignore" or "reject"'); @@ -92,13 +95,7 @@ class FollowRequests extends BaseApi 'limit' => 40, // Maximum number of results to return. Defaults to 40. Paginate using the HTTP Link header. ]); - $introductions = DI::intro()->selectByBoundaries( - ['`uid` = ? AND NOT `ignore`', $uid], - ['order' => ['id' => 'DESC']], - $request['min_id'], - $request['max_id'], - $request['limit'] - ); + $introductions = DI::intro()->selectForUser($uid, $request['min_id'], $request['max_id'], $request['limit']); $return = []; diff --git a/src/Module/Delegation.php b/src/Module/Delegation.php index affe5e7b8f..12f8c5074c 100644 --- a/src/Module/Delegation.php +++ b/src/Module/Delegation.php @@ -133,7 +133,7 @@ class Delegation extends BaseModule $params = ['distinct' => true, 'expression' => 'convid']; $notifications += DBA::count('mail', ['uid' => $identity['uid'], 'seen' => false], $params); - $notifications += DBA::count('intro', ['blocked' => false, 'ignore' => false, 'uid' => $identity['uid']]); + $notifications += DI::intro()->countActiveForUser($identity['uid']); $identities[$key]['notifications'] = $notifications; } diff --git a/src/Module/FollowConfirm.php b/src/Module/FollowConfirm.php index f4e4c5ebf9..75153512b6 100644 --- a/src/Module/FollowConfirm.php +++ b/src/Module/FollowConfirm.php @@ -3,6 +3,7 @@ namespace Friendica\Module; use Friendica\BaseModule; use Friendica\DI; +use Friendica\Model\Contact; /** * Process follow request confirmations @@ -21,12 +22,11 @@ class FollowConfirm extends BaseModule $duplex = intval($_POST['duplex'] ?? 0); $hidden = intval($_POST['hidden'] ?? 0); - $intro = DI::intro()->selectFirst(['id' => $intro_id, 'uid' => local_user()]); + $intro = DI::intro()->selectOneById($intro_id, local_user()); - $cid = $intro->{'contact-id'}; + Contact\Introduction::confirm($intro, $duplex, $hidden); + DI::intro()->delete($intro); - $intro->confirm($duplex, $hidden); - - DI::baseUrl()->redirect('contact/' . intval($cid)); + DI::baseUrl()->redirect('contact/' . $intro->cid); } } diff --git a/src/Module/Notifications/Notification.php b/src/Module/Notifications/Notification.php index 19ee410d28..64ab459f12 100644 --- a/src/Module/Notifications/Notification.php +++ b/src/Module/Notifications/Notification.php @@ -24,6 +24,7 @@ namespace Friendica\Module\Notifications; use Friendica\BaseModule; use Friendica\Core\System; use Friendica\DI; +use Friendica\Model\Contact; use Friendica\Module\Security\Login; use Friendica\Network\HTTPException; @@ -50,14 +51,16 @@ class Notification extends BaseModule $request_id = $parameters['id'] ?? false; if ($request_id) { - $intro = DI::intro()->selectFirst(['id' => $request_id, 'uid' => local_user()]); + $intro = DI::intro()->selectOneById($request_id, local_user()); switch ($_POST['submit']) { case DI::l10n()->t('Discard'): - $intro->discard(); + Contact\Introduction::discard($intro); + DI::intro()->delete($intro); break; case DI::l10n()->t('Ignore'): $intro->ignore(); + DI::intro()->save($intro); break; } diff --git a/src/Module/PermissionTooltip.php b/src/Module/PermissionTooltip.php index df82574e92..7599c2f060 100644 --- a/src/Module/PermissionTooltip.php +++ b/src/Module/PermissionTooltip.php @@ -5,8 +5,8 @@ namespace Friendica\Module; use Friendica\Core\Hook; use Friendica\Database\DBA; use Friendica\DI; -use Friendica\Model\Item; use Friendica\Model\Group; +use Friendica\Model\Item; use Friendica\Model\Post; use Friendica\Network\HTTPException; @@ -32,6 +32,10 @@ class PermissionTooltip extends \Friendica\BaseModule } else { $fields = ['uid', 'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid']; $model = DBA::selectFirst($type, $fields, $condition); + $model['allow_cid'] = DI::aclFormatter()->expand($model['allow_cid']); + $model['allow_gid'] = DI::aclFormatter()->expand($model['allow_gid']); + $model['deny_cid'] = DI::aclFormatter()->expand($model['deny_cid']); + $model['deny_gid'] = DI::aclFormatter()->expand($model['deny_gid']); } if (!DBA::isResult($model)) { diff --git a/src/Module/Settings/Profile/Index.php b/src/Module/Settings/Profile/Index.php index 05b5fd3ea3..240399aa05 100644 --- a/src/Module/Settings/Profile/Index.php +++ b/src/Module/Settings/Profile/Index.php @@ -132,6 +132,8 @@ class Index extends BaseSettings notice(DI::l10n()->t('Profile couldn\'t be updated.')); return; } + + DI::baseUrl()->redirect('settings/profile'); } public static function content(array $parameters = []) diff --git a/src/Module/Settings/Profile/Photo/Crop.php b/src/Module/Settings/Profile/Photo/Crop.php index 745fb0685f..104b6f653e 100644 --- a/src/Module/Settings/Profile/Photo/Crop.php +++ b/src/Module/Settings/Profile/Photo/Crop.php @@ -92,6 +92,8 @@ class Crop extends BaseSettings $Image->scaleDown(300); } + $condition = ['resource-id' => $resource_id, 'uid' => local_user(), 'contact-id' => 0]; + $r = Photo::store( $Image, local_user(), @@ -105,7 +107,7 @@ class Crop extends BaseSettings if ($r === false) { notice(DI::l10n()->t('Image size reduction [%s] failed.', '300')); } else { - Photo::update(['profile' => true], ['id' => $r['id']]); + Photo::update(['profile' => true], array_merge($condition, ['scale' => 4])); } $Image->scaleDown(80); @@ -123,7 +125,7 @@ class Crop extends BaseSettings if ($r === false) { notice(DI::l10n()->t('Image size reduction [%s] failed.', '80')); } else { - Photo::update(['profile' => true], ['id' => $r['id']]); + Photo::update(['profile' => true], array_merge($condition, ['scale' => 5])); } $Image->scaleDown(48); @@ -141,7 +143,7 @@ class Crop extends BaseSettings if ($r === false) { notice(DI::l10n()->t('Image size reduction [%s] failed.', '48')); } else { - Photo::update(['profile' => true], ['id' => $r['id']]); + Photo::update(['profile' => true], array_merge($condition, ['scale' => 6])); } Contact::updateSelfFromUserID(local_user(), true); diff --git a/src/Navigation/Notifications/Depository/Notify.php b/src/Navigation/Notifications/Depository/Notify.php index 31ad7af0e4..a380166c61 100644 --- a/src/Navigation/Notifications/Depository/Notify.php +++ b/src/Navigation/Notifications/Depository/Notify.php @@ -485,9 +485,9 @@ class Notify extends BaseDepository private function storeAndSend($params, $sitelink, $tsitelink, $hsitelink, $title, $subject, $preamble, $epreamble, $body, $itemlink, $show_in_notification_page) { $item_id = $params['item']['id'] ?? 0; - $uri_id = $params['item']['uri-id'] ?? 0; + $uri_id = $params['item']['uri-id'] ?? null; $parent_id = $params['item']['parent'] ?? 0; - $parent_uri_id = $params['item']['parent-uri-id'] ?? 0; + $parent_uri_id = $params['item']['parent-uri-id'] ?? null; // Ensure that the important fields are set at any time $fields = ['nickname']; @@ -564,7 +564,7 @@ class Notify extends BaseDepository // Is this the first email notification for this parent item and user? if (!DBA::exists('notify-threads', ['master-parent-uri-id' => $parent_uri_id, 'receiver-uid' => $params['uid']])) { - $this->logger->log("notify_id:" . intval($notify_id) . ", parent: " . intval($params['parent']) . "uid: " . intval($params['uid']), $this->logger->DEBUG); + $this->logger->info("notify_id:" . intval($notify_id) . ", parent: " . intval($params['parent']) . "uid: " . intval($params['uid'])); $fields = ['notify-id' => $notify_id, 'master-parent-uri-id' => $parent_uri_id, 'receiver-uid' => $params['uid'], 'parent-item' => 0]; @@ -573,12 +573,12 @@ class Notify extends BaseDepository $emailBuilder->setHeader('Message-ID', $message_id); $log_msg = "include/enotify: No previous notification found for this parent:\n" . " parent: ${params['parent']}\n" . " uid : ${params['uid']}\n"; - $this->logger->log($log_msg, $this->logger->DEBUG); + $this->logger->info($log_msg); } else { // If not, just "follow" the thread. $emailBuilder->setHeader('References', $message_id); $emailBuilder->setHeader('In-Reply-To', $message_id); - $this->logger->log("There's already a notification for this parent.", $this->logger->DEBUG); + $this->logger->info("There's already a notification for this parent."); } } diff --git a/src/Navigation/Notifications/Entity/Notify.php b/src/Navigation/Notifications/Entity/Notify.php index 88cd8ab36e..1a97835b6e 100644 --- a/src/Navigation/Notifications/Entity/Notify.php +++ b/src/Navigation/Notifications/Entity/Notify.php @@ -60,14 +60,14 @@ class Notify extends BaseEntity protected $name_cache; /** @var string */ protected $msg_cache; - /** @var int */ + /** @var int|null */ protected $uriId; - /** @var int */ + /** @var int|null */ protected $parentUriId; /** @var int */ protected $id; - public function __construct(int $type, string $name, UriInterface $url, UriInterface $photo, DateTime $date, int $uid, UriInterface $link, bool $seen, string $verb, string $otype, string $name_cache, string $msg = null, string $msg_cache = null, int $itemId = null, int $uriId = null, int $parent = null, int $parentUriId = null, int $id = null) + public function __construct(int $type, string $name, UriInterface $url, UriInterface $photo, DateTime $date, int $uid, UriInterface $link, bool $seen, string $verb, string $otype, string $name_cache, string $msg = null, string $msg_cache = null, int $itemId = null, int $uriId = null, int $parent = null, ?int $parentUriId = null, ?int $id = null) { $this->type = $type; $this->name = $name; diff --git a/src/Profile/ProfileField/Depository/ProfileField.php b/src/Profile/ProfileField/Depository/ProfileField.php index b792edf8f7..a6e441f3b6 100644 --- a/src/Profile/ProfileField/Depository/ProfileField.php +++ b/src/Profile/ProfileField/Depository/ProfileField.php @@ -86,7 +86,6 @@ class ProfileField extends BaseDepository $Entities = new Collection\ProfileFields(); foreach ($rows as $fields) { - $this->logger->warning('row', ['row' => $fields]); $Entities[] = $this->factory->createFromTableRow($fields); } diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 6e35ae23a9..ac51e104a9 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -1352,7 +1352,7 @@ class DFRN } // Quit if we already have an introduction for this person - if (DBA::exists('intro', ['uid' => $uid, 'suggest-cid' => $cid])) { + if (DI::intro()->suggestionExistsForUser($cid, $uid)) { return false; } @@ -1366,10 +1366,13 @@ class DFRN $suggest['title'] = ''; $suggest['body'] = $note; - $hash = Strings::getRandomHex(); - $fields = ['uid' => $suggest['uid'], 'suggest-cid' => $cid, 'contact-id' => $suggest['cid'], - 'note' => $suggest['body'], 'hash' => $hash, 'datetime' => DateTimeFormat::utcNow(), 'blocked' => false]; - DBA::insert('intro', $fields); + DI::intro()->save(DI::introFactory()->createNew( + $suggest['uid'], + $suggest['cid'], + $suggest['body'], + null, + $cid + )); DI::notify()->createFromArray([ 'type' => Notification\Type::SUGGEST, diff --git a/src/Repository/Introduction.php b/src/Repository/Introduction.php deleted file mode 100644 index de95229bd5..0000000000 --- a/src/Repository/Introduction.php +++ /dev/null @@ -1,79 +0,0 @@ -. - * - */ - -namespace Friendica\Repository; - -use Friendica\BaseRepository; -use Friendica\Collection; -use Friendica\Model; - -class Introduction extends BaseRepository -{ - protected static $table_name = 'intro'; - - protected static $model_class = Model\Introduction::class; - - protected static $collection_class = Collection\Introductions::class; - - /** - * @param array $data - * @return Model\Introduction - */ - protected function create(array $data) - { - return new Model\Introduction($this->dba, $this->logger, $this, $data); - } - - /** - * @param array $condition - * @return Model\Introduction - * @throws \Friendica\Network\HTTPException\NotFoundException - */ - public function selectFirst(array $condition) - { - return parent::selectFirst($condition); - } - - /** - * @param array $condition - * @param array $params - * @return Collection\Introductions - * @throws \Exception - */ - public function select(array $condition = [], array $params = []) - { - return parent::select($condition, $params); - } - - /** - * @param array $condition - * @param array $params - * @param int|null $min_id - * @param int|null $max_id - * @param int $limit - * @return Collection\Introductions - * @throws \Exception - */ - public function selectByBoundaries(array $condition = [], array $params = [], int $min_id = null, int $max_id = null, int $limit = self::LIMIT) - { - return parent::selectByBoundaries($condition, $params, $min_id, $max_id, $limit); - } -} diff --git a/src/Util/ACLFormatter.php b/src/Util/ACLFormatter.php index 352c914bcf..03aded3854 100644 --- a/src/Util/ACLFormatter.php +++ b/src/Util/ACLFormatter.php @@ -38,7 +38,7 @@ final class ACLFormatter public function expand(string $acl_string = null) { // In case there is no ID list, return empty array (=> no ACL set) - if (!isset($acl_string)) { + if (empty($acl_string)) { return []; } diff --git a/src/Worker/Contact/RemoveContent.php b/src/Worker/Contact/RemoveContent.php index 567cab1a86..f0e6e631d7 100644 --- a/src/Worker/Contact/RemoveContent.php +++ b/src/Worker/Contact/RemoveContent.php @@ -24,6 +24,7 @@ namespace Friendica\Worker\Contact; use Friendica\Core\Logger; use Friendica\Database\DBA; use Friendica\Database\DBStructure; +use Friendica\DI; use Friendica\Model\Photo; use Friendica\Model\Post; @@ -84,7 +85,7 @@ class RemoveContent DBA::delete('user-contact', ['cid' => $id]); DBA::delete('group_member', ['contact-id' => $id]); - DBA::delete('intro', ['contact-id' => $id]); + DI::intro()->delete(DI::introFactory()->createDummy($id)); return $contact; } diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index 4ed1e04a9b..0019fdf7bf 100644 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -55,7 +55,7 @@ use Friendica\Database\DBA; if (!defined('DB_UPDATE_VERSION')) { - define('DB_UPDATE_VERSION', 1441); + define('DB_UPDATE_VERSION', 1442); } return [ @@ -778,11 +778,11 @@ return [ "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id"], "comment" => ""], "suggest-cid" => ["type" => "int unsigned", "foreign" => ["contact" => "id"], "comment" => "Suggested contact"], "knowyou" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], - "duplex" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], + "duplex" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "deprecated"], "note" => ["type" => "text", "comment" => ""], "hash" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "datetime" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""], - "blocked" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => ""], + "blocked" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "deprecated"], "ignore" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], ], "indexes" => [ diff --git a/tests/src/Contact/Introduction/Factory/IntroductionTest.php b/tests/src/Contact/Introduction/Factory/IntroductionTest.php new file mode 100644 index 0000000000..e5efd03ddc --- /dev/null +++ b/tests/src/Contact/Introduction/Factory/IntroductionTest.php @@ -0,0 +1,113 @@ + [ + 'input' => [ + 'uid' => 42, + 'suggest-cid' => 13, + 'contact-id' => 24, + 'knowyou' => 1, + 'note' => 'a note', + 'hash' => '12345', + 'datetime' => '1970-01-01 00:00:00', + 'ignore' => 0, + 'id' => 56, + ], + 'assertion' => [ + 'uid' => 42, + 'suggest-cid' => 13, + 'contact-id' => 24, + 'knowyou' => true, + 'note' => 'a note', + 'hash' => '12345', + 'datetime' => new \DateTime('1970-01-01 00:00:00', new \DateTimeZone('UTC')), + 'ignore' => false, + 'id' => 56, + ] + ], + 'empty' => [ + 'input' => [ + ], + 'assertion' => [ + 'uid' => 0, + 'contact-id' => 0, + 'suggest-cid' => null, + 'knowyou' => false, + 'note' => '', + 'ignore' => false, + 'id' => null, + ] + ], + ]; + } + + public function assertIntro(\Friendica\Contact\Introduction\Entity\Introduction $intro, array $assertion) + { + self::assertEquals($intro->id, $assertion['id'] ?? null); + self::assertEquals($intro->uid, $assertion['uid'] ?? 0); + self::assertEquals($intro->cid, $assertion['contact-id'] ?? 0); + self::assertEquals($intro->sid, $assertion['suggest-cid'] ?? null); + self::assertEquals($intro->knowyou, $assertion['knowyou'] ?? false); + self::assertEquals($intro->note, $assertion['note'] ?? ''); + if (isset($assertion['hash'])) { + self::assertEquals($intro->hash, $assertion['hash']); + } else { + self::assertIsString($intro->hash); + } + if (isset($assertion['datetime'])) { + self::assertEquals($intro->datetime, $assertion['datetime']); + } else { + self::assertInstanceOf(\DateTime::class, $intro->datetime); + } + self::assertEquals($intro->ignore, $assertion['ignore'] ?? false); + } + + /** + * @dataProvider dataRow + */ + public function testCreateFromTableRow(array $input, array $assertion) + { + $factory = new Introduction(new NullLogger()); + + $intro = $factory->createFromTableRow($input); + $this->assertIntro($intro, $assertion); + } + + /** + * @dataProvider dataRow + */ + public function testCreateNew(array $input, array $assertion) + { + $factory = new Introduction(new NullLogger()); + + $intro = $factory->createNew($input['uid'] ?? 0, $input['cid'] ?? 0, $input['note'] ?? ''); + + $this->assertIntro($intro, [ + 'uid' => $input['uid'] ?? 0, + 'contact-id' => $input['cid'] ?? 0, + 'note' => $input['note'] ?? '', + ]); + } + + /** + * @dataProvider dataRow + */ + public function testCreateDummy(array $input, array $assertion) + { + $factory = new Introduction(new NullLogger()); + + $intro = $factory->createDummy($input['id'] ?? null); + + $this->assertIntro($intro, ['id' => $input['id'] ?? null]); + } +} diff --git a/update.php b/update.php index 25e64d659a..85f407d36c 100644 --- a/update.php +++ b/update.php @@ -1039,7 +1039,7 @@ function update_1440() return Update::SUCCESS; } -function update__1441() +function update_1441() { $languages = DI::l10n()->getAvailableLanguages(); @@ -1053,3 +1053,11 @@ function update__1441() return Update::SUCCESS; } + +function update_1442() +{ + // transform blocked intros into ignored intros + DBA::update('intro', ['ignore' => 1, 'blocked' => 0], ['blocked' => 1]); + + return Update::SUCCESS; +} diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index 95fb60457c..f451cfc141 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-10-19 20:03+0000\n" +"POT-Creation-Date: 2021-10-20 15:10+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -40,7 +40,7 @@ msgstr "" #: mod/api.php:30 mod/editpost.php:38 mod/events.php:220 mod/follow.php:56 #: 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:908 +#: mod/ostatus_subscribe.php:32 mod/photos.php:160 mod/photos.php:900 #: mod/repair_ostatus.php:31 mod/settings.php:47 mod/settings.php:57 #: mod/settings.php:409 mod/suggest.php:34 mod/uimport.php:33 #: mod/unfollow.php:35 mod/unfollow.php:50 mod/unfollow.php:82 @@ -62,7 +62,7 @@ msgstr "" #: 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 -#: src/Module/Settings/Profile/Photo/Crop.php:158 +#: src/Module/Settings/Profile/Photo/Crop.php:164 #: src/Module/Settings/Profile/Photo/Index.php:112 #: src/Module/Settings/UserExport.php:58 src/Module/Settings/UserExport.php:93 #: src/Module/Settings/UserExport.php:198 @@ -80,8 +80,8 @@ msgstr "" msgid "Access denied." msgstr "" -#: mod/cal.php:61 mod/cal.php:78 mod/photos.php:69 mod/photos.php:143 -#: mod/photos.php:815 src/Model/Profile.php:229 src/Module/HCard.php:52 +#: mod/cal.php:61 mod/cal.php:78 mod/photos.php:69 mod/photos.php:140 +#: mod/photos.php:807 src/Model/Profile.php:229 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/Media.php:38 src/Module/Profile/Status.php:58 @@ -156,7 +156,7 @@ msgstr "" msgid "calendar" msgstr "" -#: mod/display.php:165 mod/photos.php:819 +#: mod/display.php:165 mod/photos.php:811 #: src/Module/Conversation/Community.php:176 src/Module/Debug/Probe.php:39 #: src/Module/Debug/WebFinger.php:38 src/Module/Directory.php:49 #: src/Module/Search/Index.php:50 src/Module/Search/Index.php:55 @@ -184,7 +184,7 @@ msgstr "" msgid "Save" msgstr "" -#: mod/editpost.php:92 mod/photos.php:1355 src/Content/Conversation.php:326 +#: mod/editpost.php:92 mod/photos.php:1347 src/Content/Conversation.php:326 #: src/Module/Contact/Poke.php:157 src/Object/Post.php:964 msgid "Loading..." msgstr "" @@ -249,7 +249,7 @@ msgid "clear location" msgstr "" #: mod/editpost.php:107 mod/message.php:200 mod/message.php:358 -#: mod/photos.php:1506 mod/wallmessage.php:141 src/Content/Conversation.php:355 +#: mod/photos.php:1498 mod/wallmessage.php:141 src/Content/Conversation.php:355 #: src/Content/Conversation.php:689 src/Module/Item/Compose.php:165 #: src/Object/Post.php:502 msgid "Please wait" @@ -281,14 +281,14 @@ msgstr "" msgid "Example: bob@example.com, mary@example.com" msgstr "" -#: mod/editpost.php:128 mod/events.php:517 mod/photos.php:1354 -#: mod/photos.php:1410 mod/photos.php:1484 src/Content/Conversation.php:370 +#: mod/editpost.php:128 mod/events.php:517 mod/photos.php:1346 +#: mod/photos.php:1402 mod/photos.php:1476 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:100 mod/fbrowser.php:127 -#: mod/follow.php:144 mod/photos.php:1017 mod/photos.php:1122 mod/tagrm.php:37 +#: mod/follow.php:144 mod/photos.php:1013 mod/photos.php:1114 mod/tagrm.php:37 #: mod/tagrm.php:129 mod/unfollow.php:97 src/Content/Conversation.php:373 #: src/Module/Contact/Revoke.php:99 src/Module/RemoteFollow.php:116 msgid "Cancel" @@ -305,8 +305,8 @@ msgstr "" msgid "Browser" msgstr "" -#: mod/editpost.php:136 mod/events.php:522 mod/photos.php:956 -#: mod/photos.php:1308 src/Content/Conversation.php:357 +#: mod/editpost.php:136 mod/events.php:522 mod/photos.php:948 +#: mod/photos.php:1300 src/Content/Conversation.php:357 msgid "Permissions" msgstr "" @@ -386,8 +386,8 @@ msgid "Share this event" msgstr "" #: mod/events.php:519 mod/message.php:201 mod/message.php:357 -#: mod/photos.php:938 mod/photos.php:1039 mod/photos.php:1312 -#: mod/photos.php:1353 mod/photos.php:1409 mod/photos.php:1483 +#: mod/photos.php:930 mod/photos.php:1034 mod/photos.php:1304 +#: mod/photos.php:1345 mod/photos.php:1401 mod/photos.php:1475 #: src/Module/Admin/Item/Source.php:65 src/Module/Contact.php:523 #: src/Module/Contact/Advanced.php:133 src/Module/Contact/Poke.php:158 #: src/Module/Debug/ActivityPubConversion.php:141 @@ -842,255 +842,255 @@ msgstr "" msgid "Keep this window open until done." msgstr "" -#: mod/photos.php:111 src/Module/BaseProfile.php:67 +#: mod/photos.php:108 src/Module/BaseProfile.php:67 msgid "Photo Albums" msgstr "" -#: mod/photos.php:112 mod/photos.php:1608 +#: mod/photos.php:109 mod/photos.php:1593 msgid "Recent Photos" msgstr "" -#: mod/photos.php:114 mod/photos.php:1090 mod/photos.php:1610 +#: mod/photos.php:111 mod/photos.php:1082 mod/photos.php:1595 msgid "Upload New Photos" msgstr "" -#: mod/photos.php:132 src/Module/BaseSettings.php:37 +#: mod/photos.php:129 src/Module/BaseSettings.php:37 msgid "everybody" msgstr "" -#: mod/photos.php:170 +#: mod/photos.php:167 msgid "Contact information unavailable" msgstr "" -#: mod/photos.php:204 +#: mod/photos.php:196 msgid "Album not found." msgstr "" -#: mod/photos.php:258 +#: mod/photos.php:250 msgid "Album successfully deleted" msgstr "" -#: mod/photos.php:260 +#: mod/photos.php:252 msgid "Album was empty." msgstr "" -#: mod/photos.php:292 +#: mod/photos.php:284 msgid "Failed to delete the photo." msgstr "" -#: mod/photos.php:567 +#: mod/photos.php:559 msgid "a photo" msgstr "" -#: mod/photos.php:567 +#: mod/photos.php:559 #, php-format msgid "%1$s was tagged in %2$s by %3$s" msgstr "" -#: mod/photos.php:650 mod/photos.php:653 mod/photos.php:680 +#: mod/photos.php:642 mod/photos.php:645 mod/photos.php:672 #: mod/wall_upload.php:207 src/Module/Settings/Profile/Photo/Index.php:60 #, php-format msgid "Image exceeds size limit of %s" msgstr "" -#: mod/photos.php:656 +#: mod/photos.php:648 msgid "Image upload didn't complete, please try again" msgstr "" -#: mod/photos.php:659 +#: mod/photos.php:651 msgid "Image file is missing" msgstr "" -#: mod/photos.php:664 +#: mod/photos.php:656 msgid "" "Server can't accept new file upload at this time, please contact your " "administrator" msgstr "" -#: mod/photos.php:688 +#: mod/photos.php:680 msgid "Image file is empty." msgstr "" -#: mod/photos.php:703 mod/wall_upload.php:166 +#: mod/photos.php:695 mod/wall_upload.php:166 #: src/Module/Settings/Profile/Photo/Index.php:69 msgid "Unable to process image." msgstr "" -#: mod/photos.php:732 mod/wall_upload.php:232 +#: mod/photos.php:724 mod/wall_upload.php:232 #: src/Module/Settings/Profile/Photo/Index.php:96 msgid "Image upload failed." msgstr "" -#: mod/photos.php:824 +#: mod/photos.php:816 msgid "No photos selected" msgstr "" -#: mod/photos.php:893 +#: mod/photos.php:885 msgid "Access to this item is restricted." msgstr "" -#: mod/photos.php:948 +#: mod/photos.php:940 msgid "Upload Photos" msgstr "" -#: mod/photos.php:952 mod/photos.php:1035 +#: mod/photos.php:944 mod/photos.php:1030 msgid "New album name: " msgstr "" -#: mod/photos.php:953 +#: mod/photos.php:945 msgid "or select existing album:" msgstr "" -#: mod/photos.php:954 +#: mod/photos.php:946 msgid "Do not show a status post for this upload" msgstr "" -#: mod/photos.php:1015 +#: mod/photos.php:1011 msgid "Do you really want to delete this photo album and all its photos?" msgstr "" -#: mod/photos.php:1016 mod/photos.php:1040 +#: mod/photos.php:1012 mod/photos.php:1035 msgid "Delete Album" msgstr "" -#: mod/photos.php:1046 +#: mod/photos.php:1039 msgid "Edit Album" msgstr "" -#: mod/photos.php:1047 +#: mod/photos.php:1040 msgid "Drop Album" msgstr "" -#: mod/photos.php:1052 +#: mod/photos.php:1044 msgid "Show Newest First" msgstr "" -#: mod/photos.php:1054 +#: mod/photos.php:1046 msgid "Show Oldest First" msgstr "" -#: mod/photos.php:1075 mod/photos.php:1593 +#: mod/photos.php:1067 mod/photos.php:1578 msgid "View Photo" msgstr "" -#: mod/photos.php:1108 +#: mod/photos.php:1100 msgid "Permission denied. Access to this item may be restricted." msgstr "" -#: mod/photos.php:1110 +#: mod/photos.php:1102 msgid "Photo not available" msgstr "" -#: mod/photos.php:1120 +#: mod/photos.php:1112 msgid "Do you really want to delete this photo?" msgstr "" -#: mod/photos.php:1121 mod/photos.php:1313 +#: mod/photos.php:1113 mod/photos.php:1305 msgid "Delete Photo" msgstr "" -#: mod/photos.php:1211 +#: mod/photos.php:1203 msgid "View photo" msgstr "" -#: mod/photos.php:1213 +#: mod/photos.php:1205 msgid "Edit photo" msgstr "" -#: mod/photos.php:1214 +#: mod/photos.php:1206 msgid "Delete photo" msgstr "" -#: mod/photos.php:1215 +#: mod/photos.php:1207 msgid "Use as profile photo" msgstr "" -#: mod/photos.php:1222 +#: mod/photos.php:1214 msgid "Private Photo" msgstr "" -#: mod/photos.php:1228 +#: mod/photos.php:1220 msgid "View Full Size" msgstr "" -#: mod/photos.php:1281 +#: mod/photos.php:1273 msgid "Tags: " msgstr "" -#: mod/photos.php:1284 +#: mod/photos.php:1276 msgid "[Select tags to remove]" msgstr "" -#: mod/photos.php:1299 +#: mod/photos.php:1291 msgid "New album name" msgstr "" -#: mod/photos.php:1300 +#: mod/photos.php:1292 msgid "Caption" msgstr "" -#: mod/photos.php:1301 +#: mod/photos.php:1293 msgid "Add a Tag" msgstr "" -#: mod/photos.php:1301 +#: mod/photos.php:1293 msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "" -#: mod/photos.php:1302 +#: mod/photos.php:1294 msgid "Do not rotate" msgstr "" -#: mod/photos.php:1303 +#: mod/photos.php:1295 msgid "Rotate CW (right)" msgstr "" -#: mod/photos.php:1304 +#: mod/photos.php:1296 msgid "Rotate CCW (left)" msgstr "" -#: mod/photos.php:1350 mod/photos.php:1406 mod/photos.php:1480 +#: mod/photos.php:1342 mod/photos.php:1398 mod/photos.php:1472 #: src/Module/Contact.php:993 src/Module/Item/Compose.php:148 #: src/Object/Post.php:960 msgid "This is you" msgstr "" -#: mod/photos.php:1352 mod/photos.php:1408 mod/photos.php:1482 +#: mod/photos.php:1344 mod/photos.php:1400 mod/photos.php:1474 #: src/Object/Post.php:496 src/Object/Post.php:962 msgid "Comment" msgstr "" -#: mod/photos.php:1441 src/Content/Conversation.php:615 src/Object/Post.php:227 +#: mod/photos.php:1433 src/Content/Conversation.php:615 src/Object/Post.php:227 msgid "Select" msgstr "" -#: mod/photos.php:1442 mod/settings.php:563 src/Content/Conversation.php:616 +#: mod/photos.php:1434 mod/settings.php:563 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 msgid "Delete" msgstr "" -#: mod/photos.php:1503 src/Object/Post.php:349 +#: mod/photos.php:1495 src/Object/Post.php:349 msgid "Like" msgstr "" -#: mod/photos.php:1504 src/Object/Post.php:349 +#: mod/photos.php:1496 src/Object/Post.php:349 msgid "I like this (toggle)" msgstr "" -#: mod/photos.php:1505 src/Object/Post.php:350 +#: mod/photos.php:1497 src/Object/Post.php:350 msgid "Dislike" msgstr "" -#: mod/photos.php:1507 src/Object/Post.php:350 +#: mod/photos.php:1499 src/Object/Post.php:350 msgid "I don't like this (toggle)" msgstr "" -#: mod/photos.php:1529 +#: mod/photos.php:1521 msgid "Map" msgstr "" -#: mod/photos.php:1599 +#: mod/photos.php:1584 msgid "View Album" msgstr "" @@ -2063,7 +2063,7 @@ msgstr "" msgid "File upload failed." msgstr "" -#: mod/wall_upload.php:224 src/Model/Photo.php:985 +#: mod/wall_upload.php:224 src/Model/Photo.php:987 msgid "Wall Photos" msgstr "" @@ -2846,12 +2846,14 @@ msgstr "" msgid "Your photos" msgstr "" -#: src/Content/Nav.php:193 view/theme/frio/theme.php:228 -msgid "Videos" +#: src/Content/Nav.php:193 src/Module/BaseProfile.php:72 +#: src/Module/BaseProfile.php:75 src/Module/Contact.php:838 +#: view/theme/frio/theme.php:228 +msgid "Media" msgstr "" #: src/Content/Nav.php:193 view/theme/frio/theme.php:228 -msgid "Your videos" +msgid "Your postings with media" msgstr "" #: src/Content/Nav.php:194 view/theme/frio/theme.php:229 @@ -6889,11 +6891,6 @@ msgstr "" msgid "Profile Details" msgstr "" -#: src/Module/BaseProfile.php:72 src/Module/BaseProfile.php:75 -#: src/Module/Contact.php:838 -msgid "Media" -msgstr "" - #: src/Module/BaseProfile.php:109 msgid "Only You Can See This" msgstr "" @@ -9266,41 +9263,41 @@ msgid "" msgstr "" #: src/Module/Settings/Profile/Photo/Crop.php:106 -#: src/Module/Settings/Profile/Photo/Crop.php:122 -#: src/Module/Settings/Profile/Photo/Crop.php:138 +#: src/Module/Settings/Profile/Photo/Crop.php:124 +#: src/Module/Settings/Profile/Photo/Crop.php:142 #: src/Module/Settings/Profile/Photo/Index.php:102 #, php-format msgid "Image size reduction [%s] failed." msgstr "" -#: src/Module/Settings/Profile/Photo/Crop.php:143 +#: src/Module/Settings/Profile/Photo/Crop.php:149 msgid "" "Shift-reload the page or clear browser cache if the new photo does not " "display immediately." msgstr "" -#: src/Module/Settings/Profile/Photo/Crop.php:148 +#: src/Module/Settings/Profile/Photo/Crop.php:154 msgid "Unable to process image" msgstr "" -#: src/Module/Settings/Profile/Photo/Crop.php:167 +#: src/Module/Settings/Profile/Photo/Crop.php:173 msgid "Photo not found." msgstr "" -#: src/Module/Settings/Profile/Photo/Crop.php:189 +#: src/Module/Settings/Profile/Photo/Crop.php:195 msgid "Profile picture successfully updated." msgstr "" -#: src/Module/Settings/Profile/Photo/Crop.php:215 -#: src/Module/Settings/Profile/Photo/Crop.php:219 +#: src/Module/Settings/Profile/Photo/Crop.php:221 +#: src/Module/Settings/Profile/Photo/Crop.php:225 msgid "Crop Image" msgstr "" -#: src/Module/Settings/Profile/Photo/Crop.php:216 +#: src/Module/Settings/Profile/Photo/Crop.php:222 msgid "Please adjust the image cropping for optimum viewing." msgstr "" -#: src/Module/Settings/Profile/Photo/Crop.php:218 +#: src/Module/Settings/Profile/Photo/Crop.php:224 msgid "Use Image As Is" msgstr "" diff --git a/view/lang/de/messages.po b/view/lang/de/messages.po index 32db3ee16d..94d71c8e41 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-10-18 00:07+0200\n" -"PO-Revision-Date: 2021-10-19 17:26+0000\n" +"POT-Creation-Date: 2021-10-20 15:10+0200\n" +"PO-Revision-Date: 2021-10-21 05:35+0000\n" "Last-Translator: Tobias Diekershoff \n" "Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" @@ -79,261 +79,10 @@ msgstr[1] "Das wöchentliche Limit von %d Beiträgen wurde erreicht. Der Beitrag 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/enotify.php:50 include/enotify.php:533 -msgid "[Friendica:Notify]" -msgstr "[Friendica Meldung]" - -#: include/enotify.php:114 -#, php-format -msgid "%s New mail received at %s" -msgstr "%sNeue Nachricht auf %s empfangen" - -#: include/enotify.php:116 -#, php-format -msgid "%1$s sent you a new private message at %2$s." -msgstr "%1$s hat dir eine neue, private Nachricht auf %2$s geschickt." - -#: include/enotify.php:117 -msgid "a private message" -msgstr "eine private Nachricht" - -#: include/enotify.php:117 -#, php-format -msgid "%1$s sent you %2$s." -msgstr "%1$s schickte dir %2$s." - -#: include/enotify.php:119 -#, php-format -msgid "Please visit %s to view and/or reply to your private messages." -msgstr "Bitte besuche %s, um Deine privaten Nachrichten anzusehen und/oder zu beantworten." - -#: include/enotify.php:150 -#, php-format -msgid "%1$s commented on %2$s's %3$s %4$s" -msgstr "%1$s kommentierte %2$s's %3$s%4$s" - -#: include/enotify.php:155 -#, php-format -msgid "%1$s commented on your %2$s %3$s" -msgstr "%1$s kommentierte auf (%2$s) %3$s" - -#: include/enotify.php:159 -#, php-format -msgid "%1$s commented on their %2$s %3$s" -msgstr "%1$s hat den eigenen %2$s %3$s kommentiert" - -#: include/enotify.php:163 include/enotify.php:568 -#, php-format -msgid "%1$s Comment to conversation #%2$d by %3$s" -msgstr "%1$sKommentar von %3$s auf Unterhaltung %2$d" - -#: include/enotify.php:165 -#, php-format -msgid "%s commented on an item/conversation you have been following." -msgstr "%s hat einen Beitrag kommentiert, dem du folgst." - -#: include/enotify.php:169 include/enotify.php:184 include/enotify.php:203 -#: include/enotify.php:583 -#, php-format -msgid "Please visit %s to view and/or reply to the conversation." -msgstr "Bitte besuche %s, um die Konversation anzusehen und/oder zu kommentieren." - -#: include/enotify.php:176 -#, php-format -msgid "%s %s posted to your profile wall" -msgstr "%s%s hat auf deine Pinnwand gepostet" - -#: include/enotify.php:178 -#, php-format -msgid "%1$s posted to your profile wall at %2$s" -msgstr "%1$s schrieb um %2$s auf Deine Pinnwand" - -#: include/enotify.php:179 -#, php-format -msgid "%1$s posted to [url=%2$s]your wall[/url]" -msgstr "%1$s hat etwas auf [url=%2$s]Deiner Pinnwand[/url] gepostet" - -#: include/enotify.php:191 -#, php-format -msgid "%1$s %2$s poked you" -msgstr "%1$s%2$shat dich angestubst" - -#: include/enotify.php:193 -#, php-format -msgid "%1$s poked you at %2$s" -msgstr "%1$s hat dich auf %2$s angestupst" - -#: include/enotify.php:194 -#, php-format -msgid "%1$s [url=%2$s]poked you[/url]." -msgstr "%1$s [url=%2$s]hat dich angestupst[/url]." - -#: include/enotify.php:211 -#, php-format -msgid "%s Introduction received" -msgstr "%sVorstellung erhalten" - -#: include/enotify.php:213 -#, php-format -msgid "You've received an introduction from '%1$s' at %2$s" -msgstr "Du hast eine Kontaktanfrage von '%1$s' auf %2$s erhalten" - -#: include/enotify.php:214 -#, php-format -msgid "You've received [url=%1$s]an introduction[/url] from %2$s." -msgstr "Du hast eine [url=%1$s]Kontaktanfrage[/url] von %2$s erhalten." - -#: include/enotify.php:219 include/enotify.php:265 -#, php-format -msgid "You may visit their profile at %s" -msgstr "Hier kannst du das Profil betrachten: %s" - -#: include/enotify.php:221 -#, php-format -msgid "Please visit %s to approve or reject the introduction." -msgstr "Bitte besuche %s, um die Kontaktanfrage anzunehmen oder abzulehnen." - -#: include/enotify.php:228 -#, php-format -msgid "%s A new person is sharing with you" -msgstr "%sEine neue Person teilt nun mit dir" - -#: include/enotify.php:230 include/enotify.php:231 -#, php-format -msgid "%1$s is sharing with you at %2$s" -msgstr "%1$s teilt mit dir auf %2$s" - -#: include/enotify.php:238 -#, php-format -msgid "%s You have a new follower" -msgstr "%sDu hast einen neuen Kontakt" - -#: include/enotify.php:240 include/enotify.php:241 -#, php-format -msgid "You have a new follower at %2$s : %1$s" -msgstr "Du hast einen neuen Kontakt auf %2$s: %1$s" - -#: include/enotify.php:254 -#, php-format -msgid "%s Friend suggestion received" -msgstr "%sKontaktvorschlag erhalten" - -#: include/enotify.php:256 -#, php-format -msgid "You've received a friend suggestion from '%1$s' at %2$s" -msgstr "Du hast einen Kontakt-Vorschlag von '%1$s' auf %2$s erhalten" - -#: include/enotify.php:257 -#, php-format -msgid "" -"You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." -msgstr "Du hast einen [url=%1$s]Kontakt-Vorschlag[/url] %2$s von %3$s erhalten." - -#: include/enotify.php:263 -msgid "Name:" -msgstr "Name:" - -#: include/enotify.php:264 -msgid "Photo:" -msgstr "Foto:" - -#: include/enotify.php:267 -#, php-format -msgid "Please visit %s to approve or reject the suggestion." -msgstr "Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen." - -#: include/enotify.php:275 include/enotify.php:290 -#, php-format -msgid "%s Connection accepted" -msgstr "%sKontaktanfrage bestätigt" - -#: include/enotify.php:277 include/enotify.php:292 -#, php-format -msgid "'%1$s' has accepted your connection request at %2$s" -msgstr "'%1$s' hat Deine Kontaktanfrage auf %2$s bestätigt" - -#: include/enotify.php:278 include/enotify.php:293 -#, php-format -msgid "%2$s has accepted your [url=%1$s]connection request[/url]." -msgstr "%2$s hat Deine [url=%1$s]Kontaktanfrage[/url] akzeptiert." - -#: include/enotify.php:283 -msgid "" -"You are now mutual friends and may exchange status updates, photos, and " -"email without restriction." -msgstr "Ihr seid nun beidseitige Kontakte und könnt Statusmitteilungen, Bilder und E-Mails ohne Einschränkungen austauschen." - -#: include/enotify.php:285 -#, php-format -msgid "Please visit %s if you wish to make any changes to this relationship." -msgstr "Bitte besuche %s, wenn du Änderungen an eurer Beziehung vornehmen willst." - -#: include/enotify.php:298 -#, php-format -msgid "" -"'%1$s' has chosen to accept you a fan, which restricts some forms of " -"communication - such as private messaging and some profile interactions. If " -"this is a celebrity or community page, these settings were applied " -"automatically." -msgstr "'%1$s' hat sich entschieden dich als Fan zu akzeptieren, dies schränkt einige Kommunikationswege - wie private Nachrichten und einige Interaktionsmöglichkeiten auf der Profilseite - ein. Wenn dies eine Berühmtheiten- oder Gemeinschaftsseite ist, werden diese Einstellungen automatisch vorgenommen." - -#: include/enotify.php:300 -#, php-format -msgid "" -"'%1$s' may choose to extend this into a two-way or more permissive " -"relationship in the future." -msgstr "'%1$s' kann den Kontaktstatus zu einem späteren Zeitpunkt erweitern und diese Einschränkungen aufheben. " - -#: include/enotify.php:302 -#, php-format -msgid "Please visit %s if you wish to make any changes to this relationship." -msgstr "Bitte besuche %s, wenn du Änderungen an eurer Beziehung vornehmen willst." - -#: include/enotify.php:312 mod/removeme.php:63 -msgid "[Friendica System Notify]" -msgstr "[Friendica-Systembenachrichtigung]" - -#: include/enotify.php:312 -msgid "registration request" -msgstr "Registrierungsanfrage" - -#: include/enotify.php:314 -#, php-format -msgid "You've received a registration request from '%1$s' at %2$s" -msgstr "Du hast eine Registrierungsanfrage von %2$s auf '%1$s' erhalten" - -#: include/enotify.php:315 -#, php-format -msgid "You've received a [url=%1$s]registration request[/url] from %2$s." -msgstr "Du hast eine [url=%1$s]Registrierungsanfrage[/url] von %2$s erhalten." - -#: include/enotify.php:320 -#, php-format -msgid "" -"Full Name:\t%s\n" -"Site Location:\t%s\n" -"Login Name:\t%s (%s)" -msgstr "Kompletter Name: %s\nURL der Seite: %s\nLogin Name: %s(%s)" - -#: include/enotify.php:326 -#, php-format -msgid "Please visit %s to approve or reject the request." -msgstr "Bitte besuche %s, um die Anfrage zu bearbeiten." - -#: include/enotify.php:562 -#, php-format -msgid "%s %s tagged you" -msgstr "%s %s hat dich erwähnt" - -#: include/enotify.php:565 -#, php-format -msgid "%s %s shared a new post" -msgstr "%s%shat einen Beitrag geteilt" - #: mod/api.php:30 mod/editpost.php:38 mod/events.php:220 mod/follow.php:56 #: 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:908 +#: mod/ostatus_subscribe.php:32 mod/photos.php:160 mod/photos.php:900 #: mod/repair_ostatus.php:31 mod/settings.php:47 mod/settings.php:57 #: mod/settings.php:409 mod/suggest.php:34 mod/uimport.php:33 #: mod/unfollow.php:35 mod/unfollow.php:50 mod/unfollow.php:82 @@ -355,7 +104,7 @@ msgstr "%s%shat einen Beitrag geteilt" #: 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 -#: src/Module/Settings/Profile/Photo/Crop.php:158 +#: src/Module/Settings/Profile/Photo/Crop.php:164 #: src/Module/Settings/Profile/Photo/Index.php:112 #: src/Module/Settings/UserExport.php:58 src/Module/Settings/UserExport.php:93 #: src/Module/Settings/UserExport.php:198 @@ -373,8 +122,8 @@ msgstr "Zugriff verweigert." msgid "Access denied." msgstr "Zugriff verweigert." -#: mod/cal.php:61 mod/cal.php:78 mod/photos.php:69 mod/photos.php:143 -#: mod/photos.php:815 src/Model/Profile.php:229 src/Module/HCard.php:52 +#: mod/cal.php:61 mod/cal.php:78 mod/photos.php:69 mod/photos.php:140 +#: mod/photos.php:807 src/Model/Profile.php:229 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/Media.php:38 src/Module/Profile/Status.php:58 @@ -449,7 +198,7 @@ msgstr "Keine exportierbaren Daten gefunden" msgid "calendar" msgstr "Kalender" -#: mod/display.php:165 mod/photos.php:819 +#: mod/display.php:165 mod/photos.php:811 #: src/Module/Conversation/Community.php:176 src/Module/Debug/Probe.php:39 #: src/Module/Debug/WebFinger.php:38 src/Module/Directory.php:49 #: src/Module/Search/Index.php:50 src/Module/Search/Index.php:55 @@ -477,7 +226,7 @@ msgstr "Beitrag bearbeiten" msgid "Save" msgstr "Speichern" -#: mod/editpost.php:92 mod/photos.php:1355 src/Content/Conversation.php:326 +#: mod/editpost.php:92 mod/photos.php:1347 src/Content/Conversation.php:326 #: src/Module/Contact/Poke.php:157 src/Object/Post.php:964 msgid "Loading..." msgstr "lädt..." @@ -542,7 +291,7 @@ msgid "clear location" msgstr "Ort löschen" #: mod/editpost.php:107 mod/message.php:200 mod/message.php:358 -#: mod/photos.php:1506 mod/wallmessage.php:141 +#: mod/photos.php:1498 mod/wallmessage.php:141 #: src/Content/Conversation.php:355 src/Content/Conversation.php:689 #: src/Module/Item/Compose.php:165 src/Object/Post.php:502 msgid "Please wait" @@ -574,14 +323,14 @@ msgstr "Kategorien (kommasepariert)" msgid "Example: bob@example.com, mary@example.com" msgstr "Z.B.: bob@example.com, mary@example.com" -#: mod/editpost.php:128 mod/events.php:517 mod/photos.php:1354 -#: mod/photos.php:1410 mod/photos.php:1484 src/Content/Conversation.php:370 +#: mod/editpost.php:128 mod/events.php:517 mod/photos.php:1346 +#: mod/photos.php:1402 mod/photos.php:1476 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:100 mod/fbrowser.php:127 -#: mod/follow.php:144 mod/photos.php:1017 mod/photos.php:1122 mod/tagrm.php:37 +#: mod/follow.php:144 mod/photos.php:1013 mod/photos.php:1114 mod/tagrm.php:37 #: mod/tagrm.php:129 mod/unfollow.php:97 src/Content/Conversation.php:373 #: src/Module/Contact/Revoke.php:99 src/Module/RemoteFollow.php:116 msgid "Cancel" @@ -598,8 +347,8 @@ msgstr "Nachricht" msgid "Browser" msgstr "Browser" -#: mod/editpost.php:136 mod/events.php:522 mod/photos.php:956 -#: mod/photos.php:1308 src/Content/Conversation.php:357 +#: mod/editpost.php:136 mod/events.php:522 mod/photos.php:948 +#: mod/photos.php:1300 src/Content/Conversation.php:357 msgid "Permissions" msgstr "Berechtigungen" @@ -679,8 +428,8 @@ msgid "Share this event" msgstr "Veranstaltung teilen" #: mod/events.php:519 mod/message.php:201 mod/message.php:357 -#: mod/photos.php:938 mod/photos.php:1039 mod/photos.php:1312 -#: mod/photos.php:1353 mod/photos.php:1409 mod/photos.php:1483 +#: mod/photos.php:930 mod/photos.php:1034 mod/photos.php:1304 +#: mod/photos.php:1345 mod/photos.php:1401 mod/photos.php:1475 #: src/Module/Admin/Item/Source.php:65 src/Module/Contact.php:523 #: src/Module/Contact/Advanced.php:133 src/Module/Contact/Poke.php:158 #: src/Module/Debug/ActivityPubConversion.php:141 @@ -1131,257 +880,257 @@ msgstr "Ignoriert" msgid "Keep this window open until done." msgstr "Lasse dieses Fenster offen, bis der Vorgang abgeschlossen ist." -#: mod/photos.php:111 src/Module/BaseProfile.php:67 +#: mod/photos.php:108 src/Module/BaseProfile.php:67 msgid "Photo Albums" msgstr "Fotoalben" -#: mod/photos.php:112 mod/photos.php:1608 +#: mod/photos.php:109 mod/photos.php:1593 msgid "Recent Photos" msgstr "Neueste Fotos" -#: mod/photos.php:114 mod/photos.php:1090 mod/photos.php:1610 +#: mod/photos.php:111 mod/photos.php:1082 mod/photos.php:1595 msgid "Upload New Photos" msgstr "Neue Fotos hochladen" -#: mod/photos.php:132 src/Module/BaseSettings.php:37 +#: mod/photos.php:129 src/Module/BaseSettings.php:37 msgid "everybody" msgstr "jeder" -#: mod/photos.php:170 +#: mod/photos.php:167 msgid "Contact information unavailable" msgstr "Kontaktinformationen nicht verfügbar" -#: mod/photos.php:204 +#: mod/photos.php:196 msgid "Album not found." msgstr "Album nicht gefunden." -#: mod/photos.php:258 +#: mod/photos.php:250 msgid "Album successfully deleted" msgstr "Album wurde erfolgreich gelöscht." -#: mod/photos.php:260 +#: mod/photos.php:252 msgid "Album was empty." msgstr "Album ist leer." -#: mod/photos.php:292 +#: mod/photos.php:284 msgid "Failed to delete the photo." msgstr "Das Foto konnte nicht gelöscht werden." -#: mod/photos.php:567 +#: mod/photos.php:559 msgid "a photo" msgstr "einem Foto" -#: mod/photos.php:567 +#: mod/photos.php:559 #, php-format msgid "%1$s was tagged in %2$s by %3$s" msgstr "%1$s wurde von %3$s in %2$s getaggt" -#: mod/photos.php:650 mod/photos.php:653 mod/photos.php:680 +#: mod/photos.php:642 mod/photos.php:645 mod/photos.php:672 #: mod/wall_upload.php:207 src/Module/Settings/Profile/Photo/Index.php:60 #, php-format msgid "Image exceeds size limit of %s" msgstr "Bildgröße überschreitet das Limit von %s" -#: mod/photos.php:656 +#: mod/photos.php:648 msgid "Image upload didn't complete, please try again" msgstr "Der Upload des Bildes war nicht vollständig. Bitte versuche es erneut." -#: mod/photos.php:659 +#: mod/photos.php:651 msgid "Image file is missing" msgstr "Bilddatei konnte nicht gefunden werden." -#: mod/photos.php:664 +#: mod/photos.php:656 msgid "" "Server can't accept new file upload at this time, please contact your " "administrator" msgstr "Der Server kann derzeit keine neuen Datei-Uploads akzeptieren. Bitte kontaktiere deinen Administrator." -#: mod/photos.php:688 +#: mod/photos.php:680 msgid "Image file is empty." msgstr "Bilddatei ist leer." -#: mod/photos.php:703 mod/wall_upload.php:166 +#: mod/photos.php:695 mod/wall_upload.php:166 #: src/Module/Settings/Profile/Photo/Index.php:69 msgid "Unable to process image." msgstr "Konnte das Bild nicht bearbeiten." -#: mod/photos.php:732 mod/wall_upload.php:232 +#: mod/photos.php:724 mod/wall_upload.php:232 #: src/Module/Settings/Profile/Photo/Index.php:96 msgid "Image upload failed." msgstr "Hochladen des Bildes gescheitert." -#: mod/photos.php:824 +#: mod/photos.php:816 msgid "No photos selected" msgstr "Keine Bilder ausgewählt" -#: mod/photos.php:893 +#: mod/photos.php:885 msgid "Access to this item is restricted." msgstr "Zugriff zu diesem Eintrag wurde eingeschränkt." -#: mod/photos.php:948 +#: mod/photos.php:940 msgid "Upload Photos" msgstr "Bilder hochladen" -#: mod/photos.php:952 mod/photos.php:1035 +#: mod/photos.php:944 mod/photos.php:1030 msgid "New album name: " msgstr "Name des neuen Albums: " -#: mod/photos.php:953 +#: mod/photos.php:945 msgid "or select existing album:" msgstr "oder wähle ein bestehendes Album:" -#: mod/photos.php:954 +#: mod/photos.php:946 msgid "Do not show a status post for this upload" msgstr "Keine Status-Mitteilung für diesen Beitrag anzeigen" -#: mod/photos.php:1015 +#: mod/photos.php:1011 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:1016 mod/photos.php:1040 +#: mod/photos.php:1012 mod/photos.php:1035 msgid "Delete Album" msgstr "Album löschen" -#: mod/photos.php:1046 +#: mod/photos.php:1039 msgid "Edit Album" msgstr "Album bearbeiten" -#: mod/photos.php:1047 +#: mod/photos.php:1040 msgid "Drop Album" msgstr "Album löschen" -#: mod/photos.php:1052 +#: mod/photos.php:1044 msgid "Show Newest First" msgstr "Zeige neueste zuerst" -#: mod/photos.php:1054 +#: mod/photos.php:1046 msgid "Show Oldest First" msgstr "Zeige älteste zuerst" -#: mod/photos.php:1075 mod/photos.php:1593 +#: mod/photos.php:1067 mod/photos.php:1578 msgid "View Photo" msgstr "Foto betrachten" -#: mod/photos.php:1108 +#: mod/photos.php:1100 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:1110 +#: mod/photos.php:1102 msgid "Photo not available" msgstr "Foto nicht verfügbar" -#: mod/photos.php:1120 +#: mod/photos.php:1112 msgid "Do you really want to delete this photo?" msgstr "Möchtest du wirklich dieses Foto löschen?" -#: mod/photos.php:1121 mod/photos.php:1313 +#: mod/photos.php:1113 mod/photos.php:1305 msgid "Delete Photo" msgstr "Foto löschen" -#: mod/photos.php:1211 +#: mod/photos.php:1203 msgid "View photo" msgstr "Fotos ansehen" -#: mod/photos.php:1213 +#: mod/photos.php:1205 msgid "Edit photo" msgstr "Foto bearbeiten" -#: mod/photos.php:1214 +#: mod/photos.php:1206 msgid "Delete photo" msgstr "Foto löschen" -#: mod/photos.php:1215 +#: mod/photos.php:1207 msgid "Use as profile photo" msgstr "Als Profilbild verwenden" -#: mod/photos.php:1222 +#: mod/photos.php:1214 msgid "Private Photo" msgstr "Privates Foto" -#: mod/photos.php:1228 +#: mod/photos.php:1220 msgid "View Full Size" msgstr "Betrachte Originalgröße" -#: mod/photos.php:1281 +#: mod/photos.php:1273 msgid "Tags: " msgstr "Tags: " -#: mod/photos.php:1284 +#: mod/photos.php:1276 msgid "[Select tags to remove]" msgstr "[Zu entfernende Tags auswählen]" -#: mod/photos.php:1299 +#: mod/photos.php:1291 msgid "New album name" msgstr "Name des neuen Albums" -#: mod/photos.php:1300 +#: mod/photos.php:1292 msgid "Caption" msgstr "Bildunterschrift" -#: mod/photos.php:1301 +#: mod/photos.php:1293 msgid "Add a Tag" msgstr "Tag hinzufügen" -#: mod/photos.php:1301 +#: mod/photos.php:1293 msgid "" "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" -#: mod/photos.php:1302 +#: mod/photos.php:1294 msgid "Do not rotate" msgstr "Nicht rotieren" -#: mod/photos.php:1303 +#: mod/photos.php:1295 msgid "Rotate CW (right)" msgstr "Drehen US (rechts)" -#: mod/photos.php:1304 +#: mod/photos.php:1296 msgid "Rotate CCW (left)" msgstr "Drehen EUS (links)" -#: mod/photos.php:1350 mod/photos.php:1406 mod/photos.php:1480 +#: mod/photos.php:1342 mod/photos.php:1398 mod/photos.php:1472 #: src/Module/Contact.php:993 src/Module/Item/Compose.php:148 #: src/Object/Post.php:960 msgid "This is you" msgstr "Das bist du" -#: mod/photos.php:1352 mod/photos.php:1408 mod/photos.php:1482 +#: mod/photos.php:1344 mod/photos.php:1400 mod/photos.php:1474 #: src/Object/Post.php:496 src/Object/Post.php:962 msgid "Comment" msgstr "Kommentar" -#: mod/photos.php:1441 src/Content/Conversation.php:615 +#: mod/photos.php:1433 src/Content/Conversation.php:615 #: src/Object/Post.php:227 msgid "Select" msgstr "Auswählen" -#: mod/photos.php:1442 mod/settings.php:563 src/Content/Conversation.php:616 +#: mod/photos.php:1434 mod/settings.php:563 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 msgid "Delete" msgstr "Löschen" -#: mod/photos.php:1503 src/Object/Post.php:349 +#: mod/photos.php:1495 src/Object/Post.php:349 msgid "Like" msgstr "Mag ich" -#: mod/photos.php:1504 src/Object/Post.php:349 +#: mod/photos.php:1496 src/Object/Post.php:349 msgid "I like this (toggle)" msgstr "Ich mag das (toggle)" -#: mod/photos.php:1505 src/Object/Post.php:350 +#: mod/photos.php:1497 src/Object/Post.php:350 msgid "Dislike" msgstr "Mag ich nicht" -#: mod/photos.php:1507 src/Object/Post.php:350 +#: mod/photos.php:1499 src/Object/Post.php:350 msgid "I don't like this (toggle)" msgstr "Ich mag das nicht (toggle)" -#: mod/photos.php:1529 +#: mod/photos.php:1521 msgid "Map" msgstr "Karte" -#: mod/photos.php:1599 +#: mod/photos.php:1584 msgid "View Album" msgstr "Album betrachten" @@ -1409,6 +1158,10 @@ msgstr "Ungültige Anfrage." msgid "Contact not found." msgstr "Kontakt nicht gefunden." +#: mod/removeme.php:63 src/Navigation/Notifications/Depository/Notify.php:454 +msgid "[Friendica System Notify]" +msgstr "[Friendica-Systembenachrichtigung]" + #: mod/removeme.php:63 msgid "User deleted their account" msgstr "Gelöschter Nutzeraccount" @@ -2352,7 +2105,7 @@ msgstr "Die Datei ist größer als das erlaubte Limit von %s" msgid "File upload failed." msgstr "Hochladen der Datei fehlgeschlagen." -#: mod/wall_upload.php:224 src/Model/Photo.php:985 +#: mod/wall_upload.php:224 src/Model/Photo.php:987 msgid "Wall Photos" msgstr "Pinnwand-Bilder" @@ -3138,13 +2891,15 @@ msgstr "Deine Profilseite" msgid "Your photos" msgstr "Deine Fotos" -#: src/Content/Nav.php:193 view/theme/frio/theme.php:228 -msgid "Videos" -msgstr "Videos" +#: src/Content/Nav.php:193 src/Module/BaseProfile.php:72 +#: src/Module/BaseProfile.php:75 src/Module/Contact.php:838 +#: view/theme/frio/theme.php:228 +msgid "Media" +msgstr "Medien" #: src/Content/Nav.php:193 view/theme/frio/theme.php:228 -msgid "Your videos" -msgstr "Deine Videos" +msgid "Your postings with media" +msgstr "Deine Beiträge die Medien beinhalten" #: src/Content/Nav.php:194 view/theme/frio/theme.php:229 msgid "Your events" @@ -3358,8 +3113,8 @@ msgstr "nächste" msgid "last" msgstr "letzte" -#: src/Content/Text/BBCode.php:987 src/Content/Text/BBCode.php:1775 -#: src/Content/Text/BBCode.php:1776 +#: src/Content/Text/BBCode.php:987 src/Content/Text/BBCode.php:1781 +#: src/Content/Text/BBCode.php:1782 msgid "Image/photo" msgstr "Bild/Foto" @@ -3373,23 +3128,23 @@ msgstr "%2$s% msgid "Link to source" msgstr "Link zum Originalbeitrag" -#: src/Content/Text/BBCode.php:1693 src/Content/Text/HTML.php:943 +#: src/Content/Text/BBCode.php:1699 src/Content/Text/HTML.php:943 msgid "Click to open/close" msgstr "Zum Öffnen/Schließen klicken" -#: src/Content/Text/BBCode.php:1724 +#: src/Content/Text/BBCode.php:1730 msgid "$1 wrote:" msgstr "$1 hat geschrieben:" -#: src/Content/Text/BBCode.php:1780 src/Content/Text/BBCode.php:1781 +#: src/Content/Text/BBCode.php:1786 src/Content/Text/BBCode.php:1787 msgid "Encrypted content" msgstr "Verschlüsselter Inhalt" -#: src/Content/Text/BBCode.php:1996 +#: src/Content/Text/BBCode.php:2002 msgid "Invalid source protocol" msgstr "Ungültiges Quell-Protokoll" -#: src/Content/Text/BBCode.php:2011 +#: src/Content/Text/BBCode.php:2017 msgid "Invalid link protocol" msgstr "Ungültiges Link-Protokoll" @@ -7176,11 +6931,6 @@ msgstr "Zu viele Abfragen" msgid "Profile Details" msgstr "Profildetails" -#: src/Module/BaseProfile.php:72 src/Module/BaseProfile.php:75 -#: src/Module/Contact.php:838 -msgid "Media" -msgstr "Medien" - #: src/Module/BaseProfile.php:109 msgid "Only You Can See This" msgstr "Nur du kannst das sehen" @@ -9555,41 +9305,41 @@ msgid "" msgstr "

Die benutzerdefinierten Felder erscheinen auf deiner Profil-Seite

.\n\n

BBCode kann verwendet werden

\n

Die Reihenfolge der Felder kann durch Ziehen des Feld-Titels mit der Maus angepasst werden.

\n

Wird die Bezeichnung des Felds geleert, wird das Feld beim Speichern aus dem Profil entfernt.

\n

Nicht öffentliche Felder können nur von den ausgewählten Friendica Kontakte gesehen werden.

" #: src/Module/Settings/Profile/Photo/Crop.php:106 -#: src/Module/Settings/Profile/Photo/Crop.php:122 -#: src/Module/Settings/Profile/Photo/Crop.php:138 +#: src/Module/Settings/Profile/Photo/Crop.php:124 +#: src/Module/Settings/Profile/Photo/Crop.php:142 #: src/Module/Settings/Profile/Photo/Index.php:102 #, php-format msgid "Image size reduction [%s] failed." msgstr "Verkleinern der Bildgröße von [%s] scheiterte." -#: src/Module/Settings/Profile/Photo/Crop.php:143 +#: src/Module/Settings/Profile/Photo/Crop.php:149 msgid "" "Shift-reload the page or clear browser cache if the new photo does not " "display immediately." msgstr "Drücke Umschalt+Neu Laden oder leere den Browser-Cache, falls das neue Foto nicht gleich angezeigt wird." -#: src/Module/Settings/Profile/Photo/Crop.php:148 +#: src/Module/Settings/Profile/Photo/Crop.php:154 msgid "Unable to process image" msgstr "Bild konnte nicht verarbeitet werden" -#: src/Module/Settings/Profile/Photo/Crop.php:167 +#: src/Module/Settings/Profile/Photo/Crop.php:173 msgid "Photo not found." msgstr "Foto nicht gefunden" -#: src/Module/Settings/Profile/Photo/Crop.php:189 +#: src/Module/Settings/Profile/Photo/Crop.php:195 msgid "Profile picture successfully updated." msgstr "Profilbild erfolgreich aktualisiert." -#: src/Module/Settings/Profile/Photo/Crop.php:215 -#: src/Module/Settings/Profile/Photo/Crop.php:219 +#: src/Module/Settings/Profile/Photo/Crop.php:221 +#: src/Module/Settings/Profile/Photo/Crop.php:225 msgid "Crop Image" msgstr "Bild zurechtschneiden" -#: src/Module/Settings/Profile/Photo/Crop.php:216 +#: src/Module/Settings/Profile/Photo/Crop.php:222 msgid "Please adjust the image cropping for optimum viewing." msgstr "Passe bitte den Bildausschnitt an, damit das Bild optimal dargestellt werden kann." -#: src/Module/Settings/Profile/Photo/Crop.php:218 +#: src/Module/Settings/Profile/Photo/Crop.php:224 msgid "Use Image As Is" msgstr "Bild wie es ist verwenden" @@ -10206,6 +9956,263 @@ msgid "" " features and resources." msgstr "Unsere Hilfe-Seiten können herangezogen werden, um weitere Einzelheiten zu anderen Programm-Features zu erhalten." +#: src/Navigation/Notifications/Depository/Notify.php:192 +#: src/Navigation/Notifications/Depository/Notify.php:675 +msgid "[Friendica:Notify]" +msgstr "[Friendica Meldung]" + +#: src/Navigation/Notifications/Depository/Notify.php:256 +#, php-format +msgid "%s New mail received at %s" +msgstr "%sNeue Nachricht auf %s empfangen" + +#: src/Navigation/Notifications/Depository/Notify.php:258 +#, php-format +msgid "%1$s sent you a new private message at %2$s." +msgstr "%1$s hat dir eine neue, private Nachricht auf %2$s geschickt." + +#: src/Navigation/Notifications/Depository/Notify.php:259 +msgid "a private message" +msgstr "eine private Nachricht" + +#: src/Navigation/Notifications/Depository/Notify.php:259 +#, php-format +msgid "%1$s sent you %2$s." +msgstr "%1$s schickte dir %2$s." + +#: src/Navigation/Notifications/Depository/Notify.php:261 +#, php-format +msgid "Please visit %s to view and/or reply to your private messages." +msgstr "Bitte besuche %s, um Deine privaten Nachrichten anzusehen und/oder zu beantworten." + +#: src/Navigation/Notifications/Depository/Notify.php:292 +#, php-format +msgid "%1$s commented on %2$s's %3$s %4$s" +msgstr "%1$s kommentierte %2$s's %3$s%4$s" + +#: src/Navigation/Notifications/Depository/Notify.php:297 +#, php-format +msgid "%1$s commented on your %2$s %3$s" +msgstr "%1$s kommentierte auf (%2$s) %3$s" + +#: src/Navigation/Notifications/Depository/Notify.php:301 +#, php-format +msgid "%1$s commented on their %2$s %3$s" +msgstr "%1$s hat den eigenen %2$s %3$s kommentiert" + +#: src/Navigation/Notifications/Depository/Notify.php:305 +#: src/Navigation/Notifications/Depository/Notify.php:710 +#, php-format +msgid "%1$s Comment to conversation #%2$d by %3$s" +msgstr "%1$sKommentar von %3$s auf Unterhaltung %2$d" + +#: src/Navigation/Notifications/Depository/Notify.php:307 +#, php-format +msgid "%s commented on an item/conversation you have been following." +msgstr "%s hat einen Beitrag kommentiert, dem du folgst." + +#: src/Navigation/Notifications/Depository/Notify.php:311 +#: src/Navigation/Notifications/Depository/Notify.php:326 +#: src/Navigation/Notifications/Depository/Notify.php:345 +#: src/Navigation/Notifications/Depository/Notify.php:725 +#, php-format +msgid "Please visit %s to view and/or reply to the conversation." +msgstr "Bitte besuche %s, um die Konversation anzusehen und/oder zu kommentieren." + +#: src/Navigation/Notifications/Depository/Notify.php:318 +#, php-format +msgid "%s %s posted to your profile wall" +msgstr "%s%s hat auf deine Pinnwand gepostet" + +#: src/Navigation/Notifications/Depository/Notify.php:320 +#, php-format +msgid "%1$s posted to your profile wall at %2$s" +msgstr "%1$s schrieb um %2$s auf Deine Pinnwand" + +#: src/Navigation/Notifications/Depository/Notify.php:321 +#, php-format +msgid "%1$s posted to [url=%2$s]your wall[/url]" +msgstr "%1$s hat etwas auf [url=%2$s]Deiner Pinnwand[/url] gepostet" + +#: src/Navigation/Notifications/Depository/Notify.php:333 +#, php-format +msgid "%1$s %2$s poked you" +msgstr "%1$s%2$shat dich angestubst" + +#: src/Navigation/Notifications/Depository/Notify.php:335 +#, php-format +msgid "%1$s poked you at %2$s" +msgstr "%1$s hat dich auf %2$s angestupst" + +#: src/Navigation/Notifications/Depository/Notify.php:336 +#, php-format +msgid "%1$s [url=%2$s]poked you[/url]." +msgstr "%1$s [url=%2$s]hat dich angestupst[/url]." + +#: src/Navigation/Notifications/Depository/Notify.php:353 +#, php-format +msgid "%s Introduction received" +msgstr "%sVorstellung erhalten" + +#: src/Navigation/Notifications/Depository/Notify.php:355 +#, php-format +msgid "You've received an introduction from '%1$s' at %2$s" +msgstr "Du hast eine Kontaktanfrage von '%1$s' auf %2$s erhalten" + +#: src/Navigation/Notifications/Depository/Notify.php:356 +#, php-format +msgid "You've received [url=%1$s]an introduction[/url] from %2$s." +msgstr "Du hast eine [url=%1$s]Kontaktanfrage[/url] von %2$s erhalten." + +#: src/Navigation/Notifications/Depository/Notify.php:361 +#: src/Navigation/Notifications/Depository/Notify.php:407 +#, php-format +msgid "You may visit their profile at %s" +msgstr "Hier kannst du das Profil betrachten: %s" + +#: src/Navigation/Notifications/Depository/Notify.php:363 +#, php-format +msgid "Please visit %s to approve or reject the introduction." +msgstr "Bitte besuche %s, um die Kontaktanfrage anzunehmen oder abzulehnen." + +#: src/Navigation/Notifications/Depository/Notify.php:370 +#, php-format +msgid "%s A new person is sharing with you" +msgstr "%sEine neue Person teilt nun mit dir" + +#: src/Navigation/Notifications/Depository/Notify.php:372 +#: src/Navigation/Notifications/Depository/Notify.php:373 +#, php-format +msgid "%1$s is sharing with you at %2$s" +msgstr "%1$s teilt mit dir auf %2$s" + +#: src/Navigation/Notifications/Depository/Notify.php:380 +#, php-format +msgid "%s You have a new follower" +msgstr "%sDu hast einen neuen Kontakt" + +#: src/Navigation/Notifications/Depository/Notify.php:382 +#: src/Navigation/Notifications/Depository/Notify.php:383 +#, php-format +msgid "You have a new follower at %2$s : %1$s" +msgstr "Du hast einen neuen Kontakt auf %2$s: %1$s" + +#: src/Navigation/Notifications/Depository/Notify.php:396 +#, php-format +msgid "%s Friend suggestion received" +msgstr "%sKontaktvorschlag erhalten" + +#: src/Navigation/Notifications/Depository/Notify.php:398 +#, php-format +msgid "You've received a friend suggestion from '%1$s' at %2$s" +msgstr "Du hast einen Kontakt-Vorschlag von '%1$s' auf %2$s erhalten" + +#: src/Navigation/Notifications/Depository/Notify.php:399 +#, php-format +msgid "" +"You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." +msgstr "Du hast einen [url=%1$s]Kontakt-Vorschlag[/url] %2$s von %3$s erhalten." + +#: src/Navigation/Notifications/Depository/Notify.php:405 +msgid "Name:" +msgstr "Name:" + +#: src/Navigation/Notifications/Depository/Notify.php:406 +msgid "Photo:" +msgstr "Foto:" + +#: src/Navigation/Notifications/Depository/Notify.php:409 +#, php-format +msgid "Please visit %s to approve or reject the suggestion." +msgstr "Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen." + +#: src/Navigation/Notifications/Depository/Notify.php:417 +#: src/Navigation/Notifications/Depository/Notify.php:432 +#, php-format +msgid "%s Connection accepted" +msgstr "%sKontaktanfrage bestätigt" + +#: src/Navigation/Notifications/Depository/Notify.php:419 +#: src/Navigation/Notifications/Depository/Notify.php:434 +#, php-format +msgid "'%1$s' has accepted your connection request at %2$s" +msgstr "'%1$s' hat Deine Kontaktanfrage auf %2$s bestätigt" + +#: src/Navigation/Notifications/Depository/Notify.php:420 +#: src/Navigation/Notifications/Depository/Notify.php:435 +#, php-format +msgid "%2$s has accepted your [url=%1$s]connection request[/url]." +msgstr "%2$s hat Deine [url=%1$s]Kontaktanfrage[/url] akzeptiert." + +#: src/Navigation/Notifications/Depository/Notify.php:425 +msgid "" +"You are now mutual friends and may exchange status updates, photos, and " +"email without restriction." +msgstr "Ihr seid nun beidseitige Kontakte und könnt Statusmitteilungen, Bilder und E-Mails ohne Einschränkungen austauschen." + +#: src/Navigation/Notifications/Depository/Notify.php:427 +#, php-format +msgid "Please visit %s if you wish to make any changes to this relationship." +msgstr "Bitte besuche %s, wenn du Änderungen an eurer Beziehung vornehmen willst." + +#: src/Navigation/Notifications/Depository/Notify.php:440 +#, php-format +msgid "" +"'%1$s' has chosen to accept you a fan, which restricts some forms of " +"communication - such as private messaging and some profile interactions. If " +"this is a celebrity or community page, these settings were applied " +"automatically." +msgstr "'%1$s' hat sich entschieden dich als Fan zu akzeptieren, dies schränkt einige Kommunikationswege - wie private Nachrichten und einige Interaktionsmöglichkeiten auf der Profilseite - ein. Wenn dies eine Berühmtheiten- oder Gemeinschaftsseite ist, werden diese Einstellungen automatisch vorgenommen." + +#: src/Navigation/Notifications/Depository/Notify.php:442 +#, php-format +msgid "" +"'%1$s' may choose to extend this into a two-way or more permissive " +"relationship in the future." +msgstr "'%1$s' kann den Kontaktstatus zu einem späteren Zeitpunkt erweitern und diese Einschränkungen aufheben. " + +#: src/Navigation/Notifications/Depository/Notify.php:444 +#, php-format +msgid "Please visit %s if you wish to make any changes to this relationship." +msgstr "Bitte besuche %s, wenn du Änderungen an eurer Beziehung vornehmen willst." + +#: src/Navigation/Notifications/Depository/Notify.php:454 +msgid "registration request" +msgstr "Registrierungsanfrage" + +#: src/Navigation/Notifications/Depository/Notify.php:456 +#, php-format +msgid "You've received a registration request from '%1$s' at %2$s" +msgstr "Du hast eine Registrierungsanfrage von %2$s auf '%1$s' erhalten" + +#: src/Navigation/Notifications/Depository/Notify.php:457 +#, php-format +msgid "You've received a [url=%1$s]registration request[/url] from %2$s." +msgstr "Du hast eine [url=%1$s]Registrierungsanfrage[/url] von %2$s erhalten." + +#: src/Navigation/Notifications/Depository/Notify.php:462 +#, php-format +msgid "" +"Full Name:\t%s\n" +"Site Location:\t%s\n" +"Login Name:\t%s (%s)" +msgstr "Kompletter Name: %s\nURL der Seite: %s\nLogin Name: %s(%s)" + +#: src/Navigation/Notifications/Depository/Notify.php:468 +#, php-format +msgid "Please visit %s to approve or reject the request." +msgstr "Bitte besuche %s, um die Anfrage zu bearbeiten." + +#: src/Navigation/Notifications/Depository/Notify.php:704 +#, php-format +msgid "%s %s tagged you" +msgstr "%s %s hat dich erwähnt" + +#: src/Navigation/Notifications/Depository/Notify.php:707 +#, php-format +msgid "%s %s shared a new post" +msgstr "%s%shat einen Beitrag geteilt" + #: src/Navigation/Notifications/Factory/FormattedNotification.php:89 #, php-format msgid "%s liked %s's post" diff --git a/view/lang/de/strings.php b/view/lang/de/strings.php index 6e813989b2..fc3bcf0c96 100644 --- a/view/lang/de/strings.php +++ b/view/lang/de/strings.php @@ -14,59 +14,6 @@ $a->strings['Weekly posting limit of %d post reached. The post was rejected.'] = 1 => 'Das wöchentliche Limit von %d Beiträgen wurde erreicht. Der Beitrag wurde verworfen.', ]; $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['[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.'; -$a->strings['a private message'] = 'eine private Nachricht'; -$a->strings['%1$s sent you %2$s.'] = '%1$s schickte dir %2$s.'; -$a->strings['Please visit %s to view and/or reply to your private messages.'] = 'Bitte besuche %s, um Deine privaten Nachrichten anzusehen und/oder zu beantworten.'; -$a->strings['%1$s commented on %2$s\'s %3$s %4$s'] = '%1$s kommentierte %2$s\'s %3$s%4$s'; -$a->strings['%1$s commented on your %2$s %3$s'] = '%1$s kommentierte auf (%2$s) %3$s'; -$a->strings['%1$s commented on their %2$s %3$s'] = '%1$s hat den eigenen %2$s %3$s kommentiert'; -$a->strings['%1$s Comment to conversation #%2$d by %3$s'] = '%1$sKommentar von %3$s auf Unterhaltung %2$d'; -$a->strings['%s commented on an item/conversation you have been following.'] = '%s hat einen Beitrag kommentiert, dem du folgst.'; -$a->strings['Please visit %s to view and/or reply to the conversation.'] = 'Bitte besuche %s, um die Konversation anzusehen und/oder zu kommentieren.'; -$a->strings['%s %s posted to your profile wall'] = '%s%s hat auf deine Pinnwand gepostet'; -$a->strings['%1$s posted to your profile wall at %2$s'] = '%1$s schrieb um %2$s auf Deine Pinnwand'; -$a->strings['%1$s posted to [url=%2$s]your wall[/url]'] = '%1$s hat etwas auf [url=%2$s]Deiner Pinnwand[/url] gepostet'; -$a->strings['%1$s %2$s poked you'] = '%1$s%2$shat dich angestubst'; -$a->strings['%1$s poked you at %2$s'] = '%1$s hat dich auf %2$s angestupst'; -$a->strings['%1$s [url=%2$s]poked you[/url].'] = '%1$s [url=%2$s]hat dich angestupst[/url].'; -$a->strings['%s Introduction received'] = '%sVorstellung erhalten'; -$a->strings['You\'ve received an introduction from \'%1$s\' at %2$s'] = 'Du hast eine Kontaktanfrage von \'%1$s\' auf %2$s erhalten'; -$a->strings['You\'ve received [url=%1$s]an introduction[/url] from %2$s.'] = 'Du hast eine [url=%1$s]Kontaktanfrage[/url] von %2$s erhalten.'; -$a->strings['You may visit their profile at %s'] = 'Hier kannst du das Profil betrachten: %s'; -$a->strings['Please visit %s to approve or reject the introduction.'] = 'Bitte besuche %s, um die Kontaktanfrage anzunehmen oder abzulehnen.'; -$a->strings['%s A new person is sharing with you'] = '%sEine neue Person teilt nun mit dir'; -$a->strings['%1$s is sharing with you at %2$s'] = '%1$s teilt mit dir auf %2$s'; -$a->strings['%s You have a new follower'] = '%sDu hast einen neuen Kontakt'; -$a->strings['You have a new follower at %2$s : %1$s'] = 'Du hast einen neuen Kontakt auf %2$s: %1$s'; -$a->strings['%s Friend suggestion received'] = '%sKontaktvorschlag erhalten'; -$a->strings['You\'ve received a friend suggestion from \'%1$s\' at %2$s'] = 'Du hast einen Kontakt-Vorschlag von \'%1$s\' auf %2$s erhalten'; -$a->strings['You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.'] = 'Du hast einen [url=%1$s]Kontakt-Vorschlag[/url] %2$s von %3$s erhalten.'; -$a->strings['Name:'] = 'Name:'; -$a->strings['Photo:'] = 'Foto:'; -$a->strings['Please visit %s to approve or reject the suggestion.'] = 'Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen.'; -$a->strings['%s Connection accepted'] = '%sKontaktanfrage bestätigt'; -$a->strings['\'%1$s\' has accepted your connection request at %2$s'] = '\'%1$s\' hat Deine Kontaktanfrage auf %2$s bestätigt'; -$a->strings['%2$s has accepted your [url=%1$s]connection request[/url].'] = '%2$s hat Deine [url=%1$s]Kontaktanfrage[/url] akzeptiert.'; -$a->strings['You are now mutual friends and may exchange status updates, photos, and email without restriction.'] = 'Ihr seid nun beidseitige Kontakte und könnt Statusmitteilungen, Bilder und E-Mails ohne Einschränkungen austauschen.'; -$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Bitte besuche %s, wenn du Änderungen an eurer Beziehung vornehmen willst.'; -$a->strings['\'%1$s\' has chosen to accept you a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.'] = '\'%1$s\' hat sich entschieden dich als Fan zu akzeptieren, dies schränkt einige Kommunikationswege - wie private Nachrichten und einige Interaktionsmöglichkeiten auf der Profilseite - ein. Wenn dies eine Berühmtheiten- oder Gemeinschaftsseite ist, werden diese Einstellungen automatisch vorgenommen.'; -$a->strings['\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.'] = '\'%1$s\' kann den Kontaktstatus zu einem späteren Zeitpunkt erweitern und diese Einschränkungen aufheben. '; -$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Bitte besuche %s, wenn du Änderungen an eurer Beziehung vornehmen willst.'; -$a->strings['[Friendica System Notify]'] = '[Friendica-Systembenachrichtigung]'; -$a->strings['registration request'] = 'Registrierungsanfrage'; -$a->strings['You\'ve received a registration request from \'%1$s\' at %2$s'] = 'Du hast eine Registrierungsanfrage von %2$s auf \'%1$s\' erhalten'; -$a->strings['You\'ve received a [url=%1$s]registration request[/url] from %2$s.'] = 'Du hast eine [url=%1$s]Registrierungsanfrage[/url] von %2$s erhalten.'; -$a->strings['Full Name: %s -Site Location: %s -Login Name: %s (%s)'] = 'Kompletter Name: %s -URL der Seite: %s -Login Name: %s(%s)'; -$a->strings['Please visit %s to approve or reject the request.'] = 'Bitte besuche %s, um die Anfrage zu bearbeiten.'; -$a->strings['%s %s tagged you'] = '%s %s hat dich erwähnt'; -$a->strings['%s %s shared a new post'] = '%s%shat einen Beitrag geteilt'; $a->strings['Permission denied.'] = 'Zugriff verweigert.'; $a->strings['Access denied.'] = 'Zugriff verweigert.'; $a->strings['User not found.'] = 'Benutzer nicht gefunden.'; @@ -356,6 +303,7 @@ $a->strings['{0} requested registration'] = '{0} möchte sich registrieren'; $a->strings['{0} and %d others requested registration'] = '{0} und %d weitere möchten sich registrieren'; $a->strings['Bad Request.'] = 'Ungültige Anfrage.'; $a->strings['Contact not found.'] = 'Kontakt nicht gefunden.'; +$a->strings['[Friendica System Notify]'] = '[Friendica-Systembenachrichtigung]'; $a->strings['User deleted their account'] = 'Gelöschter Nutzeraccount'; $a->strings['On your Friendica node an user deleted their account. Please ensure that their data is removed from the backups.'] = 'Ein Nutzer deiner Friendica-Instanz hat seinen Account gelöscht. Bitte stelle sicher, dass dessen Daten aus deinen Backups entfernt werden.'; $a->strings['The user id is %d'] = 'Die ID des Users lautet %d'; @@ -740,8 +688,8 @@ $a->strings['Your posts and conversations'] = 'Deine Beiträge und Unterhaltunge $a->strings['Profile'] = 'Profil'; $a->strings['Your profile page'] = 'Deine Profilseite'; $a->strings['Your photos'] = 'Deine Fotos'; -$a->strings['Videos'] = 'Videos'; -$a->strings['Your videos'] = 'Deine Videos'; +$a->strings['Media'] = 'Medien'; +$a->strings['Your postings with media'] = 'Deine Beiträge die Medien beinhalten'; $a->strings['Your events'] = 'Deine Ereignisse'; $a->strings['Personal notes'] = 'Persönliche Notizen'; $a->strings['Your personal notes'] = 'Deine persönlichen Notizen'; @@ -1780,7 +1728,6 @@ $a->strings['API endpoint %s %s is not implemented'] = 'API Endpunkt %s %s ist n $a->strings['The API endpoint is currently not implemented but might be in the future.'] = 'The API endpoint is currently not implemented but might be in the future.'; $a->strings['Too Many Requests'] = 'Zu viele Abfragen'; $a->strings['Profile Details'] = 'Profildetails'; -$a->strings['Media'] = 'Medien'; $a->strings['Only You Can See This'] = 'Nur du kannst das sehen'; $a->strings['Scheduled Posts'] = 'Geplante Beiträge'; $a->strings['Posts that are scheduled for publishing'] = 'Beiträge die für einen späteren Zeitpunkt für die Veröffentlichung geplant sind'; @@ -2510,6 +2457,58 @@ $a->strings['Friendica respects your privacy. By default, your posts will only s $a->strings['Getting Help'] = 'Hilfe bekommen'; $a->strings['Go to the Help Section'] = 'Zum Hilfe Abschnitt gehen'; $a->strings['Our help pages may be consulted for detail on other program features and resources.'] = 'Unsere Hilfe-Seiten können herangezogen werden, um weitere Einzelheiten zu anderen Programm-Features zu erhalten.'; +$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.'; +$a->strings['a private message'] = 'eine private Nachricht'; +$a->strings['%1$s sent you %2$s.'] = '%1$s schickte dir %2$s.'; +$a->strings['Please visit %s to view and/or reply to your private messages.'] = 'Bitte besuche %s, um Deine privaten Nachrichten anzusehen und/oder zu beantworten.'; +$a->strings['%1$s commented on %2$s\'s %3$s %4$s'] = '%1$s kommentierte %2$s\'s %3$s%4$s'; +$a->strings['%1$s commented on your %2$s %3$s'] = '%1$s kommentierte auf (%2$s) %3$s'; +$a->strings['%1$s commented on their %2$s %3$s'] = '%1$s hat den eigenen %2$s %3$s kommentiert'; +$a->strings['%1$s Comment to conversation #%2$d by %3$s'] = '%1$sKommentar von %3$s auf Unterhaltung %2$d'; +$a->strings['%s commented on an item/conversation you have been following.'] = '%s hat einen Beitrag kommentiert, dem du folgst.'; +$a->strings['Please visit %s to view and/or reply to the conversation.'] = 'Bitte besuche %s, um die Konversation anzusehen und/oder zu kommentieren.'; +$a->strings['%s %s posted to your profile wall'] = '%s%s hat auf deine Pinnwand gepostet'; +$a->strings['%1$s posted to your profile wall at %2$s'] = '%1$s schrieb um %2$s auf Deine Pinnwand'; +$a->strings['%1$s posted to [url=%2$s]your wall[/url]'] = '%1$s hat etwas auf [url=%2$s]Deiner Pinnwand[/url] gepostet'; +$a->strings['%1$s %2$s poked you'] = '%1$s%2$shat dich angestubst'; +$a->strings['%1$s poked you at %2$s'] = '%1$s hat dich auf %2$s angestupst'; +$a->strings['%1$s [url=%2$s]poked you[/url].'] = '%1$s [url=%2$s]hat dich angestupst[/url].'; +$a->strings['%s Introduction received'] = '%sVorstellung erhalten'; +$a->strings['You\'ve received an introduction from \'%1$s\' at %2$s'] = 'Du hast eine Kontaktanfrage von \'%1$s\' auf %2$s erhalten'; +$a->strings['You\'ve received [url=%1$s]an introduction[/url] from %2$s.'] = 'Du hast eine [url=%1$s]Kontaktanfrage[/url] von %2$s erhalten.'; +$a->strings['You may visit their profile at %s'] = 'Hier kannst du das Profil betrachten: %s'; +$a->strings['Please visit %s to approve or reject the introduction.'] = 'Bitte besuche %s, um die Kontaktanfrage anzunehmen oder abzulehnen.'; +$a->strings['%s A new person is sharing with you'] = '%sEine neue Person teilt nun mit dir'; +$a->strings['%1$s is sharing with you at %2$s'] = '%1$s teilt mit dir auf %2$s'; +$a->strings['%s You have a new follower'] = '%sDu hast einen neuen Kontakt'; +$a->strings['You have a new follower at %2$s : %1$s'] = 'Du hast einen neuen Kontakt auf %2$s: %1$s'; +$a->strings['%s Friend suggestion received'] = '%sKontaktvorschlag erhalten'; +$a->strings['You\'ve received a friend suggestion from \'%1$s\' at %2$s'] = 'Du hast einen Kontakt-Vorschlag von \'%1$s\' auf %2$s erhalten'; +$a->strings['You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.'] = 'Du hast einen [url=%1$s]Kontakt-Vorschlag[/url] %2$s von %3$s erhalten.'; +$a->strings['Name:'] = 'Name:'; +$a->strings['Photo:'] = 'Foto:'; +$a->strings['Please visit %s to approve or reject the suggestion.'] = 'Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen.'; +$a->strings['%s Connection accepted'] = '%sKontaktanfrage bestätigt'; +$a->strings['\'%1$s\' has accepted your connection request at %2$s'] = '\'%1$s\' hat Deine Kontaktanfrage auf %2$s bestätigt'; +$a->strings['%2$s has accepted your [url=%1$s]connection request[/url].'] = '%2$s hat Deine [url=%1$s]Kontaktanfrage[/url] akzeptiert.'; +$a->strings['You are now mutual friends and may exchange status updates, photos, and email without restriction.'] = 'Ihr seid nun beidseitige Kontakte und könnt Statusmitteilungen, Bilder und E-Mails ohne Einschränkungen austauschen.'; +$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Bitte besuche %s, wenn du Änderungen an eurer Beziehung vornehmen willst.'; +$a->strings['\'%1$s\' has chosen to accept you a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.'] = '\'%1$s\' hat sich entschieden dich als Fan zu akzeptieren, dies schränkt einige Kommunikationswege - wie private Nachrichten und einige Interaktionsmöglichkeiten auf der Profilseite - ein. Wenn dies eine Berühmtheiten- oder Gemeinschaftsseite ist, werden diese Einstellungen automatisch vorgenommen.'; +$a->strings['\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.'] = '\'%1$s\' kann den Kontaktstatus zu einem späteren Zeitpunkt erweitern und diese Einschränkungen aufheben. '; +$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Bitte besuche %s, wenn du Änderungen an eurer Beziehung vornehmen willst.'; +$a->strings['registration request'] = 'Registrierungsanfrage'; +$a->strings['You\'ve received a registration request from \'%1$s\' at %2$s'] = 'Du hast eine Registrierungsanfrage von %2$s auf \'%1$s\' erhalten'; +$a->strings['You\'ve received a [url=%1$s]registration request[/url] from %2$s.'] = 'Du hast eine [url=%1$s]Registrierungsanfrage[/url] von %2$s erhalten.'; +$a->strings['Full Name: %s +Site Location: %s +Login Name: %s (%s)'] = 'Kompletter Name: %s +URL der Seite: %s +Login Name: %s(%s)'; +$a->strings['Please visit %s to approve or reject the request.'] = 'Bitte besuche %s, um die Anfrage zu bearbeiten.'; +$a->strings['%s %s tagged you'] = '%s %s hat dich erwähnt'; +$a->strings['%s %s shared a new post'] = '%s%shat einen Beitrag geteilt'; $a->strings['%s liked %s\'s post'] = '%s mag %ss Beitrag'; $a->strings['%s disliked %s\'s post'] = '%s mag %ss Beitrag nicht'; $a->strings['%s is attending %s\'s event'] = '%s nimmt an %s\'s Event teil'; diff --git a/view/theme/frio/theme.php b/view/theme/frio/theme.php index 9315934970..3ea1e1641a 100644 --- a/view/theme/frio/theme.php +++ b/view/theme/frio/theme.php @@ -225,7 +225,7 @@ function frio_remote_nav(App $a, array &$nav_info) $nav_info['nav']['usermenu'][] = [$server_url . '/profile/' . $remoteUser['nick'], DI::l10n()->t('Status'), '', DI::l10n()->t('Your posts and conversations')]; $nav_info['nav']['usermenu'][] = [$server_url . '/profile/' . $remoteUser['nick'] . '/profile', DI::l10n()->t('Profile'), '', DI::l10n()->t('Your profile page')]; $nav_info['nav']['usermenu'][] = [$server_url . '/photos/' . $remoteUser['nick'], DI::l10n()->t('Photos'), '', DI::l10n()->t('Your photos')]; - $nav_info['nav']['usermenu'][] = [$server_url . '/videos/' . $remoteUser['nick'], DI::l10n()->t('Videos'), '', DI::l10n()->t('Your videos')]; + $nav_info['nav']['usermenu'][] = [$server_url . '/media/' . $remoteUser['nick'], DI::l10n()->t('Media'), '', DI::l10n()->t('Your postings with media')]; $nav_info['nav']['usermenu'][] = [$server_url . '/events/', DI::l10n()->t('Events'), '', DI::l10n()->t('Your events')]; // navbar links