Merge branch 'friendica:2022.12-rc' into new_image_presentation

This commit is contained in:
MarekBenjamin 2022-12-08 20:40:58 +01:00 committed by GitHub
commit 75d857c595
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 5182 additions and 4681 deletions

View file

@ -150,6 +150,8 @@ class Router
if ($this->baseRoutesFilepath && !file_exists($this->baseRoutesFilepath)) { if ($this->baseRoutesFilepath && !file_exists($this->baseRoutesFilepath)) {
throw new HTTPException\InternalServerErrorException('Routes file path does\'n exist.'); throw new HTTPException\InternalServerErrorException('Routes file path does\'n exist.');
} }
$this->parameters = [$this->server];
} }
/** /**
@ -293,18 +295,16 @@ class Router
$dispatcher = new FriendicaGroupCountBased($this->getCachedDispatchData()); $dispatcher = new FriendicaGroupCountBased($this->getCachedDispatchData());
$this->parameters = [$this->server];
try { try {
// Check if the HTTP method is OPTIONS and return the special Options Module with the possible HTTP methods // Check if the HTTP method is OPTIONS and return the special Options Module with the possible HTTP methods
if ($this->args->getMethod() === static::OPTIONS) { if ($this->args->getMethod() === static::OPTIONS) {
$this->moduleClass = Options::class; $this->moduleClass = Options::class;
$this->parameters = ['allowedMethods' => $dispatcher->getOptions($cmd)]; $this->parameters[] = ['AllowedMethods' => $dispatcher->getOptions($cmd)];
} else { } else {
$routeInfo = $dispatcher->dispatch($this->args->getMethod(), $cmd); $routeInfo = $dispatcher->dispatch($this->args->getMethod(), $cmd);
if ($routeInfo[0] === Dispatcher::FOUND) { if ($routeInfo[0] === Dispatcher::FOUND) {
$this->moduleClass = $routeInfo[1]; $this->moduleClass = $routeInfo[1];
$this->parameters[] = $routeInfo[2]; $this->parameters[] = $routeInfo[2];
} else if ($routeInfo[0] === Dispatcher::METHOD_NOT_ALLOWED) { } else if ($routeInfo[0] === Dispatcher::METHOD_NOT_ALLOWED) {
throw new HTTPException\MethodNotAllowedException($this->l10n->t('Method not allowed for this module. Allowed method(s): %s', implode(', ', $routeInfo[1]))); throw new HTTPException\MethodNotAllowedException($this->l10n->t('Method not allowed for this module. Allowed method(s): %s', implode(', ', $routeInfo[1])));
} else { } else {

View file

@ -68,6 +68,12 @@ class BBCode
const TOP_ANCHOR = '<br class="top-anchor">'; const TOP_ANCHOR = '<br class="top-anchor">';
const BOTTOM_ANCHOR = '<br class="button-anchor">'; const BOTTOM_ANCHOR = '<br class="button-anchor">';
const PREVIEW_NONE = 0;
const PREVIEW_NO_IMAGE = 1;
const PREVIEW_LARGE = 2;
const PREVIEW_SMALL = 3;
/** /**
* Fetches attachment data that were generated the old way * Fetches attachment data that were generated the old way
* *
@ -654,7 +660,7 @@ class BBCode
* @return string * @return string
* @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/ */
public static function convertAttachment(string $text, int $simplehtml = self::INTERNAL, bool $tryoembed = true, array $data = [], int $uriid = 0): string public static function convertAttachment(string $text, int $simplehtml = self::INTERNAL, bool $tryoembed = true, array $data = [], int $uriid = 0, int $preview_mode = self::PREVIEW_LARGE): string
{ {
DI::profiler()->startRecording('rendering'); DI::profiler()->startRecording('rendering');
$data = $data ?: self::getAttachmentData($text); $data = $data ?: self::getAttachmentData($text);
@ -689,12 +695,18 @@ class BBCode
$return = sprintf('<div class="type-%s">', $data['type']); $return = sprintf('<div class="type-%s">', $data['type']);
} }
if ($preview_mode == self::PREVIEW_NO_IMAGE) {
unset($data['image']);
unset($data['preview']);
}
if (!empty($data['title']) && !empty($data['url'])) { if (!empty($data['title']) && !empty($data['url'])) {
$preview_class = $preview_mode == self::PREVIEW_LARGE ? 'attachment-image' : 'attachment-preview';
if (!empty($data['image']) && empty($data['text']) && ($data['type'] == 'photo')) { if (!empty($data['image']) && empty($data['text']) && ($data['type'] == 'photo')) {
$return .= sprintf('<a href="%s" target="_blank" rel="noopener noreferrer"><img src="%s" alt="" title="%s" class="attachment-image" /></a>', $data['url'], self::proxyUrl($data['image'], $simplehtml, $uriid), $data['title']); $return .= sprintf('<a href="%s" target="_blank" rel="noopener noreferrer"><img src="%s" alt="" title="%s" class="' . $preview_class . '" /></a>', $data['url'], self::proxyUrl($data['image'], $simplehtml, $uriid), $data['title']);
} else { } else {
if (!empty($data['image'])) { if (!empty($data['image'])) {
$return .= sprintf('<a href="%s" target="_blank" rel="noopener noreferrer"><img src="%s" alt="" title="%s" class="attachment-image" /></a><br>', $data['url'], self::proxyUrl($data['image'], $simplehtml, $uriid), $data['title']); $return .= sprintf('<a href="%s" target="_blank" rel="noopener noreferrer"><img src="%s" alt="" title="%s" class="' . $preview_class . '" /></a><br>', $data['url'], self::proxyUrl($data['image'], $simplehtml, $uriid), $data['title']);
} elseif (!empty($data['preview'])) { } elseif (!empty($data['preview'])) {
$return .= sprintf('<a href="%s" target="_blank" rel="noopener noreferrer"><img src="%s" alt="" title="%s" class="attachment-preview" /></a><br>', $data['url'], self::proxyUrl($data['preview'], $simplehtml, $uriid), $data['title']); $return .= sprintf('<a href="%s" target="_blank" rel="noopener noreferrer"><img src="%s" alt="" title="%s" class="attachment-preview" /></a><br>', $data['url'], self::proxyUrl($data['preview'], $simplehtml, $uriid), $data['title']);
} }

View file

@ -222,7 +222,7 @@ class Item
$content_fields['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $content_fields['raw-body']); $content_fields['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $content_fields['raw-body']);
$content_fields['raw-body'] = self::setHashtags($content_fields['raw-body']); $content_fields['raw-body'] = self::setHashtags($content_fields['raw-body']);
Post\Media::insertFromRelevantUrl($item['uri-id'], $content_fields['raw-body']); Post\Media::insertFromRelevantUrl($item['uri-id'], $content_fields['raw-body'], $fields['body'], $item['author-network']);
Post\Content::update($item['uri-id'], $content_fields); Post\Content::update($item['uri-id'], $content_fields);
} }
@ -1190,7 +1190,8 @@ class Item
$item['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $item['raw-body']); $item['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $item['raw-body']);
$item['raw-body'] = self::setHashtags($item['raw-body']); $item['raw-body'] = self::setHashtags($item['raw-body']);
Post\Media::insertFromRelevantUrl($item['uri-id'], $item['raw-body']); $author = Contact::getById($item['author-id'], ['network']);
Post\Media::insertFromRelevantUrl($item['uri-id'], $item['raw-body'], $item['body'], $author['network'] ?? '');
// Check for hashtags in the body and repair or add hashtag links // Check for hashtags in the body and repair or add hashtag links
$item['body'] = self::setHashtags($item['body']); $item['body'] = self::setHashtags($item['body']);
@ -3007,7 +3008,7 @@ class Item
$item['hashtags'] = $tags['hashtags']; $item['hashtags'] = $tags['hashtags'];
$item['mentions'] = $tags['mentions']; $item['mentions'] = $tags['mentions'];
$body = $item['body'] ?? ''; $body = $item['body'] = Post\Media::removeFromEndOfBody($item['body'] ?? '');
$fields = ['uri-id', 'uri', 'body', 'title', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink', 'network', 'has-media', 'quote-uri-id', 'post-type']; $fields = ['uri-id', 'uri', 'body', 'title', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink', 'network', 'has-media', 'quote-uri-id', 'post-type'];
@ -3328,8 +3329,9 @@ class Item
private static function addVisualAttachments(array $attachments, array $item, string $content, bool $shared): string private static function addVisualAttachments(array $attachments, array $item, string $content, bool $shared): string
{ {
DI::profiler()->startRecording('rendering'); DI::profiler()->startRecording('rendering');
$leading = ''; $leading = '';
$trailing = ''; $trailing = '';
$images = [];
// @todo In the future we should make a single for the template engine with all media in it. This allows more flexibilty. // @todo In the future we should make a single for the template engine with all media in it. This allows more flexibilty.
foreach ($attachments['visual'] as $attachment) { foreach ($attachments['visual'] as $attachment) {
@ -3384,19 +3386,19 @@ class Item
if (self::containsLink($item['body'], $src_url)) { if (self::containsLink($item['body'], $src_url)) {
continue; continue;
} }
$media = Renderer::replaceMacros(Renderer::getMarkupTemplate('content/image.tpl'), [ $images[] = ['src' => $src_url, 'preview' => $preview_url, 'attachment' => $attachment];
'$image' => [ }
'src' => $src_url, }
'preview' => $preview_url,
'attachment' => $attachment, foreach ($images as $image) {
], $media = Renderer::replaceMacros(Renderer::getMarkupTemplate('content/image.tpl'), [
]); '$image' => $image,
// On Diaspora posts the attached pictures are leading ]);
if ($item['network'] == Protocol::DIASPORA) { // On Diaspora posts the attached pictures are leading
$leading .= $media; if ($item['network'] == Protocol::DIASPORA) {
} else { $leading .= $media;
$trailing .= $media; } else {
} $trailing .= $media;
} }
} }
@ -3514,7 +3516,10 @@ class Item
} }
// @todo Use a template // @todo Use a template
$rendered = BBCode::convertAttachment('', BBCode::INTERNAL, false, $data, $uriid); $preview_mode = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'preview_mode', BBCode::PREVIEW_LARGE);
if ($preview_mode != BBCode::PREVIEW_NONE) {
$rendered = BBCode::convertAttachment('', BBCode::INTERNAL, false, $data, $uriid, $preview_mode);
}
} elseif (!self::containsLink($content, $data['url'], Post\Media::HTML)) { } elseif (!self::containsLink($content, $data['url'], Post\Media::HTML)) {
$rendered = Renderer::replaceMacros(Renderer::getMarkupTemplate('content/link.tpl'), [ $rendered = Renderer::replaceMacros(Renderer::getMarkupTemplate('content/link.tpl'), [
'$url' => $data['url'], '$url' => $data['url'],

View file

@ -66,6 +66,7 @@ class Media
* Insert a post-media record * Insert a post-media record
* *
* @param array $media * @param array $media
* @param bool $force
* @return void * @return void
*/ */
public static function insert(array $media, bool $force = false) public static function insert(array $media, bool $force = false)
@ -229,20 +230,9 @@ class Media
} }
if ($media['type'] == self::HTML) { if ($media['type'] == self::HTML) {
$data = ParseUrl::getSiteinfoCached($media['url'], false); $media = self::addPage($media);
$media['preview'] = $data['images'][0]['src'] ?? null;
$media['preview-height'] = $data['images'][0]['height'] ?? null;
$media['preview-width'] = $data['images'][0]['width'] ?? null;
$media['blurhash'] = $data['images'][0]['blurhash'] ?? null;
$media['description'] = $data['text'] ?? null;
$media['name'] = $data['title'] ?? null;
$media['author-url'] = $data['author_url'] ?? null;
$media['author-name'] = $data['author_name'] ?? null;
$media['author-image'] = $data['author_img'] ?? null;
$media['publisher-url'] = $data['publisher_url'] ?? null;
$media['publisher-name'] = $data['publisher_name'] ?? null;
$media['publisher-image'] = $data['publisher_img'] ?? null;
} }
return $media; return $media;
} }
@ -345,6 +335,31 @@ class Media
return $media; return $media;
} }
/**
* Add page infos for HTML entries
*
* @param array $media
* @return array
*/
private static function addPage(array $media): array
{
$data = ParseUrl::getSiteinfoCached($media['url'], false);
$media['preview'] = $data['images'][0]['src'] ?? null;
$media['preview-height'] = $data['images'][0]['height'] ?? null;
$media['preview-width'] = $data['images'][0]['width'] ?? null;
$media['blurhash'] = $data['images'][0]['blurhash'] ?? null;
$media['description'] = $data['text'] ?? null;
$media['name'] = $data['title'] ?? null;
$media['author-url'] = $data['author_url'] ?? null;
$media['author-name'] = $data['author_name'] ?? null;
$media['author-image'] = $data['author_img'] ?? null;
$media['publisher-url'] = $data['publisher_url'] ?? null;
$media['publisher-name'] = $data['publisher_name'] ?? null;
$media['publisher-image'] = $data['publisher_img'] ?? null;
return $media;
}
/** /**
* Fetch media data from local resources * Fetch media data from local resources
* @param array $media * @param array $media
@ -446,13 +461,14 @@ class Media
* @param string $body * @param string $body
* @return string Body without media links * @return string Body without media links
*/ */
public static function insertFromBody(int $uriid, string $body): string public static function insertFromBody(int $uriid, string $body, bool $endmatch = false): string
{ {
$endmatchpattern = $endmatch ? '\z' : '';
// Simplify image codes // Simplify image codes
$unshared_body = $body = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $body); $unshared_body = $body = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]$endmatchpattern/ism", '[img]$3[/img]', $body);
$attachments = []; $attachments = [];
if (preg_match_all("#\[url=([^\]]+?)\]\s*\[img=([^\[\]]*)\]([^\[\]]*)\[\/img\]\s*\[/url\]#ism", $body, $pictures, PREG_SET_ORDER)) { if (preg_match_all("#\[url=([^\]]+?)\]\s*\[img=([^\[\]]*)\]([^\[\]]*)\[\/img\]\s*\[/url\]$endmatchpattern#ism", $body, $pictures, PREG_SET_ORDER)) {
foreach ($pictures as $picture) { foreach ($pictures as $picture) {
if (!self::isPictureLink($picture[1], $picture[2])) { if (!self::isPictureLink($picture[1], $picture[2])) {
continue; continue;
@ -464,14 +480,14 @@ class Media
} }
} }
if (preg_match_all("/\[img=([^\[\]]*)\]([^\[\]]*)\[\/img\]/Usi", $body, $pictures, PREG_SET_ORDER)) { if (preg_match_all("/\[img=([^\[\]]*)\]([^\[\]]*)\[\/img\]$endmatchpattern/Usi", $body, $pictures, PREG_SET_ORDER)) {
foreach ($pictures as $picture) { foreach ($pictures as $picture) {
$body = str_replace($picture[0], '', $body); $body = str_replace($picture[0], '', $body);
$attachments[$picture[1]] = ['uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $picture[1], 'description' => $picture[2]]; $attachments[$picture[1]] = ['uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $picture[1], 'description' => $picture[2]];
} }
} }
if (preg_match_all("#\[url=([^\]]+?)\]\s*\[img\]([^\[]+?)\[/img\]\s*\[/url\]#ism", $body, $pictures, PREG_SET_ORDER)) { if (preg_match_all("#\[url=([^\]]+?)\]\s*\[img\]([^\[]+?)\[/img\]\s*\[/url\]$endmatchpattern#ism", $body, $pictures, PREG_SET_ORDER)) {
foreach ($pictures as $picture) { foreach ($pictures as $picture) {
if (!self::isPictureLink($picture[1], $picture[2])) { if (!self::isPictureLink($picture[1], $picture[2])) {
continue; continue;
@ -483,41 +499,58 @@ class Media
} }
} }
if (preg_match_all("/\[img\]([^\[\]]*)\[\/img\]/ism", $body, $pictures, PREG_SET_ORDER)) { if (preg_match_all("/\[img\]([^\[\]]*)\[\/img\]$endmatchpattern/ism", $body, $pictures, PREG_SET_ORDER)) {
foreach ($pictures as $picture) { foreach ($pictures as $picture) {
$body = str_replace($picture[0], '', $body); $body = str_replace($picture[0], '', $body);
$attachments[$picture[1]] = ['uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $picture[1]]; $attachments[$picture[1]] = ['uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $picture[1]];
} }
} }
if (preg_match_all("/\[audio\]([^\[\]]*)\[\/audio\]/ism", $body, $audios, PREG_SET_ORDER)) { if (preg_match_all("/\[audio\]([^\[\]]*)\[\/audio\]$endmatchpattern/ism", $body, $audios, PREG_SET_ORDER)) {
foreach ($audios as $audio) { foreach ($audios as $audio) {
$body = str_replace($audio[0], '', $body); $body = str_replace($audio[0], '', $body);
$attachments[$audio[1]] = ['uri-id' => $uriid, 'type' => self::AUDIO, 'url' => $audio[1]]; $attachments[$audio[1]] = ['uri-id' => $uriid, 'type' => self::AUDIO, 'url' => $audio[1]];
} }
} }
if (preg_match_all("/\[video\]([^\[\]]*)\[\/video\]/ism", $body, $videos, PREG_SET_ORDER)) { if (preg_match_all("/\[video\]([^\[\]]*)\[\/video\]$endmatchpattern/ism", $body, $videos, PREG_SET_ORDER)) {
foreach ($videos as $video) { foreach ($videos as $video) {
$body = str_replace($video[0], '', $body); $body = str_replace($video[0], '', $body);
$attachments[$video[1]] = ['uri-id' => $uriid, 'type' => self::VIDEO, 'url' => $video[1]]; $attachments[$video[1]] = ['uri-id' => $uriid, 'type' => self::VIDEO, 'url' => $video[1]];
} }
} }
foreach ($attachments as $attachment) { if ($uriid != 0) {
if (Post\Link::exists($uriid, $attachment['preview'] ?? $attachment['url'])) { foreach ($attachments as $attachment) {
continue; if (Post\Link::exists($uriid, $attachment['preview'] ?? $attachment['url'])) {
} continue;
}
// Only store attachments that are part of the unshared body // Only store attachments that are part of the unshared body
if (Item::containsLink($unshared_body, $attachment['preview'] ?? $attachment['url'], $attachment['type'])) { if (Item::containsLink($unshared_body, $attachment['preview'] ?? $attachment['url'], $attachment['type'])) {
self::insert($attachment); self::insert($attachment);
}
} }
} }
return trim($body); return trim($body);
} }
/**
* Remove media that is at the end of the body
*
* @param string $body
* @return string
*/
public static function removeFromEndOfBody(string $body): string
{
do {
$prebody = $body;
$body = self::insertFromBody(0, $body, true);
} while ($prebody != $body);
return $body;
}
/** /**
* Add media links from a relevant url in the body * Add media links from a relevant url in the body
* *
@ -525,7 +558,7 @@ class Media
* @param string $body * @param string $body
* @return void * @return void
*/ */
public static function insertFromRelevantUrl(int $uriid, string $body) public static function insertFromRelevantUrl(int $uriid, string $body, string $fullbody, string $network)
{ {
// Remove all hashtags and mentions // Remove all hashtags and mentions
$body = preg_replace("/([#@!])\[url\=(.*?)\](.*?)\[\/url\]/ism", '', $body); $body = preg_replace("/([#@!])\[url\=(.*?)\](.*?)\[\/url\]/ism", '', $body);
@ -534,7 +567,10 @@ class Media
if (preg_match_all("/\[url\](https?:.*?)\[\/url\]/ism", $body, $matches)) { if (preg_match_all("/\[url\](https?:.*?)\[\/url\]/ism", $body, $matches)) {
foreach ($matches[1] as $url) { foreach ($matches[1] as $url) {
Logger::info('Got page url (link without description)', ['uri-id' => $uriid, 'url' => $url]); Logger::info('Got page url (link without description)', ['uri-id' => $uriid, 'url' => $url]);
self::insert(['uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $url]); self::insert(['uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $url], false, $network);
if ($network == Protocol::DFRN) {
self::revertHTMLType($uriid, $url, $fullbody);
}
} }
} }
@ -542,11 +578,31 @@ class Media
if (preg_match_all("/\[url\=(https?:.*?)\].*?\[\/url\]/ism", $body, $matches)) { if (preg_match_all("/\[url\=(https?:.*?)\].*?\[\/url\]/ism", $body, $matches)) {
foreach ($matches[1] as $url) { foreach ($matches[1] as $url) {
Logger::info('Got page url (link with description)', ['uri-id' => $uriid, 'url' => $url]); Logger::info('Got page url (link with description)', ['uri-id' => $uriid, 'url' => $url]);
self::insert(['uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $url]); self::insert(['uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $url], false, $network);
if ($network == Protocol::DFRN) {
self::revertHTMLType($uriid, $url, $fullbody);
}
} }
} }
} }
/**
* Revert the media type of links to UNKNOWN for DFRN posts when they aren't attached
*
* @param integer $uriid
* @param string $url
* @param string $body
* @return void
*/
private static function revertHTMLType(int $uriid, string $url, string $body)
{
$attachment = BBCode::getAttachmentData($body);
if (!empty($attachment['url']) && Network::getUrlMatch($attachment['url'], $url)) {
return;
}
DBA::update('post-media', ['type' => self::UNKNOWN], ['uri-id' => $uriid, 'type' => self::HTML, 'url' => $url]);
}
/** /**
* Add media links from the attachment field * Add media links from the attachment field
* *
@ -615,7 +671,7 @@ class Media
*/ */
public static function getByURIId(int $uri_id, array $types = []) public static function getByURIId(int $uri_id, array $types = [])
{ {
$condition = ['uri-id' => $uri_id]; $condition = ["`uri-id` = ? AND `type` != ?", $uri_id, self::UNKNOWN];
if (!empty($types)) { if (!empty($types)) {
$condition = DBA::mergeConditions($condition, ['type' => $types]); $condition = DBA::mergeConditions($condition, ['type' => $types]);
@ -634,7 +690,7 @@ class Media
*/ */
public static function existsByURIId(int $uri_id, array $types = []): bool public static function existsByURIId(int $uri_id, array $types = []): bool
{ {
$condition = ['uri-id' => $uri_id]; $condition = ["`uri-id` = ? AND `type` != ?", $uri_id, self::UNKNOWN];
if (!empty($types)) { if (!empty($types)) {
$condition = DBA::mergeConditions($condition, ['type' => $types]); $condition = DBA::mergeConditions($condition, ['type' => $types]);

View file

@ -21,7 +21,9 @@
namespace Friendica\Module\Settings; namespace Friendica\Module\Settings;
use Friendica\Content\Text\BBCode;
use Friendica\Core\Hook; use Friendica\Core\Hook;
use Friendica\Core\Logger;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\Theme; use Friendica\Core\Theme;
use Friendica\Database\DBA; use Friendica\Database\DBA;
@ -55,6 +57,7 @@ class Display extends BaseSettings
$enable_dislike = !empty($_POST['enable_dislike']) ? intval($_POST['enable_dislike']) : 0; $enable_dislike = !empty($_POST['enable_dislike']) ? intval($_POST['enable_dislike']) : 0;
$display_resharer = !empty($_POST['display_resharer']) ? intval($_POST['display_resharer']) : 0; $display_resharer = !empty($_POST['display_resharer']) ? intval($_POST['display_resharer']) : 0;
$stay_local = !empty($_POST['stay_local']) ? intval($_POST['stay_local']) : 0; $stay_local = !empty($_POST['stay_local']) ? intval($_POST['stay_local']) : 0;
$preview_mode = !empty($_POST['preview_mode']) ? intval($_POST['preview_mode']) : 0;
$browser_update = !empty($_POST['browser_update']) ? intval($_POST['browser_update']) : 0; $browser_update = !empty($_POST['browser_update']) ? intval($_POST['browser_update']) : 0;
if ($browser_update != -1) { if ($browser_update != -1) {
$browser_update = $browser_update * 1000; $browser_update = $browser_update * 1000;
@ -91,6 +94,7 @@ class Display extends BaseSettings
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'system', 'display_resharer' , $display_resharer); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'system', 'display_resharer' , $display_resharer);
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'system', 'stay_local' , $stay_local); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'system', 'stay_local' , $stay_local);
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'system', 'first_day_of_week' , $first_day_of_week); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'system', 'first_day_of_week' , $first_day_of_week);
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'system', 'preview_mode' , $preview_mode);
if (in_array($theme, Theme::getAllowedList())) { if (in_array($theme, Theme::getAllowedList())) {
if ($theme == $user['theme']) { if ($theme == $user['theme']) {
@ -175,7 +179,7 @@ class Display extends BaseSettings
$enable_dislike = !DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'hide_dislike', 0); $enable_dislike = !DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'hide_dislike', 0);
$display_resharer = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'display_resharer', 0); $display_resharer = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'display_resharer', 0);
$stay_local = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'stay_local', 0); $stay_local = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'stay_local', 0);
$preview_mode = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'preview_mode', BBCode::PREVIEW_LARGE);
$first_day_of_week = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'first_day_of_week', 0); $first_day_of_week = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'first_day_of_week', 0);
$weekdays = [ $weekdays = [
@ -188,6 +192,13 @@ class Display extends BaseSettings
6 => DI::l10n()->t("Saturday") 6 => DI::l10n()->t("Saturday")
]; ];
$preview_modes = [
BBCode::PREVIEW_NONE => DI::l10n()->t('No preview'),
BBCode::PREVIEW_NO_IMAGE => DI::l10n()->t('No image'),
BBCode::PREVIEW_SMALL => DI::l10n()->t('Small Image'),
BBCode::PREVIEW_LARGE => DI::l10n()->t('Large Image'),
];
$theme_config = ''; $theme_config = '';
if ($themeconfigfile = Theme::getConfigFile($theme_selected)) { if ($themeconfigfile = Theme::getConfigFile($theme_selected)) {
require_once $themeconfigfile; require_once $themeconfigfile;
@ -222,6 +233,7 @@ class Display extends BaseSettings
'$enable_dislike' => ['enable_dislike' , DI::l10n()->t('Display the Dislike feature'), $enable_dislike, DI::l10n()->t('Display the Dislike button and dislike reactions on posts and comments.')], '$enable_dislike' => ['enable_dislike' , DI::l10n()->t('Display the Dislike feature'), $enable_dislike, DI::l10n()->t('Display the Dislike button and dislike reactions on posts and comments.')],
'$display_resharer' => ['display_resharer' , DI::l10n()->t('Display the resharer'), $display_resharer, DI::l10n()->t('Display the first resharer as icon and text on a reshared item.')], '$display_resharer' => ['display_resharer' , DI::l10n()->t('Display the resharer'), $display_resharer, DI::l10n()->t('Display the first resharer as icon and text on a reshared item.')],
'$stay_local' => ['stay_local' , DI::l10n()->t('Stay local'), $stay_local, DI::l10n()->t("Don't go to a remote system when following a contact link.")], '$stay_local' => ['stay_local' , DI::l10n()->t('Stay local'), $stay_local, DI::l10n()->t("Don't go to a remote system when following a contact link.")],
'$preview_mode' => ['preview_mode' , DI::l10n()->t('Link preview mode'), $preview_mode, 'Appearance of the link preview that is added to each post with a link.', $preview_modes, false],
'$first_day_of_week' => ['first_day_of_week', DI::l10n()->t('Beginning of week:'), $first_day_of_week, '', $weekdays, false], '$first_day_of_week' => ['first_day_of_week', DI::l10n()->t('Beginning of week:'), $first_day_of_week, '', $weekdays, false],
]); ]);

View file

@ -734,6 +734,9 @@ class Image
public function getBlurHash(): string public function getBlurHash(): string
{ {
$image = New Image($this->asString()); $image = New Image($this->asString());
if (empty($image)) {
return '';
}
$width = $image->getWidth(); $width = $image->getWidth();
$height = $image->getHeight(); $height = $image->getHeight();
@ -749,7 +752,11 @@ class Image
$row = []; $row = [];
for ($x = 0; $x < $width; ++$x) { for ($x = 0; $x < $width; ++$x) {
if ($image->isImagick()) { if ($image->isImagick()) {
$colors = $image->image->getImagePixelColor($x, $y)->getColor(); try {
$colors = $image->image->getImagePixelColor($x, $y)->getColor();
} catch (\Throwable $th) {
return '';
}
$row[] = [$colors['r'], $colors['g'], $colors['b']]; $row[] = [$colors['r'], $colors['g'], $colors['b']];
} else { } else {
$index = imagecolorat($image->image, $x, $y); $index = imagecolorat($image->image, $x, $y);

View file

@ -711,7 +711,7 @@ class DFRN
*/ */
private static function getAttachment($doc, $root, array $item) private static function getAttachment($doc, $root, array $item)
{ {
foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]) as $attachment) { foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT]) as $attachment) {
$attributes = ['rel' => 'enclosure', $attributes = ['rel' => 'enclosure',
'href' => $attachment['url'], 'href' => $attachment['url'],
'type' => $attachment['mimetype']]; 'type' => $attachment['mimetype']];

View file

@ -499,7 +499,7 @@ class Diaspora
} }
if (!($fields = self::validPosting($msg))) { if (!($fields = self::validPosting($msg))) {
Logger::warning('Invalid posting'); Logger::warning('Invalid posting', ['msg' => $msg]);
return false; return false;
} }
@ -534,7 +534,7 @@ class Diaspora
if (is_null($fields)) { if (is_null($fields)) {
$private = true; $private = true;
if (!($fields = self::validPosting($msg))) { if (!($fields = self::validPosting($msg))) {
Logger::warning('Invalid posting'); Logger::warning('Invalid posting', ['msg' => $msg]);
return false; return false;
} }
} else { } else {
@ -3387,7 +3387,7 @@ class Diaspora
$body = '### ' . html_entity_decode($title) . "\n\n" . $body; $body = '### ' . html_entity_decode($title) . "\n\n" . $body;
} }
$attachments = Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]); $attachments = Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT]);
if (!empty($attachments)) { if (!empty($attachments)) {
$body .= "\n[hr]\n"; $body .= "\n[hr]\n";
foreach ($attachments as $attachment) { foreach ($attachments as $attachment) {

View file

@ -1186,7 +1186,7 @@ class OStatus
} }
} }
foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]) as $attachment) { foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT]) as $attachment) {
$attributes = ['rel' => 'enclosure', $attributes = ['rel' => 'enclosure',
'href' => $attachment['url'], 'href' => $attachment['url'],
'type' => $attachment['mimetype']]; 'type' => $attachment['mimetype']];

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2022.12-rc\n" "Project-Id-Version: 2022.12-rc\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-12-04 06:41-0500\n" "POT-Creation-Date: 2022-12-07 07:12+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -47,7 +47,7 @@ msgstr ""
#: src/Module/Register.php:245 src/Module/Search/Directory.php:37 #: src/Module/Register.php:245 src/Module/Search/Directory.php:37
#: src/Module/Settings/Account.php:50 src/Module/Settings/Account.php:407 #: src/Module/Settings/Account.php:50 src/Module/Settings/Account.php:407
#: src/Module/Settings/Delegation.php:41 src/Module/Settings/Delegation.php:69 #: src/Module/Settings/Delegation.php:41 src/Module/Settings/Delegation.php:69
#: src/Module/Settings/Display.php:41 src/Module/Settings/Display.php:119 #: src/Module/Settings/Display.php:43 src/Module/Settings/Display.php:123
#: src/Module/Settings/Profile/Photo/Crop.php:165 #: src/Module/Settings/Profile/Photo/Crop.php:165
#: src/Module/Settings/Profile/Photo/Index.php:111 #: src/Module/Settings/Profile/Photo/Index.php:111
#: src/Module/Settings/RemoveMe.php:117 src/Module/Settings/UserExport.php:80 #: src/Module/Settings/RemoveMe.php:117 src/Module/Settings/UserExport.php:80
@ -858,7 +858,7 @@ msgstr ""
msgid "Enter user nickname: " msgid "Enter user nickname: "
msgstr "" msgstr ""
#: src/Console/User.php:182 src/Model/User.php:661 #: src/Console/User.php:182 src/Model/User.php:662
#: src/Module/Api/Twitter/ContactEndpoint.php:74 #: src/Module/Api/Twitter/ContactEndpoint.php:74
#: src/Module/Moderation/Users/Active.php:71 #: src/Module/Moderation/Users/Active.php:71
#: src/Module/Moderation/Users/Blocked.php:71 #: src/Module/Moderation/Users/Blocked.php:71
@ -1670,7 +1670,7 @@ msgstr ""
#: src/Content/Nav.php:197 src/Content/Nav.php:257 #: src/Content/Nav.php:197 src/Content/Nav.php:257
#: src/Module/BaseProfile.php:85 src/Module/BaseProfile.php:88 #: src/Module/BaseProfile.php:85 src/Module/BaseProfile.php:88
#: src/Module/BaseProfile.php:96 src/Module/BaseProfile.php:99 #: src/Module/BaseProfile.php:96 src/Module/BaseProfile.php:99
#: src/Module/Settings/Display.php:205 view/theme/frio/theme.php:242 #: src/Module/Settings/Display.php:216 view/theme/frio/theme.php:242
#: view/theme/frio/theme.php:246 #: view/theme/frio/theme.php:246
msgid "Calendar" msgid "Calendar"
msgstr "" msgstr ""
@ -1909,39 +1909,39 @@ msgstr ""
msgid "last" msgid "last"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:1003 src/Content/Text/BBCode.php:1865 #: src/Content/Text/BBCode.php:1015 src/Content/Text/BBCode.php:1877
#: src/Content/Text/BBCode.php:1866 #: src/Content/Text/BBCode.php:1878
msgid "Image/photo" msgid "Image/photo"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:1220 #: src/Content/Text/BBCode.php:1232
#, php-format #, php-format
msgid "" msgid ""
"<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s" "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:1245 src/Model/Item.php:3536 #: src/Content/Text/BBCode.php:1257 src/Model/Item.php:3539
#: src/Model/Item.php:3542 src/Model/Item.php:3543 #: src/Model/Item.php:3545 src/Model/Item.php:3546
msgid "Link to source" msgid "Link to source"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:1783 src/Content/Text/HTML.php:940 #: src/Content/Text/BBCode.php:1795 src/Content/Text/HTML.php:940
msgid "Click to open/close" msgid "Click to open/close"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:1814 #: src/Content/Text/BBCode.php:1826
msgid "$1 wrote:" msgid "$1 wrote:"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:1870 src/Content/Text/BBCode.php:1871 #: src/Content/Text/BBCode.php:1882 src/Content/Text/BBCode.php:1883
msgid "Encrypted content" msgid "Encrypted content"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:2098 #: src/Content/Text/BBCode.php:2110
msgid "Invalid source protocol" msgid "Invalid source protocol"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:2113 #: src/Content/Text/BBCode.php:2125
msgid "Invalid link protocol" msgid "Invalid link protocol"
msgstr "" msgstr ""
@ -2542,37 +2542,37 @@ msgid "Could not connect to database."
msgstr "" msgstr ""
#: src/Core/L10n.php:403 src/Model/Event.php:430 #: src/Core/L10n.php:403 src/Model/Event.php:430
#: src/Module/Settings/Display.php:183 #: src/Module/Settings/Display.php:187
msgid "Monday" msgid "Monday"
msgstr "" msgstr ""
#: src/Core/L10n.php:403 src/Model/Event.php:431 #: src/Core/L10n.php:403 src/Model/Event.php:431
#: src/Module/Settings/Display.php:184 #: src/Module/Settings/Display.php:188
msgid "Tuesday" msgid "Tuesday"
msgstr "" msgstr ""
#: src/Core/L10n.php:403 src/Model/Event.php:432 #: src/Core/L10n.php:403 src/Model/Event.php:432
#: src/Module/Settings/Display.php:185 #: src/Module/Settings/Display.php:189
msgid "Wednesday" msgid "Wednesday"
msgstr "" msgstr ""
#: src/Core/L10n.php:403 src/Model/Event.php:433 #: src/Core/L10n.php:403 src/Model/Event.php:433
#: src/Module/Settings/Display.php:186 #: src/Module/Settings/Display.php:190
msgid "Thursday" msgid "Thursday"
msgstr "" msgstr ""
#: src/Core/L10n.php:403 src/Model/Event.php:434 #: src/Core/L10n.php:403 src/Model/Event.php:434
#: src/Module/Settings/Display.php:187 #: src/Module/Settings/Display.php:191
msgid "Friday" msgid "Friday"
msgstr "" msgstr ""
#: src/Core/L10n.php:403 src/Model/Event.php:435 #: src/Core/L10n.php:403 src/Model/Event.php:435
#: src/Module/Settings/Display.php:188 #: src/Module/Settings/Display.php:192
msgid "Saturday" msgid "Saturday"
msgstr "" msgstr ""
#: src/Core/L10n.php:403 src/Model/Event.php:429 #: src/Core/L10n.php:403 src/Model/Event.php:429
#: src/Module/Settings/Display.php:182 #: src/Module/Settings/Display.php:186
msgid "Sunday" msgid "Sunday"
msgstr "" msgstr ""
@ -2874,63 +2874,63 @@ msgstr ""
msgid "Forum" msgid "Forum"
msgstr "" msgstr ""
#: src/Model/Contact.php:2831 #: src/Model/Contact.php:2849
msgid "Disallowed profile URL." msgid "Disallowed profile URL."
msgstr "" msgstr ""
#: src/Model/Contact.php:2836 src/Module/Friendica.php:82 #: src/Model/Contact.php:2854 src/Module/Friendica.php:82
msgid "Blocked domain" msgid "Blocked domain"
msgstr "" msgstr ""
#: src/Model/Contact.php:2841 #: src/Model/Contact.php:2859
msgid "Connect URL missing." msgid "Connect URL missing."
msgstr "" msgstr ""
#: src/Model/Contact.php:2850 #: src/Model/Contact.php:2868
msgid "" msgid ""
"The contact could not be added. Please check the relevant network " "The contact could not be added. Please check the relevant network "
"credentials in your Settings -> Social Networks page." "credentials in your Settings -> Social Networks page."
msgstr "" msgstr ""
#: src/Model/Contact.php:2892 #: src/Model/Contact.php:2910
msgid "The profile address specified does not provide adequate information." msgid "The profile address specified does not provide adequate information."
msgstr "" msgstr ""
#: src/Model/Contact.php:2894 #: src/Model/Contact.php:2912
msgid "No compatible communication protocols or feeds were discovered." msgid "No compatible communication protocols or feeds were discovered."
msgstr "" msgstr ""
#: src/Model/Contact.php:2897 #: src/Model/Contact.php:2915
msgid "An author or name was not found." msgid "An author or name was not found."
msgstr "" msgstr ""
#: src/Model/Contact.php:2900 #: src/Model/Contact.php:2918
msgid "No browser URL could be matched to this address." msgid "No browser URL could be matched to this address."
msgstr "" msgstr ""
#: src/Model/Contact.php:2903 #: src/Model/Contact.php:2921
msgid "" msgid ""
"Unable to match @-style Identity Address with a known protocol or email " "Unable to match @-style Identity Address with a known protocol or email "
"contact." "contact."
msgstr "" msgstr ""
#: src/Model/Contact.php:2904 #: src/Model/Contact.php:2922
msgid "Use mailto: in front of address to force email check." msgid "Use mailto: in front of address to force email check."
msgstr "" msgstr ""
#: src/Model/Contact.php:2910 #: src/Model/Contact.php:2928
msgid "" msgid ""
"The profile address specified belongs to a network which has been disabled " "The profile address specified belongs to a network which has been disabled "
"on this site." "on this site."
msgstr "" msgstr ""
#: src/Model/Contact.php:2915 #: src/Model/Contact.php:2933
msgid "" msgid ""
"Limited profile. This person will be unable to receive direct/personal " "Limited profile. This person will be unable to receive direct/personal "
"notifications from you." "notifications from you."
msgstr "" msgstr ""
#: src/Model/Contact.php:2974 #: src/Model/Contact.php:2992
msgid "Unable to retrieve contact information." msgid "Unable to retrieve contact information."
msgstr "" msgstr ""
@ -3100,44 +3100,44 @@ msgstr ""
msgid "Content warning: %s" msgid "Content warning: %s"
msgstr "" msgstr ""
#: src/Model/Item.php:3448 #: src/Model/Item.php:3451
msgid "bytes" msgid "bytes"
msgstr "" msgstr ""
#: src/Model/Item.php:3479 #: src/Model/Item.php:3482
#, php-format #, php-format
msgid "%2$s (%3$d%%, %1$d vote)" msgid "%2$s (%3$d%%, %1$d vote)"
msgid_plural "%2$s (%3$d%%, %1$d votes)" msgid_plural "%2$s (%3$d%%, %1$d votes)"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/Item.php:3481 #: src/Model/Item.php:3484
#, php-format #, php-format
msgid "%2$s (%1$d vote)" msgid "%2$s (%1$d vote)"
msgid_plural "%2$s (%1$d votes)" msgid_plural "%2$s (%1$d votes)"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/Item.php:3486 #: src/Model/Item.php:3489
#, php-format #, php-format
msgid "%d voter. Poll end: %s" msgid "%d voter. Poll end: %s"
msgid_plural "%d voters. Poll end: %s" msgid_plural "%d voters. Poll end: %s"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/Item.php:3488 #: src/Model/Item.php:3491
#, php-format #, php-format
msgid "%d voter." msgid "%d voter."
msgid_plural "%d voters." msgid_plural "%d voters."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/Item.php:3490 #: src/Model/Item.php:3493
#, php-format #, php-format
msgid "Poll end: %s" msgid "Poll end: %s"
msgstr "" msgstr ""
#: src/Model/Item.php:3524 src/Model/Item.php:3525 #: src/Model/Item.php:3527 src/Model/Item.php:3528
msgid "View on separate page" msgid "View on separate page"
msgstr "" msgstr ""
@ -3145,7 +3145,7 @@ msgstr ""
msgid "[no subject]" msgid "[no subject]"
msgstr "" msgstr ""
#: src/Model/Photo.php:1145 src/Module/Media/Photo/Upload.php:198 #: src/Model/Photo.php:1152 src/Module/Media/Photo/Upload.php:198
msgid "Wall Photos" msgid "Wall Photos"
msgstr "" msgstr ""
@ -3294,146 +3294,146 @@ msgstr ""
msgid "Contact information and Social Networks" msgid "Contact information and Social Networks"
msgstr "" msgstr ""
#: src/Model/User.php:212 src/Model/User.php:1102 #: src/Model/User.php:213 src/Model/User.php:1103
msgid "SERIOUS ERROR: Generation of security keys failed." msgid "SERIOUS ERROR: Generation of security keys failed."
msgstr "" msgstr ""
#: src/Model/User.php:570 src/Model/User.php:603 #: src/Model/User.php:571 src/Model/User.php:604
msgid "Login failed" msgid "Login failed"
msgstr "" msgstr ""
#: src/Model/User.php:635 #: src/Model/User.php:636
msgid "Not enough information to authenticate" msgid "Not enough information to authenticate"
msgstr "" msgstr ""
#: src/Model/User.php:752 #: src/Model/User.php:753
msgid "Password can't be empty" msgid "Password can't be empty"
msgstr "" msgstr ""
#: src/Model/User.php:794 #: src/Model/User.php:795
msgid "Empty passwords are not allowed." msgid "Empty passwords are not allowed."
msgstr "" msgstr ""
#: src/Model/User.php:798 #: src/Model/User.php:799
msgid "" msgid ""
"The new password has been exposed in a public data dump, please choose " "The new password has been exposed in a public data dump, please choose "
"another." "another."
msgstr "" msgstr ""
#: src/Model/User.php:802 #: src/Model/User.php:803
msgid "The password length is limited to 72 characters." msgid "The password length is limited to 72 characters."
msgstr "" msgstr ""
#: src/Model/User.php:806 #: src/Model/User.php:807
msgid "" msgid ""
"The password can't contain accentuated letters, white spaces or colons (:)" "The password can't contain accentuated letters, white spaces or colons (:)"
msgstr "" msgstr ""
#: src/Model/User.php:985 #: src/Model/User.php:986
msgid "Passwords do not match. Password unchanged." msgid "Passwords do not match. Password unchanged."
msgstr "" msgstr ""
#: src/Model/User.php:992 #: src/Model/User.php:993
msgid "An invitation is required." msgid "An invitation is required."
msgstr "" msgstr ""
#: src/Model/User.php:996 #: src/Model/User.php:997
msgid "Invitation could not be verified." msgid "Invitation could not be verified."
msgstr "" msgstr ""
#: src/Model/User.php:1004 #: src/Model/User.php:1005
msgid "Invalid OpenID url" msgid "Invalid OpenID url"
msgstr "" msgstr ""
#: src/Model/User.php:1017 src/Security/Authentication.php:241 #: src/Model/User.php:1018 src/Security/Authentication.php:241
msgid "" msgid ""
"We encountered a problem while logging in with the OpenID you provided. " "We encountered a problem while logging in with the OpenID you provided. "
"Please check the correct spelling of the ID." "Please check the correct spelling of the ID."
msgstr "" msgstr ""
#: src/Model/User.php:1017 src/Security/Authentication.php:241 #: src/Model/User.php:1018 src/Security/Authentication.php:241
msgid "The error message was:" msgid "The error message was:"
msgstr "" msgstr ""
#: src/Model/User.php:1023 #: src/Model/User.php:1024
msgid "Please enter the required information." msgid "Please enter the required information."
msgstr "" msgstr ""
#: src/Model/User.php:1037 #: src/Model/User.php:1038
#, php-format #, php-format
msgid "" msgid ""
"system.username_min_length (%s) and system.username_max_length (%s) are " "system.username_min_length (%s) and system.username_max_length (%s) are "
"excluding each other, swapping values." "excluding each other, swapping values."
msgstr "" msgstr ""
#: src/Model/User.php:1044 #: src/Model/User.php:1045
#, php-format #, php-format
msgid "Username should be at least %s character." msgid "Username should be at least %s character."
msgid_plural "Username should be at least %s characters." msgid_plural "Username should be at least %s characters."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/User.php:1048 #: src/Model/User.php:1049
#, php-format #, php-format
msgid "Username should be at most %s character." msgid "Username should be at most %s character."
msgid_plural "Username should be at most %s characters." msgid_plural "Username should be at most %s characters."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/User.php:1056 #: src/Model/User.php:1057
msgid "That doesn't appear to be your full (First Last) name." msgid "That doesn't appear to be your full (First Last) name."
msgstr "" msgstr ""
#: src/Model/User.php:1061 #: src/Model/User.php:1062
msgid "Your email domain is not among those allowed on this site." msgid "Your email domain is not among those allowed on this site."
msgstr "" msgstr ""
#: src/Model/User.php:1065 #: src/Model/User.php:1066
msgid "Not a valid email address." msgid "Not a valid email address."
msgstr "" msgstr ""
#: src/Model/User.php:1068 #: src/Model/User.php:1069
msgid "The nickname was blocked from registration by the nodes admin." msgid "The nickname was blocked from registration by the nodes admin."
msgstr "" msgstr ""
#: src/Model/User.php:1072 src/Model/User.php:1078 #: src/Model/User.php:1073 src/Model/User.php:1079
msgid "Cannot use that email." msgid "Cannot use that email."
msgstr "" msgstr ""
#: src/Model/User.php:1084 #: src/Model/User.php:1085
msgid "Your nickname can only contain a-z, 0-9 and _." msgid "Your nickname can only contain a-z, 0-9 and _."
msgstr "" msgstr ""
#: src/Model/User.php:1092 src/Model/User.php:1149 #: src/Model/User.php:1093 src/Model/User.php:1150
msgid "Nickname is already registered. Please choose another." msgid "Nickname is already registered. Please choose another."
msgstr "" msgstr ""
#: src/Model/User.php:1136 src/Model/User.php:1140 #: src/Model/User.php:1137 src/Model/User.php:1141
msgid "An error occurred during registration. Please try again." msgid "An error occurred during registration. Please try again."
msgstr "" msgstr ""
#: src/Model/User.php:1163 #: src/Model/User.php:1164
msgid "An error occurred creating your default profile. Please try again." msgid "An error occurred creating your default profile. Please try again."
msgstr "" msgstr ""
#: src/Model/User.php:1170 #: src/Model/User.php:1171
msgid "An error occurred creating your self contact. Please try again." msgid "An error occurred creating your self contact. Please try again."
msgstr "" msgstr ""
#: src/Model/User.php:1175 #: src/Model/User.php:1176
msgid "Friends" msgid "Friends"
msgstr "" msgstr ""
#: src/Model/User.php:1179 #: src/Model/User.php:1180
msgid "" msgid ""
"An error occurred creating your default contact group. Please try again." "An error occurred creating your default contact group. Please try again."
msgstr "" msgstr ""
#: src/Model/User.php:1218 #: src/Model/User.php:1219
msgid "Profile Photos" msgid "Profile Photos"
msgstr "" msgstr ""
#: src/Model/User.php:1411 #: src/Model/User.php:1412
#, php-format #, php-format
msgid "" msgid ""
"\n" "\n"
@ -3441,7 +3441,7 @@ msgid ""
"\t\t\tthe administrator of %2$s has set up an account for you." "\t\t\tthe administrator of %2$s has set up an account for you."
msgstr "" msgstr ""
#: src/Model/User.php:1414 #: src/Model/User.php:1415
#, php-format #, php-format
msgid "" msgid ""
"\n" "\n"
@ -3479,12 +3479,12 @@ msgid ""
"\t\tThank you and welcome to %4$s." "\t\tThank you and welcome to %4$s."
msgstr "" msgstr ""
#: src/Model/User.php:1447 src/Model/User.php:1554 #: src/Model/User.php:1448 src/Model/User.php:1555
#, php-format #, php-format
msgid "Registration details for %s" msgid "Registration details for %s"
msgstr "" msgstr ""
#: src/Model/User.php:1467 #: src/Model/User.php:1468
#, php-format #, php-format
msgid "" msgid ""
"\n" "\n"
@ -3500,12 +3500,12 @@ msgid ""
"\t\t" "\t\t"
msgstr "" msgstr ""
#: src/Model/User.php:1486 #: src/Model/User.php:1487
#, php-format #, php-format
msgid "Registration at %s" msgid "Registration at %s"
msgstr "" msgstr ""
#: src/Model/User.php:1510 #: src/Model/User.php:1511
#, php-format #, php-format
msgid "" msgid ""
"\n" "\n"
@ -3514,7 +3514,7 @@ msgid ""
"\t\t\t" "\t\t\t"
msgstr "" msgstr ""
#: src/Model/User.php:1518 #: src/Model/User.php:1519
#, php-format #, php-format
msgid "" msgid ""
"\n" "\n"
@ -3623,7 +3623,7 @@ msgstr ""
#: src/Module/Settings/Account.php:560 src/Module/Settings/Addons.php:81 #: src/Module/Settings/Account.php:560 src/Module/Settings/Addons.php:81
#: src/Module/Settings/Connectors.php:159 #: src/Module/Settings/Connectors.php:159
#: src/Module/Settings/Connectors.php:244 #: src/Module/Settings/Connectors.php:244
#: src/Module/Settings/Delegation.php:169 src/Module/Settings/Display.php:200 #: src/Module/Settings/Delegation.php:169 src/Module/Settings/Display.php:211
#: src/Module/Settings/Features.php:76 #: src/Module/Settings/Features.php:76
msgid "Save Settings" msgid "Save Settings"
msgstr "" msgstr ""
@ -3975,11 +3975,11 @@ msgstr ""
msgid "%s is no valid input for maximum image size" msgid "%s is no valid input for maximum image size"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:342 src/Module/Settings/Display.php:137 #: src/Module/Admin/Site.php:342 src/Module/Settings/Display.php:141
msgid "No special theme for mobile devices" msgid "No special theme for mobile devices"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:359 src/Module/Settings/Display.php:147 #: src/Module/Admin/Site.php:359 src/Module/Settings/Display.php:151
#, php-format #, php-format
msgid "%s - (Experimental)" msgid "%s - (Experimental)"
msgstr "" msgstr ""
@ -8120,12 +8120,12 @@ msgstr ""
msgid "The Photo with id %s is not available." msgid "The Photo with id %s is not available."
msgstr "" msgstr ""
#: src/Module/Photo.php:174 #: src/Module/Photo.php:178
#, php-format #, php-format
msgid "Invalid external resource with url %s." msgid "Invalid external resource with url %s."
msgstr "" msgstr ""
#: src/Module/Photo.php:176 #: src/Module/Photo.php:180
#, php-format #, php-format
msgid "Invalid photo with id %s." msgid "Invalid photo with id %s."
msgstr "" msgstr ""
@ -9529,125 +9529,145 @@ msgstr ""
msgid "No entries." msgid "No entries."
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:106 #: src/Module/Settings/Display.php:110
msgid "The theme you chose isn't available." msgid "The theme you chose isn't available."
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:145 #: src/Module/Settings/Display.php:149
#, php-format #, php-format
msgid "%s - (Unsupported)" msgid "%s - (Unsupported)"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:196
msgid "No preview"
msgstr ""
#: src/Module/Settings/Display.php:197
msgid "No image"
msgstr ""
#: src/Module/Settings/Display.php:198
msgid "Small Image"
msgstr ""
#: src/Module/Settings/Display.php:199 #: src/Module/Settings/Display.php:199
msgid "Large Image"
msgstr ""
#: src/Module/Settings/Display.php:210
msgid "Display Settings" msgid "Display Settings"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:201 #: src/Module/Settings/Display.php:212
msgid "General Theme Settings" msgid "General Theme Settings"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:202 #: src/Module/Settings/Display.php:213
msgid "Custom Theme Settings" msgid "Custom Theme Settings"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:203 #: src/Module/Settings/Display.php:214
msgid "Content Settings" msgid "Content Settings"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:204 view/theme/duepuntozero/config.php:86 #: src/Module/Settings/Display.php:215 view/theme/duepuntozero/config.php:86
#: view/theme/frio/config.php:172 view/theme/quattro/config.php:88 #: view/theme/frio/config.php:172 view/theme/quattro/config.php:88
#: view/theme/vier/config.php:136 #: view/theme/vier/config.php:136
msgid "Theme settings" msgid "Theme settings"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:211 #: src/Module/Settings/Display.php:222
msgid "Display Theme:" msgid "Display Theme:"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:212 #: src/Module/Settings/Display.php:223
msgid "Mobile Theme:" msgid "Mobile Theme:"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:215 #: src/Module/Settings/Display.php:226
msgid "Number of items to display per page:" msgid "Number of items to display per page:"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:215 src/Module/Settings/Display.php:216 #: src/Module/Settings/Display.php:226 src/Module/Settings/Display.php:227
msgid "Maximum of 100 items" msgid "Maximum of 100 items"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:216 #: src/Module/Settings/Display.php:227
msgid "Number of items to display per page when viewed from mobile device:" msgid "Number of items to display per page when viewed from mobile device:"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:217 #: src/Module/Settings/Display.php:228
msgid "Update browser every xx seconds" msgid "Update browser every xx seconds"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:217 #: src/Module/Settings/Display.php:228
msgid "Minimum of 10 seconds. Enter -1 to disable it." msgid "Minimum of 10 seconds. Enter -1 to disable it."
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:218 #: src/Module/Settings/Display.php:229
msgid "Automatic updates only at the top of the post stream pages" msgid "Automatic updates only at the top of the post stream pages"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:218 #: src/Module/Settings/Display.php:229
msgid "" msgid ""
"Auto update may add new posts at the top of the post stream pages, which can " "Auto update may add new posts at the top of the post stream pages, which can "
"affect the scroll position and perturb normal reading if it happens anywhere " "affect the scroll position and perturb normal reading if it happens anywhere "
"else the top of the page." "else the top of the page."
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:219 #: src/Module/Settings/Display.php:230
msgid "Display emoticons" msgid "Display emoticons"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:219 #: src/Module/Settings/Display.php:230
msgid "When enabled, emoticons are replaced with matching symbols." msgid "When enabled, emoticons are replaced with matching symbols."
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:220 #: src/Module/Settings/Display.php:231
msgid "Infinite scroll" msgid "Infinite scroll"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:220 #: src/Module/Settings/Display.php:231
msgid "Automatic fetch new items when reaching the page end." msgid "Automatic fetch new items when reaching the page end."
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:221 #: src/Module/Settings/Display.php:232
msgid "Enable Smart Threading" msgid "Enable Smart Threading"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:221 #: src/Module/Settings/Display.php:232
msgid "Enable the automatic suppression of extraneous thread indentation." msgid "Enable the automatic suppression of extraneous thread indentation."
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:222 #: src/Module/Settings/Display.php:233
msgid "Display the Dislike feature" msgid "Display the Dislike feature"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:222 #: src/Module/Settings/Display.php:233
msgid "Display the Dislike button and dislike reactions on posts and comments." msgid "Display the Dislike button and dislike reactions on posts and comments."
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:223 #: src/Module/Settings/Display.php:234
msgid "Display the resharer" msgid "Display the resharer"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:223 #: src/Module/Settings/Display.php:234
msgid "Display the first resharer as icon and text on a reshared item." msgid "Display the first resharer as icon and text on a reshared item."
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:224 #: src/Module/Settings/Display.php:235
msgid "Stay local" msgid "Stay local"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:224 #: src/Module/Settings/Display.php:235
msgid "Don't go to a remote system when following a contact link." msgid "Don't go to a remote system when following a contact link."
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:226 #: src/Module/Settings/Display.php:236
msgid "Link preview mode"
msgstr ""
#: src/Module/Settings/Display.php:238
msgid "Beginning of week:" msgid "Beginning of week:"
msgstr "" msgstr ""
@ -11330,7 +11350,7 @@ msgstr ""
msgid "%1$d %2$s ago" msgid "%1$d %2$s ago"
msgstr "" msgstr ""
#: src/Worker/Delivery.php:534 #: src/Worker/Delivery.php:533
msgid "(no subject)" msgid "(no subject)"
msgstr "" msgstr ""

File diff suppressed because it is too large Load diff

View file

@ -147,16 +147,9 @@ $a->strings['Album was empty.'] = 'Album ist leer.';
$a->strings['Failed to delete the photo.'] = 'Das Foto konnte nicht gelöscht werden.'; $a->strings['Failed to delete the photo.'] = 'Das Foto konnte nicht gelöscht werden.';
$a->strings['a photo'] = 'einem Foto'; $a->strings['a photo'] = 'einem Foto';
$a->strings['%1$s was tagged in %2$s by %3$s'] = '%1$s wurde von %3$s in %2$s getaggt'; $a->strings['%1$s was tagged in %2$s by %3$s'] = '%1$s wurde von %3$s in %2$s getaggt';
$a->strings['Image exceeds size limit of %s'] = 'Bildgröße überschreitet das Limit von %s';
$a->strings['Image upload didn\'t complete, please try again'] = 'Der Upload des Bildes war nicht vollständig. Bitte versuche es erneut.';
$a->strings['Image file is missing'] = 'Bilddatei konnte nicht gefunden werden.';
$a->strings['Server can\'t accept new file upload at this time, please contact your administrator'] = 'Der Server kann derzeit keine neuen Datei-Uploads akzeptieren. Bitte kontaktiere deinen Administrator.';
$a->strings['Image file is empty.'] = 'Bilddatei ist leer.';
$a->strings['Unable to process image.'] = 'Konnte das Bild nicht bearbeiten.';
$a->strings['Image upload failed.'] = 'Hochladen des Bildes gescheitert.';
$a->strings['Public access denied.'] = 'Öffentlicher Zugriff verweigert.'; $a->strings['Public access denied.'] = 'Öffentlicher Zugriff verweigert.';
$a->strings['No photos selected'] = 'Keine Bilder ausgewählt'; $a->strings['No photos selected'] = 'Keine Bilder ausgewählt';
$a->strings['Access to this item is restricted.'] = 'Zugriff zu diesem Eintrag wurde eingeschränkt.'; $a->strings['The maximum accepted image size is %s'] = 'Die maximale erlaubte Größe von Bildern beträgt %s';
$a->strings['Upload Photos'] = 'Bilder hochladen'; $a->strings['Upload Photos'] = 'Bilder hochladen';
$a->strings['New album name: '] = 'Name des neuen Albums: '; $a->strings['New album name: '] = 'Name des neuen Albums: ';
$a->strings['or select existing album:'] = 'oder wähle ein bestehendes Album:'; $a->strings['or select existing album:'] = 'oder wähle ein bestehendes Album:';
@ -385,6 +378,9 @@ $a->strings['Tag Cloud'] = 'Schlagwortwolke';
$a->strings['Provide a personal tag cloud on your profile page'] = 'Wortwolke aus den von dir verwendeten Schlagwörtern im Profil anzeigen'; $a->strings['Provide a personal tag cloud on your profile page'] = 'Wortwolke aus den von dir verwendeten Schlagwörtern im Profil anzeigen';
$a->strings['Display Membership Date'] = 'Mitgliedschaftsdatum anzeigen'; $a->strings['Display Membership Date'] = 'Mitgliedschaftsdatum anzeigen';
$a->strings['Display membership date in profile'] = 'Das Datum der Registrierung deines Accounts im Profil anzeigen'; $a->strings['Display membership date in profile'] = 'Das Datum der Registrierung deines Accounts im Profil anzeigen';
$a->strings['Advanced Calendar Settings'] = 'Erweiterte Kalender Einstellungen';
$a->strings['Allow anonymous access to your calendar'] = 'Erlaube anonymen Zugriff auf deinen Kalender';
$a->strings['Allows anonymous visitors to consult your calendar and your public events. Contact birthday events are private to you.'] = 'Anonyme Besucher können deinen Kalender öffnen und dort deine öffentliche Ereignisse einsehen. Geburtstage deiner Kontakte sind nicht öffentlich.';
$a->strings['Forums'] = 'Foren'; $a->strings['Forums'] = 'Foren';
$a->strings['External link to forum'] = 'Externer Link zum Forum'; $a->strings['External link to forum'] = 'Externer Link zum Forum';
$a->strings['show less'] = 'weniger anzeigen'; $a->strings['show less'] = 'weniger anzeigen';
@ -1083,6 +1079,7 @@ $a->strings['Command'] = 'Befehl';
$a->strings['Job Parameters'] = 'Parameter der Aufgabe'; $a->strings['Job Parameters'] = 'Parameter der Aufgabe';
$a->strings['Created'] = 'Erstellt'; $a->strings['Created'] = 'Erstellt';
$a->strings['Priority'] = 'Priorität'; $a->strings['Priority'] = 'Priorität';
$a->strings['%s is no valid input for maximum image size'] = '%s ist keine gültige Angabe der maximalen Größe von Bildern';
$a->strings['No special theme for mobile devices'] = 'Kein spezielles Theme für mobile Geräte verwenden.'; $a->strings['No special theme for mobile devices'] = 'Kein spezielles Theme für mobile Geräte verwenden.';
$a->strings['%s - (Experimental)'] = '%s - (Experimentell)'; $a->strings['%s - (Experimental)'] = '%s - (Experimentell)';
$a->strings['No community page'] = 'Keine Gemeinschaftsseite'; $a->strings['No community page'] = 'Keine Gemeinschaftsseite';
@ -1147,7 +1144,11 @@ $a->strings['Displays the menu entry for the Help pages from the navigation menu
$a->strings['Single user instance'] = 'Ein-Nutzer Instanz'; $a->strings['Single user instance'] = 'Ein-Nutzer Instanz';
$a->strings['Make this instance multi-user or single-user for the named user'] = 'Bestimmt, ob es sich bei dieser Instanz um eine Installation mit nur einen Nutzer oder mit mehreren Nutzern handelt.'; $a->strings['Make this instance multi-user or single-user for the named user'] = 'Bestimmt, ob es sich bei dieser Instanz um eine Installation mit nur einen Nutzer oder mit mehreren Nutzern handelt.';
$a->strings['Maximum image size'] = 'Maximale Bildgröße'; $a->strings['Maximum image size'] = 'Maximale Bildgröße';
$a->strings['Maximum size in bytes of uploaded images. Default is 0, which means no limits. Be aware that this setting does not affect server-side upload limits.'] = 'Maximal akzeptierte Dateigröße in Bytes eines hochzuladenden Bilds. Der Standard ist 0 und entspricht keiner Beschränkung der Dateigröße. Beachte, dass diese Einstellung nicht die serverseitigen Beschränkungen von Dateigrößen beeinflusst.'; $a->strings['Maximum size in bytes of uploaded images. Default is 0, which means no limits. You can put k, m, or g behind the desired value for KiB, MiB, GiB, respectively.
The value of <code>upload_max_filesize</code> in your <code>PHP.ini</code> needs be set to at least the desired limit.
Currently <code>upload_max_filesize</code> is set to %s (%sB)'] = 'Die maximale Größe von Bildern in Bytes. Grundeinstellung ist 0, welches keine Limitierung durch die Bildgröße bedeutet. Du kannst k, m oder g als Abkürzung hinter der Zahl angeben um KiB, MIB oder GiB zu definieren.
Der Wert der <code>1upload_max_filesize1</code> Variable in der <code>php.ini</code> Datei muss diesem Limit mindestens entsprechen.
Derzeit ist <code>3upload_max_filesize3</code> auf %s (%sB) gesetzt.';
$a->strings['Maximum image length'] = 'Maximale Bildlänge'; $a->strings['Maximum image length'] = 'Maximale Bildlänge';
$a->strings['Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits.'] = 'Maximale Länge in Pixeln der längsten Seite eines hochgeladenen Bildes. Grundeinstellung ist -1, was keine Einschränkung bedeutet.'; $a->strings['Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits.'] = 'Maximale Länge in Pixeln der längsten Seite eines hochgeladenen Bildes. Grundeinstellung ist -1, was keine Einschränkung bedeutet.';
$a->strings['JPEG image quality'] = 'Qualität des JPEG Bildes'; $a->strings['JPEG image quality'] = 'Qualität des JPEG Bildes';
@ -1331,6 +1332,8 @@ $a->strings['Show some informations regarding the needed information to operate
$a->strings['Privacy Statement Preview'] = 'Vorschau: Datenschutzerklärung'; $a->strings['Privacy Statement Preview'] = 'Vorschau: Datenschutzerklärung';
$a->strings['The Terms of Service'] = 'Die Nutzungsbedingungen'; $a->strings['The Terms of Service'] = 'Die Nutzungsbedingungen';
$a->strings['Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below.'] = 'Füge hier die Nutzungsbedingungen deines Knotens ein. Du kannst BBCode zur Formatierung verwenden. Überschriften sollten [h2] oder darunter sein.'; $a->strings['Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below.'] = 'Füge hier die Nutzungsbedingungen deines Knotens ein. Du kannst BBCode zur Formatierung verwenden. Überschriften sollten [h2] oder darunter sein.';
$a->strings['The rules'] = 'Die Regeln';
$a->strings['Enter your system rules here. Each line represents one rule.'] = 'Gib die Regeln deines Server hier ein. Jede Zeile steht für eine Regel.';
$a->strings['API endpoint %s %s is not implemented'] = 'API Endpunkt %s %s ist nicht implementiert'; $a->strings['API endpoint %s %s is not implemented'] = 'API Endpunkt %s %s ist nicht implementiert';
$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['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['Missing parameters'] = 'Fehlende Parameter'; $a->strings['Missing parameters'] = 'Fehlende Parameter';
@ -1410,8 +1413,9 @@ $a->strings['Event Starts:'] = 'Veranstaltungsbeginn:';
$a->strings['Required'] = 'Benötigt'; $a->strings['Required'] = 'Benötigt';
$a->strings['Finish date/time is not known or not relevant'] = 'Enddatum/-zeit ist nicht bekannt oder nicht relevant'; $a->strings['Finish date/time is not known or not relevant'] = 'Enddatum/-zeit ist nicht bekannt oder nicht relevant';
$a->strings['Event Finishes:'] = 'Veranstaltungsende:'; $a->strings['Event Finishes:'] = 'Veranstaltungsende:';
$a->strings['Description:'] = 'Beschreibung'; $a->strings['Title (BBCode not allowed)'] = 'Titel (BBCode nicht erlaubt)';
$a->strings['Title:'] = 'Titel:'; $a->strings['Description (BBCode allowed)'] = 'Beschreibung (BBCode erlaubt)';
$a->strings['Location (BBCode not allowed)'] = 'Ort (BBCode nicht erlaubt)';
$a->strings['Share this event'] = 'Veranstaltung teilen'; $a->strings['Share this event'] = 'Veranstaltung teilen';
$a->strings['Basic'] = 'Allgemein'; $a->strings['Basic'] = 'Allgemein';
$a->strings['This calendar format is not supported'] = 'Dieses Kalenderformat wird nicht unterstützt.'; $a->strings['This calendar format is not supported'] = 'Dieses Kalenderformat wird nicht unterstützt.';
@ -1803,6 +1807,9 @@ $a->strings['Sorry, maybe your upload is bigger than the PHP configuration allow
$a->strings['Or - did you try to upload an empty file?'] = 'Oder - hast du versucht, eine leere Datei hochzuladen?'; $a->strings['Or - did you try to upload an empty file?'] = 'Oder - hast du versucht, eine leere Datei hochzuladen?';
$a->strings['File exceeds size limit of %s'] = 'Die Datei ist größer als das erlaubte Limit von %s'; $a->strings['File exceeds size limit of %s'] = 'Die Datei ist größer als das erlaubte Limit von %s';
$a->strings['File upload failed.'] = 'Hochladen der Datei fehlgeschlagen.'; $a->strings['File upload failed.'] = 'Hochladen der Datei fehlgeschlagen.';
$a->strings['Unable to process image.'] = 'Konnte das Bild nicht bearbeiten.';
$a->strings['Image exceeds size limit of %s'] = 'Bildgröße überschreitet das Limit von %s';
$a->strings['Image upload failed.'] = 'Hochladen des Bildes gescheitert.';
$a->strings['List of all users'] = 'Liste aller Benutzerkonten'; $a->strings['List of all users'] = 'Liste aller Benutzerkonten';
$a->strings['Active'] = 'Aktive'; $a->strings['Active'] = 'Aktive';
$a->strings['List of active accounts'] = 'Liste der aktiven Benutzerkonten'; $a->strings['List of active accounts'] = 'Liste der aktiven Benutzerkonten';
@ -2059,6 +2066,10 @@ $a->strings['Remove Item Tag'] = 'Gegenstands-Tag entfernen';
$a->strings['Select a tag to remove: '] = 'Wähle ein Tag zum Entfernen aus: '; $a->strings['Select a tag to remove: '] = 'Wähle ein Tag zum Entfernen aus: ';
$a->strings['Remove'] = 'Entfernen'; $a->strings['Remove'] = 'Entfernen';
$a->strings['No contacts.'] = 'Keine Kontakte.'; $a->strings['No contacts.'] = 'Keine Kontakte.';
$a->strings['Image upload didn\'t complete, please try again'] = 'Der Upload des Bildes war nicht vollständig. Bitte versuche es erneut.';
$a->strings['Image file is missing'] = 'Bilddatei konnte nicht gefunden werden.';
$a->strings['Server can\'t accept new file upload at this time, please contact your administrator'] = 'Der Server kann derzeit keine neuen Datei-Uploads akzeptieren. Bitte kontaktiere deinen Administrator.';
$a->strings['Image file is empty.'] = 'Bilddatei ist leer.';
$a->strings['View Album'] = 'Album betrachten'; $a->strings['View Album'] = 'Album betrachten';
$a->strings['Profile not found.'] = 'Profil nicht gefunden.'; $a->strings['Profile not found.'] = 'Profil nicht gefunden.';
$a->strings['You\'re currently viewing your profile as <b>%s</b> <a href="%s" class="btn btn-sm pull-right">Cancel</a>'] = 'Du betrachtest dein Profil gerade als <b>%s</b> <a href="%s" class="btn btn-sm pull-right">Abbrechen</a>'; $a->strings['You\'re currently viewing your profile as <b>%s</b> <a href="%s" class="btn btn-sm pull-right">Cancel</a>'] = 'Du betrachtest dein Profil gerade als <b>%s</b> <a href="%s" class="btn btn-sm pull-right">Abbrechen</a>';
@ -2072,6 +2083,7 @@ $a->strings['%d year old'] = [
0 => '%d Jahr alt', 0 => '%d Jahr alt',
1 => '%d Jahre alt', 1 => '%d Jahre alt',
]; ];
$a->strings['Description:'] = 'Beschreibung';
$a->strings['Forums:'] = 'Foren:'; $a->strings['Forums:'] = 'Foren:';
$a->strings['View profile as:'] = 'Das Profil aus der Sicht von jemandem anderen betrachten:'; $a->strings['View profile as:'] = 'Das Profil aus der Sicht von jemandem anderen betrachten:';
$a->strings['View as'] = 'Betrachten als'; $a->strings['View as'] = 'Betrachten als';
@ -2086,6 +2098,8 @@ $a->strings['Friend/Connection Request'] = 'Kontaktanfrage';
$a->strings['Enter your Webfinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system, you have to subscribe to <strong>%s</strong> or <strong>%s</strong> directly on your system.'] = 'Gib entweder deine Webfinger- (user@domain.tld) oder die Profil-Adresse an. Wenn dies von deinem System nicht unterstützt wird, folge bitte <strong>%s</strong> oder <strong>%s</strong> direkt von deinem System. '; $a->strings['Enter your Webfinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system, you have to subscribe to <strong>%s</strong> or <strong>%s</strong> directly on your system.'] = 'Gib entweder deine Webfinger- (user@domain.tld) oder die Profil-Adresse an. Wenn dies von deinem System nicht unterstützt wird, folge bitte <strong>%s</strong> oder <strong>%s</strong> direkt von deinem System. ';
$a->strings['If you are not yet a member of the free social web, <a href="%s">follow this link to find a public Friendica node and join us today</a>.'] = 'Solltest du das freie Soziale Netzwerk noch nicht benutzen, kannst du <a href="%s">diesem Link folgen</a> um eine öffentliche Friendica Instanz zu finden um noch heute dem Netzwerk beizutreten.'; $a->strings['If you are not yet a member of the free social web, <a href="%s">follow this link to find a public Friendica node and join us today</a>.'] = 'Solltest du das freie Soziale Netzwerk noch nicht benutzen, kannst du <a href="%s">diesem Link folgen</a> um eine öffentliche Friendica Instanz zu finden um noch heute dem Netzwerk beizutreten.';
$a->strings['Your Webfinger address or profile URL:'] = 'Deine Webfinger Adresse oder Profil-URL'; $a->strings['Your Webfinger address or profile URL:'] = 'Deine Webfinger Adresse oder Profil-URL';
$a->strings['Restricted profile'] = 'Eingeschränktes Profil';
$a->strings['This profile has been restricted which prevents access to their public content from anonymous visitors.'] = 'Das Profil wurde eingeschränkt, dies verhindert den Zugriff auf öffentliche Beiträge durch anonyme Besucher des Profils.';
$a->strings['Scheduled'] = 'Zeitplan'; $a->strings['Scheduled'] = 'Zeitplan';
$a->strings['Content'] = 'Inhalt'; $a->strings['Content'] = 'Inhalt';
$a->strings['Remove post'] = 'Beitrag entfernen'; $a->strings['Remove post'] = 'Beitrag entfernen';
@ -2238,8 +2252,8 @@ $a->strings['Allow your profile to be searchable globally?'] = 'Darf dein Profil
$a->strings['Activate this setting if you want others to easily find and follow you. Your profile will be searchable on remote systems. This setting also determines whether Friendica will inform search engines that your profile should be indexed or not.'] = 'Aktiviere diese Einstellung, wenn du von anderen einfach gefunden und gefolgt werden möchtest. Dei Profil wird dann auf anderen Systemen leicht durchsuchbar. Außerdem regelt diese Einstellung ob Friendica Suchmaschinen mitteilen soll, ob dein Profil indiziert werden soll oder nicht.'; $a->strings['Activate this setting if you want others to easily find and follow you. Your profile will be searchable on remote systems. This setting also determines whether Friendica will inform search engines that your profile should be indexed or not.'] = 'Aktiviere diese Einstellung, wenn du von anderen einfach gefunden und gefolgt werden möchtest. Dei Profil wird dann auf anderen Systemen leicht durchsuchbar. Außerdem regelt diese Einstellung ob Friendica Suchmaschinen mitteilen soll, ob dein Profil indiziert werden soll oder nicht.';
$a->strings['Hide your contact/friend list from viewers of your profile?'] = 'Liste der Kontakte vor Betrachtern des Profil verbergen?'; $a->strings['Hide your contact/friend list from viewers of your profile?'] = 'Liste der Kontakte vor Betrachtern des Profil verbergen?';
$a->strings['A list of your contacts is displayed on your profile page. Activate this option to disable the display of your contact list.'] = 'Auf deiner Profilseite wird eine Liste deiner Kontakte angezeigt. Aktiviere diese Option wenn du das nicht möchtest.'; $a->strings['A list of your contacts is displayed on your profile page. Activate this option to disable the display of your contact list.'] = 'Auf deiner Profilseite wird eine Liste deiner Kontakte angezeigt. Aktiviere diese Option wenn du das nicht möchtest.';
$a->strings['Hide your profile details from anonymous viewers?'] = 'Profil-Details vor unbekannten Betrachtern verbergen?'; $a->strings['Hide your public content from anonymous viewers'] = 'Verbirg die öffentliche Inhalte vor anonymen Besuchern';
$a->strings['Anonymous visitors will only see your profile picture, your display name and the nickname you are using on your profile page. Your public posts and replies will still be accessible by other means.'] = 'Anonyme Besucher deines Profils werden ausschließlich dein Profilbild, deinen Namen sowie deinen Spitznamen sehen. Deine öffentlichen Beiträge und Kommentare werden weiterhin sichtbar sein.'; $a->strings['Anonymous visitors will only see your basic profile details. Your public posts and replies will still be freely accessible on the remote servers of your followers and through relays.'] = 'Anonyme Besucher deines Profils werden nur grundlegende Informationen angezeigt bekommen. Deine öffentlichen Beiträge und Kommentare werden weiterhin frei zugänglich auf den Servern deiner Kontakte und über Relays sein.';
$a->strings['Make public posts unlisted'] = 'Öffentliche Beiträge nicht listen'; $a->strings['Make public posts unlisted'] = 'Öffentliche Beiträge nicht listen';
$a->strings['Your public posts will not appear on the community pages or in search results, nor be sent to relay servers. However they can still appear on public feeds on remote servers.'] = 'Deine öffentlichen Beiträge werden nicht auf der Gemeinschaftsseite oder in den Suchergebnissen erscheinen, außerdem werden sie nicht an Relay-Server geschickt. Sie werden aber weiterhin in allen öffentlichen Feeds, auch auf entfernten Servern, erscheinen.'; $a->strings['Your public posts will not appear on the community pages or in search results, nor be sent to relay servers. However they can still appear on public feeds on remote servers.'] = 'Deine öffentlichen Beiträge werden nicht auf der Gemeinschaftsseite oder in den Suchergebnissen erscheinen, außerdem werden sie nicht an Relay-Server geschickt. Sie werden aber weiterhin in allen öffentlichen Feeds, auch auf entfernten Servern, erscheinen.';
$a->strings['Make all posted pictures accessible'] = 'Alle geposteten Bilder zugreifbar machen'; $a->strings['Make all posted pictures accessible'] = 'Alle geposteten Bilder zugreifbar machen';
@ -2355,6 +2369,10 @@ $a->strings['Add'] = 'Hinzufügen';
$a->strings['No entries.'] = 'Keine Einträge.'; $a->strings['No entries.'] = 'Keine Einträge.';
$a->strings['The theme you chose isn\'t available.'] = 'Das gewählte Theme ist nicht verfügbar'; $a->strings['The theme you chose isn\'t available.'] = 'Das gewählte Theme ist nicht verfügbar';
$a->strings['%s - (Unsupported)'] = '%s - (Nicht unterstützt)'; $a->strings['%s - (Unsupported)'] = '%s - (Nicht unterstützt)';
$a->strings['No preview'] = 'Keine Vorschau';
$a->strings['No image'] = 'Kein Bild';
$a->strings['Small Image'] = 'Kleines Bild';
$a->strings['Large Image'] = 'Große Bilder';
$a->strings['Display Settings'] = 'Anzeige-Einstellungen'; $a->strings['Display Settings'] = 'Anzeige-Einstellungen';
$a->strings['General Theme Settings'] = 'Allgemeine Theme-Einstellungen'; $a->strings['General Theme Settings'] = 'Allgemeine Theme-Einstellungen';
$a->strings['Custom Theme Settings'] = 'Benutzerdefinierte Theme-Einstellungen'; $a->strings['Custom Theme Settings'] = 'Benutzerdefinierte Theme-Einstellungen';
@ -2381,6 +2399,7 @@ $a->strings['Display the resharer'] = 'Teilenden anzeigen';
$a->strings['Display the first resharer as icon and text on a reshared item.'] = 'Zeige das Profilbild des ersten Kontakts von dem ein Beitrag geteilt wurde.'; $a->strings['Display the first resharer as icon and text on a reshared item.'] = 'Zeige das Profilbild des ersten Kontakts von dem ein Beitrag geteilt wurde.';
$a->strings['Stay local'] = 'Bleib lokal'; $a->strings['Stay local'] = 'Bleib lokal';
$a->strings['Don\'t go to a remote system when following a contact link.'] = 'Gehe nicht zu einem Remote-System, wenn einem Kontaktlink gefolgt wird'; $a->strings['Don\'t go to a remote system when following a contact link.'] = 'Gehe nicht zu einem Remote-System, wenn einem Kontaktlink gefolgt wird';
$a->strings['Link preview mode'] = 'Vorschau Modus für Links';
$a->strings['Beginning of week:'] = 'Wochenbeginn:'; $a->strings['Beginning of week:'] = 'Wochenbeginn:';
$a->strings['Additional Features'] = 'Zusätzliche Features'; $a->strings['Additional Features'] = 'Zusätzliche Features';
$a->strings['Connected Apps'] = 'Verbundene Programme'; $a->strings['Connected Apps'] = 'Verbundene Programme';
@ -2552,6 +2571,7 @@ Die E-Mail-Adresse wird nur zur Benachrichtigung des Nutzers verwendet, sie wird
$a->strings['This data is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional private data that may be transmitted to the communication partners accounts.'] = 'Diese Daten sind für die Kommunikation notwendig und werden an die Knoten der Kommunikationspartner übermittelt und dort gespeichert. Nutzer können weitere, private Angaben machen, die ebenfalls an die verwendeten Server der Kommunikationspartner übermittelt werden können.'; $a->strings['This data is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional private data that may be transmitted to the communication partners accounts.'] = 'Diese Daten sind für die Kommunikation notwendig und werden an die Knoten der Kommunikationspartner übermittelt und dort gespeichert. Nutzer können weitere, private Angaben machen, die ebenfalls an die verwendeten Server der Kommunikationspartner übermittelt werden können.';
$a->strings['At any point in time a logged in user can export their account data from the <a href="%1$s/settings/userexport">account settings</a>. If the user wants to delete their account they can do so at <a href="%1$s/settings/removeme">%1$s/settings/removeme</a>. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners.'] = 'Angemeldete Nutzer können ihre Nutzerdaten jederzeit von den <a href="%1$s/settings/userexport">Kontoeinstellungen</a> aus exportieren. Wenn ein Nutzer wünscht das Nutzerkonto zu löschen, so ist dies jederzeit unter <a href="%1$s/settings/removeme">%1$s/settings/removeme</a> möglich. Die Löschung des Nutzerkontos ist permanent. Die Löschung der Daten wird auch von den Knoten der Kommunikationspartner angefordert.'; $a->strings['At any point in time a logged in user can export their account data from the <a href="%1$s/settings/userexport">account settings</a>. If the user wants to delete their account they can do so at <a href="%1$s/settings/removeme">%1$s/settings/removeme</a>. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners.'] = 'Angemeldete Nutzer können ihre Nutzerdaten jederzeit von den <a href="%1$s/settings/userexport">Kontoeinstellungen</a> aus exportieren. Wenn ein Nutzer wünscht das Nutzerkonto zu löschen, so ist dies jederzeit unter <a href="%1$s/settings/removeme">%1$s/settings/removeme</a> möglich. Die Löschung des Nutzerkontos ist permanent. Die Löschung der Daten wird auch von den Knoten der Kommunikationspartner angefordert.';
$a->strings['Privacy Statement'] = 'Datenschutzerklärung'; $a->strings['Privacy Statement'] = 'Datenschutzerklärung';
$a->strings['Rules'] = 'Regeln';
$a->strings['Parameter uri_id is missing.'] = 'Der Parameter uri_id fehlt.'; $a->strings['Parameter uri_id is missing.'] = 'Der Parameter uri_id fehlt.';
$a->strings['User imports on closed servers can only be done by an administrator.'] = 'Auf geschlossenen Servern können ausschließlich die Administratoren Benutzerkonten importieren.'; $a->strings['User imports on closed servers can only be done by an administrator.'] = 'Auf geschlossenen Servern können ausschließlich die Administratoren Benutzerkonten importieren.';
$a->strings['Move account'] = 'Account umziehen'; $a->strings['Move account'] = 'Account umziehen';

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -20,6 +20,7 @@
{{include file="field_checkbox.tpl" field=$enable_dislike}} {{include file="field_checkbox.tpl" field=$enable_dislike}}
{{include file="field_checkbox.tpl" field=$display_resharer}} {{include file="field_checkbox.tpl" field=$display_resharer}}
{{include file="field_checkbox.tpl" field=$stay_local}} {{include file="field_checkbox.tpl" field=$stay_local}}
{{include file="field_select.tpl" field=$preview_mode}}
<h2>{{$calendar_title}}</h2> <h2>{{$calendar_title}}</h2>
{{include file="field_select.tpl" field=$first_day_of_week}} {{include file="field_select.tpl" field=$first_day_of_week}}

View file

@ -67,6 +67,7 @@
{{include file="field_checkbox.tpl" field=$enable_dislike}} {{include file="field_checkbox.tpl" field=$enable_dislike}}
{{include file="field_checkbox.tpl" field=$display_resharer}} {{include file="field_checkbox.tpl" field=$display_resharer}}
{{include file="field_checkbox.tpl" field=$stay_local}} {{include file="field_checkbox.tpl" field=$stay_local}}
{{include file="field_select.tpl" field=$preview_mode}}
</div> </div>
<div class="panel-footer"> <div class="panel-footer">
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button> <button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>