diff --git a/boot.php b/boot.php index 2ef5853e00..5815b8db1d 100644 --- a/boot.php +++ b/boot.php @@ -1,4 +1,5 @@ \r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); - /** * @brief Image storage quality. * @@ -61,8 +62,8 @@ define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); * below about 50 * */ - define ( 'JPEG_QUALITY', 100 ); + /** * $a->config['system']['png_quality'] from 0 (uncompressed) to 9 */ @@ -86,12 +87,10 @@ define ( 'PNG_QUALITY', 8 ); */ define ( 'MAX_IMAGE_LENGTH', -1 ); - /** * Not yet used */ - -define ( 'DEFAULT_DB_ENGINE', 'MyISAM' ); +define ( 'DEFAULT_DB_ENGINE', 'InnoDB' ); /** * @name SSL Policy @@ -165,7 +164,6 @@ define ( 'UPDATE_SUCCESS', 0); define ( 'UPDATE_FAILED', 1); /** @}*/ - /** * @name page/profile types * @@ -218,6 +216,20 @@ define ( 'CP_USERS_ON_SERVER', 0 ); define ( 'CP_GLOBAL_COMMUNITY', 1 ); /** @}*/ +/** + * @name Protocols + * + * Different protocols that we are storing + * @{ + */ +define('PROTOCOL_UNKNOWN', 0); +define('PROTOCOL_DFRN', 1); +define('PROTOCOL_DIASPORA', 2); +define('PROTOCOL_OSTATUS_SALMON', 3); +define('PROTOCOL_OSTATUS_FEED', 4); +define('PROTOCOL_GS_CONVERSATION', 5); +/** @}*/ + /** * @name Network * @@ -277,20 +289,16 @@ $netgroup_ids = array( NETWORK_PHANTOM => (-127), ); - /** * Maximum number of "people who like (or don't like) this" that we will list by name */ - define ( 'MAX_LIKERS', 75); /** * Communication timeout */ - define ( 'ZCURL_TIMEOUT' , (-1)); - /** * @name Notify * @@ -331,8 +339,6 @@ define ( 'TERM_CONVERSATION', 7 ); define ( 'TERM_OBJ_POST', 1 ); define ( 'TERM_OBJ_PHOTO', 2 ); - - /** * @name Namespaces * @@ -354,6 +360,7 @@ define ( 'NAMESPACE_FEED', 'http://schemas.google.com/g/2010#updates- define ( 'NAMESPACE_OSTATUS', 'http://ostatus.org/schema/1.0' ); define ( 'NAMESPACE_STATUSNET', 'http://status.net/schema/api/1/' ); define ( 'NAMESPACE_ATOM1', 'http://www.w3.org/2005/Atom' ); +define ( 'NAMESPACE_MASTODON', 'http://mastodon.social/schema/1.0' ); /* @}*/ /** @@ -443,14 +450,13 @@ define('SR_SCOPE_TAGS', 'tags'); /** * Lowest possible date time value */ - define ('NULL_DATE', '0001-01-01 00:00:00'); - // Normally this constant is defined - but not if "pcntl" isn't installed if (!defined("SIGTERM")) { define("SIGTERM", 15); } + /** * * Reverse the effect of magic_quotes_gpc if it is enabled. @@ -458,9 +464,7 @@ if (!defined("SIGTERM")) { * See http://php.net/manual/en/security.magicquotes.disabling.php * */ - function startup() { - error_reporting(E_ERROR | E_WARNING | E_PARSE); set_time_limit(0); @@ -468,7 +472,6 @@ function startup() { // This has to be quite large to deal with embedded private photos ini_set('pcre.backtrack_limit', 500000); - if (get_magic_quotes_gpc()) { $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST); while (list($key, $val) = each($process)) { @@ -484,946 +487,6 @@ function startup() { } unset($process); } - -} - -/** - * - * class: App - * - * @brief Our main application structure for the life of this page. - * - * Primarily deals with the URL that got us here - * and tries to make some sense of it, and - * stores our page contents and config storage - * and anything else that might need to be passed around - * before we spit the page out. - * - */ -class App { - - /// @TODO decide indending as a colorful mixure is ahead ... - public $module_loaded = false; - public $query_string; - public $config; - public $page; - public $profile; - public $profile_uid; - public $user; - public $cid; - public $contact; - public $contacts; - public $page_contact; - public $content; - public $data = array(); - public $error = false; - public $cmd; - public $argv; - public $argc; - public $module; - public $pager; - public $strings; - public $path; - public $hooks; - public $timezone; - public $interactive = true; - public $plugins; - public $apps = array(); - public $identities; - public $is_mobile = false; - public $is_tablet = false; - public $is_friendica_app; - public $performance = array(); - public $callstack = array(); - public $theme_info = array(); - public $backend = true; - - public $nav_sel; - - public $category; - - - // Allow themes to control internal parameters - // by changing App values in theme.php - - public $sourcename = ''; - public $videowidth = 425; - public $videoheight = 350; - public $force_max_items = 0; - public $theme_thread_allow = true; - public $theme_events_in_profile = true; - - /** - * @brief An array for all theme-controllable parameters - * - * Mostly unimplemented yet. Only options 'template_engine' and - * beyond are used. - */ - public $theme = array( - 'sourcename' => '', - 'videowidth' => 425, - 'videoheight' => 350, - 'force_max_items' => 0, - 'thread_allow' => true, - 'stylesheet' => '', - 'template_engine' => 'smarty3', - ); - - /** - * @brief An array of registered template engines ('name'=>'class name') - */ - public $template_engines = array(); - /** - * @brief An array of instanced template engines ('name'=>'instance') - */ - public $template_engine_instance = array(); - - public $process_id; - - private $ldelim = array( - 'internal' => '', - 'smarty3' => '{{' - ); - private $rdelim = array( - 'internal' => '', - 'smarty3' => '}}' - ); - - private $scheme; - private $hostname; - private $db; - - private $curl_code; - private $curl_content_type; - private $curl_headers; - - private $cached_profile_image; - private $cached_profile_picdate; - - private static $a; - - /** - * @brief App constructor. - */ - function __construct() { - - global $default_timezone; - - $hostname = ""; - - if (file_exists(".htpreconfig.php")) { - include ".htpreconfig.php"; - } - - $this->timezone = ((x($default_timezone)) ? $default_timezone : 'UTC'); - - date_default_timezone_set($this->timezone); - - $this->performance["start"] = microtime(true); - $this->performance["database"] = 0; - $this->performance["database_write"] = 0; - $this->performance["network"] = 0; - $this->performance["file"] = 0; - $this->performance["rendering"] = 0; - $this->performance["parser"] = 0; - $this->performance["marktime"] = 0; - $this->performance["markstart"] = microtime(true); - - $this->callstack["database"] = array(); - $this->callstack["database_write"] = array(); - $this->callstack["network"] = array(); - $this->callstack["file"] = array(); - $this->callstack["rendering"] = array(); - $this->callstack["parser"] = array(); - - $this->config = array(); - $this->page = array(); - $this->pager= array(); - - $this->query_string = ''; - - $this->process_id = uniqid("log", true); - - startup(); - - set_include_path( - get_include_path() . PATH_SEPARATOR - . 'include' . PATH_SEPARATOR - . 'library' . PATH_SEPARATOR - . 'library/langdet' . PATH_SEPARATOR - . '.' ); - - $this->scheme = 'http'; - - if ((x($_SERVER, 'HTTPS') && $_SERVER['HTTPS']) || - (x($_SERVER, 'HTTP_FORWARDED') && preg_match("/proto=https/", $_SERVER['HTTP_FORWARDED'])) || - (x($_SERVER, 'HTTP_X_FORWARDED_PROTO') && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') || - (x($_SERVER, 'HTTP_X_FORWARDED_SSL') && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') || - (x($_SERVER, 'FRONT_END_HTTPS') && $_SERVER['FRONT_END_HTTPS'] == 'on') || - (x($_SERVER, 'SERVER_PORT') && (intval($_SERVER['SERVER_PORT']) == 443)) // XXX: reasonable assumption, but isn't this hardcoding too much? - ) { - $this->scheme = 'https'; - } - - if (x($_SERVER, 'SERVER_NAME')) { - $this->hostname = $_SERVER['SERVER_NAME']; - - if (x($_SERVER, 'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) { - $this->hostname .= ':' . $_SERVER['SERVER_PORT']; - } - /* - * Figure out if we are running at the top of a domain - * or in a sub-directory and adjust accordingly - */ - - /// @TODO This kind of escaping breaks syntax-highlightning on CoolEdit (Midnight Commander) - $path = trim(dirname($_SERVER['SCRIPT_NAME']), '/\\'); - if (isset($path) && strlen($path) && ($path != $this->path)) { - $this->path = $path; - } - } - - if ($hostname != "") { - $this->hostname = $hostname; - } - - if (is_array($_SERVER["argv"]) && $_SERVER["argc"] > 1 && substr(end($_SERVER["argv"]), 0, 4) == "http" ) { - $this->set_baseurl(array_pop($_SERVER["argv"])); - $_SERVER["argc"] --; - } - - if ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 9) === "pagename=") { - $this->query_string = substr($_SERVER['QUERY_STRING'], 9); - - // removing trailing / - maybe a nginx problem - $this->query_string = ltrim($this->query_string, '/'); - } elseif ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 2) === "q=") { - $this->query_string = substr($_SERVER['QUERY_STRING'], 2); - - // removing trailing / - maybe a nginx problem - $this->query_string = ltrim($this->query_string, '/'); - } - - if (x($_GET, 'pagename')) { - $this->cmd = trim($_GET['pagename'], '/\\'); - } elseif (x($_GET, 'q')) { - $this->cmd = trim($_GET['q'], '/\\'); - } - - - // fix query_string - $this->query_string = str_replace($this->cmd . "&", $this->cmd . "?", $this->query_string); - - // unix style "homedir" - if (substr($this->cmd, 0, 1) === '~') { - $this->cmd = 'profile/' . substr($this->cmd, 1); - } - - // Diaspora style profile url - if (substr($this->cmd, 0, 2) === 'u/') { - $this->cmd = 'profile/' . substr($this->cmd, 2); - } - - - /* - * Break the URL path into C style argc/argv style arguments for our - * modules. Given "http://example.com/module/arg1/arg2", $this->argc - * will be 3 (integer) and $this->argv will contain: - * [0] => 'module' - * [1] => 'arg1' - * [2] => 'arg2' - * - * - * There will always be one argument. If provided a naked domain - * URL, $this->argv[0] is set to "home". - */ - - $this->argv = explode('/', $this->cmd); - $this->argc = count($this->argv); - if ((array_key_exists('0', $this->argv)) && strlen($this->argv[0])) { - $this->module = str_replace(".", "_", $this->argv[0]); - $this->module = str_replace("-", "_", $this->module); - } else { - $this->argc = 1; - $this->argv = array('home'); - $this->module = 'home'; - } - - /* - * See if there is any page number information, and initialise - * pagination - */ - - $this->pager['page'] = ((x($_GET, 'page') && intval($_GET['page']) > 0) ? intval($_GET['page']) : 1); - $this->pager['itemspage'] = 50; - $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage']; - - if ($this->pager['start'] < 0) { - $this->pager['start'] = 0; - } - $this->pager['total'] = 0; - - /* - * Detect mobile devices - */ - - $mobile_detect = new Mobile_Detect(); - $this->is_mobile = $mobile_detect->isMobile(); - $this->is_tablet = $mobile_detect->isTablet(); - - // Friendica-Client - $this->is_friendica_app = ($_SERVER['HTTP_USER_AGENT'] == "Apache-HttpClient/UNAVAILABLE (java 1.4)"); - - /* - * register template engines - */ - $dc = get_declared_classes(); - foreach ($dc as $k) { - if (in_array("ITemplateEngine", class_implements($k))){ - $this->register_template_engine($k); - } - } - - self::$a = $this; - - } - - public static function get_basepath() { - - $basepath = get_config("system", "basepath"); - - if ($basepath == "") { - $basepath = dirname(__FILE__); - } - - if ($basepath == "") { - $basepath = $_SERVER["DOCUMENT_ROOT"]; - } - - if ($basepath == "") { - $basepath = $_SERVER["PWD"]; - } - - return $basepath; - } - - function get_scheme() { - return $this->scheme; - } - - /** - * @brief Retrieves the Friendica instance base URL - * - * This function assembles the base URL from multiple parts: - * - Protocol is determined either by the request or a combination of - * system.ssl_policy and the $ssl parameter. - * - Host name is determined either by system.hostname or inferred from request - * - Path is inferred from SCRIPT_NAME - * - * Note: $ssl parameter value doesn't directly correlate with the resulting protocol - * - * @param bool $ssl Whether to append http or https under SSL_POLICY_SELFSIGN - * @return string Friendica server base URL - */ - function get_baseurl($ssl = false) { - - // Is the function called statically? - if (!(isset($this) && get_class($this) == __CLASS__)) { - return self::$a->get_baseurl($ssl); - } - - $scheme = $this->scheme; - - if (Config::get('system', 'ssl_policy') == SSL_POLICY_FULL) { - $scheme = 'https'; - } - - // Basically, we have $ssl = true on any links which can only be seen by a logged in user - // (and also the login link). Anything seen by an outsider will have it turned off. - - if (Config::get('system', 'ssl_policy') == SSL_POLICY_SELFSIGN) { - if ($ssl) { - $scheme = 'https'; - } else { - $scheme = 'http'; - } - } - - if (Config::get('config', 'hostname') != '') { - $this->hostname = Config::get('config', 'hostname'); - } - - return $scheme . "://" . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' ); - } - - /** - * @brief Initializes the baseurl components - * - * Clears the baseurl cache to prevent inconstistencies - * - * @param string $url - */ - function set_baseurl($url) { - $parsed = @parse_url($url); - - if ($parsed) { - $this->scheme = $parsed['scheme']; - - $hostname = $parsed['host']; - if (x($parsed, 'port')) { - $hostname .= ':' . $parsed['port']; - } - if (x($parsed, 'path')) { - $this->path = trim($parsed['path'], '\\/'); - } - - if (file_exists(".htpreconfig.php")) { - include ".htpreconfig.php"; - } - - if (get_config('config', 'hostname') != '') { - $this->hostname = get_config('config', 'hostname'); - } - - if (!isset($this->hostname) OR ($this->hostname == '')) { - $this->hostname = $hostname; - } - } - } - - function get_hostname() { - if (get_config('config', 'hostname') != "") { - $this->hostname = get_config('config', 'hostname'); - } - - return $this->hostname; - } - - function set_hostname($h) { - $this->hostname = $h; - } - - function set_path($p) { - $this->path = trim(trim($p), '/'); - } - - function get_path() { - return $this->path; - } - - function set_pager_total($n) { - $this->pager['total'] = intval($n); - } - - function set_pager_itemspage($n) { - $this->pager['itemspage'] = ((intval($n) > 0) ? intval($n) : 0); - $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage']; - } - - function set_pager_page($n) { - $this->pager['page'] = $n; - $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage']; - } - - function init_pagehead() { - $interval = ((local_user()) ? get_pconfig(local_user(),'system','update_interval') : 40000); - - // If the update is "deactivated" set it to the highest integer number (~24 days) - if ($interval < 0) { - $interval = 2147483647; - } - - if ($interval < 10000) { - $interval = 40000; - } - - // compose the page title from the sitename and the - // current module called - if (!$this->module == '') { - $this->page['title'] = $this->config['sitename'] . ' (' . $this->module . ')'; - } else { - $this->page['title'] = $this->config['sitename']; - } - - /* put the head template at the beginning of page['htmlhead'] - * since the code added by the modules frequently depends on it - * being first - */ - if (!isset($this->page['htmlhead'])) { - $this->page['htmlhead'] = ''; - } - - // If we're using Smarty, then doing replace_macros() will replace - // any unrecognized variables with a blank string. Since we delay - // replacing $stylesheet until later, we need to replace it now - // with another variable name - if ($this->theme['template_engine'] === 'smarty3') { - $stylesheet = $this->get_template_ldelim('smarty3') . '$stylesheet' . $this->get_template_rdelim('smarty3'); - } else { - $stylesheet = '$stylesheet'; - } - - $shortcut_icon = get_config("system", "shortcut_icon"); - if ($shortcut_icon == "") { - $shortcut_icon = "images/friendica-32.png"; - } - - $touch_icon = get_config("system", "touch_icon"); - if ($touch_icon == "") { - $touch_icon = "images/friendica-128.png"; - } - - // get data wich is needed for infinite scroll on the network page - $invinite_scroll = infinite_scroll_data($this->module); - - $tpl = get_markup_template('head.tpl'); - $this->page['htmlhead'] = replace_macros($tpl,array( - '$baseurl' => $this->get_baseurl(), // FIXME for z_path!!!! - '$local_user' => local_user(), - '$generator' => 'Friendica' . ' ' . FRIENDICA_VERSION, - '$delitem' => t('Delete this item?'), - '$showmore' => t('show more'), - '$showfewer' => t('show fewer'), - '$update_interval' => $interval, - '$shortcut_icon' => $shortcut_icon, - '$touch_icon' => $touch_icon, - '$stylesheet' => $stylesheet, - '$infinite_scroll' => $invinite_scroll, - )) . $this->page['htmlhead']; - } - - function init_page_end() { - if (!isset($this->page['end'])) { - $this->page['end'] = ''; - } - $tpl = get_markup_template('end.tpl'); - $this->page['end'] = replace_macros($tpl,array( - '$baseurl' => $this->get_baseurl() // FIXME for z_path!!!! - )) . $this->page['end']; - } - - function set_curl_code($code) { - $this->curl_code = $code; - } - - function get_curl_code() { - return $this->curl_code; - } - - function set_curl_content_type($content_type) { - $this->curl_content_type = $content_type; - } - - function get_curl_content_type() { - return $this->curl_content_type; - } - - function set_curl_headers($headers) { - $this->curl_headers = $headers; - } - - function get_curl_headers() { - return $this->curl_headers; - } - - function get_cached_avatar_image($avatar_image){ - return $avatar_image; - } - - - /** - * @brief Removes the baseurl from an url. This avoids some mixed content problems. - * - * @param string $orig_url - * - * @return string The cleaned url - */ - function remove_baseurl($orig_url){ - - // Is the function called statically? - if (!(isset($this) && get_class($this) == __CLASS__)) { - return self::$a->remove_baseurl($orig_url); - } - - // Remove the hostname from the url if it is an internal link - $nurl = normalise_link($orig_url); - $base = normalise_link($this->get_baseurl()); - $url = str_replace($base."/", "", $nurl); - - // if it is an external link return the orignal value - if ($url == normalise_link($orig_url)) { - return $orig_url; - } else { - return $url; - } - } - - /** - * @brief Register template engine class - * - * If $name is "", is used class static property $class::$name - * - * @param string $class - * @param string $name - */ - function register_template_engine($class, $name = '') { - /// @TODO Really === and not just == ? - if ($name === "") { - $v = get_class_vars( $class ); - if (x($v,"name")) $name = $v['name']; - } - if ($name === "") { - echo "template engine $class cannot be registered without a name.\n"; - killme(); - } - $this->template_engines[$name] = $class; - } - - /** - * @brief Return template engine instance. - * - * If $name is not defined, return engine defined by theme, - * or default - * - * @param strin $name Template engine name - * @return object Template Engine instance - */ - function template_engine($name = '') { - /// @TODO really type-check included? - if ($name !== "") { - $template_engine = $name; - } else { - $template_engine = 'smarty3'; - if (x($this->theme, 'template_engine')) { - $template_engine = $this->theme['template_engine']; - } - } - - if (isset($this->template_engines[$template_engine])){ - if (isset($this->template_engine_instance[$template_engine])){ - return $this->template_engine_instance[$template_engine]; - } else { - $class = $this->template_engines[$template_engine]; - $obj = new $class; - $this->template_engine_instance[$template_engine] = $obj; - return $obj; - } - } - - echo "template engine $template_engine is not registered!\n"; killme(); - } - - /** - * @brief Returns the active template engine. - * - * @return string - */ - function get_template_engine() { - return $this->theme['template_engine']; - } - - function set_template_engine($engine = 'smarty3') { - $this->theme['template_engine'] = $engine; - } - - function get_template_ldelim($engine = 'smarty3') { - return $this->ldelim[$engine]; - } - - function get_template_rdelim($engine = 'smarty3') { - return $this->rdelim[$engine]; - } - - function save_timestamp($stamp, $value) { - if (!isset($this->config['system']['profiler']) || !$this->config['system']['profiler']) { - return; - } - - $duration = (float)(microtime(true)-$stamp); - - if (!isset($this->performance[$value])) { - // Prevent ugly E_NOTICE - $this->performance[$value] = 0; - } - - $this->performance[$value] += (float)$duration; - $this->performance["marktime"] += (float)$duration; - - $callstack = $this->callstack(); - - if (!isset($this->callstack[$value][$callstack])) { - // Prevent ugly E_NOTICE - $this->callstack[$value][$callstack] = 0; - } - - $this->callstack[$value][$callstack] += (float)$duration; - - } - - /** - * @brief Log active processes into the "process" table - */ - function start_process() { - $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1); - - $command = basename($trace[0]["file"]); - - $this->remove_inactive_processes(); - - q("START TRANSACTION"); - - $r = q("SELECT `pid` FROM `process` WHERE `pid` = %d", intval(getmypid())); - if (!dbm::is_result($r)) { - q("INSERT INTO `process` (`pid`,`command`,`created`) VALUES (%d, '%s', '%s')", - intval(getmypid()), - dbesc($command), - dbesc(datetime_convert())); - } - q("COMMIT"); - } - - /** - * @brief Remove inactive processes - */ - function remove_inactive_processes() { - q("START TRANSACTION"); - - $r = q("SELECT `pid` FROM `process`"); - if (dbm::is_result($r)) { - foreach ($r AS $process) { - if (!posix_kill($process["pid"], 0)) { - q("DELETE FROM `process` WHERE `pid` = %d", intval($process["pid"])); - } - } - } - q("COMMIT"); - } - - /** - * @brief Remove the active process from the "process" table - */ - function end_process() { - q("DELETE FROM `process` WHERE `pid` = %d", intval(getmypid())); - } - - /** - * @brief Returns a string with a callstack. Can be used for logging. - * - * @return string - */ - function callstack() { - $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 6); - - // We remove the first two items from the list since they contain data that we don't need. - array_shift($trace); - array_shift($trace); - - $callstack = array(); - foreach ($trace AS $func) { - $callstack[] = $func["function"]; - } - - return implode(", ", $callstack); - } - - function get_useragent() { - return - FRIENDICA_PLATFORM . " '" . - FRIENDICA_CODENAME . "' " . - FRIENDICA_VERSION . "-" . - DB_UPDATE_VERSION . "; " . - $this->get_baseurl(); - } - - function is_friendica_app() { - return $this->is_friendica_app; - } - - /** - * @brief Checks if the site is called via a backend process - * - * This isn't a perfect solution. But we need this check very early. - * So we cannot wait until the modules are loaded. - * - * @return bool Is it a known backend? - */ - function is_backend() { - static $backends = array(); - $backends[] = "_well_known"; - $backends[] = "api"; - $backends[] = "dfrn_notify"; - $backends[] = "fetch"; - $backends[] = "hcard"; - $backends[] = "hostxrd"; - $backends[] = "nodeinfo"; - $backends[] = "noscrape"; - $backends[] = "p"; - $backends[] = "poco"; - $backends[] = "post"; - $backends[] = "proxy"; - $backends[] = "pubsub"; - $backends[] = "pubsubhubbub"; - $backends[] = "receive"; - $backends[] = "rsd_xml"; - $backends[] = "salmon"; - $backends[] = "statistics_json"; - $backends[] = "xrd"; - - // Check if current module is in backend or backend flag is set - return (in_array($this->module, $backends) || $this->backend); - } - - /** - * @brief Checks if the maximum number of database processes is reached - * - * @return bool Is the limit reached? - */ - function max_processes_reached() { - - if ($this->is_backend()) { - $process = "backend"; - $max_processes = get_config('system', 'max_processes_backend'); - if (intval($max_processes) == 0) { - $max_processes = 5; - } - } else { - $process = "frontend"; - $max_processes = get_config('system', 'max_processes_frontend'); - if (intval($max_processes) == 0) { - $max_processes = 20; - } - } - - $processlist = dbm::processlist(); - if ($processlist["list"] != "") { - logger("Processcheck: Processes: ".$processlist["amount"]." - Processlist: ".$processlist["list"], LOGGER_DEBUG); - - if ($processlist["amount"] > $max_processes) { - logger("Processcheck: Maximum number of processes for ".$process." tasks (".$max_processes.") reached.", LOGGER_DEBUG); - return true; - } - } - return false; - } - - /** - * @brief Checks if the maximum load is reached - * - * @return bool Is the load reached? - */ - function maxload_reached() { - - if ($this->is_backend()) { - $process = "backend"; - $maxsysload = intval(get_config('system', 'maxloadavg')); - if ($maxsysload < 1) { - $maxsysload = 50; - } - } else { - $process = "frontend"; - $maxsysload = intval(get_config('system','maxloadavg_frontend')); - if ($maxsysload < 1) { - $maxsysload = 50; - } - } - - $load = current_load(); - if ($load) { - if (intval($load) > $maxsysload) { - logger('system: load '.$load.' for '.$process.' tasks ('.$maxsysload.') too high.'); - return true; - } - } - return false; - } - - function proc_run($args) { - - if (!function_exists("proc_open")) { - return; - } - - // If the last worker fork was less than 10 seconds before then don't fork another one. - // This should prevent the forking of masses of workers. - $cachekey = "app:proc_run:started"; - $result = Cache::get($cachekey); - - if (!is_null($result) AND (time() - $result) < 10) { - return; - } - - // Set the timestamp of the last proc_run - Cache::set($cachekey, time(), CACHE_MINUTE); - - array_unshift($args, ((x($this->config,'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php')); - - // add baseurl to args. cli scripts can't construct it - $args[] = $this->get_baseurl(); - - for ($x = 0; $x < count($args); $x ++) { - $args[$x] = escapeshellarg($args[$x]); - } - - $cmdline = implode($args, " "); - - if (get_config('system', 'proc_windows')) { - $resource = proc_open('cmd /c start /b ' . $cmdline, array(), $foo, dirname(__FILE__)); - } else { - $resource = proc_open($cmdline . " &", array(), $foo, dirname(__FILE__)); - } - if (!is_resource($resource)) { - logger('We got no resource for command '.$cmdline, LOGGER_DEBUG); - return; - } - proc_close($resource); - } - - /** - * @brief Returns the system user that is executing the script - * - * This mostly returns something like "www-data". - * - * @return string system username - */ - static function systemuser() { - if (!function_exists('posix_getpwuid') OR !function_exists('posix_geteuid')) { - return ''; - } - - $processUser = posix_getpwuid(posix_geteuid()); - return $processUser['name']; - } - - /** - * @brief Checks if a given directory is usable for the system - * - * @return boolean the directory is usable - */ - static function directory_usable($directory) { - - if ($directory == '') { - logger("Directory is empty. This shouldn't happen.", LOGGER_DEBUG); - return false; - } - - if (!file_exists($directory)) { - logger('Path "'.$directory.'" does not exist for user '.self::systemuser(), LOGGER_DEBUG); - return false; - } - if (is_file($directory)) { - logger('Path "'.$directory.'" is a file for user '.self::systemuser(), LOGGER_DEBUG); - return false; - } - if (!is_dir($directory)) { - logger('Path "'.$directory.'" is not a directory for user '.self::systemuser(), LOGGER_DEBUG); - return false; - } - if (!is_writable($directory)) { - logger('Path "'.$directory.'" is not writable for user '.self::systemuser(), LOGGER_DEBUG); - return false; - } - return true; - } } /** @@ -1436,7 +499,6 @@ function get_app() { return $a; } - /** * @brief Multi-purpose function to check variable state. * @@ -1451,7 +513,7 @@ function get_app() { * * @return bool|int */ -function x($s,$k = NULL) { +function x($s, $k = NULL) { if ($k != NULL) { if ((is_array($s)) && (array_key_exists($k, $s))) { if ($s[$k]) { @@ -1471,7 +533,6 @@ function x($s,$k = NULL) { } } - /** * @brief Called from db initialisation if db is dead. */ @@ -1481,7 +542,6 @@ function system_unavailable() { killme(); } - function clean_urls() { $a = get_app(); return true; @@ -1490,7 +550,7 @@ function clean_urls() { function z_path() { $base = App::get_baseurl(); - if (! clean_urls()) { + if (!clean_urls()) { $base .= '/?q='; } @@ -1517,7 +577,7 @@ function z_root() { * @return string */ function absurl($path) { - if (strpos($path,'/') === 0) { + if (strpos($path, '/') === 0) { return z_path() . $path; } return $path; @@ -1534,25 +594,23 @@ function is_ajax() { function check_db() { - $build = get_config('system','build'); - if (! x($build)) { - set_config('system','build',DB_UPDATE_VERSION); + $build = get_config('system', 'build'); + if (!x($build)) { + set_config('system', 'build', DB_UPDATE_VERSION); $build = DB_UPDATE_VERSION; } if ($build != DB_UPDATE_VERSION) { proc_run(PRIORITY_CRITICAL, 'include/dbupdate.php'); } - } - /** * Sets the base url for use in cmdline programs which don't have * $_SERVER variables */ function check_url(App $a) { - $url = get_config('system','url'); + $url = get_config('system', 'url'); // if the url isn't set or the stored url is radically different // than the currently visited url, store the current value accordingly. @@ -1560,24 +618,23 @@ function check_url(App $a) { // and www.example.com vs example.com. // We will only change the url to an ip address if there is no existing setting - if (! x($url)) { - $url = set_config('system','url',App::get_baseurl()); + if (!x($url)) { + $url = set_config('system', 'url', App::get_baseurl()); } - if ((! link_compare($url,App::get_baseurl())) && (! preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/",$a->get_hostname))) { - $url = set_config('system','url',App::get_baseurl()); + if ((!link_compare($url, App::get_baseurl())) && (!preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/", $a->get_hostname))) { + $url = set_config('system', 'url', App::get_baseurl()); } return; } - /** * @brief Automatic database updates */ function update_db(App $a) { - $build = get_config('system','build'); - if (! x($build)) { - $build = set_config('system','build',DB_UPDATE_VERSION); + $build = get_config('system', 'build'); + if (!x($build)) { + $build = set_config('system', 'build', DB_UPDATE_VERSION); } if ($build != DB_UPDATE_VERSION) { @@ -1588,7 +645,6 @@ function update_db(App $a) { // We're reporting a different version than what is currently installed. // Run any existing update scripts to bring the database up to current. - // make sure that boot.php and update.php are the same release, we might be // updating right this very second and the correct version of the update.php // file may not be here yet. This can happen on a very busy site. @@ -1596,12 +652,12 @@ function update_db(App $a) { if (DB_UPDATE_VERSION == UPDATE_VERSION) { // Compare the current structure with the defined structure - $t = get_config('database','dbupdate_'.DB_UPDATE_VERSION); + $t = get_config('database', 'dbupdate_' . DB_UPDATE_VERSION); if ($t !== false) { return; } - set_config('database','dbupdate_'.DB_UPDATE_VERSION, time()); + set_config('database', 'dbupdate_' . DB_UPDATE_VERSION, time()); // run old update routine (wich could modify the schema and // conflits with new routine) @@ -1625,7 +681,7 @@ function update_db(App $a) { ); return; } else { - set_config('database','dbupdate_'.DB_UPDATE_VERSION, 'success'); + set_config('database', 'dbupdate_' . DB_UPDATE_VERSION, 'success'); } // run any left update_nnnn functions in update.php @@ -1649,15 +705,14 @@ function run_update_function($x) { // We want exactly one process to run the update command. // So store the fact that we're taking responsibility // after first checking to see if somebody else already has. - // If the update fails or times-out completely you may need to // delete the config entry to try again. - $t = get_config('database','update_' . $x); + $t = get_config('database', 'update_' . $x); if ($t !== false) { return false; } - set_config('database','update_' . $x, time()); + set_config('database', 'update_' . $x, time()); // call the specific update @@ -1672,13 +727,13 @@ function run_update_function($x) { ); return false; } else { - set_config('database','update_' . $x, 'success'); - set_config('system','build', $x + 1); + set_config('database', 'update_' . $x, 'success'); + set_config('system', 'build', $x + 1); return true; } } else { - set_config('database','update_' . $x, 'success'); - set_config('system','build', $x + 1); + set_config('database', 'update_' . $x, 'success'); + set_config('system', 'build', $x + 1); return true; } return true; @@ -1707,11 +762,11 @@ function check_plugins(App $a) { $installed = array(); } - $plugins = get_config('system','addon'); + $plugins = get_config('system', 'addon'); $plugins_arr = array(); if ($plugins) { - $plugins_arr = explode(',',str_replace(' ', '',$plugins)); + $plugins_arr = explode(',', str_replace(' ', '', $plugins)); } $a->plugins = $plugins_arr; @@ -1720,7 +775,7 @@ function check_plugins(App $a) { if (count($installed)) { foreach ($installed as $i) { - if (! in_array($i['name'],$plugins_arr)) { + if (!in_array($i['name'], $plugins_arr)) { uninstall_plugin($i['name']); } else { $installed_arr[] = $i['name']; @@ -1730,20 +785,18 @@ function check_plugins(App $a) { if (count($plugins_arr)) { foreach ($plugins_arr as $p) { - if (! in_array($p,$installed_arr)) { + if (!in_array($p, $installed_arr)) { install_plugin($p); } } } - load_hooks(); return; } -function get_guid($size=16, $prefix = "") { - +function get_guid($size = 16, $prefix = "") { if ($prefix == "") { $a = get_app(); $prefix = hash("crc32", $a->get_hostname()); @@ -1776,7 +829,7 @@ function get_guid($size=16, $prefix = "") { * @hooks 'login_hook' * string $o */ -function login($register = false, $hiddens=false) { +function login($register = false, $hiddens = false) { $a = get_app(); $o = ""; $reg = false; @@ -1787,14 +840,14 @@ function login($register = false, $hiddens=false) { ); } - $noid = get_config('system','no_openid'); + $noid = get_config('system', 'no_openid'); $dest_url = $a->query_string; if (local_user()) { $tpl = get_markup_template("logout.tpl"); } else { - $a->page['htmlhead'] .= replace_macros(get_markup_template("login_head.tpl"),array( + $a->page['htmlhead'] .= replace_macros(get_markup_template("login_head.tpl"), array( '$baseurl' => $a->get_baseurl(true) )); @@ -1828,10 +881,9 @@ function login($register = false, $hiddens=false) { '$privacytitle' => t('Website Privacy Policy'), '$privacylink' => t('privacy policy'), - )); - call_hooks('login_hook',$o); + call_hooks('login_hook', $o); return $o; } @@ -1840,7 +892,6 @@ function login($register = false, $hiddens=false) { * @brief Used to end the current process, after saving session state. */ function killme() { - if (!get_app()->is_backend()) { session_write_close(); } @@ -1853,14 +904,13 @@ function killme() { */ function goaway($s) { if (!strstr(normalise_link($s), "http://")) { - $s = App::get_baseurl()."/".$s; + $s = App::get_baseurl() . "/" . $s; } header("Location: $s"); killme(); } - /** * @brief Returns the user id of locally logged in user or false. * @@ -1902,7 +952,7 @@ function public_contact() { * @return int|bool visitor_id or false */ function remote_user() { - if ((x($_SESSION,'authenticated')) && (x($_SESSION,'visitor_id'))) { + if ((x($_SESSION, 'authenticated')) && (x($_SESSION, 'visitor_id'))) { return intval($_SESSION['visitor_id']); } return false; @@ -1917,7 +967,7 @@ function remote_user() { */ function notice($s) { $a = get_app(); - if (! x($_SESSION,'sysmsg')) { + if (!x($_SESSION, 'sysmsg')) { $_SESSION['sysmsg'] = array(); } if ($a->interactive) { @@ -1935,11 +985,11 @@ function notice($s) { function info($s) { $a = get_app(); - if (local_user() AND get_pconfig(local_user(),'system','ignore_info')) { + if (local_user() AND get_pconfig(local_user(), 'system', 'ignore_info')) { return; } - if (! x($_SESSION,'sysmsg_info')) { + if (!x($_SESSION, 'sysmsg_info')) { $_SESSION['sysmsg_info'] = array(); } if ($a->interactive) { @@ -1947,7 +997,6 @@ function info($s) { } } - /** * @brief Wrapper around config to limit the text length of an incoming message * @@ -1955,12 +1004,12 @@ function info($s) { */ function get_max_import_size() { $a = get_app(); - return ((x($a->config,'max_import_size')) ? $a->config['max_import_size'] : 0 ); + return ((x($a->config, 'max_import_size')) ? $a->config['max_import_size'] : 0 ); } /** * @brief Wrap calls to proc_close(proc_open()) and call hook - * so plugins can take part in process :) + * so plugins can take part in process :) * * @param (integer|array) priority or parameter array, $cmd atrings are deprecated and are ignored * @@ -1971,9 +1020,9 @@ function get_max_import_size() { * @note $cmd and string args are surrounded with "" * * @hooks 'proc_run' - * array $arr + * array $arr */ -function proc_run($cmd){ +function proc_run($cmd) { $a = get_app(); @@ -2006,7 +1055,7 @@ function proc_run($cmd){ $arr = array('args' => $args, 'run_cmd' => true); call_hooks("proc_run", $arr); - if (!$arr['run_cmd'] OR !count($args)) { + if (!$arr['run_cmd'] OR ! count($args)) { return; } @@ -2028,8 +1077,7 @@ function proc_run($cmd){ array_shift($argv); $parameters = json_encode($argv); - $found = q("SELECT `id` FROM `workerqueue` WHERE `parameter` = '%s'", - dbesc($parameters)); + $found = q("SELECT `id` FROM `workerqueue` WHERE `parameter` = '%s'", dbesc($parameters)); if (!dbm::is_result($found)) { q("INSERT INTO `workerqueue` (`parameter`, `created`, `priority`) @@ -2065,7 +1113,7 @@ function proc_run($cmd){ $a->proc_run($args); } -function current_theme(){ +function current_theme() { $app_base_themes = array('duepuntozero', 'dispy', 'quattro'); $a = get_app(); @@ -2087,7 +1135,7 @@ function current_theme(){ // This works only if the user is on the same server if ($page_theme && local_user() && (local_user() != $a->profile_uid)) { - if (get_pconfig(local_user(),'system','always_my_theme')) { + if (get_pconfig(local_user(), 'system', 'always_my_theme')) { $page_theme = null; } } @@ -2097,7 +1145,7 @@ function current_theme(){ $is_mobile = $a->is_mobile || $a->is_tablet; $standard_system_theme = Config::get('system', 'theme', ''); - $standard_theme_name = ((isset($_SESSION) && x($_SESSION,'theme')) ? $_SESSION['theme'] : $standard_system_theme); + $standard_theme_name = ((isset($_SESSION) && x($_SESSION, 'theme')) ? $_SESSION['theme'] : $standard_system_theme); if ($is_mobile) { if (isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) { @@ -2108,7 +1156,7 @@ function current_theme(){ if ($system_theme == '') { $system_theme = $standard_system_theme; } - $theme_name = ((isset($_SESSION) && x($_SESSION,'mobile-theme')) ? $_SESSION['mobile-theme'] : $system_theme); + $theme_name = ((isset($_SESSION) && x($_SESSION, 'mobile-theme')) ? $_SESSION['mobile-theme'] : $system_theme); if ($theme_name === '---') { // user has selected to have the mobile theme be the same as the normal one @@ -2130,21 +1178,21 @@ function current_theme(){ } if ($theme_name && - (file_exists('view/theme/' . $theme_name . '/style.css') || - file_exists('view/theme/' . $theme_name . '/style.php'))) { + (file_exists('view/theme/' . $theme_name . '/style.css') || + file_exists('view/theme/' . $theme_name . '/style.php'))) { return($theme_name); } foreach ($app_base_themes as $t) { if (file_exists('view/theme/' . $t . '/style.css') || - file_exists('view/theme/' . $t . '/style.php')) { + file_exists('view/theme/' . $t . '/style.php')) { return($t); } } - $fallback = array_merge(glob('view/theme/*/style.css'),glob('view/theme/*/style.php')); + $fallback = array_merge(glob('view/theme/*/style.css'), glob('view/theme/*/style.php')); if (count($fallback)) { - return (str_replace('view/theme/','', substr($fallback[0],0,-10))); + return (str_replace('view/theme/', '', substr($fallback[0], 0, -10))); } /// @TODO No final return statement? @@ -2164,13 +1212,13 @@ function current_theme_url() { $opts = (($a->profile_uid) ? '?f=&puid=' . $a->profile_uid : ''); if (file_exists('view/theme/' . $t . '/style.php')) { - return('view/theme/'.$t.'/style.pcss'.$opts); + return('view/theme/' . $t . '/style.pcss' . $opts); } - return('view/theme/'.$t.'/style.css'); + return('view/theme/' . $t . '/style.css'); } -function feed_birthday($uid,$tz) { +function feed_birthday($uid, $tz) { /** * @@ -2190,11 +1238,9 @@ function feed_birthday($uid,$tz) { * 6:00PM the day before, but that will correspond to midnight to the birthday person. * */ - - $birthday = ''; - if (! strlen($tz)) { + if (!strlen($tz)) { $tz = 'UTC'; } @@ -2203,16 +1249,16 @@ function feed_birthday($uid,$tz) { ); if (dbm::is_result($p)) { - $tmp_dob = substr($p[0]['dob'],5); + $tmp_dob = substr($p[0]['dob'], 5); if (intval($tmp_dob)) { - $y = datetime_convert($tz,$tz,'now','Y'); + $y = datetime_convert($tz, $tz, 'now', 'Y'); $bd = $y . '-' . $tmp_dob . ' 00:00'; $t_dob = strtotime($bd); - $now = strtotime(datetime_convert($tz,$tz,'now')); + $now = strtotime(datetime_convert($tz, $tz, 'now')); if ($t_dob < $now) { $bd = $y + 1 . '-' . $tmp_dob . ' 00:00'; } - $birthday = datetime_convert($tz,'UTC',$bd,ATOM_TIME); + $birthday = datetime_convert($tz, 'UTC', $bd, ATOM_TIME); } } @@ -2230,7 +1276,7 @@ function is_site_admin() { $adminlist = explode(",", str_replace(" ", "", $a->config['admin_email'])); //if(local_user() && x($a->user,'email') && x($a->config,'admin_email') && ($a->user['email'] === $a->config['admin_email'])) - if (local_user() && x($a->user,'email') && x($a->config,'admin_email') && in_array($a->user['email'], $adminlist)) { + if (local_user() && x($a->user, 'email') && x($a->config, 'admin_email') && in_array($a->user['email'], $adminlist)) { return true; } return false; @@ -2252,7 +1298,7 @@ function build_querystring($params, $name = null) { if ($name == null) { $ret .= build_querystring($val, $key); } else { - $ret .= build_querystring($val, $name."[$key]"); + $ret .= build_querystring($val, $name . "[$key]"); } } else { $val = urlencode($val); @@ -2300,10 +1346,10 @@ function explode_querystring($query) { } /** -* Returns the complete URL of the current page, e.g.: http(s)://something.com/network -* -* Taken from http://webcheatsheet.com/php/get_current_page_url.php -*/ + * Returns the complete URL of the current page, e.g.: http(s)://something.com/network + * + * Taken from http://webcheatsheet.com/php/get_current_page_url.php + */ function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") { @@ -2313,9 +1359,9 @@ function curPageURL() { $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80" && $_SERVER["SERVER_PORT"] != "443") { - $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; + $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"]; } else { - $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; + $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; } return $pageURL; } @@ -2324,7 +1370,7 @@ function random_digits($digits) { $rn = ''; for ($i = 0; $i < $digits; $i++) { /// @TODO rand() is different to mt_rand() and maybe lesser "random" - $rn .= rand(0,9); + $rn .= rand(0, 9); } return $rn; } @@ -2342,7 +1388,7 @@ function get_server() { function get_cachefile($file, $writemode = true) { $cache = get_itemcachepath(); - if ((! $cache) || (! is_dir($cache))) { + if ((!$cache) || (!is_dir($cache))) { return(""); } @@ -2375,15 +1421,15 @@ function clear_cache($basepath = "", $path = "") { return; } - $cachetime = (int)get_config('system','itemcache_duration'); + $cachetime = (int) get_config('system', 'itemcache_duration'); if ($cachetime == 0) { $cachetime = 86400; } - if (is_writable($path)){ + if (is_writable($path)) { if ($dh = opendir($path)) { while (($file = readdir($dh)) !== false) { - $fullpath = $path."/".$file; + $fullpath = $path . "/" . $file; if ((filetype($fullpath) == "dir") and ($file != ".") and ($file != "..")) { clear_cache($basepath, $fullpath); } @@ -2398,12 +1444,12 @@ function clear_cache($basepath = "", $path = "") { function get_itemcachepath() { // Checking, if the cache is deactivated - $cachetime = (int)get_config('system','itemcache_duration'); + $cachetime = (int) get_config('system', 'itemcache_duration'); if ($cachetime < 0) { return ""; } - $itemcache = get_config('system','itemcache'); + $itemcache = get_config('system', 'itemcache'); if (($itemcache != "") AND App::directory_usable($itemcache)) { return $itemcache; } @@ -2411,7 +1457,7 @@ function get_itemcachepath() { $temppath = get_temppath(); if ($temppath != "") { - $itemcache = $temppath."/itemcache"; + $itemcache = $temppath . "/itemcache"; if (!file_exists($itemcache) && !is_dir($itemcache)) { mkdir($itemcache); } @@ -2430,7 +1476,7 @@ function get_itemcachepath() { * @return string Spool path */ function get_spoolpath() { - $spoolpath = get_config('system','spoolpath'); + $spoolpath = get_config('system', 'spoolpath'); if (($spoolpath != "") AND App::directory_usable($spoolpath)) { // We have a spool path and it is usable return $spoolpath; @@ -2441,7 +1487,7 @@ function get_spoolpath() { if ($temppath != "") { // To avoid any interferences with other systems we create our own directory - $spoolpath = $temppath."/spool"; + $spoolpath = $temppath . "/spool"; if (!is_dir($spoolpath)) { mkdir($spoolpath); } @@ -2477,7 +1523,7 @@ function get_temppath() { // Check if it is usable if (($temppath != "") AND App::directory_usable($temppath)) { // To avoid any interferences with other systems we create our own directory - $new_temppath = $temppath."/".$a->get_hostname(); + $new_temppath = $temppath . "/" . $a->get_hostname(); if (!is_dir($new_temppath)) { /// @TODO There is a mkdir()+chmod() upwards, maybe generalize this (+ configurable) into a function/method? mkdir($new_temppath); @@ -2523,7 +1569,7 @@ function validate_include(&$file) { return false; } - $file = str_replace(getcwd()."/", "", $file, $count); + $file = str_replace(getcwd() . "/", "", $file, $count); if ($count != 1) { return false; } @@ -2575,7 +1621,7 @@ function argc() { * @return string Value of the argv key */ function argv($x) { - if (array_key_exists($x,get_app()->argv)) { + if (array_key_exists($x, get_app()->argv)) { return get_app()->argv[$x]; } @@ -2592,12 +1638,12 @@ function argv($x) { * * @param string $module The name of the module (e.g. "network") * @return array Of infinite scroll data - * 'pageno' => $pageno The number of the actual page - * 'reload_uri' => $reload_uri The URI of the content we have to load + * 'pageno' => $pageno The number of the actual page + * 'reload_uri' => $reload_uri The URI of the content we have to load */ function infinite_scroll_data($module) { - if (get_pconfig(local_user(),'system','infinite_scroll') + if (get_pconfig(local_user(), 'system', 'infinite_scroll') AND ($module == "network") AND ($_GET["mode"] != "minimal")) { // get the page number @@ -2616,7 +1662,7 @@ function infinite_scroll_data($module) { } } - if (($a->page_offset != "") AND !strstr($reload_uri, "&offset=")) { + if (($a->page_offset != "") AND ! strstr($reload_uri, "&offset=")) { $reload_uri .= "&offset=" . urlencode($a->page_offset); } diff --git a/composer.lock b/composer.lock index b46614f6e3..f057d0cec7 100644 --- a/composer.lock +++ b/composer.lock @@ -226,10 +226,10 @@ }, { "name": "pear-pear.php.net/PEAR", - "version": "1.10.3", + "version": "1.10.4", "dist": { "type": "file", - "url": "https://pear.php.net/get/PEAR-1.10.3.tgz", + "url": "https://pear.php.net/get/PEAR-1.10.4.tgz", "reference": null, "shasum": null }, @@ -247,7 +247,7 @@ "pear-pear.php.net/pear_frontend_web": "<=0.4.0.0" }, "replace": { - "pear-pear/pear": "== 1.10.3.0" + "pear-pear/pear": "== 1.10.4.0" }, "type": "pear-library", "autoload": { diff --git a/database.sql b/database.sql index 69da511b03..73547b3058 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 3.5.2-dev (Asparagus) --- DB_UPDATE_VERSION 1219 +-- DB_UPDATE_VERSION 1221 -- ------------------------------------------ @@ -174,13 +174,13 @@ CREATE TABLE IF NOT EXISTS `contact` ( `fetch_further_information` tinyint(1) NOT NULL DEFAULT 0, `ffi_keyword_blacklist` text, PRIMARY KEY(`id`), - INDEX `uid_name` (`uid`,`name`), + INDEX `uid_name` (`uid`,`name`(190)), INDEX `self_uid` (`self`,`uid`), INDEX `alias_uid` (`alias`(32),`uid`), INDEX `pending_uid` (`pending`,`uid`), INDEX `blocked_uid` (`blocked`,`uid`), - INDEX `uid_rel_network_poll` (`uid`,`rel`,`network`,`poll`(64),`archive`), - INDEX `uid_network_batch` (`uid`,`network`,`batch`(64)), + INDEX `uid_rel_network_poll` (`uid`,`rel`,`network`(4),`poll`(64),`archive`), + INDEX `uid_network_batch` (`uid`,`network`(4),`batch`(64)), INDEX `addr_uid` (`addr`(32),`uid`), INDEX `nurl_uid` (`nurl`(32),`uid`), INDEX `nick_uid` (`nick`(32),`uid`), @@ -204,6 +204,21 @@ CREATE TABLE IF NOT EXISTS `conv` ( INDEX `uid` (`uid`) ) DEFAULT COLLATE utf8mb4_general_ci; +-- +-- TABLE conversation +-- +CREATE TABLE IF NOT EXISTS `conversation` ( + `item-uri` varbinary(255) NOT NULL, + `reply-to-uri` varbinary(255) NOT NULL DEFAULT '', + `conversation-uri` varbinary(255) NOT NULL DEFAULT '', + `conversation-href` varbinary(255) NOT NULL DEFAULT '', + `protocol` tinyint(1) unsigned NOT NULL DEFAULT 0, + `source` mediumtext, + `received` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + PRIMARY KEY(`item-uri`), + INDEX `conversation-uri` (`conversation-uri`) +) DEFAULT COLLATE utf8mb4_general_ci; + -- -- TABLE event -- @@ -344,7 +359,7 @@ CREATE TABLE IF NOT EXISTS `gcontact` ( INDEX `name` (`name`(64)), INDEX `nick` (`nick`(32)), INDEX `addr` (`addr`(64)), - INDEX `hide_network_updated` (`hide`,`network`,`updated`), + INDEX `hide_network_updated` (`hide`,`network`(4),`updated`), INDEX `updated` (`updated`) ) DEFAULT COLLATE utf8mb4_general_ci; @@ -523,22 +538,22 @@ CREATE TABLE IF NOT EXISTS `item` ( INDEX `uid_contactid_id` (`uid`,`contact-id`,`id`), INDEX `uid_created` (`uid`,`created`), INDEX `uid_unseen_contactid` (`uid`,`unseen`,`contact-id`), - INDEX `uid_network_received` (`uid`,`network`,`received`), - INDEX `uid_network_commented` (`uid`,`network`,`commented`), - INDEX `uid_thrparent` (`uid`,`thr-parent`), - INDEX `uid_parenturi` (`uid`,`parent-uri`), + INDEX `uid_network_received` (`uid`,`network`(4),`received`), + INDEX `uid_network_commented` (`uid`,`network`(4),`commented`), + INDEX `uid_thrparent` (`uid`,`thr-parent`(190)), + INDEX `uid_parenturi` (`uid`,`parent-uri`(190)), INDEX `uid_contactid_created` (`uid`,`contact-id`,`created`), INDEX `authorid_created` (`author-id`,`created`), - INDEX `uid_uri` (`uid`,`uri`), + INDEX `uid_uri` (`uid`,`uri`(190)), INDEX `resource-id` (`resource-id`), INDEX `contactid_allowcid_allowpid_denycid_denygid` (`contact-id`,`allow_cid`(10),`allow_gid`(10),`deny_cid`(10),`deny_gid`(10)), - INDEX `uid_type_changed` (`uid`,`type`,`changed`), - INDEX `contactid_verb` (`contact-id`,`verb`), + INDEX `uid_type_changed` (`uid`,`type`(190),`changed`), + INDEX `contactid_verb` (`contact-id`,`verb`(190)), INDEX `deleted_changed` (`deleted`,`changed`), INDEX `uid_wall_changed` (`uid`,`wall`,`changed`), INDEX `uid_eventid` (`uid`,`event-id`), - INDEX `uid_authorlink` (`uid`,`author-link`), - INDEX `uid_ownerlink` (`uid`,`owner-link`) + INDEX `uid_authorlink` (`uid`,`author-link`(190)), + INDEX `uid_ownerlink` (`uid`,`owner-link`(190)) ) DEFAULT COLLATE utf8mb4_general_ci; -- @@ -652,7 +667,7 @@ CREATE TABLE IF NOT EXISTS `notify` ( INDEX `hash_uid` (`hash`,`uid`), INDEX `seen_uid_date` (`seen`,`uid`,`date`), INDEX `uid_date` (`uid`,`date`), - INDEX `uid_type_link` (`uid`,`type`,`link`) + INDEX `uid_type_link` (`uid`,`type`,`link`(190)) ) DEFAULT COLLATE utf8mb4_general_ci; -- @@ -963,7 +978,7 @@ CREATE TABLE IF NOT EXISTS `term` ( `aid` int(10) unsigned NOT NULL DEFAULT 0, `uid` int(10) unsigned NOT NULL DEFAULT 0, PRIMARY KEY(`tid`), - INDEX `oid_otype_type_term` (`oid`,`otype`,`type`,`term`), + INDEX `oid_otype_type_term` (`oid`,`otype`,`type`,`term`(32)), INDEX `uid_otype_type_term_global_created` (`uid`,`otype`,`type`,`term`(32),`global`,`created`), INDEX `uid_otype_type_url` (`uid`,`otype`,`type`,`url`(64)), INDEX `guid` (`guid`(64)) diff --git a/doc/Composer.md b/doc/Composer.md index 8310baf3f0..02ce61639c 100644 --- a/doc/Composer.md +++ b/doc/Composer.md @@ -113,3 +113,8 @@ For Composer, this would be: ```` $> COMPOSER_HOME=/var/tmp/composer sudo -u [web user] util/composer.phar [mode] ```` + +## Related + +* [Class autoloading](help/autoloader) +* [How To Move Classes to `src`](help/Developer-How-To-Move-Classes-to-src) diff --git a/doc/Developer-How-To-Move-Classes-to-src.md b/doc/Developer-How-To-Move-Classes-to-src.md new file mode 100644 index 0000000000..25eb393721 --- /dev/null +++ b/doc/Developer-How-To-Move-Classes-to-src.md @@ -0,0 +1,108 @@ +How To Move Classes to `src` +============== + +* [Home](help) + * [Developer Intro](help/Developers-Intro) + +Friendica uses [Composer](help/Composer) to manage autoloading. +This means that all the PHP class files moved to the `src` folder will be [automatically included](help/autoloader) when the class it defines is first used in the flow. +This is an improvement over the current `require` usage since files will be included on an actual usage basis instead of the presence of a `require` call. + +However, there are a significant number of items to check when moving a class file from the `include` folder to the `src` folder, and this page is there to list them. + +## Decide the namespace + +This isn't the most technical decision of them all, but it has long lasting consequences as it will be the name that will be used to refer to this class from now on. +There is [a shared Ethercalc sheet](https://ethercalc.org/friendica_classes) to suggest namespace/class names that lists all the already moved class files for inspiration. + +A few pointers though: +* `Friendica` is the base namespace for all classes in the `src` folder +* Namespaces match the directory structure, with `Friendica` namespace being the base `src` directory. The `Config` class set in the `Friendica\Core` namespace is expected to be found at `src/Core/Config.php`. +* Namespaces can help group classes with a similar purpose or relevant to a particular feature + +When you're done deciding the namespace, it's time to use it. +Let's say we choose `Friendica\Core` for the `Config` class. + +## Use the namespace + +To declare the namespace, the file `src/Core/Config.php` must start with the following statement: + +````php +namespace Friendica\Core; +```` + +From now on, the `Config` class can be referred to as `Friendica\Core\Config`, however it isn't very practical, especially when the class was previously used as `Config`. +Thankfully, PHP provides namespace shortcuts through `use`. + +This language construct just provides a different naming scheme for a namespace or a class, but doesn't trigger the autoload mechanism on its own. +Here are the different ways you can use `use`: + +````php +// No use +$config = new Friendica\Core\Config(); +```` +````php +// Namespace shortcut +use Friendica\Core; + +$config = new Core\Config(); +```` +````php +// Class name shortcut +use Friendica\Core\Config; + +$config = new Config(); +```` +````php +// Aliasing +use Friendica\Core\Config as Cfg; + +$config = new Cfg(); +```` + +Whatever the style chosen, a repository-wide search has to be done to find all the class name usage and either use the fully-qualified class name (including the namespace) or add a `use` statement at the start of each relevant file. + +## Escape non-namespace classes + +The class file you just moved is now in the `Friendica` namespace, but it probably isn't the case for all the classes referenced in this file. +Since we added a `namespace Friendica\Core;` to the file, all the class names still declared in `include` will be implicitly understood as `Friendica\Core\ClassName`, which is rarely what we expect. + +To avoid `Class Friendica\Core\ClassName not found` errors, all the `include`-declared class names have to be prepended with a `\`, it tells the autoloader not to look for the class in the namespace but in the global space where non-namespaced classes are set. +If there are only a handful of references to a single non-namespaced class, just prepending `\` is enough. However, if there are many instance, we can use `use` again. + +````php +namespace Friendica\Core; +... +if (\dbm::is_result($r)) { + ... +} +```` +````php +namespace Friendica\Core; + +use \dbm; + +if (dbm::is_result($r)) { + ... +} +```` + +## Remove any useless `require` + +Now that you successfully moved your class to the autoloaded `src` folder, there's no need to include this file anywhere in the app ever again. +Please remove all the `require_once` mentions of the former file, as they will provoke a Fatal Error even if the class isn't used. + +## Miscellaneous tips + +When you are done with moving the class, please run `php util/typo.php` from the Friendica base directory to check for obvious mistakes. +Howevever, this tool isn't bullet-proof, and a staging install of Friendica is recommended to test your class move without impairing your production server if you host one. + +Most of Friendica processes are run in the background, so make sure to turn on your debug log to check for errors that wouldn't show up while simply browsing Friendica. + +Check the class file for any magic constant `__FILE__` or `__DIR__`, as their value changed since you moved the class in the file tree. +Most of the time it's used for debugging purposes but there can be instances where it's used to create cache folders for example. + +## Related + +* [Class autoloading](help/autoloader) +* [Using Composer](help/Composer) \ No newline at end of file diff --git a/doc/Developers-Intro.md b/doc/Developers-Intro.md index 5568afeb5d..3cda8ab466 100644 --- a/doc/Developers-Intro.md +++ b/doc/Developers-Intro.md @@ -52,7 +52,9 @@ Friendica uses [Composer](https://getcomposer.org) to manage dependencies librar It's a command-line tool that downloads required libraries into the `vendor` folder and makes any namespaced class in `src` available through the whole application through `boot.php`. +* [Class autoloading](help/autoloader) * [Using Composer](help/Composer) +* [How To Move Classes to `src`](help/Developer-How-To-Move-Classes-to-src) ###Coding standards diff --git a/doc/Home.md b/doc/Home.md index 5490d171f8..4cecec44e3 100644 --- a/doc/Home.md +++ b/doc/Home.md @@ -36,21 +36,25 @@ Friendica Documentation and Resources **Developer Manual** -* [Where to get started?](help/Developers-Intro) -* [Help on Github](help/Github) -* [Help on Vagrant](help/Vagrant) -* [How to translate Friendica](help/translations) -* [Bugs and Issues](help/Bugs-and-Issues) -* [Plugin Development](help/Plugins) -* [Theme Development](help/themes) -* [Smarty 3 Templates](help/smarty3-templates) -* [Protocol Documentation](help/Protocol) -* [Database schema documantation](help/database) -* [Class Autoloading](help/autoloader) -* [Using Composer](help/Composer) -* [Code - Reference(Doxygen generated - sets cookies)](doc/html/) -* [Twitter/GNU Social API Functions](help/api) - +* [Get started](help/Developers-Intro) +* Set up development environment + * [Help on Github](help/Github) + * [Help on Vagrant](help/Vagrant) + * [Bugs and Issues](help/Bugs-and-Issues) +* Code structure + * [Plugin Development](help/Plugins) + * [Theme Development](help/themes) + * [Smarty 3 Templates](help/smarty3-templates) +* How To + * [Translate Friendica](help/translations) + * [Use Composer](help/Composer) + * [Move classes to `src`](help/Developer-How-To-Move-Classes-to-src) +* Reference + * [Twitter/GNU Social API Functions](help/api) + * [Code (Doxygen generated - sets cookies)](doc/html/) + * [Protocol Documentation](help/Protocol) + * [Database schema documantation](help/database) + * [Class Autoloading](help/autoloader) **External Resources** diff --git a/doc/Install.md b/doc/Install.md index b817339bb0..a8ea2c0503 100644 --- a/doc/Install.md +++ b/doc/Install.md @@ -28,7 +28,7 @@ Requirements * Apache with mod-rewrite enabled and "Options All" so you can use a local .htaccess file * PHP 5.4+. * PHP *command line* access with register_argc_argv set to true in the php.ini file -* curl, gd, mysql, hash and openssl extensions +* Curl, GD, PDO, MySQLi, hash and OpenSSL extensions * some form of email server or email gateway such that PHP mail() works * Mysql 5.5.3+ or an equivalant alternative for MySQL (MariaDB, Percona Server etc.) * the ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks (Windows) (Note: other options are presented in Section 7 of this document.) diff --git a/doc/Settings.md b/doc/Settings.md index 13424a5a48..e84418a453 100644 --- a/doc/Settings.md +++ b/doc/Settings.md @@ -242,6 +242,12 @@ The receiving end might be off-line, there might be a high system load and so on Don't panic! Friendica will not queue messages for all time but will sort out *dead* nodes automatically after a while and remove messages from the queue then. +## Server Blocklist + +This page allows to block all communications (inbound and outbound) with a specific domain name. +Each blocked domain entry requires a reason that will be displayed on the [friendica](/friendica) page. +Matching is exact, blocking a domain doesn't block subdomains. + ## Federation Statistics The federation statistics page gives you a short summery of the nodes/servers/pods of the decentralized social network federation your node knows. diff --git a/doc/api.md b/doc/api.md index b759b4697c..04abaa5632 100644 --- a/doc/api.md +++ b/doc/api.md @@ -1,885 +1,1004 @@ -Friendica API -=== - -* [Home](help) - -The Friendica API aims to be compatible to the [GNU Social API](http://wiki.gnusocial.de/gnusocial:api) and the [Twitter API](https://dev.twitter.com/rest/public). - -Please refer to the linked documentation for further information. - -## Implemented API calls - -### General -#### HTTP Method - -API endpoints can restrict the method used to request them. -Using an invalid method results in HTTP error 405 "Method Not Allowed". - -In this document, the required method is listed after the endpoint name. "*" means every method can be used. - -#### Auth - -Friendica supports basic http auth and OAuth 1 to authenticate the user to the api. - -OAuth settings can be added by the user in web UI under /settings/oauth/ - -In this document, endpoints which requires auth are marked with "AUTH" after endpoint name - -#### Unsupported parameters -* cursor: Not implemented in GNU Social -* trim_user: Not implemented in GNU Social -* contributor_details: Not implemented in GNU Social -* place_id: Not implemented in GNU Social -* display_coordinates: Not implemented in GNU Social -* include_rts: To-Do -* include_my_retweet: Retweets in Friendica are implemented in a different way - -#### Different behaviour -* screen_name: The nick name in friendica is only unique in each network but not for all networks. The users are searched in the following priority: Friendica, StatusNet/GNU Social, Diaspora, pump.io, Twitter. If no contact was found by this way, then the first contact is taken. -* include_entities: Default is "false". If set to "true" then the plain text is formatted so that links are having descriptions. - -#### Return values -* cid: Contact id of the user (important for "contact_allow" and "contact_deny") -* network: network of the user - -#### Errors -When an error occour in API call, an HTTP error code is returned, with an error message -Usually: -- 400 Bad Request: if parameter are missing or items can't be found -- 403 Forbidden: if authenticated user is missing -- 405 Method Not Allowed: if API was called with invalid method, eg. GET when API require POST -- 501 Not Implemented: if requested API doesn't exists -- 500 Internal Server Error: on other error contitions - -Error body is - -json: -``` - { - "error": "Specific error message", - "request": "API path requested", - "code": "HTTP error code" - } -``` - -xml: -``` - - Specific error message - API path requested - HTTP error code - -``` - ---- -### account/rate_limit_status (*; AUTH) - ---- -### account/verify_credentials (*; AUTH) -#### Parameters - -* skip_status: Don't show the "status" field. (Default: false) -* include_entities: "true" shows entities for pictures and links (Default: false) - ---- -### conversation/show (*; AUTH) -Unofficial Twitter command. It shows all direct answers (excluding the original post) to a given id. - -#### Parameter -* id: id of the post -* count: Items per page (default: 20) -* page: page number -* since_id: minimal id -* max_id: maximum id -* include_entities: "true" shows entities for pictures and links (Default: false) - -#### Unsupported parameters -* include_rts -* trim_user -* contributor_details - ---- -### direct_messages (*; AUTH) -#### Parameters -* count: Items per page (default: 20) -* page: page number -* since_id: minimal id -* max_id: maximum id -* getText: Defines the format of the status field. Can be "html" or "plain" -* include_entities: "true" shows entities for pictures and links (Default: false) -* friendica_verbose: "true" enables different error returns (default: "false") - -#### Unsupported parameters -* skip_status - ---- -### direct_messages/all (*; AUTH) -#### Parameters -* count: Items per page (default: 20) -* page: page number -* since_id: minimal id -* max_id: maximum id -* getText: Defines the format of the status field. Can be "html" or "plain" -* friendica_verbose: "true" enables different error returns (default: "false") - ---- -### direct_messages/conversation (*; AUTH) -Shows all direct messages of a conversation -#### Parameters -* count: Items per page (default: 20) -* page: page number -* since_id: minimal id -* max_id: maximum id -* getText: Defines the format of the status field. Can be "html" or "plain" -* uri: URI of the conversation -* friendica_verbose: "true" enables different error returns (default: "false") - ---- -### direct_messages/sent (*; AUTH) -#### Parameters -* count: Items per page (default: 20) -* page: page number -* since_id: minimal id -* max_id: maximum id -* getText: Defines the format of the status field. Can be "html" or "plain" -* include_entities: "true" shows entities for pictures and links (Default: false) -* friendica_verbose: "true" enables different error returns (default: "false") - ---- -### direct_messages/new (POST,PUT; AUTH) -#### Parameters -* user_id: id of the user -* screen_name: screen name (for technical reasons, this value is not unique!) -* text: The message -* replyto: ID of the replied direct message -* title: Title of the direct message - ---- -### direct_messages/destroy (POST,DELETE; AUTH) -#### Parameters -* id: id of the message to be deleted -* include_entities: optional, currently not yet implemented -* friendica_parenturi: optional, can be used for increased safety to delete only intended messages -* friendica_verbose: "true" enables different error returns (default: "false") - -#### Return values - -On success: -* JSON return as defined for Twitter API not yet implemented -* on friendica_verbose=true: JSON return {"result":"ok","message":"message deleted"} - -On error: -HTTP 400 BadRequest -* on friendica_verbose=true: different JSON returns {"result":"error","message":"xyz"} - ---- -### favorites (*; AUTH) -#### Parameters -* count: Items per page (default: 20) -* page: page number -* since_id: minimal id -* max_id: maximum id -* include_entities: "true" shows entities for pictures and links (Default: false) - -#### Unsupported parameters -* user_id -* screen_name - -Favorites aren't displayed to other users, so "user_id" and "screen_name" are unsupported. -Set this values will result in an empty array. - ---- -### favorites/create (POST,PUT; AUTH) -#### Parameters -* id -* include_entities: "true" shows entities for pictures and links (Default: false) - ---- -### favorites/destroy (POST,DELETE; AUTH) -#### Parameters -* id -* include_entities: "true" shows entities for pictures and links (Default: false) - ---- -### followers/ids (*; AUTH) -#### Parameters -* stringify_ids: Should the id numbers be sent as text (true) or number (false)? (default: false) - -#### Unsupported parameters -* user_id -* screen_name -* cursor - -Friendica doesn't allow showing followers of other users. - ---- -### friends/ids (*; AUTH) -#### Parameters -* stringify_ids: Should the id numbers be sent as text (true) or number (false)? (default: false) - -#### Unsupported parameters -* user_id -* screen_name -* cursor - -Friendica doesn't allow showing friends of other users. - ---- -### help/test (*) - ---- -### media/upload (POST,PUT; AUTH) -#### Parameters -* media: image data - ---- -### oauth/request_token (*) -#### Parameters -* oauth_callback - -#### Unsupported parameters -* x_auth_access_type - ---- -### oauth/access_token (*) -#### Parameters -* oauth_verifier - -#### Unsupported parameters -* x_auth_password -* x_auth_username -* x_auth_mode - ---- -### statuses/destroy (POST,DELETE; AUTH) -#### Parameters -* id: message number -* include_entities: "true" shows entities for pictures and links (Default: false) - -#### Unsupported parameters -* trim_user - ---- -### statuses/followers (*; AUTH) - -#### Parameters - -* include_entities: "true" shows entities for pictures and links (Default: false) - ---- -### statuses/friends (*; AUTH) - -#### Parameters - -* include_entities: "true" shows entities for pictures and links (Default: false) - ---- -### statuses/friends_timeline (*; AUTH) -#### Parameters -* count: Items per page (default: 20) -* page: page number -* since_id: minimal id -* max_id: maximum id -* exclude_replies: don't show replies (default: false) -* conversation_id: Shows all statuses of a given conversation. -* include_entities: "true" shows entities for pictures and links (Default: false) - -#### Unsupported parameters -* include_rts -* trim_user -* contributor_details - ---- -### statuses/home_timeline (*; AUTH) -#### Parameters -* count: Items per page (default: 20) -* page: page number -* since_id: minimal id -* max_id: maximum id -* exclude_replies: don't show replies (default: false) -* conversation_id: Shows all statuses of a given conversation. -* include_entities: "true" shows entities for pictures and links (Default: false) - -#### Unsupported parameters -* include_rts -* trim_user -* contributor_details - ---- -### statuses/mentions (*; AUTH) -#### Parameters -* count: Items per page (default: 20) -* page: page number -* since_id: minimal id -* max_id: maximum id -* include_entities: "true" shows entities for pictures and links (Default: false) - -#### Unsupported parameters -* include_rts -* trim_user -* contributor_details - ---- -### statuses/public_timeline (*; AUTH) -#### Parameters -* count: Items per page (default: 20) -* page: page number -* since_id: minimal id -* max_id: maximum id -* exclude_replies: don't show replies (default: false) -* conversation_id: Shows all statuses of a given conversation. -* include_entities: "true" shows entities for pictures and links (Default: false) - -#### Unsupported parameters -* trim_user - ---- -### statuses/replies (*; AUTH) -#### Parameters -* count: Items per page (default: 20) -* page: page number -* since_id: minimal id -* max_id: maximum id -* include_entities: "true" shows entities for pictures and links (Default: false) - -#### Unsupported parameters -* include_rts -* trim_user -* contributor_details - ---- -### statuses/retweet (POST,PUT; AUTH) -#### Parameters -* id: message number -* include_entities: "true" shows entities for pictures and links (Default: false) - -#### Unsupported parameters -* trim_user - ---- -### statuses/show (*; AUTH) -#### Parameters -* id: message number -* conversation: if set to "1" show all messages of the conversation with the given id -* include_entities: "true" shows entities for pictures and links (Default: false) - -#### Unsupported parameters -* include_my_retweet -* trim_user - ---- -### statuses/update, statuses/update_with_media -#### Parameters -* title: Title of the status -* status: Status in text format -* htmlstatus: Status in HTML format -* in_reply_to_status_id -* lat: latitude -* long: longitude -* media: image data -* source: Application name -* group_allow -* contact_allow -* group_deny -* contact_deny -* network -* include_entities: "true" shows entities for pictures and links (Default: false) -* media_ids: (By now only a single value, no array) - -#### Unsupported parameters -* trim_user -* place_id -* display_coordinates - ---- -### statuses/user_timeline (*; AUTH) -#### Parameters -* user_id: id of the user -* screen_name: screen name (for technical reasons, this value is not unique!) -* count: Items per page (default: 20) -* page: page number -* since_id: minimal id -* max_id: maximum id -* exclude_replies: don't show replies (default: false) -* conversation_id: Shows all statuses of a given conversation. -* include_entities: "true" shows entities for pictures and links (Default: false) - -#### Unsupported parameters - -* include_rts -* trim_user -* contributor_details - ---- -### statusnet/config (*) - ---- -### statusnet/conversation (*; AUTH) -It shows all direct answers (excluding the original post) to a given id. - -#### Parameter -* id: id of the post -* count: Items per page (default: 20) -* page: page number -* since_id: minimal id -* max_id: maximum id -* include_entities: "true" shows entities for pictures and links (Default: false) - ---- -### statusnet/version (*) - -#### Unsupported parameters -* user_id -* screen_name -* cursor - -Friendica doesn't allow showing followers of other users. - ---- -### users/search (*) -#### Parameters -* q: name of the user - -#### Unsupported parameters -* page -* count -* include_entities - ---- -### users/show (*) -#### Parameters -* user_id: id of the user -* screen_name: screen name (for technical reasons, this value is not unique!) -* include_entities: "true" shows entities for pictures and links (Default: false) - -#### Unsupported parameters -* user_id -* screen_name -* cursor - -Friendica doesn't allow showing friends of other users. - - -## Implemented API calls (not compatible with other APIs) - - ---- -### friendica/activity/ -#### parameters -* id: item id - -Add or remove an activity from an item. -'verb' can be one of: - -- like -- dislike -- attendyes -- attendno -- attendmaybe - -To remove an activity, prepend the verb with "un", eg. "unlike" or "undislike" -Attend verbs disable eachother: that means that if "attendyes" was added to an item, adding "attendno" remove previous "attendyes". -Attend verbs should be used only with event-related items (there is no check at the moment) - -#### Return values - -On success: -json -```"ok"``` - -xml -```true``` - -On error: -HTTP 400 BadRequest - ---- -### friendica/group_show (*; AUTH) -Return all or a specified group of the user with the containing contacts as array. - -#### Parameters -* gid: optional, if not given, API returns all groups of the user - -#### Return values -Array of: - -* name: name of the group -* gid: id of the group -* user: array of group members (return from api_get_user() function for each member) - - ---- -### friendica/group_delete (POST,DELETE; AUTH) -delete the specified group of contacts; API call need to include the correct gid AND name of the group to be deleted. - -#### Parameters -* gid: id of the group to be deleted -* name: name of the group to be deleted - -#### Return values -Array of: - -* success: true if successfully deleted -* gid: gid of the deleted group -* name: name of the deleted group -* status: „deleted“ if successfully deleted -* wrong users: empty array - - ---- -### friendica/group_create (POST,PUT; AUTH) -Create the group with the posted array of contacts as members. - -#### Parameters -* name: name of the group to be created - -#### POST data -JSON data as Array like the result of "users/group_show": - -* gid -* name -* array of users - -#### Return values -Array of: - -* success: true if successfully created or reactivated -* gid: gid of the created group -* name: name of the created group -* status: „missing user“ | „reactivated“ | „ok“ -* wrong users: array of users, which were not available in the contact table - - ---- -### friendica/group_update (POST) -Update the group with the posted array of contacts as members (post all members of the group to the call; function will remove members not posted). - -#### Parameters -* gid: id of the group to be changed -* name: name of the group to be changed - -#### POST data -JSON data as array like the result of „users/group_show“: - -* gid -* name -* array of users - -#### Return values -Array of: - -* success: true if successfully updated -* gid: gid of the changed group -* name: name of the changed group -* status: „missing user“ | „ok“ -* wrong users: array of users, which were not available in the contact table - - - ---- -### friendica/notifications (GET) -Return last 50 notification for current user, ordered by date with unseen item on top - -#### Parameters -none - -#### Return values -Array of: - -* id: id of the note -* type: type of notification as int (see NOTIFY_* constants in boot.php) -* name: full name of the contact subject of the note -* url: contact's profile url -* photo: contact's profile photo -* date: datetime string of the note -* timestamp: timestamp of the node -* date_rel: relative date of the note (eg. "1 hour ago") -* msg: note message in bbcode -* msg_html: note message in html -* msg_plain: note message in plain text -* link: link to note -* seen: seen state: 0 or 1 - - ---- -### friendica/notifications/seen (POST) -Set note as seen, returns item object if possible - -#### Parameters -id: id of the note to set seen - -#### Return values -If the note is linked to an item, the item is returned, just like one of the "statuses/*_timeline" api. - -If the note is not linked to an item, a success status is returned: - -* "success" (json) | "<status>success</status>" (xml) - - ---- -### friendica/photo (*; AUTH) -#### Parameters -* photo_id: Resource id of a photo. -* scale: (optional) scale value of the photo - -Returns data of a picture with the given resource. -If 'scale' isn't provided, returned data include full url to each scale of the photo. -If 'scale' is set, returned data include image data base64 encoded. - -possibile scale value are: - -* 0: original or max size by server settings -* 1: image with or height at <= 640 -* 2: image with or height at <= 320 -* 3: thumbnail 160x160 -* 4: Profile image at 175x175 -* 5: Profile image at 80x80 -* 6: Profile image at 48x48 - -An image used as profile image has only scale 4-6, other images only 0-3 - -#### Return values - -json -``` - { - "id": "photo id" - "created": "date(YYYY-MM-GG HH:MM:SS)", - "edited": "date(YYYY-MM-GG HH:MM:SS)", - "title": "photo title", - "desc": "photo description", - "album": "album name", - "filename": "original file name", - "type": "mime type", - "height": "number", - "width": "number", - "profile": "1 if is profile photo", - "link": { - "": "url to image" - ... - }, - // if 'scale' is set - "datasize": "size in byte", - "data": "base64 encoded image data" - } -``` - -xml -``` - - photo id - date(YYYY-MM-GG HH:MM:SS) - date(YYYY-MM-GG HH:MM:SS) - photo title - photo description - album name - original file name - mime type - number - number - 1 if is profile photo - - - ... - - -``` - ---- -### friendica/photos/list (*; AUTH) - -Returns a list of all photo resources of the logged in user. - -#### Return values - -json -``` - [ - { - id: "resource_id", - album: "album name", - filename: "original file name", - type: "image mime type", - thumb: "url to thumb sized image" - }, - ... - ] -``` - -xml -``` - - - "url to thumb sized image" - - ... - -``` - ---- -### friendica/direct_messages_setseen (GET; AUTH) -#### Parameters -* id: id of the message to be updated as seen - -#### Return values - -On success: -* JSON return {"result":"ok","message":"message set to seen"} - -On error: -* different JSON returns {"result":"error","message":"xyz"} - ---- -### friendica/direct_messages_search (GET; AUTH) -#### Parameters -* searchstring: string for which the API call should search as '%searchstring%' in field 'body' of all messages of the authenticated user (caption ignored) - -#### Return values -Returns only tested with JSON, XML might work as well. - -On success: -* JSON return {"success":"true","search_results": array of found messages} -* JSOn return {"success":"false","search_results":"nothing found"} - -On error: -* different JSON returns {"result":"error","message":"searchstring not specified"} - ---- -### friendica/profile/show (GET; AUTH) -show data of all profiles or a single profile of the authenticated user - -#### Parameters -* profile_id: id of the profile to be returned (optional, if omitted all profiles are returned by default) - -#### Return values -On success: Array of: - -* multi_profiles: true if user has activated multi_profiles -* global_dir: URL of the global directory set in server settings -* friendica_owner: user data of the authenticated user -* profiles: array of the profile data - -On error: -HTTP 403 Forbidden: when no authentication provided -HTTP 400 Bad Request: if given profile_id is not in db or not assigned to authenticated user - -General description of profile data in API returns: -* profile_id -* profile_name -* is_default: true if this is the public profile -* hide_friends: true if friends are hidden -* profile_photo -* profile_thumb -* publish: true if published on the server's local directory -* net_publish: true if published to global_dir -* description ... homepage: different data fields from 'profile' table in database -* users: array with the users allowed to view this profile (empty if is_default=true) - - ---- -## Not Implemented API calls -The following API calls are implemented in GNU Social but not in Friendica: (incomplete) - -* statuses/retweets_of_me -* friendships/create -* friendships/destroy -* friendships/exists -* friendships/show -* account/update_profile_background_image -* account/update_profile_image -* blocks/create -* blocks/destroy - -The following API calls from the Twitter API aren't implemented neither in Friendica nor in GNU Social: - -* statuses/mentions_timeline -* statuses/retweets/:id -* statuses/oembed -* statuses/retweeters/ids -* statuses/lookup -* direct_messages/show -* search/tweets -* friendships/no_retweets/ids -* friendships/incoming -* friendships/outgoing -* friendships/update -* friends/list -* friendships/lookup -* account/settings -* account/update_delivery_device -* account/update_profile -* account/update_profile_background_image -* account/update_profile_image -* blocks/list -* blocks/ids -* users/lookup -* users/show -* users/search -* account/remove_profile_banner -* account/update_profile_banner -* users/profile_banner -* mutes/users/create -* mutes/users/destroy -* mutes/users/ids -* mutes/users/list -* users/suggestions/:slug -* users/suggestions -* users/suggestions/:slug/members -* favorites/list -* lists/list -* lists/statuses -* lists/members/destroy -* lists/memberships -* lists/subscribers -* lists/subscribers/create -* lists/subscribers/show -* lists/subscribers/destroy -* lists/members/create_all -* lists/members/show -* lists/members -* lists/members/create -* lists/destroy -* lists/update -* lists/create -* lists/show -* lists/subscriptions -* lists/members/destroy_all -* lists/ownerships -* saved_searches/list -* saved_searches/show/:id -* saved_searches/create -* saved_searches/destroy/:id -* geo/id/:place_id -* geo/reverse_geocode -* geo/search -* geo/place -* trends/place -* trends/available -* help/configuration -* help/languages -* help/privacy -* help/tos -* trends/closest -* users/report_spam - ---- - ---- - -## Usage Examples -### BASH / cURL -Betamax has documentated some example API usage from a [bash script](https://en.wikipedia.org/wiki/Bash_(Unix_shell) employing [curl](https://en.wikipedia.org/wiki/CURL) (see [his posting](https://betamax65.de/display/betamax65/43539)). - -/usr/bin/curl -u USER:PASS https://YOUR.FRIENDICA.TLD/api/statuses/update.xml -d source="some source id" -d status="the status you want to post" - -### Python -The [RSStoFriedika](https://github.com/pafcu/RSStoFriendika) code can be used as an example of how to use the API with python. The lines for posting are located at [line 21](https://github.com/pafcu/RSStoFriendika/blob/master/RSStoFriendika.py#L21) and following. - -def tweet(server, message, group_allow=None): -url = server + '/api/statuses/update' -urllib2.urlopen(url, urllib.urlencode({'status': message,'group_allow[]':group_allow}, doseq=True)) - -There is also a [module for python 3](https://bitbucket.org/tobiasd/python-friendica) for using the API. +Friendica API +=== + +* [Home](help) + +The Friendica API aims to be compatible to the [GNU Social API](http://wiki.gnusocial.de/gnusocial:api) and the [Twitter API](https://dev.twitter.com/rest/public). + +Please refer to the linked documentation for further information. + +## Implemented API calls + +### General +#### HTTP Method + +API endpoints can restrict the method used to request them. +Using an invalid method results in HTTP error 405 "Method Not Allowed". + +In this document, the required method is listed after the endpoint name. "*" means every method can be used. + +#### Auth + +Friendica supports basic http auth and OAuth 1 to authenticate the user to the api. + +OAuth settings can be added by the user in web UI under /settings/oauth/ + +In this document, endpoints which requires auth are marked with "AUTH" after endpoint name + +#### Unsupported parameters +* cursor: Not implemented in GNU Social +* trim_user: Not implemented in GNU Social +* contributor_details: Not implemented in GNU Social +* place_id: Not implemented in GNU Social +* display_coordinates: Not implemented in GNU Social +* include_rts: To-Do +* include_my_retweet: Retweets in Friendica are implemented in a different way + +#### Different behaviour +* screen_name: The nick name in friendica is only unique in each network but not for all networks. The users are searched in the following priority: Friendica, StatusNet/GNU Social, Diaspora, pump.io, Twitter. If no contact was found by this way, then the first contact is taken. +* include_entities: Default is "false". If set to "true" then the plain text is formatted so that links are having descriptions. + +#### Return values +* cid: Contact id of the user (important for "contact_allow" and "contact_deny") +* network: network of the user + +#### Errors +When an error occour in API call, an HTTP error code is returned, with an error message +Usually: +- 400 Bad Request: if parameter are missing or items can't be found +- 403 Forbidden: if authenticated user is missing +- 405 Method Not Allowed: if API was called with invalid method, eg. GET when API require POST +- 501 Not Implemented: if requested API doesn't exists +- 500 Internal Server Error: on other error contitions + +Error body is + +json: +``` + { + "error": "Specific error message", + "request": "API path requested", + "code": "HTTP error code" + } +``` + +xml: +``` + + Specific error message + API path requested + HTTP error code + +``` + +--- +### account/rate_limit_status (*; AUTH) + +--- +### account/verify_credentials (*; AUTH) +#### Parameters + +* skip_status: Don't show the "status" field. (Default: false) +* include_entities: "true" shows entities for pictures and links (Default: false) + +--- +### conversation/show (*; AUTH) +Unofficial Twitter command. It shows all direct answers (excluding the original post) to a given id. + +#### Parameter +* id: id of the post +* count: Items per page (default: 20) +* page: page number +* since_id: minimal id +* max_id: maximum id +* include_entities: "true" shows entities for pictures and links (Default: false) + +#### Unsupported parameters +* include_rts +* trim_user +* contributor_details + +--- +### direct_messages (*; AUTH) +#### Parameters +* count: Items per page (default: 20) +* page: page number +* since_id: minimal id +* max_id: maximum id +* getText: Defines the format of the status field. Can be "html" or "plain" +* include_entities: "true" shows entities for pictures and links (Default: false) +* friendica_verbose: "true" enables different error returns (default: "false") + +#### Unsupported parameters +* skip_status + +--- +### direct_messages/all (*; AUTH) +#### Parameters +* count: Items per page (default: 20) +* page: page number +* since_id: minimal id +* max_id: maximum id +* getText: Defines the format of the status field. Can be "html" or "plain" +* friendica_verbose: "true" enables different error returns (default: "false") + +--- +### direct_messages/conversation (*; AUTH) +Shows all direct messages of a conversation +#### Parameters +* count: Items per page (default: 20) +* page: page number +* since_id: minimal id +* max_id: maximum id +* getText: Defines the format of the status field. Can be "html" or "plain" +* uri: URI of the conversation +* friendica_verbose: "true" enables different error returns (default: "false") + +--- +### direct_messages/sent (*; AUTH) +#### Parameters +* count: Items per page (default: 20) +* page: page number +* since_id: minimal id +* max_id: maximum id +* getText: Defines the format of the status field. Can be "html" or "plain" +* include_entities: "true" shows entities for pictures and links (Default: false) +* friendica_verbose: "true" enables different error returns (default: "false") + +--- +### direct_messages/new (POST,PUT; AUTH) +#### Parameters +* user_id: id of the user +* screen_name: screen name (for technical reasons, this value is not unique!) +* text: The message +* replyto: ID of the replied direct message +* title: Title of the direct message + +--- +### direct_messages/destroy (POST,DELETE; AUTH) +#### Parameters +* id: id of the message to be deleted +* include_entities: optional, currently not yet implemented +* friendica_parenturi: optional, can be used for increased safety to delete only intended messages +* friendica_verbose: "true" enables different error returns (default: "false") + +#### Return values + +On success: +* JSON return as defined for Twitter API not yet implemented +* on friendica_verbose=true: JSON return {"result":"ok","message":"message deleted"} + +On error: +HTTP 400 BadRequest +* on friendica_verbose=true: different JSON returns {"result":"error","message":"xyz"} + +--- +### externalprofile/show (*) +#### Parameters +* profileurl: profile url + +--- +### favorites (*; AUTH) +#### Parameters +* count: Items per page (default: 20) +* page: page number +* since_id: minimal id +* max_id: maximum id +* include_entities: "true" shows entities for pictures and links (Default: false) + +#### Unsupported parameters +* user_id +* screen_name + +Favorites aren't displayed to other users, so "user_id" and "screen_name" are unsupported. +Set this values will result in an empty array. + +--- +### favorites/create (POST,PUT; AUTH) +#### Parameters +* id +* include_entities: "true" shows entities for pictures and links (Default: false) + +--- +### favorites/destroy (POST,DELETE; AUTH) +#### Parameters +* id +* include_entities: "true" shows entities for pictures and links (Default: false) + +--- +### followers/ids (*; AUTH) +#### Parameters +* stringify_ids: Should the id numbers be sent as text (true) or number (false)? (default: false) + +#### Unsupported parameters +* user_id +* screen_name +* cursor + +Friendica doesn't allow showing followers of other users. + +--- +### friends/ids (*; AUTH) +#### Parameters +* stringify_ids: Should the id numbers be sent as text (true) or number (false)? (default: false) + +#### Unsupported parameters +* user_id +* screen_name +* cursor + +Friendica doesn't allow showing friends of other users. + +--- +### help/test (*) + +--- +### media/upload (POST,PUT; AUTH) +#### Parameters +* media: image data + +--- +### oauth/request_token (*) +#### Parameters +* oauth_callback + +#### Unsupported parameters +* x_auth_access_type + +--- +### oauth/access_token (*) +#### Parameters +* oauth_verifier + +#### Unsupported parameters +* x_auth_password +* x_auth_username +* x_auth_mode + +--- +### statuses/destroy (POST,DELETE; AUTH) +#### Parameters +* id: message number +* include_entities: "true" shows entities for pictures and links (Default: false) + +#### Unsupported parameters +* trim_user + +--- +### statuses/followers (*; AUTH) + +#### Parameters + +* include_entities: "true" shows entities for pictures and links (Default: false) + +--- +### statuses/friends (*; AUTH) + +#### Parameters + +* include_entities: "true" shows entities for pictures and links (Default: false) + +--- +### statuses/friends_timeline (*; AUTH) +#### Parameters +* count: Items per page (default: 20) +* page: page number +* since_id: minimal id +* max_id: maximum id +* exclude_replies: don't show replies (default: false) +* conversation_id: Shows all statuses of a given conversation. +* include_entities: "true" shows entities for pictures and links (Default: false) + +#### Unsupported parameters +* include_rts +* trim_user +* contributor_details + +--- +### statuses/home_timeline (*; AUTH) +#### Parameters +* count: Items per page (default: 20) +* page: page number +* since_id: minimal id +* max_id: maximum id +* exclude_replies: don't show replies (default: false) +* conversation_id: Shows all statuses of a given conversation. +* include_entities: "true" shows entities for pictures and links (Default: false) + +#### Unsupported parameters +* include_rts +* trim_user +* contributor_details + +--- +### statuses/mentions (*; AUTH) +#### Parameters +* count: Items per page (default: 20) +* page: page number +* since_id: minimal id +* max_id: maximum id +* include_entities: "true" shows entities for pictures and links (Default: false) + +#### Unsupported parameters +* include_rts +* trim_user +* contributor_details + +--- +### statuses/public_timeline (*; AUTH) +#### Parameters +* count: Items per page (default: 20) +* page: page number +* since_id: minimal id +* max_id: maximum id +* exclude_replies: don't show replies (default: false) +* conversation_id: Shows all statuses of a given conversation. +* include_entities: "true" shows entities for pictures and links (Default: false) + +#### Unsupported parameters +* trim_user + +--- +### statuses/replies (*; AUTH) +#### Parameters +* count: Items per page (default: 20) +* page: page number +* since_id: minimal id +* max_id: maximum id +* include_entities: "true" shows entities for pictures and links (Default: false) + +#### Unsupported parameters +* include_rts +* trim_user +* contributor_details + +--- +### statuses/retweet (POST,PUT; AUTH) +#### Parameters +* id: message number +* include_entities: "true" shows entities for pictures and links (Default: false) + +#### Unsupported parameters +* trim_user + +--- +### statuses/show (*; AUTH) +#### Parameters +* id: message number +* conversation: if set to "1" show all messages of the conversation with the given id +* include_entities: "true" shows entities for pictures and links (Default: false) + +#### Unsupported parameters +* include_my_retweet +* trim_user + +--- +### statuses/update, statuses/update_with_media +#### Parameters +* title: Title of the status +* status: Status in text format +* htmlstatus: Status in HTML format +* in_reply_to_status_id +* lat: latitude +* long: longitude +* media: image data +* source: Application name +* group_allow +* contact_allow +* group_deny +* contact_deny +* network +* include_entities: "true" shows entities for pictures and links (Default: false) +* media_ids: (By now only a single value, no array) + +#### Unsupported parameters +* trim_user +* place_id +* display_coordinates + +--- +### statuses/user_timeline (*; AUTH) +#### Parameters +* user_id: id of the user +* screen_name: screen name (for technical reasons, this value is not unique!) +* count: Items per page (default: 20) +* page: page number +* since_id: minimal id +* max_id: maximum id +* exclude_replies: don't show replies (default: false) +* conversation_id: Shows all statuses of a given conversation. +* include_entities: "true" shows entities for pictures and links (Default: false) + +#### Unsupported parameters + +* include_rts +* trim_user +* contributor_details + +--- +### statusnet/config (*) + +--- +### statusnet/conversation (*; AUTH) +It shows all direct answers (excluding the original post) to a given id. + +#### Parameter +* id: id of the post +* count: Items per page (default: 20) +* page: page number +* since_id: minimal id +* max_id: maximum id +* include_entities: "true" shows entities for pictures and links (Default: false) + +--- +### statusnet/version (*) + +#### Unsupported parameters +* user_id +* screen_name +* cursor + +Friendica doesn't allow showing followers of other users. + +--- +### users/search (*) +#### Parameters +* q: name of the user + +#### Unsupported parameters +* page +* count +* include_entities + +--- +### users/show (*) +#### Parameters +* user_id: id of the user +* screen_name: screen name (for technical reasons, this value is not unique!) +* include_entities: "true" shows entities for pictures and links (Default: false) + +#### Unsupported parameters +* user_id +* screen_name +* cursor + +Friendica doesn't allow showing friends of other users. + + +--- +### account/update_profile_image (POST; AUTH) +#### Parameters +* image: image data as base64 (Twitter has a limit of 700kb, Friendica allows more) +* profile_id (optional): id of the profile for which the image should be used, default is changing the default profile + +uploads a new profile image (scales 4-6) to database, changes default or specified profile to the new photo + +#### Return values + +On success: +* JSON return: returns the updated user details (see account/verify_credentials) + +On error: +* 403 FORBIDDEN: if not authenticated +* 400 BADREQUEST: "no media data submitted", "profile_id not available" +* 500 INTERNALSERVERERROR: "image size exceeds PHP config settings, file was rejected by server", + "image size exceeds Friendica Config setting (uploaded size: x)", + "unable to process image data", + "image upload failed" + + +## Implemented API calls (not compatible with other APIs) + + +--- +### friendica/activity/ +#### parameters +* id: item id + +Add or remove an activity from an item. +'verb' can be one of: + +- like +- dislike +- attendyes +- attendno +- attendmaybe + +To remove an activity, prepend the verb with "un", eg. "unlike" or "undislike" +Attend verbs disable eachother: that means that if "attendyes" was added to an item, adding "attendno" remove previous "attendyes". +Attend verbs should be used only with event-related items (there is no check at the moment) + +#### Return values + +On success: +json +```"ok"``` + +xml +```true``` + +On error: +HTTP 400 BadRequest + +--- +### friendica/group_show (*; AUTH) +Return all or a specified group of the user with the containing contacts as array. + +#### Parameters +* gid: optional, if not given, API returns all groups of the user + +#### Return values +Array of: + +* name: name of the group +* gid: id of the group +* user: array of group members (return from api_get_user() function for each member) + + +--- +### friendica/group_delete (POST,DELETE; AUTH) +delete the specified group of contacts; API call need to include the correct gid AND name of the group to be deleted. + +#### Parameters +* gid: id of the group to be deleted +* name: name of the group to be deleted + +#### Return values +Array of: + +* success: true if successfully deleted +* gid: gid of the deleted group +* name: name of the deleted group +* status: „deleted“ if successfully deleted +* wrong users: empty array + + +--- +### friendica/group_create (POST,PUT; AUTH) +Create the group with the posted array of contacts as members. + +#### Parameters +* name: name of the group to be created + +#### POST data +JSON data as Array like the result of "users/group_show": + +* gid +* name +* array of users + +#### Return values +Array of: + +* success: true if successfully created or reactivated +* gid: gid of the created group +* name: name of the created group +* status: „missing user“ | „reactivated“ | „ok“ +* wrong users: array of users, which were not available in the contact table + + +--- +### friendica/group_update (POST) +Update the group with the posted array of contacts as members (post all members of the group to the call; function will remove members not posted). + +#### Parameters +* gid: id of the group to be changed +* name: name of the group to be changed + +#### POST data +JSON data as array like the result of „users/group_show“: + +* gid +* name +* array of users + +#### Return values +Array of: + +* success: true if successfully updated +* gid: gid of the changed group +* name: name of the changed group +* status: „missing user“ | „ok“ +* wrong users: array of users, which were not available in the contact table + + + +--- +### friendica/notifications (GET) +Return last 50 notification for current user, ordered by date with unseen item on top + +#### Parameters +none + +#### Return values +Array of: + +* id: id of the note +* type: type of notification as int (see NOTIFY_* constants in boot.php) +* name: full name of the contact subject of the note +* url: contact's profile url +* photo: contact's profile photo +* date: datetime string of the note +* timestamp: timestamp of the node +* date_rel: relative date of the note (eg. "1 hour ago") +* msg: note message in bbcode +* msg_html: note message in html +* msg_plain: note message in plain text +* link: link to note +* seen: seen state: 0 or 1 + + +--- +### friendica/notifications/seen (POST) +Set note as seen, returns item object if possible + +#### Parameters +id: id of the note to set seen + +#### Return values +If the note is linked to an item, the item is returned, just like one of the "statuses/*_timeline" api. + +If the note is not linked to an item, a success status is returned: + +* "success" (json) | "<status>success</status>" (xml) + + +--- +### friendica/photo (*; AUTH) +#### Parameters +* photo_id: Resource id of a photo. +* scale: (optional) scale value of the photo + +Returns data of a picture with the given resource. +If 'scale' isn't provided, returned data include full url to each scale of the photo. +If 'scale' is set, returned data include image data base64 encoded. + +possibile scale value are: + +* 0: original or max size by server settings +* 1: image with or height at <= 640 +* 2: image with or height at <= 320 +* 3: thumbnail 160x160 +* 4: Profile image at 175x175 +* 5: Profile image at 80x80 +* 6: Profile image at 48x48 + +An image used as profile image has only scale 4-6, other images only 0-3 + +#### Return values + +json +``` + { + "id": "photo id" + "created": "date(YYYY-MM-GG HH:MM:SS)", + "edited": "date(YYYY-MM-GG HH:MM:SS)", + "title": "photo title", + "desc": "photo description", + "album": "album name", + "filename": "original file name", + "type": "mime type", + "height": "number", + "width": "number", + "profile": "1 if is profile photo", + "link": { + "": "url to image" + ... + }, + // if 'scale' is set + "datasize": "size in byte", + "data": "base64 encoded image data" + } +``` + +xml +``` + + photo id + date(YYYY-MM-GG HH:MM:SS) + date(YYYY-MM-GG HH:MM:SS) + photo title + photo description + album name + original file name + mime type + number + number + 1 if is profile photo + + + ... + + +``` + +--- +### friendica/photos/list (*; AUTH) + +Returns a list of all photo resources of the logged in user. + +#### Return values + +json +``` + [ + { + id: "resource_id", + album: "album name", + filename: "original file name", + type: "image mime type", + thumb: "url to thumb sized image" + }, + ... + ] +``` + +xml +``` + + + "url to thumb sized image" + + ... + +``` + +--- +### friendica/photoalbum/delete (POST,DELETE; AUTH) +#### Parameters +* album: name of the album to be deleted + +deletes all images with the specified album name, is not reversible -> ensure that client is asking user for being sure to do this + +#### Return values + +On success: +* JSON return {"result":"deleted","message":"album 'xyz' with all containing photos has been deleted."} + +On error: +* 403 FORBIDDEN: if not authenticated +* 400 BADREQUEST: "no albumname specified", "album not available" +* 500 INTERNALSERVERERROR: "problem with deleting item occured", "unknown error - deleting from database failed" + + +--- +### friendica/photoalbum/update (POST,PUT; AUTH) +#### Parameters +* album: name of the album to be updated +* album_new: new name of the album + +changes the album name to album_new for all photos in album + +#### Return values + +On success: +* JSON return {"result":"updated","message":"album 'abc' with all containing photos has been renamed to 'xyz'."} + +On error: +* 403 FORBIDDEN: if not authenticated +* 400 BADREQUEST: "no albumname specified", "no new albumname specified", "album not available" +* 500 INTERNALSERVERERROR: "unknown error - updating in database failed" + + +--- +### friendica/photo/create (POST; AUTH) +### friendica/photo/update (POST; AUTH) +#### Parameters +* photo_id (optional): if specified the photo with this id will be updated +* media (optional): image data as base64, only optional if photo_id is specified (new upload must have media) +* desc (optional): description for the photo, updated when photo_id is specified +* album: name of the album to be deleted (always necessary) +* album_new (optional): can be used to change the album of a single photo if photo_id is specified +* allow_cid/allow_gid/deny_cid/deny_gid (optional): on create: empty string or omitting = public photo, specify in format '``````' for private photo; + on update: keys need to be present with empty values for setting a private photo now to public + +both calls point to one function for creating AND updating photos. +Saves data for the scales 0-2 to database (see above for scale description). +Call adds non-visible entries to items table to enable authenticated contacts to comment/like the photo. +Client should pay attention to the fact that updated access rights are not transferred to the contacts. i.e. public photos remain publicly visible if they have been commented/liked before setting visibility back to a limited group. +Currently it is best way to inform user that updating rights is not the best way, offer a solution to add photo as a new photo with the new rights. + +#### Return values + +On success: +* new photo uploaded: JSON return with photo data (see friendica/photo) +* photo updated - changed photo data: JSON return with photo data (see friendica/photo) +* photo updated - changed info: JSON return {"result":"updated","message":"Image id 'xyz' has been updated."} +* photo updated - nothing changed: JSON return {"result":"cancelled","message":"Nothing to update for image id 'xyz'."} + +On error: +* 403 FORBIDDEN: if not authenticated +* 400 BADREQUEST: "no albumname specified", "no media data submitted", "photo not available", "acl data invalid" +* 500 INTERNALSERVERERROR: "image size exceeds PHP config settings, file was rejected by server", + "image size exceeds Friendica Config setting (uploaded size: x)", + "unable to process image data", + "image upload failed", + "unknown error - uploading photo failed, see Friendica log for more information", + "unknown error - update photo entry in database failed", + "unknown error - this error on uploading or updating a photo should never happen" + + +--- +### friendica/photo/delete (DELETE; AUTH) +#### Parameters +* photo_id: id of the photo to be deleted + +deletes a single image with the specified id, is not reversible -> ensure that client is asking user for being sure to do this +Sets item table entries for this photo to deleted = 1 + +#### Return values + +On success: +* JSON return {"result":"deleted","message":"photo with id 'xyz' has been deleted from server."} + +On error: +* 403 FORBIDDEN: if not authenticated +* 400 BADREQUEST: "no photo_id specified", "photo not available" +* 500 INTERNALSERVERERROR: "unknown error on deleting photo", "problem with deleting items occurred" + + +--- +### friendica/direct_messages_setseen (GET; AUTH) +#### Parameters +* id: id of the message to be updated as seen + +#### Return values + +On success: +* JSON return {"result":"ok","message":"message set to seen"} + +On error: +* different JSON returns {"result":"error","message":"xyz"} + +--- +### friendica/direct_messages_search (GET; AUTH) +#### Parameters +* searchstring: string for which the API call should search as '%searchstring%' in field 'body' of all messages of the authenticated user (caption ignored) + +#### Return values +Returns only tested with JSON, XML might work as well. + +On success: +* JSON return {"success":"true","search_results": array of found messages} +* JSOn return {"success":"false","search_results":"nothing found"} + +On error: +* different JSON returns {"result":"error","message":"searchstring not specified"} + +--- +### friendica/profile/show (GET; AUTH) +show data of all profiles or a single profile of the authenticated user + +#### Parameters +* profile_id: id of the profile to be returned (optional, if omitted all profiles are returned by default) + +#### Return values +On success: Array of: + +* multi_profiles: true if user has activated multi_profiles +* global_dir: URL of the global directory set in server settings +* friendica_owner: user data of the authenticated user +* profiles: array of the profile data + +On error: +HTTP 403 Forbidden: when no authentication provided +HTTP 400 Bad Request: if given profile_id is not in db or not assigned to authenticated user + +General description of profile data in API returns: +* profile_id +* profile_name +* is_default: true if this is the public profile +* hide_friends: true if friends are hidden +* profile_photo +* profile_thumb +* publish: true if published on the server's local directory +* net_publish: true if published to global_dir +* description ... homepage: different data fields from 'profile' table in database +* users: array with the users allowed to view this profile (empty if is_default=true) + + +--- +## Not Implemented API calls +The following API calls are implemented in GNU Social but not in Friendica: (incomplete) + +* statuses/retweets_of_me +* friendships/create +* friendships/destroy +* friendships/exists +* friendships/show +* account/update_profile_background_image +* blocks/create +* blocks/destroy + +The following API calls from the Twitter API aren't implemented neither in Friendica nor in GNU Social: + +* statuses/mentions_timeline +* statuses/retweets/:id +* statuses/oembed +* statuses/retweeters/ids +* statuses/lookup +* direct_messages/show +* search/tweets +* friendships/no_retweets/ids +* friendships/incoming +* friendships/outgoing +* friendships/update +* friends/list +* friendships/lookup +* account/settings +* account/update_delivery_device +* account/update_profile +* account/update_profile_background_image +* blocks/list +* blocks/ids +* users/lookup +* users/show +* users/search +* account/remove_profile_banner +* account/update_profile_banner +* users/profile_banner +* mutes/users/create +* mutes/users/destroy +* mutes/users/ids +* mutes/users/list +* users/suggestions/:slug +* users/suggestions +* users/suggestions/:slug/members +* favorites/list +* lists/list +* lists/statuses +* lists/members/destroy +* lists/memberships +* lists/subscribers +* lists/subscribers/create +* lists/subscribers/show +* lists/subscribers/destroy +* lists/members/create_all +* lists/members/show +* lists/members +* lists/members/create +* lists/destroy +* lists/update +* lists/create +* lists/show +* lists/subscriptions +* lists/members/destroy_all +* lists/ownerships +* saved_searches/list +* saved_searches/show/:id +* saved_searches/create +* saved_searches/destroy/:id +* geo/id/:place_id +* geo/reverse_geocode +* geo/search +* geo/place +* trends/place +* trends/available +* help/configuration +* help/languages +* help/privacy +* help/tos +* trends/closest +* users/report_spam + +--- + +--- + +## Usage Examples +### BASH / cURL +Betamax has documentated some example API usage from a [bash script](https://en.wikipedia.org/wiki/Bash_(Unix_shell) employing [curl](https://en.wikipedia.org/wiki/CURL) (see [his posting](https://betamax65.de/display/betamax65/43539)). + +/usr/bin/curl -u USER:PASS https://YOUR.FRIENDICA.TLD/api/statuses/update.xml -d source="some source id" -d status="the status you want to post" + +### Python +The [RSStoFriedika](https://github.com/pafcu/RSStoFriendika) code can be used as an example of how to use the API with python. The lines for posting are located at [line 21](https://github.com/pafcu/RSStoFriendika/blob/master/RSStoFriendika.py#L21) and following. + +def tweet(server, message, group_allow=None): +url = server + '/api/statuses/update' +urllib2.urlopen(url, urllib.urlencode({'status': message,'group_allow[]':group_allow}, doseq=True)) + +There is also a [module for python 3](https://bitbucket.org/tobiasd/python-friendica) for using the API. diff --git a/doc/autoloader.md b/doc/autoloader.md index 83f1010440..5b894cb1a0 100644 --- a/doc/autoloader.md +++ b/doc/autoloader.md @@ -1,192 +1,197 @@ -Autoloader with Composer -========== - -* [Home](help) - * [Developer Intro](help/Developers-Intro) - -Friendica uses [Composer](https://getcomposer.org) to manage dependencies libraries and the class autoloader both for libraries and namespaced Friendica classes. - -It's a command-line tool that downloads required libraries into the `vendor` folder and makes any namespaced class in `src` available through the whole application through `boot.php`. - -* [Using Composer](help/Composer) - -## A quick introduction to class autoloading - -The autoloader dynamically includes the file defining a class when it is first referenced, either by instantiating an object or simply making sure that it is available, without the need to explicitly use "require_once". - -Once it is set up you don't have to directly use it, you can directly use any class that is covered by the autoloader (currently `vendor` and `src`) - -Under the hood, Composer registers a callback with [`spl_autoload_register()`](http://php.net/manual/en/function.spl-autoload-register.php) that receives a class name as an argument and includes the corresponding class definition file. -For more info about PHP autoloading, please refer to the [official PHP documentation](http://php.net/manual/en/language.oop5.autoload.php). - -### Example - -Let's say you have a PHP file in `src/` that define a very useful class: - -```php - // src/ItemsManager.php - getAll(); - - // pass $items to template - // return result - } -``` - -That's a quite simple example, but look: no `require()`! -If you need to use a class, you can simply use it and you don't need to do anything else. - -Going further: now we have a bunch of `*Manager` classes that cause some code duplication, let's define a `BaseManager` class, where we move all common code between all managers: - -```php - // src/BaseManager.php - getAll(); + + // pass $items to template + // return result +} +``` + +That's a quite simple example, but look: no `require()`! +If you need to use a class, you can simply use it and you don't need to do anything else. + +Going further: now we have a bunch of `*Manager` classes that cause some code duplication, let's define a `BaseManager` class, where we move all common code between all managers: + +```php +// src/BaseManager.php + diff --git a/include/Emailer.php b/include/Emailer.php index b0cdc3fe63..9df6ac36c9 100644 --- a/include/Emailer.php +++ b/include/Emailer.php @@ -81,4 +81,3 @@ class Emailer { return $res; } } -?> diff --git a/include/ForumManager.php b/include/ForumManager.php index c2a20df29f..8f38ed3a38 100644 --- a/include/ForumManager.php +++ b/include/ForumManager.php @@ -1,5 +1,7 @@ Notification identifier * int 'total' => Total number of available network notifications @@ -436,7 +436,7 @@ class NotificationsManager { } /** - * @brief Total number of system notifications + * @brief Total number of system notifications * @param int|string $seen * If 0 only include notifications into the query * which aren't marked as "seen" @@ -460,13 +460,13 @@ class NotificationsManager { /** * @brief Get system notifications - * + * * @param int|string $seen * If 0 only include notifications into the query * which aren't marked as "seen" * @param int $start Start the query at this point * @param int $limit Maximum number of query results - * + * * @return array with * string 'ident' => Notification identifier * int 'total' => Total number of available system notifications @@ -502,7 +502,7 @@ class NotificationsManager { /** * @brief Addional SQL query string for the personal notifications - * + * * @return string The additional sql query */ private function _personal_sql_extra() { @@ -520,7 +520,7 @@ class NotificationsManager { } /** - * @brief Total number of personal notifications + * @brief Total number of personal notifications * @param int|string $seen * If 0 only include notifications into the query * which aren't marked as "seen" @@ -550,13 +550,13 @@ class NotificationsManager { /** * @brief Get personal notifications - * + * * @param int|string $seen * If 0 only include notifications into the query * which aren't marked as "seen" * @param int $start Start the query at this point * @param int $limit Maximum number of query results - * + * * @return array with * string 'ident' => Notification identifier * int 'total' => Total number of available personal notifications @@ -573,13 +573,13 @@ class NotificationsManager { $sql_seen = " AND `item`.`unseen` = 1 "; $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, `item`.`unseen`, - `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` AS `object`, - `pitem`.`author-name` AS `pname`, `pitem`.`author-link` AS `plink`, `pitem`.`guid` AS `pguid` + `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` AS `object`, + `pitem`.`author-name` AS `pname`, `pitem`.`author-link` AS `plink`, `pitem`.`guid` AS `pguid` FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent` WHERE `item`.`visible` = 1 $sql_extra $sql_seen - AND `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0 + AND `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0 ORDER BY `item`.`created` DESC LIMIT %d, %d " , intval(local_user()), intval($start), @@ -588,7 +588,7 @@ class NotificationsManager { if (dbm::is_result($r)) $notifs = $this->formatNotifs($r, $ident); - + $arr = array ( 'notifications' => $notifs, 'ident' => $ident, @@ -599,7 +599,7 @@ class NotificationsManager { } /** - * @brief Total number of home notifications + * @brief Total number of home notifications * @param int|string $seen * If 0 only include notifications into the query * which aren't marked as "seen" @@ -626,13 +626,13 @@ class NotificationsManager { /** * @brief Get home notifications - * + * * @param int|string $seen * If 0 only include notifications into the query * which aren't marked as "seen" * @param int $start Start the query at this point * @param int $limit Maximum number of query results - * + * * @return array with * string 'ident' => Notification identifier * int 'total' => Total number of available home notifications @@ -673,7 +673,7 @@ class NotificationsManager { } /** - * @brief Total number of introductions + * @brief Total number of introductions * @param bool $all * If false only include introductions into the query * which aren't marked as ignored @@ -698,13 +698,13 @@ class NotificationsManager { /** * @brief Get introductions - * + * * @param bool $all * If false only include introductions into the query * which aren't marked as ignored * @param int $start Start the query at this point * @param int $limit Maximum number of query results - * + * * @return array with * string 'ident' => Notification identifier * int 'total' => Total number of available introductions @@ -749,7 +749,7 @@ class NotificationsManager { /** * @brief Format the notification query in an usable array - * + * * @param array $intros The array from the db query * @return array with the introductions */ diff --git a/include/Photo.php b/include/Photo.php index 828dce82d7..7341935767 100644 --- a/include/Photo.php +++ b/include/Photo.php @@ -4,6 +4,8 @@ * @brief This file contains the Photo class for image processing */ +use Friendica\App; + require_once("include/photos.php"); class Photo { @@ -68,7 +70,9 @@ class Photo { $this->image->destroy(); return; } - imagedestroy($this->image); + if (is_resource($this->image)) { + imagedestroy($this->image); + } } } @@ -324,6 +328,7 @@ class Photo { return; } + // if script dies at this point check memory_limit setting in php.ini $this->image = imagerotate($this->image,$degrees,0); $this->width = imagesx($this->image); $this->height = imagesy($this->image); @@ -620,7 +625,7 @@ class Photo { - public function store($uid, $cid, $rid, $filename, $album, $scale, $profile = 0, $allow_cid = '', $allow_gid = '', $deny_cid = '', $deny_gid = '') { + public function store($uid, $cid, $rid, $filename, $album, $scale, $profile = 0, $allow_cid = '', $allow_gid = '', $deny_cid = '', $deny_gid = '', $desc = '') { $r = q("SELECT `guid` FROM `photo` WHERE `resource-id` = '%s' AND `guid` != '' LIMIT 1", dbesc($rid) @@ -657,7 +662,8 @@ class Photo { `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', - `deny_gid` = '%s' + `deny_gid` = '%s', + `desc` = '%s' WHERE `id` = %d", intval($uid), @@ -679,12 +685,13 @@ class Photo { dbesc($allow_gid), dbesc($deny_cid), dbesc($deny_gid), + dbesc($desc), intval($x[0]['id']) ); } else { $r = q("INSERT INTO `photo` - (`uid`, `contact-id`, `guid`, `resource-id`, `created`, `edited`, `filename`, type, `album`, `height`, `width`, `datasize`, `data`, `scale`, `profile`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`) - VALUES (%d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, '%s', %d, %d, '%s', '%s', '%s', '%s')", + (`uid`, `contact-id`, `guid`, `resource-id`, `created`, `edited`, `filename`, type, `album`, `height`, `width`, `datasize`, `data`, `scale`, `profile`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `desc`) + VALUES (%d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, '%s', %d, %d, '%s', '%s', '%s', '%s', '%s')", intval($uid), intval($cid), dbesc($guid), @@ -703,7 +710,8 @@ class Photo { dbesc($allow_cid), dbesc($allow_gid), dbesc($deny_cid), - dbesc($deny_gid) + dbesc($deny_gid), + dbesc($desc) ); } diff --git a/include/Smilies.php b/include/Smilies.php index d67b92d8b0..f4de32f8f8 100644 --- a/include/Smilies.php +++ b/include/Smilies.php @@ -5,6 +5,8 @@ * @brief This file contains the Smilies class which contains functions to handle smiles */ +use Friendica\App; + /** * This class contains functions to handle smiles */ @@ -13,13 +15,13 @@ class Smilies { /** * @brief Function to list all smilies - * + * * Get an array of all smilies, both internal and from addons. - * + * * @return array * 'texts' => smilie shortcut * 'icons' => icon in html - * + * * @hook smilie ('texts' => smilies texts array, 'icons' => smilies html array) */ public static function get_list() { @@ -64,41 +66,41 @@ class Smilies { ); $icons = array( - '<3', - '</3', - '<\\3', - ':-)', - ';-)', - ':-(', - ':-P', - ':-p', - ':-\', - ':-\', - ':-x', - ':-X', - ':-D', - '8-|', - '8-O', - ':-O', - '\\o/', - 'o.O', - 'O.o', - 'o_O', - 'O_o', - ':\'(', - ':-!', - ':-/', - ':-[', - '8-)', - ':beer', - ':homebrew', - ':coffee', - ':facepalm', - ':like', - ':dislike', - '~friendica ~friendica', - 'redred#matrix', - 'redred#matrixmatrix' + '<3', + '</3', + '<\\3', + ':-)', + ';-)', + ':-(', + ':-P', + ':-p', + ':-\', + ':-\', + ':-x', + ':-X', + ':-D', + '8-|', + '8-O', + ':-O', + '\\o/', + 'o.O', + 'O.o', + 'o_O', + 'O_o', + ':\'(', + ':-!', + ':-/', + ':-[', + '8-)', + ':beer', + ':homebrew', + ':coffee', + ':facepalm', + ':like', + ':dislike', + '~friendica ~friendica', + 'redred#matrix', + 'redred#matrixmatrix' ); $params = array('texts' => $texts, 'icons' => $icons); @@ -121,7 +123,7 @@ class Smilies { * * @param string $s * @param boolean $sample - * + * * @return string HML Output of the Smilie */ public static function replace($s, $sample = false) { @@ -166,7 +168,7 @@ class Smilies { * * @param string $x * @return string HTML Output - * + * * @todo: Rework because it doesn't work correctly */ private function preg_heart($x) { @@ -174,7 +176,7 @@ class Smilies { return $x[0]; $t = ''; for($cnt = 0; $cnt < strlen($x[1]); $cnt ++) - $t .= '<3'; + $t .= '<3'; $r = str_replace($x[0],$t,$x[0]); return $r; } diff --git a/include/acl_selectors.php b/include/acl_selectors.php index f57af575af..c7c6bb206a 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -4,6 +4,8 @@ * @file include/acl_selectors.php */ +use Friendica\App; + require_once "include/contact_selectors.php"; require_once "include/contact_widgets.php"; require_once "include/DirSearch.php"; @@ -543,7 +545,7 @@ function acl_lookup(App $a, $out_type = 'json') { if ($type == '') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum`, `prv` FROM `contact` + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' AND NOT (`network` IN ('%s', '%s')) $sql_extra2 @@ -552,7 +554,7 @@ function acl_lookup(App $a, $out_type = 'json') { dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET) ); } elseif ($type == 'c') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum`, `prv` FROM `contact` + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' AND NOT (`network` IN ('%s')) $sql_extra2 @@ -562,7 +564,7 @@ function acl_lookup(App $a, $out_type = 'json') { ); } elseif ($type == 'm') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag` FROM `contact` + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact` WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `network` IN ('%s','%s','%s') $sql_extra2 @@ -573,7 +575,7 @@ function acl_lookup(App $a, $out_type = 'json') { dbesc(NETWORK_DIASPORA) ); } elseif ($type == 'a') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum`, `prv` FROM `contact` + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` WHERE `uid` = %d AND `pending` = 0 $sql_extra2 ORDER BY `name` ASC ", @@ -617,6 +619,7 @@ function acl_lookup(App $a, $out_type = 'json') { 'network' => $g['network'], 'link' => $g['url'], 'nick' => htmlentities(($g['attag']) ? $g['attag'] : $g['nick']), + 'addr' => htmlentities(($g['addr']) ? $g['addr'] : $g['url']), 'forum' => ((x($g, 'forum') || x($g, 'prv')) ? 1 : 0), ); } @@ -661,6 +664,7 @@ function acl_lookup(App $a, $out_type = 'json') { 'network' => $contact['network'], 'link' => $contact['url'], 'nick' => htmlentities($contact['nick'] ? : $contact['addr']), + 'addr' => htmlentities(($contact['addr']) ? $contact['addr'] : $contact['url']), 'forum' => $contact['forum'] ); } diff --git a/include/api.php b/include/api.php index 97c09c20a9..67e1917258 100644 --- a/include/api.php +++ b/include/api.php @@ -6,7 +6,8 @@ * @todo Automatically detect if incoming data is HTML or BBCode */ -use \Friendica\Core\Config; +use Friendica\App; +use Friendica\Core\Config; require_once 'include/HTTPExceptions.php'; require_once 'include/bbcode.php'; @@ -525,6 +526,15 @@ $called_api = null; } } + if (is_null($user) && x($_GET, 'profileurl')) { + $user = dbesc(normalise_link($_GET['profileurl'])); + $nick = $user; + $extra_query = "AND `contact`.`nurl` = '%s' "; + if (api_user() !== false) { + $extra_query .= "AND `contact`.`uid`=".intval(api_user()); + } + } + if (is_null($user) AND ($a->argc > (count($called_api) - 1)) AND (count($called_api) > 0)) { $argid = count($called_api); list($user, $null) = explode(".", $a->argv[$argid]); @@ -1400,6 +1410,7 @@ $called_api = null; /// @TODO move to top of file or somewhere better api_register_func('api/users/show','api_users_show'); + api_register_func('api/externalprofile/show','api_users_show'); function api_users_search($type) { @@ -3276,14 +3287,117 @@ $called_api = null; api_register_func('api/oauth/request_token', 'api_oauth_request_token', false); api_register_func('api/oauth/access_token', 'api_oauth_access_token', false); + + /** + * @brief delete a complete photoalbum with all containing photos from database through api + * + * @param string $type Known types are 'atom', 'rss', 'xml' and 'json' + * @return string + */ + function api_fr_photoalbum_delete($type) { + if (api_user() === false) { + throw new ForbiddenException(); + } + // input params + $album = (x($_REQUEST,'album') ? $_REQUEST['album'] : ""); + + // we do not allow calls without album string + if ($album == "") { + throw new BadRequestException("no albumname specified"); + } + // check if album is existing + $r = q("SELECT DISTINCT `resource-id` FROM `photo` WHERE `uid` = %d AND `album` = '%s'", + intval(api_user()), + dbesc($album)); + if (!dbm::is_result($r)) + throw new BadRequestException("album not available"); + + // function for setting the items to "deleted = 1" which ensures that comments, likes etc. are not shown anymore + // to the user and the contacts of the users (drop_items() performs the federation of the deletion to other networks + foreach ($r as $rr) { + $photo_item = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `resource-id` = '%s' AND `type` = 'photo'", + intval(local_user()), + dbesc($rr['resource-id']) + ); + + if (!dbm::is_result($photo_item)) { + throw new InternalServerErrorException("problem with deleting items occured"); + } + drop_item($photo_item[0]['id'],false); + } + + // now let's delete all photos from the album + $result = q("DELETE FROM `photo` WHERE `uid` = %d AND `album` = '%s'", + intval(api_user()), + dbesc($album)); + + // return success of deletion or error message + if ($result) { + $answer = array('result' => 'deleted', 'message' => 'album `' . $album . '` with all containing photos has been deleted.'); + return api_format_data("photoalbum_delete", $type, array('$result' => $answer)); + } else { + throw new InternalServerErrorException("unknown error - deleting from database failed"); + } + + } + + /** + * @brief update the name of the album for all photos of an album + * + * @param string $type Known types are 'atom', 'rss', 'xml' and 'json' + * @return string + */ + function api_fr_photoalbum_update($type) { + if (api_user() === false) { + throw new ForbiddenException(); + } + // input params + $album = (x($_REQUEST,'album') ? $_REQUEST['album'] : ""); + $album_new = (x($_REQUEST,'album_new') ? $_REQUEST['album_new'] : ""); + + // we do not allow calls without album string + if ($album == "") { + throw new BadRequestException("no albumname specified"); + } + if ($album_new == "") { + throw new BadRequestException("no new albumname specified"); + } + // check if album is existing + $r = q("SELECT `id` FROM `photo` WHERE `uid` = %d AND `album` = '%s'", + intval(api_user()), + dbesc($album)); + if (!dbm::is_result($r)) { + throw new BadRequestException("album not available"); + } + // now let's update all photos to the albumname + $result = q("UPDATE `photo` SET `album` = '%s' WHERE `uid` = %d AND `album` = '%s'", + dbesc($album_new), + intval(api_user()), + dbesc($album)); + + // return success of updating or error message + if ($result) { + $answer = array('result' => 'updated', 'message' => 'album `' . $album . '` with all containing photos has been renamed to `' . $album_new . '`.'); + return api_format_data("photoalbum_update", $type, array('$result' => $answer)); + } else { + throw new InternalServerErrorException("unknown error - updating in database failed"); + } + } + + + /** + * @brief list all photos of the authenticated user + * + * @param string $type Known types are 'atom', 'rss', 'xml' and 'json' + * @return string + */ function api_fr_photos_list($type) { if (api_user() === false) { throw new ForbiddenException(); } - - $r = q("SELECT `resource-id`, MAX(`scale`) AS `scale`, `album`, `filename`, `type` - FROM `photo` - WHERE `uid` = %d AND `album` != 'Contact Photos' GROUP BY `resource-id`, `album`, `filename`, `type`", + $r = q("SELECT `resource-id`, MAX(scale) AS `scale`, `album`, `filename`, `type`, MAX(`created`) AS `created`, + MAX(`edited`) AS `edited`, MAX(`desc`) AS `desc` FROM `photo` + WHERE `uid` = %d AND `album` != 'Contact Photos' GROUP BY `resource-id`", intval(local_user()) ); $typetoext = array( @@ -3291,7 +3405,7 @@ $called_api = null; 'image/png' => 'png', 'image/gif' => 'gif' ); - $data = array('photo' => array()); + $data = array('photo'=>array()); if (dbm::is_result($r)) { foreach ($r as $rr) { $photo = array(); @@ -3300,6 +3414,9 @@ $called_api = null; $photo['filename'] = $rr['filename']; $photo['type'] = $rr['type']; $thumb = App::get_baseurl() . "/photo/" . $rr['resource-id'] . "-" . $rr['scale'] . "." . $typetoext[$rr['type']]; + $photo['created'] = $rr['created']; + $photo['edited'] = $rr['edited']; + $photo['desc'] = $rr['desc']; if ($type == "xml") { $data['photo'][] = array("@attributes" => $photo, "1" => $thumb); @@ -3312,26 +3429,563 @@ $called_api = null; return api_format_data("photos", $type, $data); } + /** + * @brief upload a new photo or change an existing photo + * + * @param string $type Known types are 'atom', 'rss', 'xml' and 'json' + * @return string + */ + function api_fr_photo_create_update($type) { + if (api_user() === false) { + throw new ForbiddenException(); + } + // input params + $photo_id = (x($_REQUEST, 'photo_id') ? $_REQUEST['photo_id'] : null); + $desc = (x($_REQUEST, 'desc') ? $_REQUEST['desc'] : (array_key_exists('desc', $_REQUEST) ? "" : null)); // extra check necessary to distinguish between 'not provided' and 'empty string' + $album = (x($_REQUEST,'album') ? $_REQUEST['album'] : null); + $album_new = (x($_REQUEST,'album_new') ? $_REQUEST['album_new'] : null); + $allow_cid = (x($_REQUEST, 'allow_cid') ? $_REQUEST['allow_cid'] : (array_key_exists('allow_cid', $_REQUEST) ? " " : null)); + $deny_cid = (x($_REQUEST, 'deny_cid') ? $_REQUEST['deny_cid'] : (array_key_exists('deny_cid', $_REQUEST) ? " " : null)); + $allow_gid = (x($_REQUEST, 'allow_gid') ? $_REQUEST['allow_gid'] : (array_key_exists('allow_gid', $_REQUEST) ? " " : null)); + $deny_gid = (x($_REQUEST, 'deny_gid') ? $_REQUEST['deny_gid'] : (array_key_exists('deny_gid', $_REQUEST) ? " " : null)); + $visibility = (x($_REQUEST, 'visibility') ? (($_REQUEST['visibility'] == "true" || $_REQUEST['visibility'] == 1) ? true : false) : false); + + // do several checks on input parameters + // we do not allow calls without album string + if ($album == null) { + throw new BadRequestException("no albumname specified"); + } + // if photo_id == null --> we are uploading a new photo + if ($photo_id == null) { + $mode = "create"; + + // error if no media posted in create-mode + if (!x($_FILES,'media')) { + // Output error + throw new BadRequestException("no media data submitted"); + } + + // album_new will be ignored in create-mode + $album_new = ""; + } else { + $mode = "update"; + + // check if photo is existing in database + $r = q("SELECT `id` FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' AND `album` = '%s'", + intval(api_user()), + dbesc($photo_id), + dbesc($album)); + if (!dbm::is_result($r)) { + throw new BadRequestException("photo not available"); + } + } + + // checks on acl strings provided by clients + $acl_input_error = false; + $acl_input_error |= check_acl_input($allow_cid); + $acl_input_error |= check_acl_input($deny_cid); + $acl_input_error |= check_acl_input($allow_gid); + $acl_input_error |= check_acl_input($deny_gid); + if ($acl_input_error) { + throw new BadRequestException("acl data invalid"); + } + // now let's upload the new media in create-mode + if ($mode == "create") { + $media = $_FILES['media']; + $data = save_media_to_database("photo", $media, $type, $album, trim($allow_cid), trim($deny_cid), trim($allow_gid), trim($deny_gid), $desc, $visibility); + + // return success of updating or error message + if (!is_null($data)) { + return api_format_data("photo_create", $type, $data); + } else { + throw new InternalServerErrorException("unknown error - uploading photo failed, see Friendica log for more information"); + } + } + + // now let's do the changes in update-mode + if ($mode == "update") { + $sql_extra = ""; + + if (!is_null($desc)) { + $sql_extra .= (($sql_extra != "") ? " ," : "") . "`desc` = '$desc'"; + } + + if (!is_null($album_new)) { + $sql_extra .= (($sql_extra != "") ? " ," : "") . "`album` = '$album_new'"; + } + + if (!is_null($allow_cid)) { + $allow_cid = trim($allow_cid); + $sql_extra .= (($sql_extra != "") ? " ," : "") . "`allow_cid` = '$allow_cid'"; + } + + if (!is_null($deny_cid)) { + $deny_cid = trim($deny_cid); + $sql_extra .= (($sql_extra != "") ? " ," : "") . "`deny_cid` = '$deny_cid'"; + } + + if (!is_null($allow_gid)) { + $allow_gid = trim($allow_gid); + $sql_extra .= (($sql_extra != "") ? " ," : "") . "`allow_gid` = '$allow_gid'"; + } + + if (!is_null($deny_gid)) { + $deny_gid = trim($deny_gid); + $sql_extra .= (($sql_extra != "") ? " ," : "") . "`deny_gid` = '$deny_gid'"; + } + + $result = false; + if ($sql_extra != "") { + $nothingtodo = false; + $result = q("UPDATE `photo` SET %s, `edited`='%s' WHERE `uid` = %d AND `resource-id` = '%s' AND `album` = '%s'", + $sql_extra, + datetime_convert(), // update edited timestamp + intval(api_user()), + dbesc($photo_id), + dbesc($album)); + } else { + $nothingtodo = true; + } + + if (x($_FILES,'media')) { + $nothingtodo = false; + $media = $_FILES['media']; + $data = save_media_to_database("photo", $media, $type, $album, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $desc, 0, $visibility, $photo_id); + if (!is_null($data)) { + return api_format_data("photo_update", $type, $data); + } + } + + // return success of updating or error message + if ($result) { + $answer = array('result' => 'updated', 'message' => 'Image id `' . $photo_id . '` has been updated.'); + return api_format_data("photo_update", $type, array('$result' => $answer)); + } else { + if ($nothingtodo) { + $answer = array('result' => 'cancelled', 'message' => 'Nothing to update for image id `' . $photo_id . '`.'); + return api_format_data("photo_update", $type, array('$result' => $answer)); + } + throw new InternalServerErrorException("unknown error - update photo entry in database failed"); + } + } + throw new InternalServerErrorException("unknown error - this error on uploading or updating a photo should never happen"); + } + + + /** + * @brief delete a single photo from the database through api + * + * @param string $type Known types are 'atom', 'rss', 'xml' and 'json' + * @return string + */ + function api_fr_photo_delete($type) { + if (api_user() === false) { + throw new ForbiddenException(); + } + // input params + $photo_id = (x($_REQUEST, 'photo_id') ? $_REQUEST['photo_id'] : null); + + // do several checks on input parameters + // we do not allow calls without photo id + if ($photo_id == null) { + throw new BadRequestException("no photo_id specified"); + } + // check if photo is existing in database + $r = q("SELECT `id` FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s'", + intval(api_user()), + dbesc($photo_id) + ); + if (!dbm::is_result($r)) { + throw new BadRequestException("photo not available"); + } + // now we can perform on the deletion of the photo + $result = q("DELETE FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s'", + intval(api_user()), + dbesc($photo_id)); + + // return success of deletion or error message + if ($result) { + // retrieve the id of the parent element (the photo element) + $photo_item = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `resource-id` = '%s' AND `type` = 'photo'", + intval(local_user()), + dbesc($photo_id) + ); + + if (!dbm::is_result($photo_item)) { + throw new InternalServerErrorException("problem with deleting items occured"); + } + // function for setting the items to "deleted = 1" which ensures that comments, likes etc. are not shown anymore + // to the user and the contacts of the users (drop_items() do all the necessary magic to avoid orphans in database and federate deletion) + drop_item($photo_item[0]['id'], false); + + $answer = array('result' => 'deleted', 'message' => 'photo with id `' . $photo_id . '` has been deleted from server.'); + return api_format_data("photo_delete", $type, array('$result' => $answer)); + } else { + throw new InternalServerErrorException("unknown error on deleting photo from database table"); + } + } + + + /** + * @brief returns the details of a specified photo id, if scale is given, returns the photo data in base 64 + * + * @param string $type Known types are 'atom', 'rss', 'xml' and 'json' + * @return string + */ function api_fr_photo_detail($type) { if (api_user() === false) { throw new ForbiddenException(); - } elseif (!x($_REQUEST, 'photo_id')) { + } + if (!x($_REQUEST, 'photo_id')) { throw new BadRequestException("No photo id."); } $scale = (x($_REQUEST, 'scale') ? intval($_REQUEST['scale']) : false); - $scale_sql = ($scale === false ? "" : sprintf("AND `scale`=%d",intval($scale))); - $data_sql = ($scale === false ? "" : "ANY_VALUE(`data`) AS data`,"); + $photo_id = $_REQUEST['photo_id']; - $r = q("SELECT %s ANY_VALUE(`resource-id`) AS `resource-id`, ANY_VALUE(`created`) AS `created`, - ANY_VALUE(`edited`) AS `edited`, ANY_VALUE(`title`) AS `title`, ANY_VALUE(`desc`) AS `desc`, - ANY_VALUE(`album`) AS `album`, ANY_VALUE(`filename`) AS `filename`, ANY_VALUE(`type`) AS `type`, - ANY_VALUE(`height`) AS `height`, ANY_VALUE(`width`) AS `width`, ANY_VALUE(`datasize`) AS `datasize`, - ANY_VALUE(`profile`) AS `profile`, min(`scale`) as minscale, max(`scale`) as maxscale - FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' %s", + // prepare json/xml output with data from database for the requested photo + $data = prepare_photo_data($type, $scale, $photo_id); + + return api_format_data("photo_detail", $type, $data); + } + + + /** + * @brief updates the profile image for the user (either a specified profile or the default profile) + * + * @param string $type Known types are 'atom', 'rss', 'xml' and 'json' + * @return string + */ + function api_account_update_profile_image($type) { + if (api_user() === false) { + throw new ForbiddenException(); + } + // input params + $profileid = (x($_REQUEST, 'profile_id') ? $_REQUEST['profile_id'] : 0); + + // error if image data is missing + if (!x($_FILES, 'image')) { + throw new BadRequestException("no media data submitted"); + } + + // check if specified profile id is valid + if ($profileid != 0) { + $r = q("SELECT `id` FROM `profile` WHERE `uid` = %d AND `id` = %d", + intval(api_user()), + intval($profileid)); + // error message if specified profile id is not in database + if (!dbm::is_result($r)) { + throw new BadRequestException("profile_id not available"); + } + $is_default_profile = $r['profile']; + } else { + $is_default_profile = 1; + } + + // get mediadata from image or media (Twitter call api/account/update_profile_image provides image) + $media = null; + if (x($_FILES, 'image')) { + $media = $_FILES['image']; + } elseif (x($_FILES, 'media')) { + $media = $_FILES['media']; + } + // save new profile image + $data = save_media_to_database("profileimage", $media, $type, t('Profile Photos'), "", "", "", "", "", $is_default_profile); + + // get filetype + if (is_array($media['type'])) { + $filetype = $media['type'][0]; + } else { + $filetype = $media['type']; + } + if ($filetype == "image/jpeg") { + $fileext = "jpg"; + } elseif ($filetype == "image/png") { + $fileext = "png"; + } + // change specified profile or all profiles to the new resource-id + if ($is_default_profile) { + $r = q("UPDATE `photo` SET `profile` = 0 WHERE `profile` = 1 AND `resource-id` != '%s' AND `uid` = %d", + dbesc($data['photo']['id']), + intval(local_user()) + ); + + $r = q("UPDATE `contact` SET `photo` = '%s', `thumb` = '%s', `micro` = '%s' WHERE `self` AND `uid` = %d", + dbesc(App::get_baseurl() . '/photo/' . $data['photo']['id'] . '-4.' . $fileext), + dbesc(App::get_baseurl() . '/photo/' . $data['photo']['id'] . '-5.' . $fileext), + dbesc(App::get_baseurl() . '/photo/' . $data['photo']['id'] . '-6.' . $fileext), + intval(local_user()) + ); + } else { + $r = q("UPDATE `profile` SET `photo` = '%s', `thumb` = '%s' WHERE `id` = %d AND `uid` = %d", + dbesc(App::get_baseurl() . '/photo/' . $data['photo']['id'] . '-4.' . $filetype), + dbesc(App::get_baseurl() . '/photo/' . $data['photo']['id'] . '-5.' . $filetype), + intval($_REQUEST['profile']), + intval(local_user()) + ); + } + + // we'll set the updated profile-photo timestamp even if it isn't the default profile, + // so that browsers will do a cache update unconditionally + + $r = q("UPDATE `contact` SET `avatar-date` = '%s' WHERE `self` = 1 AND `uid` = %d", + dbesc(datetime_convert()), + intval(local_user()) + ); + + // Update global directory in background + //$user = api_get_user(get_app()); + $url = App::get_baseurl() . '/profile/' . get_app()->user['nickname']; + if ($url && strlen(get_config('system', 'directory'))) { + proc_run(PRIORITY_LOW, "include/directory.php", $url); + } + + require_once 'include/profile_update.php'; + profile_change(); + + // output for client + if ($data) { + return api_account_verify_credentials($type); + } else { + // SaveMediaToDatabase failed for some reason + throw new InternalServerErrorException("image upload failed"); + } + } + + // place api-register for photoalbum calls before 'api/friendica/photo', otherwise this function is never reached + api_register_func('api/friendica/photoalbum/delete', 'api_fr_photoalbum_delete', true, API_METHOD_DELETE); + api_register_func('api/friendica/photoalbum/update', 'api_fr_photoalbum_update', true, API_METHOD_POST); + api_register_func('api/friendica/photos/list', 'api_fr_photos_list', true); + api_register_func('api/friendica/photo/create', 'api_fr_photo_create_update', true, API_METHOD_POST); + api_register_func('api/friendica/photo/update', 'api_fr_photo_create_update', true, API_METHOD_POST); + api_register_func('api/friendica/photo/delete', 'api_fr_photo_delete', true, API_METHOD_DELETE); + api_register_func('api/friendica/photo', 'api_fr_photo_detail', true); + api_register_func('api/account/update_profile_image', 'api_account_update_profile_image', true, API_METHOD_POST); + + + function check_acl_input($acl_string) { + if ($acl_string == null || $acl_string == " ") { + return false; + } + $contact_not_found = false; + + // split into array of cid's + preg_match_all("/<[A-Za-z0-9]+>/", $acl_string, $array); + + // check for each cid if it is available on server + $cid_array = $array[0]; + foreach ($cid_array as $cid) { + $cid = str_replace("<", "", $cid); + $cid = str_replace(">", "", $cid); + $contact = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d", + intval($cid), + intval(api_user())); + $contact_not_found |= !dbm::is_result($contact); + } + return $contact_not_found; + } + + function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $desc, $profile = 0, $visibility = false, $photo_id = null) { + $visitor = 0; + $src = ""; + $filetype = ""; + $filename = ""; + $filesize = 0; + + if (is_array($media)) { + if (is_array($media['tmp_name'])) { + $src = $media['tmp_name'][0]; + } else { + $src = $media['tmp_name']; + } + if (is_array($media['name'])) { + $filename = basename($media['name'][0]); + } else { + $filename = basename($media['name']); + } + if (is_array($media['size'])) { + $filesize = intval($media['size'][0]); + } else { + $filesize = intval($media['size']); + } + if (is_array($media['type'])) { + $filetype = $media['type'][0]; + } else { + $filetype = $media['type']; + } + } + + if ($filetype == "") { + $filetype=guess_image_type($filename); + } + $imagedata = getimagesize($src); + if ($imagedata) { + $filetype = $imagedata['mime']; + } + logger("File upload src: " . $src . " - filename: " . $filename . + " - size: " . $filesize . " - type: " . $filetype, LOGGER_DEBUG); + + // check if there was a php upload error + if ($filesize == 0 && $media['error'] == 1) { + throw new InternalServerErrorException("image size exceeds PHP config settings, file was rejected by server"); + } + // check against max upload size within Friendica instance + $maximagesize = get_config('system', 'maximagesize'); + if (($maximagesize) && ($filesize > $maximagesize)) { + $formattedBytes = formatBytes($maximagesize); + throw new InternalServerErrorException("image size exceeds Friendica config setting (uploaded size: $formattedBytes)"); + } + + // create Photo instance with the data of the image + $imagedata = @file_get_contents($src); + $ph = new Photo($imagedata, $filetype); + if (! $ph->is_valid()) { + throw new InternalServerErrorException("unable to process image data"); + } + + // check orientation of image + $ph->orient($src); + @unlink($src); + + // check max length of images on server + $max_length = get_config('system', 'max_image_length'); + if (! $max_length) { + $max_length = MAX_IMAGE_LENGTH; + } + if ($max_length > 0) { + $ph->scaleImage($max_length); + logger("File upload: Scaling picture to new size " . $max_length, LOGGER_DEBUG); + } + $width = $ph->getWidth(); + $height = $ph->getHeight(); + + // create a new resource-id if not already provided + $hash = ($photo_id == null) ? photo_new_resource() : $photo_id; + + if ($mediatype == "photo") { + // upload normal image (scales 0, 1, 2) + logger("photo upload: starting new photo upload", LOGGER_DEBUG); + + $r =$ph->store(local_user(), $visitor, $hash, $filename, $album, 0, 0, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + if (! $r) { + logger("photo upload: image upload with scale 0 (original size) failed"); + } + if($width > 640 || $height > 640) { + $ph->scaleImage(640); + $r = $ph->store(local_user(),$visitor, $hash, $filename, $album, 1, 0, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + if (! $r) { + logger("photo upload: image upload with scale 1 (640x640) failed"); + } + } + + if ($width > 320 || $height > 320) { + $ph->scaleImage(320); + $r = $ph->store(local_user(), $visitor, $hash, $filename, $album, 2, 0, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + if (! $r) { + logger("photo upload: image upload with scale 2 (320x320) failed"); + } + } + logger("photo upload: new photo upload ended", LOGGER_DEBUG); + } elseif ($mediatype == "profileimage") { + // upload profile image (scales 4, 5, 6) + logger("photo upload: starting new profile image upload", LOGGER_DEBUG); + + if ($width > 175 || $height > 175) { + $ph->scaleImage(175); + $r = $ph->store(local_user(),$visitor, $hash, $filename, $album, 4, $profile, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + if (! $r) { + logger("photo upload: profile image upload with scale 4 (175x175) failed"); + } + } + + if ($width > 80 || $height > 80) { + $ph->scaleImage(80); + $r = $ph->store(local_user(),$visitor, $hash, $filename, $album, 5, $profile, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + if (! $r) { + logger("photo upload: profile image upload with scale 5 (80x80) failed"); + } + } + + if ($width > 48 || $height > 48) { + $ph->scaleImage(48); + $r = $ph->store(local_user(), $visitor, $hash, $filename, $album, 6, $profile, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + if (! $r) { + logger("photo upload: profile image upload with scale 6 (48x48) failed"); + } + } + $ph->__destruct(); + logger("photo upload: new profile image upload ended", LOGGER_DEBUG); + } + + if ($r) { + // create entry in 'item'-table on new uploads to enable users to comment/like/dislike the photo + if ($photo_id == null && $mediatype == "photo") { + post_photo_item($hash, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $filetype, $visibility); + } + // on success return image data in json/xml format (like /api/friendica/photo does when no scale is given) + return prepare_photo_data($type, false, $hash); + } else { + throw new InternalServerErrorException("image upload failed"); + } + } + + function post_photo_item($hash, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $filetype, $visibility = false) { + // get data about the api authenticated user + $uri = item_new_uri(get_app()->get_hostname(), intval(api_user())); + $owner_record = q("SELECT * FROM `contact` WHERE `uid`= %d AND `self` LIMIT 1", intval(api_user())); + + $arr = array(); + $arr['guid'] = get_guid(32); + $arr['uid'] = intval(api_user()); + $arr['uri'] = $uri; + $arr['parent-uri'] = $uri; + $arr['type'] = 'photo'; + $arr['wall'] = 1; + $arr['resource-id'] = $hash; + $arr['contact-id'] = $owner_record[0]['id']; + $arr['owner-name'] = $owner_record[0]['name']; + $arr['owner-link'] = $owner_record[0]['url']; + $arr['owner-avatar'] = $owner_record[0]['thumb']; + $arr['author-name'] = $owner_record[0]['name']; + $arr['author-link'] = $owner_record[0]['url']; + $arr['author-avatar'] = $owner_record[0]['thumb']; + $arr['title'] = ""; + $arr['allow_cid'] = $allow_cid; + $arr['allow_gid'] = $allow_gid; + $arr['deny_cid'] = $deny_cid; + $arr['deny_gid'] = $deny_gid; + $arr['last-child'] = 1; + $arr['visible'] = $visibility; + $arr['origin'] = 1; + + $typetoext = array( + 'image/jpeg' => 'jpg', + 'image/png' => 'png', + 'image/gif' => 'gif' + ); + + // adds link to the thumbnail scale photo + $arr['body'] = '[url=' . App::get_baseurl() . '/photos/' . $owner_record[0]['name'] . '/image/' . $hash . ']' + . '[img]' . App::get_baseurl() . '/photo/' . $hash . '-' . "2" . '.'. $typetoext[$filetype] . '[/img]' + . '[/url]'; + + // do the magic for storing the item in the database and trigger the federation to other contacts + item_store($arr); + } + + function prepare_photo_data($type, $scale, $photo_id) { + $scale_sql = ($scale === false ? "" : sprintf("and scale=%d", intval($scale))); + $data_sql = ($scale === false ? "" : "data, "); + + // added allow_cid, allow_gid, deny_cid, deny_gid to output as string like stored in database + // clients needs to convert this in their way for further processing + $r = q("SELECT %s `resource-id`, `created`, `edited`, `title`, `desc`, `album`, `filename`, + `type`, `height`, `width`, `datasize`, `profile`, `allow_cid`, `deny_cid`, `allow_gid`, `deny_gid`, + MIN(`scale`) AS `minscale`, MAX(`scale`) AS `maxscale` + FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' %s GROUP BY `resource-id`", $data_sql, intval(local_user()), - dbesc($_REQUEST['photo_id']), + dbesc($photo_id), $scale_sql ); @@ -3341,6 +3995,7 @@ $called_api = null; 'image/gif' => 'gif' ); + // prepare output data for photo if (dbm::is_result($r)) { $data = array('photo' => $r[0]); $data['photo']['id'] = $data['photo']['resource-id']; @@ -3353,13 +4008,16 @@ $called_api = null; $data['photo']['links'] = array(); for ($k = intval($data['photo']['minscale']); $k <= intval($data['photo']['maxscale']); $k++) { $data['photo']['links'][$k . ":link"]["@attributes"] = array("type" => $data['photo']['type'], - "scale" => $k, - "href" => App::get_baseurl() . "/photo/" . $data['photo']['resource-id'] . "-" . $k . "." . $typetoext[$data['photo']['type']]); + "scale" => $k, + "href" => App::get_baseurl() . "/photo/" . $data['photo']['resource-id'] . "-" . $k . "." . $typetoext[$data['photo']['type']]); } } else { $data['photo']['link'] = array(); + // when we have profile images we could have only scales from 4 to 6, but index of array always needs to start with 0 + $i = 0; for ($k = intval($data['photo']['minscale']); $k <= intval($data['photo']['maxscale']); $k++) { - $data['photo']['link'][$k] = App::get_baseurl() . "/photo/" . $data['photo']['resource-id'] . "-" . $k . "." . $typetoext[$data['photo']['type']]; + $data['photo']['link'][$i] = App::get_baseurl() . "/photo/" . $data['photo']['resource-id'] . "-" . $k . "." . $typetoext[$data['photo']['type']]; + $i++; } } unset($data['photo']['resource-id']); @@ -3370,13 +4028,54 @@ $called_api = null; throw new NotFoundException(); } - return api_format_data("photo_detail", $type, $data); + // retrieve item element for getting activities (like, dislike etc.) related to photo + $item = q("SELECT * FROM `item` WHERE `uid` = %d AND `resource-id` = '%s' AND `type` = 'photo'", + intval(local_user()), + dbesc($photo_id) + ); + $data['photo']['friendica_activities'] = api_format_items_activities($item[0], $type); + + // retrieve comments on photo + $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`, + `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, + `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, + `contact`.`id` AS `cid` + FROM `item` + STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND `contact`.`uid` = `item`.`uid` + AND (NOT `contact`.`blocked` OR `contact`.`pending`) + WHERE `item`.`parent` = %d AND `item`.`visible` + AND NOT `item`.`moderated` AND NOT `item`.`deleted` + AND `item`.`uid` = %d AND (`item`.`verb`='%s' OR `type`='photo')", + intval($item[0]['parent']), + intval(api_user()), + dbesc(ACTIVITY_POST) + ); + + // prepare output of comments + $commentData = api_format_items($r, api_get_user(get_app()), false, $type); + $comments = array(); + if ($type == "xml") { + $k = 0; + foreach ($commentData as $comment) { + $comments[$k++ . ":comment"] = $comment; + } + } else { + foreach ($commentData as $comment) { + $comments[] = $comment; + } + } + $data['photo']['friendica_comments'] = $comments; + + // include info if rights on photo and rights on item are mismatching + $rights_mismatch = $data['photo']['allow_cid'] != $item[0]['allow_cid'] || + $data['photo']['deny_cid'] != $item[0]['deny_cid'] || + $data['photo']['allow_gid'] != $item[0]['allow_gid'] || + $data['photo']['deny_cid'] != $item[0]['deny_cid']; + $data['photo']['rights_mismatch'] = $rights_mismatch; + + return $data; } - api_register_func('api/friendica/photos/list', 'api_fr_photos_list', true); - api_register_func('api/friendica/photo', 'api_fr_photo_detail', true); - - /** * similar as /mod/redir.php @@ -4299,7 +4998,6 @@ friendships/exists friendships/show account/update_location account/update_profile_background_image -account/update_profile_image blocks/create blocks/destroy friendica/profile/update diff --git a/include/auth.php b/include/auth.php index c1a6120dbb..5dfe9d3e06 100644 --- a/include/auth.php +++ b/include/auth.php @@ -1,6 +1,7 @@ rLogFile); } } -?> diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php index a07a583538..80ee1b50dc 100644 --- a/include/bb2diaspora.php +++ b/include/bb2diaspora.php @@ -1,12 +1,15 @@ 0.9)) { - $title2 = $data["url"]; - } - $text = sprintf('%s
', - $data["url"], $data["title"], $title2); + $text = style_url_for_mastodon($data["url"]); } elseif (($simplehtml != 4) AND ($simplehtml != 0)) { $text = sprintf('%s
', $data["url"], $data["title"]); } else { @@ -168,6 +159,54 @@ function cleancss($input) { return $cleaned; } +/** + * @brief Converts [url] BBCodes in a format that looks fine on Mastodon. (callback function) + * @param array $match Array with the matching values + * @return string reformatted link including HTML codes + */ +function bb_style_url($match) { + $url = $match[1]; + + if (isset($match[2]) AND ($match[1] != $match[2])) { + return $match[0]; + } + + $parts = parse_url($url); + if (!isset($parts['scheme'])) { + return $match[0]; + } + + return style_url_for_mastodon($url); +} + +/** + * @brief Converts [url] BBCodes in a format that looks fine on Mastodon and GNU Social. + * @param string $url URL that is about to be reformatted + * @return string reformatted link including HTML codes + */ +function style_url_for_mastodon($url) { + $styled_url = $url; + + $parts = parse_url($url); + $scheme = $parts['scheme'].'://'; + $styled_url = str_replace($scheme, '', $styled_url); + + $html = ''. + ''; + + if (strlen($styled_url) > 30) { + $html .= '%s'. + ''; + + $ellipsis = substr($styled_url, 0, 30); + $rest = substr($styled_url, 30); + return sprintf($html, $url, $scheme, $ellipsis, $rest); + } else { + $html .= '%s'; + return sprintf($html, $url, $scheme, $styled_url); + } +} + function stripcode_br_cb($s) { return '[code]' . str_replace('
', '', $s[1]) . '[/code]'; } @@ -940,7 +979,14 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa // if the HTML is used to generate plain text, then don't do this search, but replace all URL of that kind to text // if ($simplehtml != 7) { if (!$forplaintext) { - $Text = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1$2', $Text); + if ($simplehtml != 7) { + $Text = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1$2', $Text); + } else { + $Text = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url]$2[/url]', $Text); + + $Text = preg_replace_callback("/\[url\]([$URLSearchString]*)\[\/url\]/ism", 'bb_style_url', $Text); + $Text = preg_replace_callback("/\[url\=([$URLSearchString]*)\]([$URLSearchString]*)\[\/url\]/ism", 'bb_style_url', $Text); + } } else { $Text = preg_replace("(\[url\]([$URLSearchString]*)\[\/url\])ism", " $1 ", $Text); $Text = preg_replace_callback("&\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]&Usi", 'bb_RemovePictureLinks', $Text); diff --git a/include/cache.php b/include/cache.php index 98799bcf40..b56906c544 100644 --- a/include/cache.php +++ b/include/cache.php @@ -5,8 +5,8 @@ * @brief Class for storing data for a short time */ -use \Friendica\Core\Config; -use \Friendica\Core\PConfig; +use Friendica\Core\Config; +use Friendica\Core\PConfig; class Cache { /** @@ -121,9 +121,9 @@ class Cache { /** * @brief Put data in the cache according to the key - * + * * The input $value can have multiple formats. - * + * * @param string $key The key to the cached data * @param mixed $valie The value that is about to be stored * @param integer $duration The cache lifespan diff --git a/include/cli_startup.php b/include/cli_startup.php index 557d08c288..01ee90f421 100644 --- a/include/cli_startup.php +++ b/include/cli_startup.php @@ -1,6 +1,7 @@ diff --git a/include/cron.php b/include/cron.php index c4299dd4c2..bac9c8a3d8 100644 --- a/include/cron.php +++ b/include/cron.php @@ -1,5 +1,6 @@ 1) { + $port = trim($serverdata[1]); + } + $server = trim($server); $user = trim($user); $pass = trim($pass); @@ -52,6 +64,11 @@ class dba { if (class_exists('\PDO') && in_array('mysql', PDO::getAvailableDrivers())) { $this->driver = 'pdo'; $connect = "mysql:host=".$server.";dbname=".$db; + + if (isset($port)) { + $connect .= ";port=".$port; + } + if (isset($a->config["system"]["db_charset"])) { $connect .= ";charset=".$a->config["system"]["db_charset"]; } @@ -61,7 +78,7 @@ class dba { } } elseif (class_exists('mysqli')) { $this->driver = 'mysqli'; - $this->db = @new mysqli($server,$user,$pass,$db); + $this->db = @new mysqli($server, $user, $pass, $db, $port); if (!mysqli_connect_errno()) { $this->connected = true; @@ -71,8 +88,8 @@ class dba { } } elseif (function_exists('mysql_connect')) { $this->driver = 'mysql'; - $this->db = mysql_connect($server,$user,$pass); - if ($this->db && mysql_select_db($db,$this->db)) { + $this->db = mysql_connect($serveraddr, $user, $pass); + if ($this->db && mysql_select_db($db, $this->db)) { $this->connected = true; if (isset($a->config["system"]["db_charset"])) { @@ -93,6 +110,8 @@ class dba { } } $a->save_timestamp($stamp1, "network"); + + self::$dbo = $this; } /** @@ -131,30 +150,6 @@ class dba { return $r[0]['db']; } - /** - * @brief Returns the number of rows - * - * @return integer - */ - public function num_rows() { - if (!$this->result) { - return 0; - } - - switch ($this->driver) { - case 'pdo': - $rows = $this->result->rowCount(); - break; - case 'mysqli': - $rows = $this->result->num_rows; - break; - case 'mysql': - $rows = mysql_num_rows($this->result); - break; - } - return $rows; - } - /** * @brief Analyze a database query and log this if some conditions are met. * @@ -249,7 +244,7 @@ class dba { break; } $stamp2 = microtime(true); - $duration = (float)($stamp2-$stamp1); + $duration = (float)($stamp2 - $stamp1); $a->save_timestamp($stamp1, "database"); @@ -379,41 +374,6 @@ class dba { return($r); } - public function qfetch() { - $x = false; - - if ($this->result) { - switch ($this->driver) { - case 'pdo': - $x = $this->result->fetch(PDO::FETCH_ASSOC); - break; - case 'mysqli': - $x = $this->result->fetch_array(MYSQLI_ASSOC); - break; - case 'mysql': - $x = mysql_fetch_array($this->result, MYSQL_ASSOC); - break; - } - } - return($x); - } - - public function qclose() { - if ($this->result) { - switch ($this->driver) { - case 'pdo': - $this->result->closeCursor(); - break; - case 'mysqli': - $this->result->free_result(); - break; - case 'mysql': - mysql_free_result($this->result); - break; - } - } - } - public function dbg($dbg) { $this->debug = $dbg; } @@ -497,6 +457,656 @@ class dba { } return $sql; } + + /** + * @brief Replaces the ? placeholders with the parameters in the $args array + * + * @param string $sql SQL query + * @param array $args The parameters that are to replace the ? placeholders + * @return string The replaced SQL query + */ + static private function replace_parameters($sql, $args) { + $offset = 0; + foreach ($args AS $param => $value) { + if (is_int($args[$param]) OR is_float($args[$param])) { + $replace = intval($args[$param]); + } else { + $replace = "'".self::$dbo->escape($args[$param])."'"; + } + + $pos = strpos($sql, '?', $offset); + if ($pos !== false) { + $sql = substr_replace($sql, $replace, $pos, 1); + } + $offset = $pos + strlen($replace); + } + return $sql; + } + + /** + * @brief Executes a prepared statement that returns data + * @usage Example: $r = p("SELECT * FROM `item` WHERE `guid` = ?", $guid); + * @param string $sql SQL statement + * @return object statement object + */ + static public function p($sql) { + $a = get_app(); + + $stamp1 = microtime(true); + + $args = func_get_args(); + unset($args[0]); + + // When the second function parameter is an array then use this as the parameter array + if ((count($args) > 0) AND (is_array($args[1]))) { + $params = $args[1]; + } else { + $params = $args; + } + + // Renumber the array keys to be sure that they fit + $i = 0; + $args = array(); + foreach ($params AS $param) { + $args[++$i] = $param; + } + + if (!self::$dbo OR !self::$dbo->connected) { + return false; + } + + if (substr_count($sql, '?') != count($args)) { + // Question: Should we continue or stop the query here? + logger('Parameter mismatch. Query "'.$sql.'" - Parameters '.print_r($args, true), LOGGER_DEBUG); + } + + $sql = self::$dbo->any_value_fallback($sql); + + if (x($a->config,'system') && x($a->config['system'], 'db_callstack')) { + $sql = "/*".$a->callstack()." */ ".$sql; + } + + self::$dbo->error = ''; + self::$dbo->errorno = 0; + + switch (self::$dbo->driver) { + case 'pdo': + if (!$stmt = self::$dbo->db->prepare($sql)) { + $errorInfo = self::$dbo->db->errorInfo(); + self::$dbo->error = $errorInfo[2]; + self::$dbo->errorno = $errorInfo[1]; + $retval = false; + break; + } + + foreach ($args AS $param => $value) { + $stmt->bindParam($param, $args[$param]); + } + + if (!$stmt->execute()) { + $errorInfo = $stmt->errorInfo(); + self::$dbo->error = $errorInfo[2]; + self::$dbo->errorno = $errorInfo[1]; + $retval = false; + } else { + $retval = $stmt; + } + break; + case 'mysqli': + $stmt = self::$dbo->db->stmt_init(); + + if (!$stmt->prepare($sql)) { + self::$dbo->error = $stmt->error; + self::$dbo->errorno = $stmt->errno; + $retval = false; + break; + } + + $params = ''; + $values = array(); + foreach ($args AS $param => $value) { + if (is_int($args[$param])) { + $params .= 'i'; + } elseif (is_float($args[$param])) { + $params .= 'd'; + } elseif (is_string($args[$param])) { + $params .= 's'; + } else { + $params .= 'b'; + } + $values[] = &$args[$param]; + } + + if (count($values) > 0) { + array_unshift($values, $params); + call_user_func_array(array($stmt, 'bind_param'), $values); + } + + if (!$stmt->execute()) { + self::$dbo->error = self::$dbo->db->error; + self::$dbo->errorno = self::$dbo->db->errno; + $retval = false; + } else { + $stmt->store_result(); + $retval = $stmt; + } + break; + case 'mysql': + // For the old "mysql" functions we cannot use prepared statements + $retval = mysql_query(self::replace_parameters($sql, $args), self::$dbo->db); + if (mysql_errno(self::$dbo->db)) { + self::$dbo->error = mysql_error(self::$dbo->db); + self::$dbo->errorno = mysql_errno(self::$dbo->db); + } + break; + } + + if (self::$dbo->errorno != 0) { + logger('DB Error '.self::$dbo->errorno.': '.self::$dbo->error."\n".self::replace_parameters($sql, $args)); + } + + $a->save_timestamp($stamp1, 'database'); + + if (x($a->config,'system') && x($a->config['system'], 'db_log')) { + + $stamp2 = microtime(true); + $duration = (float)($stamp2 - $stamp1); + + if (($duration > $a->config["system"]["db_loglimit"])) { + $duration = round($duration, 3); + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); + + @file_put_contents($a->config["system"]["db_log"], datetime_convert()."\t".$duration."\t". + basename($backtrace[1]["file"])."\t". + $backtrace[1]["line"]."\t".$backtrace[2]["function"]."\t". + substr(self::replace_parameters($sql, $args), 0, 2000)."\n", FILE_APPEND); + } + } + return $retval; + } + + /** + * @brief Executes a prepared statement like UPDATE or INSERT that doesn't return data + * + * @param string $sql SQL statement + * @return boolean Was the query successfull? False is returned only if an error occurred + */ + static public function e($sql) { + $a = get_app(); + + $stamp = microtime(true); + + $args = func_get_args(); + + $stmt = call_user_func_array('self::p', $args); + + if (is_bool($stmt)) { + $retval = $stmt; + } elseif (is_object($stmt)) { + $retval = true; + } else { + $retval = false; + } + + self::close($stmt); + + $a->save_timestamp($stamp, "database_write"); + + return $retval; + } + + /** + * @brief Check if data exists + * + * @param string $sql SQL statement + * @return boolean Are there rows for that query? + */ + static public function exists($sql) { + $args = func_get_args(); + + $stmt = call_user_func_array('self::p', $args); + + if (is_bool($stmt)) { + $retval = $stmt; + } else { + $retval = (self::num_rows($stmt) > 0); + } + + self::close($stmt); + + return $retval; + } + + /** + * @brief Fetches the first row + * + * @param string $sql SQL statement + * @return array first row of query + */ + static public function fetch_first($sql) { + $args = func_get_args(); + + $stmt = call_user_func_array('self::p', $args); + + if (is_bool($stmt)) { + $retval = $stmt; + } else { + $retval = self::fetch($stmt); + } + + self::close($stmt); + + return $retval; + } + + /** + * @brief Returns the number of rows of a statement + * + * @param object Statement object + * @return int Number of rows + */ + static public function num_rows($stmt) { + switch (self::$dbo->driver) { + case 'pdo': + return $stmt->rowCount(); + case 'mysqli': + return $stmt->num_rows; + case 'mysql': + return mysql_num_rows($stmt); + } + return 0; + } + + /** + * @brief Fetch a single row + * + * @param object $stmt statement object + * @return array current row + */ + static public function fetch($stmt) { + if (!is_object($stmt)) { + return false; + } + + switch (self::$dbo->driver) { + case 'pdo': + return $stmt->fetch(PDO::FETCH_ASSOC); + case 'mysqli': + // This code works, but is slow + + // Bind the result to a result array + $cols = array(); + + $cols_num = array(); + for ($x = 0; $x < $stmt->field_count; $x++) { + $cols[] = &$cols_num[$x]; + } + + call_user_func_array(array($stmt, 'bind_result'), $cols); + + if (!$stmt->fetch()) { + return false; + } + + // The slow part: + // We need to get the field names for the array keys + // It seems that there is no better way to do this. + $result = $stmt->result_metadata(); + $fields = $result->fetch_fields(); + + $columns = array(); + foreach ($cols_num AS $param => $col) { + $columns[$fields[$param]->name] = $col; + } + return $columns; + case 'mysql': + return mysql_fetch_array(self::$dbo->result, MYSQL_ASSOC); + } + } + + /** + * @brief Insert a row into a table + * + * @param string $table Table name + * @param array $param parameter array + * + * @return boolean was the insert successfull? + */ + static public function insert($table, $param) { + $sql = "INSERT INTO `".self::$dbo->escape($table)."` (`".implode("`, `", array_keys($param))."`) VALUES (". + substr(str_repeat("?, ", count($param)), 0, -2).");"; + + return self::e($sql, $param); + } + + /** + * @brief Build the array with the table relations + * + * The array is build from the database definitions in dbstructure.php + * + * This process must only be started once, since the value is cached. + */ + static private function build_relation_data() { + $definition = db_definition(); + + foreach ($definition AS $table => $structure) { + foreach ($structure['fields'] AS $field => $field_struct) { + if (isset($field_struct['relation'])) { + foreach ($field_struct['relation'] AS $rel_table => $rel_field) { + self::$relation[$rel_table][$rel_field][$table][] = $field; + } + } + } + } + } + + /** + * @brief Insert a row into a table + * + * @param string $table Table name + * @param array $param parameter array + * @param boolean $in_commit Internal use: Only do a commit after the last delete + * @param array $callstack Internal use: prevent endless loops + * + * @return boolean|array was the delete successfull? When $in_commit is set: deletion data + */ + static public function delete($table, $param, $in_commit = false, &$callstack = array()) { + + $commands = array(); + + // Create a key for the loop prevention + $key = $table.':'.implode(':', array_keys($param)).':'.implode(':', $param); + + // We quit when this key already exists in the callstack. + if (isset($callstack[$key])) { + return $commands; + } + + $callstack[$key] = true; + + $table = self::$dbo->escape($table); + + $commands[$key] = array('table' => $table, 'param' => $param); + + // To speed up the whole process we cache the table relations + if (count(self::$relation) == 0) { + self::build_relation_data(); + } + + // Is there a relation entry for the table? + if (isset(self::$relation[$table])) { + // We only allow a simple "one field" relation. + $field = array_keys(self::$relation[$table])[0]; + $rel_def = array_values(self::$relation[$table])[0]; + + // Create a key for preventing double queries + $qkey = $field.'-'.$table.':'.implode(':', array_keys($param)).':'.implode(':', $param); + + // When the search field is the relation field, we don't need to fetch the rows + // This is useful when the leading record is already deleted in the frontend but the rest is done in the backend + if ((count($param) == 1) AND ($field == array_keys($param)[0])) { + foreach ($rel_def AS $rel_table => $rel_fields) { + foreach ($rel_fields AS $rel_field) { + $retval = self::delete($rel_table, array($rel_field => array_values($param)[0]), true, $callstack); + $commands = array_merge($commands, $retval); + } + } + // We quit when this key already exists in the callstack. + } elseif (!isset($callstack[$qkey])) { + + $callstack[$qkey] = true; + + // Fetch all rows that are to be deleted + $sql = "SELECT ".self::$dbo->escape($field)." FROM `".$table."` WHERE `". + implode("` = ? AND `", array_keys($param))."` = ?"; + + $data = self::p($sql, $param); + while ($row = self::fetch($data)) { + // Now we accumulate the delete commands + $retval = self::delete($table, array($field => $row[$field]), true, $callstack); + $commands = array_merge($commands, $retval); + } + + // Since we had split the delete command we don't need the original command anymore + unset($commands[$key]); + } + } + + if (!$in_commit) { + // Now we finalize the process + self::p("COMMIT"); + self::p("START TRANSACTION"); + + $compacted = array(); + $counter = array(); + foreach ($commands AS $command) { + if (count($command['param']) > 1) { + $sql = "DELETE FROM `".$command['table']."` WHERE `". + implode("` = ? AND `", array_keys($command['param']))."` = ?"; + + logger(dba::replace_parameters($sql, $command['param']), LOGGER_DATA); + + if (!self::e($sql, $command['param'])) { + self::p("ROLLBACK"); + return false; + } + } else { + $key_table = $command['table']; + $key_param = array_keys($command['param'])[0]; + $value = array_values($command['param'])[0]; + + // Split the SQL queries in chunks of 100 values + // We do the $i stuff here to make the code better readable + $i = $counter[$key_table][$key_param]; + if (count($compacted[$key_table][$key_param][$i]) > 100) { + ++$i; + } + + $compacted[$key_table][$key_param][$i][$value] = $value; + $counter[$key_table][$key_param] = $i; + } + } + foreach ($compacted AS $table => $values) { + foreach ($values AS $field => $field_value_list) { + foreach ($field_value_list AS $field_values) { + $sql = "DELETE FROM `".$table."` WHERE `".$field."` IN (". + substr(str_repeat("?, ", count($field_values)), 0, -2).");"; + + logger(dba::replace_parameters($sql, $field_values), LOGGER_DATA); + + if (!self::e($sql, $field_values)) { + self::p("ROLLBACK"); + return false; + } + } + } + } + self::p("COMMIT"); + return true; + } + + return $commands; + } + + /** + * @brief Updates rows + * + * Updates rows in the database. When $old_fields is set to an array, + * the system will only do an update if the fields in that array changed. + * + * Attention: + * Only the values in $old_fields are compared. + * This is an intentional behaviour. + * + * Example: + * We include the timestamp field in $fields but not in $old_fields. + * Then the row will only get the new timestamp when the other fields had changed. + * + * When $old_fields is set to a boolean value the system will do this compare itself. + * When $old_fields is set to "true" the system will do an insert if the row doesn't exists. + * + * Attention: + * Only set $old_fields to a boolean value when you are sure that you will update a single row. + * When you set $old_fields to "true" then $fields must contain all relevant fields! + * + * @param string $table Table name + * @param array $fields contains the fields that are updated + * @param array $condition condition array with the key values + * @param array|boolean $old_fields array with the old field values that are about to be replaced + * + * @return boolean was the update successfull? + */ + static public function update($table, $fields, $condition, $old_fields = array()) { + + /** @todo We may use MySQL specific functions here: + * INSERT INTO `config` (`cat`, `k`, `v`) VALUES ('%s', '%s', '%s') ON DUPLICATE KEY UPDATE `v` = '%s'" + * But I think that it doesn't make sense here. + */ + + $table = self::$dbo->escape($table); + + if (is_bool($old_fields)) { + $sql = "SELECT * FROM `".$table."` WHERE `". + implode("` = ? AND `", array_keys($condition))."` = ? LIMIT 1"; + + $params = array(); + foreach ($condition AS $value) { + $params[] = $value; + } + + $do_insert = $old_fields; + + $old_fields = self::fetch_first($sql, $params); + if (is_bool($old_fields)) { + if ($do_insert) { + return self::insert($table, $fields); + } + $old_fields = array(); + } + } + + $do_update = (count($old_fields) == 0); + + foreach ($old_fields AS $fieldname => $content) { + if (isset($fields[$fieldname])) { + if ($fields[$fieldname] == $content) { + unset($fields[$fieldname]); + } else { + $do_update = true; + } + } + } + + if (!$do_update OR (count($fields) == 0)) { + return true; + } + + $sql = "UPDATE `".$table."` SET `". + implode("` = ?, `", array_keys($fields))."` = ? WHERE `". + implode("` = ? AND `", array_keys($condition))."` = ?"; + + $params = array(); + foreach ($fields AS $value) { + $params[] = $value; + } + foreach ($condition AS $value) { + $params[] = $value; + } + + return self::e($sql, $params); + } + + /** + * @brief Select rows from a table + * + * @param string $table Table name + * @param array $fields array of selected fields + * @param array $condition array of fields for condition + * @param array $params array of several parameters + * + * @return boolean|object If "limit" is equal "1" only a single row is returned, else a query object is returned + * + * Example: + * $table = "item"; + * $fields = array("id", "uri", "uid", "network"); + * $condition = array("uid" => 1, "network" => 'dspr'); + * $params = array("order" => array("id", "received" => true), "limit" => 1); + * + * $data = dba::select($table, $fields, $condition, $params); + */ + static public function select($table, $fields = array(), $condition = array(), $params = array()) { + if ($table == '') { + return false; + } + + if (count($fields) > 0) { + $select_fields = "`".implode("`, `", array_values($fields))."`"; + } else { + $select_fields = "*"; + } + + if (count($condition) > 0) { + $condition_string = " WHERE `".implode("` = ? AND `", array_keys($condition))."` = ?"; + } else { + $condition_string = ""; + } + + $param_string = ''; + $single_row = false; + + if (isset($params['order'])) { + $param_string .= " ORDER BY "; + foreach ($params['order'] AS $fields => $order) { + if (!is_int($fields)) { + $param_string .= "`".$fields."` ".($order ? "DESC" : "ASC").", "; + } else { + $param_string .= "`".$order."`, "; + } + } + $param_string = substr($param_string, 0, -2); + } + + if (isset($params['limit'])) { + if (is_int($params['limit'])) { + $param_string .= " LIMIT ".$params['limit']; + $single_row =($params['limit'] == 1); + } + } + + $sql = "SELECT ".$select_fields." FROM `".$table."`".$condition_string.$param_string; + + $result = self::p($sql, $condition); + + if (is_bool($result) OR !$single_row) { + return $result; + } else { + $row = self::fetch($result); + self::close($result); + return $row; + } + } + + /** + * @brief Closes the current statement + * + * @param object $stmt statement object + * @return boolean was the close successfull? + */ + static public function close($stmt) { + if (!is_object($stmt)) { + return false; + } + + switch (self::$dbo->driver) { + case 'pdo': + return $stmt->closeCursor(); + case 'mysqli': + return $stmt->free_result(); + return $stmt->close(); + case 'mysql': + return mysql_free_result($stmt); + } + } } function printable($s) { diff --git a/include/dbclean.php b/include/dbclean.php index bff4ff2a24..f31bfef8ab 100644 --- a/include/dbclean.php +++ b/include/dbclean.php @@ -4,7 +4,7 @@ * @brief The script is called from time to time to clean the database entries and remove orphaned data. */ -use \Friendica\Core\Config; +use Friendica\Core\Config; function dbclean_run(&$argv, &$argc) { if (!Config::get('system', 'dbclean', false)) { @@ -43,96 +43,103 @@ function remove_orphans($stage = 0) { if (($stage == 1) OR ($stage == 0)) { logger("Deleting old global item entries from item table without user copy"); - if ($db->q("SELECT `id` FROM `item` WHERE `uid` = 0 + $r = dba::p("SELECT `id` FROM `item` WHERE `uid` = 0 AND NOT EXISTS (SELECT `guid` FROM `item` AS `i` WHERE `item`.`guid` = `i`.`guid` AND `i`.`uid` != 0) - AND `received` < UTC_TIMESTAMP() - INTERVAL 90 DAY LIMIT ".intval($limit), true)) { - $count = $db->num_rows(); + AND `received` < UTC_TIMESTAMP() - INTERVAL 90 DAY LIMIT ".intval($limit)); + $count = dba::num_rows($r); + if ($count > 0) { logger("found global item orphans: ".$count); - while ($orphan = $db->qfetch()) { + while ($orphan = dba::fetch($r)) { q("DELETE FROM `item` WHERE `id` = %d", intval($orphan["id"])); } } - $db->qclose(); + dba::close($r); logger("Done deleting old global item entries from item table without user copy"); } if (($stage == 2) OR ($stage == 0)) { logger("Deleting items without parents"); - if ($db->q("SELECT `id` FROM `item` WHERE NOT EXISTS (SELECT `id` FROM `item` AS `i` WHERE `item`.`parent` = `i`.`id`) LIMIT ".intval($limit), true)) { - $count = $db->num_rows(); + $r = dba::p("SELECT `id` FROM `item` WHERE NOT EXISTS (SELECT `id` FROM `item` AS `i` WHERE `item`.`parent` = `i`.`id`) LIMIT ".intval($limit)); + $count = dba::num_rows($r); + if ($count > 0) { logger("found item orphans without parents: ".$count); - while ($orphan = $db->qfetch()) { + while ($orphan = dba::fetch($r)) { q("DELETE FROM `item` WHERE `id` = %d", intval($orphan["id"])); } } - $db->qclose(); + dba::close($r); logger("Done deleting items without parents"); } if (($stage == 3) OR ($stage == 0)) { logger("Deleting orphaned data from thread table"); - if ($db->q("SELECT `iid` FROM `thread` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`parent` = `thread`.`iid`) LIMIT ".intval($limit), true)) { - $count = $db->num_rows(); + $r = dba::p("SELECT `iid` FROM `thread` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`parent` = `thread`.`iid`) LIMIT ".intval($limit)); + $count = dba::num_rows($r); + if ($count > 0) { logger("found thread orphans: ".$count); - while ($orphan = $db->qfetch()) { + while ($orphan = dba::fetch($r)) { q("DELETE FROM `thread` WHERE `iid` = %d", intval($orphan["iid"])); } } - $db->qclose(); + dba::close($r); logger("Done deleting orphaned data from thread table"); } if (($stage == 4) OR ($stage == 0)) { logger("Deleting orphaned data from notify table"); - if ($db->q("SELECT `iid` FROM `notify` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `notify`.`iid`) LIMIT ".intval($limit), true)) { - $count = $db->num_rows(); + $r = dba::p("SELECT `iid` FROM `notify` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `notify`.`iid`) LIMIT ".intval($limit)); + $count = dba::num_rows($r); + if ($count > 0) { logger("found notify orphans: ".$count); - while ($orphan = $db->qfetch()) { + while ($orphan = dba::fetch($r)) { q("DELETE FROM `notify` WHERE `iid` = %d", intval($orphan["iid"])); } } - $db->qclose(); + dba::close($r); logger("Done deleting orphaned data from notify table"); } if (($stage == 5) OR ($stage == 0)) { logger("Deleting orphaned data from notify-threads table"); - if ($db->q("SELECT `id` FROM `notify-threads` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`parent` = `notify-threads`.`master-parent-item`) LIMIT ".intval($limit), true)) { - $count = $db->num_rows(); + $r = dba::p("SELECT `id` FROM `notify-threads` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`parent` = `notify-threads`.`master-parent-item`) LIMIT ".intval($limit)); + $count = dba::num_rows($r); + if ($count > 0) { logger("found notify-threads orphans: ".$count); - while ($orphan = $db->qfetch()) { + while ($orphan = dba::fetch($r)) { q("DELETE FROM `notify-threads` WHERE `id` = %d", intval($orphan["id"])); } } - $db->qclose(); + dba::close($r); logger("Done deleting orphaned data from notify-threads table"); } if (($stage == 6) OR ($stage == 0)) { logger("Deleting orphaned data from sign table"); - if ($db->q("SELECT `iid` FROM `sign` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `sign`.`iid`) LIMIT ".intval($limit), true)) { - $count = $db->num_rows(); + $r = dba::p("SELECT `iid` FROM `sign` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `sign`.`iid`) LIMIT ".intval($limit)); + $count = dba::num_rows($r); + if ($count > 0) { logger("found sign orphans: ".$count); - while ($orphan = $db->qfetch()) { + while ($orphan = dba::fetch($r)) { q("DELETE FROM `sign` WHERE `iid` = %d", intval($orphan["iid"])); } } - $db->qclose(); + dba::close($r); logger("Done deleting orphaned data from sign table"); } if (($stage == 7) OR ($stage == 0)) { logger("Deleting orphaned data from term table"); - if ($db->q("SELECT `oid` FROM `term` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `term`.`oid`) LIMIT ".intval($limit), true)) { - $count = $db->num_rows(); + $r = dba::p("SELECT `oid` FROM `term` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `term`.`oid`) LIMIT ".intval($limit)); + $count = dba::num_rows($r); + if ($count > 0) { logger("found term orphans: ".$count); - while ($orphan = $db->qfetch()) { + while ($orphan = dba::fetch($r)) { q("DELETE FROM `term` WHERE `oid` = %d", intval($orphan["oid"])); } } - $db->qclose(); + dba::close($r); logger("Done deleting orphaned data from term table"); } @@ -142,4 +149,3 @@ function remove_orphans($stage = 0) { } } -?> diff --git a/include/dbm.php b/include/dbm.php index d28d49d63b..db50dae89c 100644 --- a/include/dbm.php +++ b/include/dbm.php @@ -2,6 +2,7 @@ /** * @brief This class contain functions for the database management * + * This class contains functions that doesn't need to know if pdo, mysqli or whatever is used. */ class dbm { /** @@ -47,6 +48,11 @@ class dbm { if (is_bool($array)) { return $array; } + + if (is_object($array)) { + return true; + } + return (is_array($array) && count($array) > 0); } @@ -104,4 +110,3 @@ class dbm { return date('Y-m-d H:i:s', $timestamp); } } -?> diff --git a/include/dbstructure.php b/include/dbstructure.php index 0d5c10f98d..6a14220c24 100644 --- a/include/dbstructure.php +++ b/include/dbstructure.php @@ -1,19 +1,45 @@ database_name())); + + if (!dbm::is_result($r)) { + echo t('There are no tables on MyISAM.')."\n"; + return; + } + + foreach ($r AS $table) { + $sql = sprintf("ALTER TABLE `%s` engine=InnoDB;", dbesc($table['TABLE_NAME'])); + echo $sql."\n"; + + $result = @$db->q($sql); + if (!dbm::is_result($result)) { + print_update_error($db, $sql); + } + } +} + /* * send the email and do what is needed to do on update fails * * @param update_id (int) number of failed update * @param error_message (str) error message */ -function update_fail($update_id, $error_message){ +function update_fail($update_id, $error_message) { //send the administrators an e-mail $admin_mail_list = "'".implode("','", array_map(dbesc, explode(",", str_replace(" ", "", $a->config['admin_email']))))."'"; $adminlist = q("SELECT uid, language, email FROM user WHERE email IN (%s)", @@ -95,10 +121,6 @@ function table_structure($table) { if (dbm::is_result($indexes)) foreach ($indexes AS $index) { - if ($index["Index_type"] == "FULLTEXT") { - continue; - } - if ($index['Key_name'] != 'PRIMARY' && $index['Non_unique'] == '0' && !isset($indexdata[$index["Key_name"]])) { $indexdata[$index["Key_name"]] = array('UNIQUE'); } @@ -279,6 +301,9 @@ function update_structure($verbose, $action, $tables=null, $definition=null) { // Compare the field definition $field_definition = $database[$name]["fields"][$fieldname]; + // Remove the relation data that is used for the referential integrity + unset($parameters['relation']); + // We change the collation after the indexes had been changed. // This is done to avoid index length problems. // So here we always ensure that there is no need to change it. @@ -374,6 +399,14 @@ function update_structure($verbose, $action, $tables=null, $definition=null) { $sql3 .= ";"; } + $field_list = ''; + if ($is_unique && $ignore == '') { + foreach ($structure['fields'] AS $fieldname => $parameters) { + $field_list .= 'ANY_VALUE(`' . $fieldname . '`),'; + } + $field_list = rtrim($field_list, ','); + } + if ($verbose) { // Ensure index conversion to unique removes duplicates if ($is_unique) { @@ -390,7 +423,7 @@ function update_structure($verbose, $action, $tables=null, $definition=null) { if ($ignore != "") { echo "SET session old_alter_table=0;\n"; } else { - echo "INSERT INTO `".$temp_name."` SELECT * FROM `".$name."`".$group_by.";\n"; + echo "INSERT INTO `".$temp_name."` SELECT ".$field_list." FROM `".$name."`".$group_by.";\n"; echo "DROP TABLE `".$name."`;\n"; echo "RENAME TABLE `".$temp_name."` TO `".$name."`;\n"; } @@ -421,7 +454,7 @@ function update_structure($verbose, $action, $tables=null, $definition=null) { if ($ignore != "") { $db->q("SET session old_alter_table=0;"); } else { - $r = $db->q("INSERT INTO `".$temp_name."` SELECT * FROM `".$name."`".$group_by.";"); + $r = $db->q("INSERT INTO `".$temp_name."` SELECT ".$field_list." FROM `".$name."`".$group_by.";"); if (!dbm::is_result($r)) { $errors .= print_update_error($db, $sql3); return $errors; @@ -460,7 +493,7 @@ function db_field_command($parameters, $create = true) { if ($parameters["not null"]) $fieldstruct .= " NOT NULL"; - if (isset($parameters["default"])){ + if (isset($parameters["default"])) { if (strpos(strtolower($parameters["type"]),"int")!==false) { $fieldstruct .= " DEFAULT ".$parameters["default"]; } else { @@ -487,7 +520,7 @@ function db_create_table($name, $fields, $verbose, $action, $indexes=null) { $primary_keys = array(); foreach ($fields AS $fieldname => $field) { $sql_rows[] = "`".dbesc($fieldname)."` ".db_field_command($field); - if (x($field,'primary') and $field['primary']!=''){ + if (x($field,'primary') and $field['primary']!='') { $primary_keys[] = $fieldname; } } @@ -606,7 +639,7 @@ function db_definition() { $database["attach"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "hash" => array("type" => "varchar(64)", "not null" => "1", "default" => ""), "filename" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "filetype" => array("type" => "varchar(64)", "not null" => "1", "default" => ""), @@ -626,7 +659,7 @@ function db_definition() { $database["auth_codes"] = array( "fields" => array( "id" => array("type" => "varchar(40)", "not null" => "1", "primary" => "1"), - "client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => ""), + "client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => "", "relation" => array("clients" => "client_id")), "redirect_uri" => array("type" => "varchar(200)", "not null" => "1", "default" => ""), "expires" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "scope" => array("type" => "varchar(250)", "not null" => "1", "default" => ""), @@ -667,7 +700,7 @@ function db_definition() { "redirect_uri" => array("type" => "varchar(200)", "not null" => "1", "default" => ""), "name" => array("type" => "text"), "icon" => array("type" => "text"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), ), "indexes" => array( "PRIMARY" => array("client_id"), @@ -688,7 +721,7 @@ function db_definition() { $database["contact"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "self" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "remote_self" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), @@ -777,7 +810,7 @@ function db_definition() { "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""), "recips" => array("type" => "text"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "creator" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "updated" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), @@ -788,12 +821,27 @@ function db_definition() { "uid" => array("uid"), ) ); + $database["conversation"] = array( + "fields" => array( + "item-uri" => array("type" => "varbinary(255)", "not null" => "1", "primary" => "1"), + "reply-to-uri" => array("type" => "varbinary(255)", "not null" => "1", "default" => ""), + "conversation-uri" => array("type" => "varbinary(255)", "not null" => "1", "default" => ""), + "conversation-href" => array("type" => "varbinary(255)", "not null" => "1", "default" => ""), + "protocol" => array("type" => "tinyint(1) unsigned", "not null" => "1", "default" => "0"), + "source" => array("type" => "mediumtext"), + "received" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + ), + "indexes" => array( + "PRIMARY" => array("item-uri"), + "conversation-uri" => array("conversation-uri"), + ) + ); $database["event"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "guid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), + "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), "uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "edited" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), @@ -839,15 +887,15 @@ function db_definition() { "indexes" => array( "PRIMARY" => array("id"), "addr" => array("addr(32)"), - "url" => array("url"), + "url" => array("UNIQUE", "url(190)"), ) ); $database["ffinder"] = array( "fields" => array( "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), - "cid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), - "fid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), + "cid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), + "fid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("fcontact" => "id")), ), "indexes" => array( "PRIMARY" => array("id"), @@ -868,8 +916,8 @@ function db_definition() { $database["fsuggest"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), + "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "request" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), @@ -884,8 +932,8 @@ function db_definition() { $database["gcign"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "gcid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), + "gcid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")), ), "indexes" => array( "PRIMARY" => array("id"), @@ -924,7 +972,7 @@ function db_definition() { ), "indexes" => array( "PRIMARY" => array("id"), - "nurl" => array("nurl(64)"), + "nurl" => array("UNIQUE", "nurl(190)"), "name" => array("name(64)"), "nick" => array("nick(32)"), "addr" => array("addr(64)"), @@ -935,10 +983,10 @@ function db_definition() { $database["glink"] = array( "fields" => array( "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "gcid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "zcid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), + "gcid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")), + "zcid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")), "updated" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), ), "indexes" => array( @@ -950,7 +998,7 @@ function db_definition() { $database["group"] = array( "fields" => array( "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "visible" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "deleted" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), @@ -963,9 +1011,9 @@ function db_definition() { $database["group_member"] = array( "fields" => array( "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), - "gid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), - "contact-id" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), + "gid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("group" => "id")), + "contact-id" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), ), "indexes" => array( "PRIMARY" => array("id"), @@ -994,7 +1042,7 @@ function db_definition() { ), "indexes" => array( "PRIMARY" => array("id"), - "nurl" => array("nurl(32)"), + "nurl" => array("UNIQUE", "nurl(190)"), ) ); $database["hook"] = array( @@ -1013,9 +1061,9 @@ function db_definition() { $database["intro"] = array( "fields" => array( "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), - "fid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), + "fid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("fcontact" => "id")), + "contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), "knowyou" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "duplex" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "note" => array("type" => "text"), @@ -1030,16 +1078,16 @@ function db_definition() { ); $database["item"] = array( "fields" => array( - "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), + "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "relation" => array("thread" => "iid")), "guid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), - "contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "gcontact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), + "contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), + "gcontact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")), "type" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "wall" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "gravity" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), - "parent" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), + "parent" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("item" => "id")), "parent-uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "extid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "thr-parent" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), @@ -1048,11 +1096,11 @@ function db_definition() { "commented" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "received" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "changed" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), - "owner-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "owner-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), "owner-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "owner-link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "owner-avatar" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "author-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "author-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), "author-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "author-link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "author-avatar" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), @@ -1067,7 +1115,7 @@ function db_definition() { "postopts" => array("type" => "text"), "plink" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "resource-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "event-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "event-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("event" => "id")), "tag" => array("type" => "mediumtext"), "attach" => array("type" => "mediumtext"), "inform" => array("type" => "mediumtext"), @@ -1113,6 +1161,7 @@ function db_definition() { "uid_parenturi" => array("uid","parent-uri(190)"), "uid_contactid_created" => array("uid","contact-id","created"), "authorid_created" => array("author-id","created"), + "ownerid" => array("owner-id"), "uid_uri" => array("uid", "uri(190)"), "resource-id" => array("resource-id"), "contactid_allowcid_allowpid_denycid_denygid" => array("contact-id","allow_cid(10)","allow_gid(10)","deny_cid(10)","deny_gid(10)"), // @@ -1128,8 +1177,8 @@ function db_definition() { $database["item_id"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "iid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "iid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("item" => "id")), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "sid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "service" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), ), @@ -1155,13 +1204,13 @@ function db_definition() { $database["mail"] = array( "fields" => array( "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""), "from-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "from-photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "from-url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "contact-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "convid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"), + "contact-id" => array("type" => "varchar(255)", "not null" => "1", "default" => "", "relation" => array("contact" => "id")), + "convid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("conv" => "id")), "title" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "body" => array("type" => "mediumtext"), "seen" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), @@ -1178,12 +1227,13 @@ function db_definition() { "convid" => array("convid"), "uri" => array("uri(64)"), "parent-uri" => array("parent-uri(64)"), + "contactid" => array("contact-id"), ) ); $database["mailacct"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "server" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "port" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "ssltype" => array("type" => "varchar(16)", "not null" => "1", "default" => ""), @@ -1203,8 +1253,8 @@ function db_definition() { $database["manage"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "mid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), + "mid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), ), "indexes" => array( "PRIMARY" => array("id"), @@ -1221,10 +1271,10 @@ function db_definition() { "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "date" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "msg" => array("type" => "mediumtext"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "iid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "parent" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "iid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("item" => "id")), + "parent" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("item" => "id")), "seen" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "verb" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "otype" => array("type" => "varchar(16)", "not null" => "1", "default" => ""), @@ -1242,10 +1292,10 @@ function db_definition() { $database["notify-threads"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "notify-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "master-parent-item" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), + "notify-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("notify" => "id")), + "master-parent-item" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("item" => "id")), "parent-item" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), - "receiver-uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "receiver-uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), ), "indexes" => array( "PRIMARY" => array("id"), @@ -1278,7 +1328,7 @@ function db_definition() { $database["pconfig"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "cat" => array("type" => "varbinary(255)", "not null" => "1", "default" => ""), "k" => array("type" => "varbinary(255)", "not null" => "1", "default" => ""), "v" => array("type" => "mediumtext"), @@ -1291,8 +1341,8 @@ function db_definition() { $database["photo"] = array( "fields" => array( "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), - "contact-id" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), + "contact-id" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), "guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""), "resource-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), @@ -1315,6 +1365,7 @@ function db_definition() { ), "indexes" => array( "PRIMARY" => array("id"), + "contactid" => array("contact-id"), "uid_contactid" => array("uid", "contact-id"), "uid_profile" => array("uid", "profile"), "uid_album_scale_created" => array("uid", "album(32)", "scale", "created"), @@ -1325,7 +1376,7 @@ function db_definition() { $database["poll"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "q0" => array("type" => "text"), "q1" => array("type" => "text"), "q2" => array("type" => "text"), @@ -1345,7 +1396,7 @@ function db_definition() { $database["poll_result"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "poll_id" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "poll_id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("poll" => "id")), "choice" => array("type" => "int(11)", "not null" => "1", "default" => "0"), ), "indexes" => array( @@ -1368,7 +1419,7 @@ function db_definition() { $database["profile"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "profile-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "is-default" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "hide-friends" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), @@ -1418,8 +1469,8 @@ function db_definition() { $database["profile_check"] = array( "fields" => array( "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), - "cid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), + "cid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), "dfrn_id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "sec" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "expire" => array("type" => "int(11)", "not null" => "1", "default" => "0"), @@ -1431,7 +1482,7 @@ function db_definition() { $database["push_subscriber"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "callback_url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "topic" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "nickname" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), @@ -1446,7 +1497,7 @@ function db_definition() { $database["queue"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "last" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), @@ -1467,7 +1518,7 @@ function db_definition() { "id" => array("type" => "int(11) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "hash" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), - "uid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "password" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "language" => array("type" => "varchar(16)", "not null" => "1", "default" => ""), "note" => array("type" => "text"), @@ -1479,7 +1530,7 @@ function db_definition() { $database["search"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "term" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), ), "indexes" => array( @@ -1503,7 +1554,7 @@ function db_definition() { $database["sign"] = array( "fields" => array( "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), + "iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("item" => "id")), "signed_text" => array("type" => "mediumtext"), "signature" => array("type" => "text"), "signer" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), @@ -1516,7 +1567,7 @@ function db_definition() { $database["spam"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), "spam" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "ham" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "term" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), @@ -1533,7 +1584,7 @@ function db_definition() { $database["term"] = array( "fields" => array( "tid" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "oid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), + "oid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("item" => "id")), "otype" => array("type" => "tinyint(3) unsigned", "not null" => "1", "default" => "0"), "type" => array("type" => "tinyint(3) unsigned", "not null" => "1", "default" => "0"), "term" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), @@ -1543,7 +1594,7 @@ function db_definition() { "received" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "global" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "aid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), - "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), ), "indexes" => array( "PRIMARY" => array("tid"), @@ -1555,12 +1606,12 @@ function db_definition() { ); $database["thread"] = array( "fields" => array( - "iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "primary" => "1"), - "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), - "contact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"), - "gcontact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"), - "owner-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"), - "author-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"), + "iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => array("item" => "id")), + "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), + "contact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), + "gcontact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")), + "owner-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), + "author-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")), "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "edited" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "commented" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), @@ -1588,6 +1639,9 @@ function db_definition() { "uid_network_created" => array("uid","network","created"), "uid_contactid_commented" => array("uid","contact-id","commented"), "uid_contactid_created" => array("uid","contact-id","created"), + "contactid" => array("contact-id"), + "ownerid" => array("owner-id"), + "authorid" => array("author-id"), "uid_created" => array("uid","created"), "uid_commented" => array("uid","commented"), "uid_wall_created" => array("uid","wall","created"), @@ -1597,10 +1651,10 @@ function db_definition() { "fields" => array( "id" => array("type" => "varchar(40)", "not null" => "1", "primary" => "1"), "secret" => array("type" => "text"), - "client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => ""), + "client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => "", "relation" => array("clients" => "client_id")), "expires" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "scope" => array("type" => "varchar(200)", "not null" => "1", "default" => ""), - "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), + "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")), ), "indexes" => array( "PRIMARY" => array("id"), @@ -1691,8 +1745,8 @@ function db_definition() { function dbstructure_run(&$argv, &$argc) { global $a, $db; - if (is_null($a)){ - $a = new App; + if (is_null($a)) { + $a = new App(dirname(__DIR__)); } if (is_null($db)) { @@ -1730,6 +1784,9 @@ function dbstructure_run(&$argv, &$argc) { case "dumpsql": print_structure(db_definition()); return; + case "toinnodb": + convert_to_innodb(); + return; } } @@ -1741,11 +1798,12 @@ function dbstructure_run(&$argv, &$argc) { echo "dryrun show database update schema queries without running them\n"; echo "update update database schema\n"; echo "dumpsql dump database schema\n"; + echo "toinnodb convert all tables from MyISAM to InnoDB\n"; return; } -if (array_search(__file__,get_included_files())===0){ +if (array_search(__file__,get_included_files())===0) { dbstructure_run($_SERVER["argv"],$_SERVER["argc"]); killme(); } diff --git a/include/dbupdate.php b/include/dbupdate.php index 725eca7370..799ca262c8 100644 --- a/include/dbupdate.php +++ b/include/dbupdate.php @@ -1,6 +1,6 @@ setAttribute("xmlns:ostatus", NAMESPACE_OSTATUS); $root->setAttribute("xmlns:statusnet", NAMESPACE_STATUSNET); - xml::add_element($doc, $root, "id", app::get_baseurl()."/profile/".$owner["nick"]); + xml::add_element($doc, $root, "id", App::get_baseurl()."/profile/".$owner["nick"]); xml::add_element($doc, $root, "title", $owner["name"]); $attributes = array("uri" => "https://friendi.ca", "version" => FRIENDICA_VERSION."-".DB_UPDATE_VERSION); @@ -448,13 +450,13 @@ class dfrn { // DFRN itself doesn't uses this. But maybe someone else wants to subscribe to the public feed. ostatus::hublinks($doc, $root); - $attributes = array("rel" => "salmon", "href" => app::get_baseurl()."/salmon/".$owner["nick"]); + $attributes = array("rel" => "salmon", "href" => App::get_baseurl()."/salmon/".$owner["nick"]); xml::add_element($doc, $root, "link", "", $attributes); - $attributes = array("rel" => "http://salmon-protocol.org/ns/salmon-replies", "href" => app::get_baseurl()."/salmon/".$owner["nick"]); + $attributes = array("rel" => "http://salmon-protocol.org/ns/salmon-replies", "href" => App::get_baseurl()."/salmon/".$owner["nick"]); xml::add_element($doc, $root, "link", "", $attributes); - $attributes = array("rel" => "http://salmon-protocol.org/ns/salmon-mention", "href" => app::get_baseurl()."/salmon/".$owner["nick"]); + $attributes = array("rel" => "http://salmon-protocol.org/ns/salmon-mention", "href" => App::get_baseurl()."/salmon/".$owner["nick"]); xml::add_element($doc, $root, "link", "", $attributes); } @@ -511,7 +513,7 @@ class dfrn { } xml::add_element($doc, $author, "name", $owner["name"], $attributes); - xml::add_element($doc, $author, "uri", app::get_baseurl().'/profile/'.$owner["nickname"], $attributes); + xml::add_element($doc, $author, "uri", App::get_baseurl().'/profile/'.$owner["nickname"], $attributes); xml::add_element($doc, $author, "dfrn:handle", $owner["addr"], $attributes); $attributes = array("rel" => "photo", "type" => "image/jpeg", @@ -812,11 +814,33 @@ class dfrn { $parent = q("SELECT `guid` FROM `item` WHERE `id` = %d", intval($item["parent"])); $parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']); $attributes = array("ref" => $parent_item, "type" => "text/html", - "href" => app::get_baseurl().'/display/'.$parent[0]['guid'], + "href" => App::get_baseurl().'/display/'.$parent[0]['guid'], "dfrn:diaspora_guid" => $parent[0]['guid']); xml::add_element($doc, $entry, "thr:in-reply-to", "", $attributes); } + // Add conversation data. This is used for OStatus + $conversation_href = App::get_baseurl()."/display/".$owner["nick"]."/".$item["parent"]; + $conversation_uri = $conversation_href; + + if (isset($parent_item)) { + $r = dba::fetch_first("SELECT `conversation-uri`, `conversation-href` FROM `conversation` WHERE `item-uri` = ?", $item['parent-uri']); + if (dbm::is_result($r)) { + if ($r['conversation-uri'] != '') { + $conversation_uri = $r['conversation-uri']; + } + if ($r['conversation-href'] != '') { + $conversation_href = $r['conversation-href']; + } + } + } + + $attributes = array( + "href" => $conversation_href, + "ref" => $conversation_uri); + + xml::add_element($doc, $entry, "ostatus:conversation", $conversation_uri, $attributes); + xml::add_element($doc, $entry, "id", $item["uri"]); xml::add_element($doc, $entry, "title", $item["title"]); @@ -832,7 +856,7 @@ class dfrn { // We save this value in "plink". Maybe we should read it from there as well? xml::add_element($doc, $entry, "link", "", array("rel" => "alternate", "type" => "text/html", - "href" => app::get_baseurl()."/display/".$item["guid"])); + "href" => App::get_baseurl()."/display/".$item["guid"])); // "comment-allow" is some old fashioned stuff for old Friendica versions. // It is included in the rewritten code for completeness @@ -2209,12 +2233,16 @@ class dfrn { * @param array $importer Record of the importer user mixed with contact of the content * @todo Add type-hints */ - private static function process_entry($header, $xpath, $entry, $importer) { + private static function process_entry($header, $xpath, $entry, $importer, $xml) { logger("Processing entries"); $item = $header; + $item["protocol"] = PROTOCOL_DFRN; + + $item["source"] = $xml; + // Get the uri $item["uri"] = $xpath->query("atom:id/text()", $entry)->item(0)->nodeValue; @@ -2373,6 +2401,20 @@ class dfrn { self::parse_links($links, $item); } + $item['conversation-uri'] = $xpath->query('ostatus:conversation/text()', $entry)->item(0)->nodeValue; + + $conv = $xpath->query('ostatus:conversation', $entry); + if (is_object($conv->item(0))) { + foreach ($conv->item(0)->attributes AS $attributes) { + if ($attributes->name == "ref") { + $item['conversation-uri'] = $attributes->textContent; + } + if ($attributes->name == "href") { + $item['conversation-href'] = $attributes->textContent; + } + } + } + // Is it a reply or a top level posting? $item["parent-uri"] = $item["uri"]; @@ -2801,7 +2843,7 @@ class dfrn { if (!$sort_by_date) { $entries = $xpath->query("/atom:feed/atom:entry"); foreach ($entries AS $entry) { - self::process_entry($header, $xpath, $entry, $importer); + self::process_entry($header, $xpath, $entry, $importer, $xml); } } else { $newentries = array(); @@ -2815,7 +2857,7 @@ class dfrn { ksort($newentries); foreach ($newentries AS $entry) { - self::process_entry($header, $xpath, $entry, $importer); + self::process_entry($header, $xpath, $entry, $importer, $xml); } } logger("Import done for user " . $importer["uid"] . " from contact " . $importer["id"], LOGGER_DEBUG); diff --git a/include/diaspora.php b/include/diaspora.php index b8eff62b11..820f8bd896 100644 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -8,11 +8,12 @@ * This will change in the future. */ -use \Friendica\Core\Config; +use Friendica\App; +use Friendica\Core\Config; require_once 'include/items.php'; require_once 'include/bb2diaspora.php'; -require_once 'include/Scrape.php'; +require_once 'include/probe.php'; require_once 'include/Contact.php'; require_once 'include/Photo.php'; require_once 'include/socgraph.php'; @@ -187,7 +188,80 @@ class Diaspora { } /** - * @brief: Decodes incoming Diaspora message + * @brief: Decodes incoming Diaspora message in the new format + * + * @param array $importer Array of the importer user + * @param string $raw raw post message + * + * @return array + * 'message' -> decoded Diaspora XML message + * 'author' -> author diaspora handle + * 'key' -> author public key (converted to pkcs#8) + */ + public static function decode_raw($importer, $raw) { + $data = json_decode($raw); + + // Is it a private post? Then decrypt the outer Salmon + if (is_object($data)) { + $encrypted_aes_key_bundle = base64_decode($data->aes_key); + $ciphertext = base64_decode($data->encrypted_magic_envelope); + + $outer_key_bundle = ''; + @openssl_private_decrypt($encrypted_aes_key_bundle, $outer_key_bundle, $importer['prvkey']); + $j_outer_key_bundle = json_decode($outer_key_bundle); + + if (!is_object($j_outer_key_bundle)) { + logger('Outer Salmon did not verify. Discarding.'); + http_status_exit(400); + } + + $outer_iv = base64_decode($j_outer_key_bundle->iv); + $outer_key = base64_decode($j_outer_key_bundle->key); + + $xml = diaspora::aes_decrypt($outer_key, $outer_iv, $ciphertext); + } else { + $xml = $raw; + } + + $basedom = parse_xml_string($xml); + + if (!is_object($basedom)) { + logger('Received data does not seem to be an XML. Discarding.'); + http_status_exit(400); + } + + $base = $basedom->children(NAMESPACE_SALMON_ME); + + // Not sure if this cleaning is needed + $data = str_replace(array(" ", "\t", "\r", "\n"), array("", "", "", ""), $base->data); + + // Build the signed data + $type = $base->data[0]->attributes()->type[0]; + $encoding = $base->encoding; + $alg = $base->alg; + $signed_data = $data.'.'.base64url_encode($type).'.'.base64url_encode($encoding).'.'.base64url_encode($alg); + + // This is the signature + $signature = base64url_decode($base->sig); + + // Get the senders' public key + $key_id = $base->sig[0]->attributes()->key_id[0]; + $author_addr = base64_decode($key_id); + $key = diaspora::key($author_addr); + + $verify = rsa_verify($signed_data, $signature, $key); + if (!$verify) { + logger('Message did not verify. Discarding.'); + http_status_exit(400); + } + + return array('message' => (string)base64url_decode($base->data), + 'author' => unxmlify($author_addr), + 'key' => (string)$key); + } + + /** + * @brief: Decodes incoming Diaspora message in the deprecated format * * @param array $importer Array of the importer user * @param string $xml urldecoded Diaspora salmon @@ -202,9 +276,10 @@ class Diaspora { $public = false; $basedom = parse_xml_string($xml); - if (!is_object($basedom)) + if (!is_object($basedom)) { + logger("XML is not parseable."); return false; - + } $children = $basedom->children('https://joindiaspora.com/protocol'); if ($children->header) { @@ -333,6 +408,24 @@ class Diaspora { return false; } + if (!($postdata = self::valid_posting($msg))) { + logger("Invalid posting"); + return false; + } + + $fields = $postdata['fields']; + + // Is it a an action (comment, like, ...) for our own post? + if (isset($fields->parent_guid) AND !$postdata["relayed"]) { + $guid = notags(unxmlify($fields->parent_guid)); + $importer = self::importer_for_guid($guid); + if (is_array($importer)) { + logger("delivering to origin: ".$importer["name"]); + $message_id = self::dispatch($importer, $msg, $fields); + return $message_id; + } + } + // Now distribute it to the followers $r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN (SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s') @@ -344,18 +437,14 @@ class Diaspora { if (dbm::is_result($r)) { foreach ($r as $rr) { logger("delivering to: ".$rr["username"]); - self::dispatch($rr,$msg); + self::dispatch($rr, $msg, $fields); } + } elseif (!Config::get('system', 'relay_subscribe', false)) { + logger("Unwanted message from ".$msg["author"]." send by ".$_SERVER["REMOTE_ADDR"]." with ".$_SERVER["HTTP_USER_AGENT"].": ".print_r($msg, true), LOGGER_DEBUG); } else { - $social_relay = (bool)Config::get('system', 'relay_subscribe', false); - // Use a dummy importer to import the data for the public copy - if ($social_relay) { - $importer = array("uid" => 0, "page-flags" => PAGE_FREELOVE); - $message_id = self::dispatch($importer,$msg); - } else { - logger("Unwanted message from ".$msg["author"]." send by ".$_SERVER["REMOTE_ADDR"]." with ".$_SERVER["HTTP_USER_AGENT"].": ".print_r($msg, true), LOGGER_DEBUG); - } + $importer = array("uid" => 0, "page-flags" => PAGE_FREELOVE); + $message_id = self::dispatch($importer, $msg, $fields); } return $message_id; @@ -366,18 +455,23 @@ class Diaspora { * * @param array $importer Array of the importer user * @param array $msg The post that will be dispatched + * @param object $fields SimpleXML object that contains the message * * @return int The message id of the generated message, "true" or "false" if there was an error */ - public static function dispatch($importer, $msg) { + public static function dispatch($importer, $msg, $fields = null) { // The sender is the handle of the contact that sent the message. // This will often be different with relayed messages (for example "like" and "comment") $sender = $msg["author"]; - if (!self::valid_posting($msg, $fields)) { - logger("Invalid posting"); - return false; + // This is only needed for private postings since this is already done for public ones before + if (is_null($fields)) { + if (!($postdata = self::valid_posting($msg))) { + logger("Invalid posting"); + return false; + } + $fields = $postdata['fields']; } $type = $fields->getName(); @@ -439,11 +533,10 @@ class Diaspora { * It also does the conversion between the old and the new diaspora format. * * @param array $msg Array with the XML, the sender handle and the sender signature - * @param object $fields SimpleXML object that contains the posting when it is valid * - * @return bool Is the posting valid? + * @return bool|array If the posting is valid then an array with an SimpleXML object is returned */ - private static function valid_posting($msg, &$fields) { + private static function valid_posting($msg) { $data = parse_xml_string($msg["message"], false); @@ -484,32 +577,38 @@ class Diaspora { foreach ($element->children() AS $fieldname => $entry) { if ($oldXML) { // Translation for the old XML structure - if ($fieldname == "diaspora_handle") + if ($fieldname == "diaspora_handle") { $fieldname = "author"; - - if ($fieldname == "participant_handles") - $fieldname = "participants"; - - if (in_array($type, array("like", "participation"))) { - if ($fieldname == "target_type") - $fieldname = "parent_type"; } - - if ($fieldname == "sender_handle") + if ($fieldname == "participant_handles") { + $fieldname = "participants"; + } + if (in_array($type, array("like", "participation"))) { + if ($fieldname == "target_type") { + $fieldname = "parent_type"; + } + } + if ($fieldname == "sender_handle") { $fieldname = "author"; - - if ($fieldname == "recipient_handle") + } + if ($fieldname == "recipient_handle") { $fieldname = "recipient"; - - if ($fieldname == "root_diaspora_id") + } + if ($fieldname == "root_diaspora_id") { $fieldname = "root_author"; - + } + if ($type == "status_message") { + if ($fieldname == "raw_message") { + $fieldname = "text"; + } + } if ($type == "retraction") { - if ($fieldname == "post_guid") + if ($fieldname == "post_guid") { $fieldname = "target_guid"; - - if ($fieldname == "type") + } + if ($fieldname == "type") { $fieldname = "target_type"; + } } } @@ -538,9 +637,9 @@ class Diaspora { } // Only some message types have signatures. So we quit here for the other types. - if (!in_array($type, array("comment", "message", "like"))) - return true; - + if (!in_array($type, array("comment", "like"))) { + return array("fields" => $fields, "relayed" => false); + } // No author_signature? This is a must, so we quit. if (!isset($author_signature)) { logger("No author signature for type ".$type." - Message: ".$msg["message"], LOGGER_DEBUG); @@ -548,12 +647,16 @@ class Diaspora { } if (isset($parent_author_signature)) { + $relayed = true; + $key = self::key($msg["author"]); if (!rsa_verify($signed_data, $parent_author_signature, $key, "sha256")) { logger("No valid parent author signature for parent author ".$msg["author"]. " in type ".$type." - signed data: ".$signed_data." - Message: ".$msg["message"]." - Signature ".$parent_author_signature, LOGGER_DEBUG); return false; } + } else { + $relayed = false; } $key = self::key($fields->author); @@ -561,8 +664,9 @@ class Diaspora { if (!rsa_verify($signed_data, $author_signature, $key, "sha256")) { logger("No valid author signature for author ".$fields->author. " in type ".$type." - signed data: ".$signed_data." - Message: ".$msg["message"]." - Signature ".$author_signature, LOGGER_DEBUG); return false; - } else - return true; + } else { + return array("fields" => $fields, "relayed" => $relayed); + } } /** @@ -591,7 +695,7 @@ class Diaspora { * * @return array the queried data */ - private static function person_by_handle($handle) { + public static function person_by_handle($handle) { $r = q("SELECT * FROM `fcontact` WHERE `network` = '%s' AND `addr` = '%s' LIMIT 1", dbesc(NETWORK_DIASPORA), @@ -828,17 +932,20 @@ class Diaspora { logger("defining user ".$contact["nick"]." as friend"); } - if (($contact["blocked"]) || ($contact["readonly"]) || ($contact["archive"])) + // We don't seem to like that person + if ($contact["blocked"] || $contact["readonly"] || $contact["archive"]) { return false; - if ($contact["rel"] == CONTACT_IS_SHARING || $contact["rel"] == CONTACT_IS_FRIEND) + // We are following this person? Then it is okay + } elseif (($contact["rel"] == CONTACT_IS_SHARING) || ($contact["rel"] == CONTACT_IS_FRIEND)) { return true; - if ($contact["rel"] == CONTACT_IS_FOLLOWER) - if (($importer["page-flags"] == PAGE_COMMUNITY) OR $is_comment) - return true; - - // Messages for the global users are always accepted - if ($importer["uid"] == 0) + // Is it a post to a community? That's good + } elseif (($contact["rel"] == CONTACT_IS_FOLLOWER) && ($importer["page-flags"] == PAGE_COMMUNITY)) { return true; + } + // Messages for the global users and comments are always accepted + if (($importer["uid"] == 0) || $is_comment) { + return true; + } return false; } @@ -856,7 +963,12 @@ class Diaspora { $contact = self::contact_by_handle($importer["uid"], $handle); if (!$contact) { logger("A Contact for handle ".$handle." and user ".$importer["uid"]." was not found"); - return false; + // If a contact isn't found, we accept it anyway if it is a comment + if ($is_comment) { + return $importer; + } else { + return false; + } } if (!self::post_allow($importer, $contact, $is_comment)) { @@ -1111,9 +1223,9 @@ class Diaspora { $cid = $r[0]["id"]; $network = $r[0]["network"]; - // We are receiving content from a user that is about to be terminated + // We are receiving content from a user that possibly is about to be terminated // This means the user is vital, so we remove a possible termination date. - unmark_for_death($contact); + unmark_for_death($r[0]); } else { $cid = $contact["id"]; $network = NETWORK_DIASPORA; @@ -1227,6 +1339,26 @@ class Diaspora { } } + /** + * @brief Find the best importer for a comment, like, ... + * + * @param string $guid The guid of the item + * + * @return array|boolean the origin owner of that post - or false + */ + private static function importer_for_guid($guid) { + $item = dba::fetch_first("SELECT `uid` FROM `item` WHERE `origin` AND `guid` = ? LIMIT 1", $guid); + + if (dbm::is_result($item)) { + logger("Found user ".$item['uid']." as owner of item ".$guid, LOGGER_DEBUG); + $contact = dba::fetch_first("SELECT * FROM `contact` WHERE `self` AND `uid` = ?", $item['uid']); + if (dbm::is_result($contact)) { + return $contact; + } + } + return false; + } + /** * @brief Processes an incoming comment * @@ -1238,10 +1370,10 @@ class Diaspora { * @return int The message id of the generated comment or "false" if there was an error */ private static function receive_comment($importer, $sender, $data, $xml) { + $author = notags(unxmlify($data->author)); $guid = notags(unxmlify($data->guid)); $parent_guid = notags(unxmlify($data->parent_guid)); $text = unxmlify($data->text); - $author = notags(unxmlify($data->author)); if (isset($data->created_at)) { $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at))); @@ -1308,7 +1440,9 @@ class Diaspora { } $datarray["object-type"] = ACTIVITY_OBJ_COMMENT; - $datarray["object"] = $xml; + + $datarray["protocol"] = PROTOCOL_DIASPORA; + $datarray["source"] = $xml; $datarray["changed"] = $datarray["created"] = $datarray["edited"] = $created_at; @@ -1354,16 +1488,9 @@ class Diaspora { * @return bool "true" if it was successful */ private static function receive_conversation_message($importer, $contact, $data, $msg, $mesg, $conversation) { + $author = notags(unxmlify($data->author)); $guid = notags(unxmlify($data->guid)); $subject = notags(unxmlify($data->subject)); - $author = notags(unxmlify($data->author)); - - $msg_guid = notags(unxmlify($mesg->guid)); - $msg_parent_guid = notags(unxmlify($mesg->parent_guid)); - $msg_parent_author_signature = notags(unxmlify($mesg->parent_author_signature)); - $msg_author_signature = notags(unxmlify($mesg->author_signature)); - $msg_text = unxmlify($mesg->text); - $msg_created_at = datetime_convert("UTC", "UTC", notags(unxmlify($mesg->created_at))); // "diaspora_handle" is the element name from the old version // "author" is the element name from the new version @@ -1375,7 +1502,10 @@ class Diaspora { return false; } + $msg_guid = notags(unxmlify($mesg->guid)); $msg_conversation_guid = notags(unxmlify($mesg->conversation_guid)); + $msg_text = unxmlify($mesg->text); + $msg_created_at = datetime_convert("UTC", "UTC", notags(unxmlify($mesg->created_at))); if ($msg_conversation_guid != $guid) { logger("message conversation guid does not belong to the current conversation."); @@ -1385,44 +1515,11 @@ class Diaspora { $body = diaspora2bb($msg_text); $message_uri = $msg_author.":".$msg_guid; - $author_signed_data = $msg_guid.";".$msg_parent_guid.";".$msg_text.";".unxmlify($mesg->created_at).";".$msg_author.";".$msg_conversation_guid; + $person = self::person_by_handle($msg_author); - $author_signature = base64_decode($msg_author_signature); - - if (strcasecmp($msg_author,$msg["author"]) == 0) { - $person = $contact; - $key = $msg["key"]; - } else { - $person = self::person_by_handle($msg_author); - - if (is_array($person) && x($person, "pubkey")) { - $key = $person["pubkey"]; - } else { - logger("unable to find author details"); - return false; - } - } - - if (!rsa_verify($author_signed_data, $author_signature, $key, "sha256")) { - logger("verification failed."); - return false; - } - - if ($msg_parent_author_signature) { - $owner_signed_data = $msg_guid.";".$msg_parent_guid.";".$msg_text.";".unxmlify($mesg->created_at).";".$msg_author.";".$msg_conversation_guid; - - $parent_author_signature = base64_decode($msg_parent_author_signature); - - $key = $msg["key"]; - - if (!rsa_verify($owner_signed_data, $parent_author_signature, $key, "sha256")) { - logger("owner verification failed."); - return false; - } - } - - $r = q("SELECT `id` FROM `mail` WHERE `uri` = '%s' LIMIT 1", - dbesc($message_uri) + $r = q("SELECT `id` FROM `mail` WHERE `guid` = '%s' AND `uid` = %d LIMIT 1", + dbesc($msg_guid), + intval($importer["uid"]) ); if (dbm::is_result($r)) { logger("duplicate message already delivered.", LOGGER_DEBUG); @@ -1479,10 +1576,10 @@ class Diaspora { * @return bool Success */ private static function receive_conversation($importer, $msg, $data) { + $author = notags(unxmlify($data->author)); $guid = notags(unxmlify($data->guid)); $subject = notags(unxmlify($data->subject)); $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at))); - $author = notags(unxmlify($data->author)); $participants = notags(unxmlify($data->participants)); $messages = $data->message; @@ -1587,11 +1684,11 @@ class Diaspora { * @return int The message id of the generated like or "false" if there was an error */ private static function receive_like($importer, $sender, $data) { - $positive = notags(unxmlify($data->positive)); - $guid = notags(unxmlify($data->guid)); - $parent_type = notags(unxmlify($data->parent_type)); - $parent_guid = notags(unxmlify($data->parent_guid)); $author = notags(unxmlify($data->author)); + $guid = notags(unxmlify($data->guid)); + $parent_guid = notags(unxmlify($data->parent_guid)); + $parent_type = notags(unxmlify($data->parent_type)); + $positive = notags(unxmlify($data->positive)); // likes on comments aren't supported by Diaspora - only on posts // But maybe this will be supported in the future, so we will accept it. @@ -1628,6 +1725,8 @@ class Diaspora { $datarray = array(); + $datarray["protocol"] = PROTOCOL_DIASPORA; + $datarray["uid"] = $importer["uid"]; $datarray["contact-id"] = $author_contact["cid"]; $datarray["network"] = $author_contact["network"]; @@ -1684,12 +1783,11 @@ class Diaspora { * @return bool Success? */ private static function receive_message($importer, $data) { + $author = notags(unxmlify($data->author)); $guid = notags(unxmlify($data->guid)); - $parent_guid = notags(unxmlify($data->parent_guid)); + $conversation_guid = notags(unxmlify($data->conversation_guid)); $text = unxmlify($data->text); $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at))); - $author = notags(unxmlify($data->author)); - $conversation_guid = notags(unxmlify($data->conversation_guid)); $contact = self::allowed_contact_by_handle($importer, $author, true); if (!$contact) { @@ -1717,8 +1815,8 @@ class Diaspora { return false; } - $r = q("SELECT `id` FROM `mail` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", - dbesc($message_uri), + $r = q("SELECT `id` FROM `mail` WHERE `guid` = '%s' AND `uid` = %d LIMIT 1", + dbesc($guid), intval($importer["uid"]) ); if (dbm::is_result($r)) { @@ -1744,7 +1842,7 @@ class Diaspora { 0, 1, dbesc($message_uri), - dbesc($author.":".$parent_guid), + dbesc($author.":".$conversation["guid"]), dbesc($created_at) ); @@ -1813,9 +1911,9 @@ class Diaspora { $name = unxmlify($data->first_name).((strlen($data->last_name)) ? " ".unxmlify($data->last_name) : ""); $image_url = unxmlify($data->image_url); $birthday = unxmlify($data->birthday); - $location = diaspora2bb(unxmlify($data->location)); - $about = diaspora2bb(unxmlify($data->bio)); $gender = unxmlify($data->gender); + $about = diaspora2bb(unxmlify($data->bio)); + $location = diaspora2bb(unxmlify($data->location)); $searchable = (unxmlify($data->searchable) == "true"); $nsfw = (unxmlify($data->nsfw) == "true"); $tags = unxmlify($data->tag_string); @@ -1919,6 +2017,7 @@ class Diaspora { if ($self && $contact["rel"] == CONTACT_IS_FOLLOWER) { $arr = array(); + $arr["protocol"] = PROTOCOL_DIASPORA; $arr["uri"] = $arr["parent-uri"] = item_new_uri($a->get_hostname(), $importer["uid"]); $arr["uid"] = $importer["uid"]; $arr["contact-id"] = $self[0]["id"]; @@ -2234,12 +2333,13 @@ class Diaspora { * @return int the message id */ private static function receive_reshare($importer, $data, $xml) { + $author = notags(unxmlify($data->author)); + $guid = notags(unxmlify($data->guid)); + $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at))); $root_author = notags(unxmlify($data->root_author)); $root_guid = notags(unxmlify($data->root_guid)); - $guid = notags(unxmlify($data->guid)); - $author = notags(unxmlify($data->author)); + /// @todo handle unprocessed property "provider_display_name" $public = notags(unxmlify($data->public)); - $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at))); $contact = self::allowed_contact_by_handle($importer, $author, false); if (!$contact) { @@ -2278,7 +2378,8 @@ class Diaspora { $datarray["verb"] = ACTIVITY_POST; $datarray["gravity"] = GRAVITY_PARENT; - $datarray["object"] = $xml; + $datarray["protocol"] = PROTOCOL_DIASPORA; + $datarray["source"] = $xml; $prefix = share_header($original_item["author-name"], $original_item["author-link"], $original_item["author-avatar"], $original_item["guid"], $original_item["created"], $orig_url); @@ -2313,9 +2414,9 @@ class Diaspora { * @return bool success */ private static function item_retraction($importer, $contact, $data) { - $target_type = notags(unxmlify($data->target_type)); - $target_guid = notags(unxmlify($data->target_guid)); $author = notags(unxmlify($data->author)); + $target_guid = notags(unxmlify($data->target_guid)); + $target_type = notags(unxmlify($data->target_type)); $person = self::person_by_handle($author); if (!is_array($person)) { @@ -2323,11 +2424,16 @@ class Diaspora { return false; } + if (!isset($contact["url"])) { + $contact["url"] = $person["url"]; + } + $r = q("SELECT `id`, `parent`, `parent-uri`, `author-link` FROM `item` WHERE `guid` = '%s' AND `uid` = %d AND NOT `file` LIKE '%%[%%' LIMIT 1", dbesc($target_guid), intval($importer["uid"]) ); if (!$r) { + logger("Target guid ".$target_guid." was not found for user ".$importer["uid"]); return false; } @@ -2373,7 +2479,7 @@ class Diaspora { $target_type = notags(unxmlify($data->target_type)); $contact = self::contact_by_handle($importer["uid"], $sender); - if (!$contact) { + if (!$contact AND (in_array($target_type, array("Contact", "Person")))) { logger("cannot find contact for sender: ".$sender." and user ".$importer["uid"]); return false; } @@ -2386,7 +2492,7 @@ class Diaspora { case "Post": // "Post" will be supported in a future version case "Reshare": case "StatusMessage": - return self::item_retraction($importer, $contact, $data);; + return self::item_retraction($importer, $contact, $data); case "Contact": case "Person": @@ -2412,19 +2518,13 @@ class Diaspora { * @return int The message id of the newly created item */ private static function receive_status_message($importer, $data, $xml) { - $raw_message = unxmlify($data->raw_message); - $guid = notags(unxmlify($data->guid)); $author = notags(unxmlify($data->author)); - $public = notags(unxmlify($data->public)); + $guid = notags(unxmlify($data->guid)); $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at))); + $public = notags(unxmlify($data->public)); + $text = unxmlify($data->text); $provider_display_name = notags(unxmlify($data->provider_display_name)); - /// @todo enable support for polls - //if ($data->poll) { - // foreach ($data->poll AS $poll) - // print_r($poll); - // die("poll!\n"); - //} $contact = self::allowed_contact_by_handle($importer, $author, false); if (!$contact) { return false; @@ -2442,7 +2542,7 @@ class Diaspora { } } - $body = diaspora2bb($raw_message); + $body = diaspora2bb($text); $datarray = array(); @@ -2463,6 +2563,15 @@ class Diaspora { } } + /// @todo enable support for polls + //if ($data->poll) { + // foreach ($data->poll AS $poll) + // print_r($poll); + // die("poll!\n"); + //} + + /// @todo enable support for events + $datarray["uid"] = $importer["uid"]; $datarray["contact-id"] = $contact["id"]; $datarray["network"] = NETWORK_DIASPORA; @@ -2481,7 +2590,8 @@ class Diaspora { $datarray["verb"] = ACTIVITY_POST; $datarray["gravity"] = GRAVITY_PARENT; - $datarray["object"] = $xml; + $datarray["protocol"] = PROTOCOL_DIASPORA; + $datarray["source"] = $xml; $datarray["body"] = self::replace_people_guid($body, $contact["url"]); @@ -3711,4 +3821,3 @@ class Diaspora { return true; } } -?> diff --git a/include/directory.php b/include/directory.php index 41a3dd784c..e507a939f8 100644 --- a/include/directory.php +++ b/include/directory.php @@ -1,9 +1,9 @@ ' . $h . ''; - - $ret = array(); - - - try { - $dom = HTML5_Parser::parse($h); - } catch (DOMException $e) { - logger('parse_event: parse error: ' . $e); - } - - if (! $dom) - return $ret; - - $items = $dom->getElementsByTagName('*'); - - foreach ($items as $item) { - if (attribute_contains($item->getAttribute('class'), 'vevent')) { - $level2 = $item->getElementsByTagName('*'); - foreach ($level2 as $x) { - if (attribute_contains($x->getAttribute('class'),'dtstart') && $x->getAttribute('title')) { - $ret['start'] = $x->getAttribute('title'); - if (! strpos($ret['start'],'Z')) - $ret['adjust'] = true; - } - if (attribute_contains($x->getAttribute('class'),'dtend') && $x->getAttribute('title')) - $ret['finish'] = $x->getAttribute('title'); - - if (attribute_contains($x->getAttribute('class'),'description')) - $ret['desc'] = $x->textContent; - if (attribute_contains($x->getAttribute('class'),'location')) - $ret['location'] = $x->textContent; - } - } - } - - // sanitise - - if ((x($ret,'desc')) && ((strpos($ret['desc'],'<') !== false) || (strpos($ret['desc'],'>') !== false))) { - $config = HTMLPurifier_Config::createDefault(); - $config->set('Cache.DefinitionImpl', null); - $purifier = new HTMLPurifier($config); - $ret['desc'] = html2bbcode($purifier->purify($ret['desc'])); - } - - if ((x($ret,'location')) && ((strpos($ret['location'],'<') !== false) || (strpos($ret['location'],'>') !== false))) { - $config = HTMLPurifier_Config::createDefault(); - $config->set('Cache.DefinitionImpl', null); - $purifier = new HTMLPurifier($config); - $ret['location'] = html2bbcode($purifier->purify($ret['location'])); - } - - if (x($ret,'start')) - $ret['start'] = datetime_convert('UTC','UTC',$ret['start']); - if (x($ret,'finish')) - $ret['finish'] = datetime_convert('UTC','UTC',$ret['finish']); - - return $ret; -} -*/ - function format_event_bbcode($ev) { $o = ''; @@ -535,7 +469,7 @@ function get_event_strings() { * * @param array $dates Array of possibly duplicated events * @return array Cleaned events - * + * * @todo We should replace this with a separate update function if there is some time left */ function event_remove_duplicates($dates) { diff --git a/include/expire.php b/include/expire.php index 098125a798..da121157d2 100644 --- a/include/expire.php +++ b/include/expire.php @@ -1,6 +1,6 @@ $author, "items" => $items); } } -?> diff --git a/include/files.php b/include/files.php index c20a6d832d..0ac0078c85 100644 --- a/include/files.php +++ b/include/files.php @@ -47,4 +47,3 @@ function update_files_for_items() { create_files_from_item($message["id"]); } } -?> diff --git a/include/follow.php b/include/follow.php index 3045191077..cdeac6db2a 100644 --- a/include/follow.php +++ b/include/follow.php @@ -1,11 +1,14 @@ diff --git a/include/html2plain.php b/include/html2plain.php index dc2cb137c4..ed338ce710 100644 --- a/include/html2plain.php +++ b/include/html2plain.php @@ -233,4 +233,3 @@ function html2plain($html, $wraplength = 75, $compact = false) return(trim($message)); } -?> diff --git a/include/identity.php b/include/identity.php index d0a670abb7..264736e975 100644 --- a/include/identity.php +++ b/include/identity.php @@ -3,6 +3,8 @@ * @file include/identity.php */ +use Friendica\App; + require_once 'include/ForumManager.php'; require_once 'include/bbcode.php'; require_once 'mod/proxy.php'; diff --git a/include/items.php b/include/items.php index 2500e08d54..3c5e88a38a 100644 --- a/include/items.php +++ b/include/items.php @@ -4,7 +4,8 @@ * @file include/items.php */ -use \Friendica\ParseUrl; +use Friendica\App; +use Friendica\ParseUrl; require_once 'include/bbcode.php'; require_once 'include/oembed.php'; @@ -339,7 +340,7 @@ function add_page_info_to_body($body, $texturl = false, $no_photos = false) { * Adds a "lang" specification in a "postopts" element of given $arr, * if possible and not already present. * Expects "body" element to exist in $arr. - * + * * @todo Add a parameter to request forcing override */ function item_add_language_opt(&$arr) { @@ -410,7 +411,70 @@ function uri_to_guid($uri, $host = "") { return $guid_prefix.$host_hash; } -/// @TODO Maybe $arr must be called-by-reference? This function modifies it +/** + * @brief Store the conversation data + * + * @param array $arr Item array with conversation data + * @return array Item array with removed conversation data + */ +function store_conversation($arr) { + if (in_array($arr['network'], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) { + $conversation = array('item-uri' => $arr['uri'], 'received' => dbm::date()); + + if (isset($arr['parent-uri']) AND ($arr['parent-uri'] != $arr['uri'])) { + $conversation['reply-to-uri'] = $arr['parent-uri']; + } + if (isset($arr['thr-parent']) AND ($arr['thr-parent'] != $arr['uri'])) { + $conversation['reply-to-uri'] = $arr['thr-parent']; + } + + if (isset($arr['conversation-uri'])) { + $conversation['conversation-uri'] = $arr['conversation-uri']; + } + + if (isset($arr['conversation-href'])) { + $conversation['conversation-href'] = $arr['conversation-href']; + } + + if (isset($arr['protocol'])) { + $conversation['protocol'] = $arr['protocol']; + } + + if (isset($arr['source'])) { + $conversation['source'] = $arr['source']; + } + + $old_conv = dba::fetch_first("SELECT `item-uri`, `reply-to-uri`, `conversation-uri`, `conversation-href`, `protocol`, `source` + FROM `conversation` WHERE `item-uri` = ?", $conversation['item-uri']); + if (dbm::is_result($old_conv)) { + // Don't update when only the source has changed. + // Only do this when there had been no source before. + if ($old_conv['source'] != '') { + unset($old_conv['source']); + } + // Update structure data all the time but the source only when its from a better protocol. + if (($old_conv['protocol'] < $conversation['protocol']) AND ($old_conv['protocol'] != 0)) { + unset($conversation['protocol']); + unset($conversation['source']); + } + if (!dba::update('conversation', $conversation, array('item-uri' => $conversation['item-uri']), $old_conv)) { + logger('Conversation: update for '.$conversation['item-uri'].' from '.$conv['protocol'].' to '.$conversation['protocol'].' failed', LOGGER_DEBUG); + } + } else { + if (!dba::insert('conversation', $conversation)) { + logger('Conversation: insert for '.$conversation['item-uri'].' (protocol '.$conversation['protocol'].') failed', LOGGER_DEBUG); + } + } + } + + unset($arr['conversation-uri']); + unset($arr['conversation-href']); + unset($arr['protocol']); + unset($arr['source']); + + return $arr; +} + /// @TODO add type-hint array function item_store($arr, $force_parent = false, $notify = false, $dontcache = false) { @@ -423,6 +487,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f $arr['origin'] = 1; $arr['last-child'] = 1; $arr['network'] = NETWORK_DFRN; + $arr['protocol'] = PROTOCOL_DFRN; // We have to avoid duplicates. So we create the GUID in form of a hash of the plink or uri. // In difference to the call to "uri_to_guid" several lines below we add the hash of our own host. @@ -436,6 +501,9 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f } } + // Store conversation data + $arr = store_conversation($arr); + /* * If a Diaspora signature structure was passed in, pull it out of the * item array and set it aside for later storage. @@ -690,6 +758,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f item_body_set_hashtags($arr); $arr['thr-parent'] = $arr['parent-uri']; + if ($arr['parent-uri'] === $arr['uri']) { $parent_id = 0; $parent_deleted = 0; diff --git a/include/like.php b/include/like.php index a53b90c039..4f26002719 100644 --- a/include/like.php +++ b/include/like.php @@ -1,4 +1,7 @@ diff --git a/include/nav.php b/include/nav.php index b184f11806..3c7c932e28 100644 --- a/include/nav.php +++ b/include/nav.php @@ -1,5 +1,7 @@ user['uid'])); + $r = dba::select('contact', array('micro'), array('uid' => $a->user['uid'], 'self' => true), array('limit' => 1)); $userinfo = array( - 'icon' => (dbm::is_result($r) ? $a->remove_baseurl($r[0]['micro']) : 'images/person-48.jpg'), + 'icon' => (dbm::is_result($r) ? $a->remove_baseurl($r['micro']) : 'images/person-48.jpg'), 'name' => $a->user['username'], ); } else { diff --git a/include/network.php b/include/network.php index 033f7e62d3..7d8cf36118 100644 --- a/include/network.php +++ b/include/network.php @@ -4,10 +4,11 @@ * @file include/network.php */ -use \Friendica\Core\Config; +use Friendica\App; +use Friendica\Core\Config; +use Friendica\Network\Probe; require_once("include/xml.php"); -require_once('include/Probe.php'); /** * @brief Curl wrapper @@ -62,23 +63,27 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_ * string 'header' => HTTP headers * string 'body' => fetched content */ -function z_fetch_url($url,$binary = false, &$redirects = 0, $opts=array()) { - - $ret = array('return_code' => 0, 'success' => false, 'header' => "", 'body' => ""); - +function z_fetch_url($url, $binary = false, &$redirects = 0, $opts = array()) { + $ret = array('return_code' => 0, 'success' => false, 'header' => '', 'body' => ''); $stamp1 = microtime(true); $a = get_app(); + if (blocked_url($url)) { + logger('z_fetch_url: domain of ' . $url . ' is blocked', LOGGER_DATA); + return $ret; + } + $ch = @curl_init($url); - if (($redirects > 8) || (! $ch)) { + + if (($redirects > 8) || (!$ch)) { return $ret; } @curl_setopt($ch, CURLOPT_HEADER, true); - if (x($opts,"cookiejar")) { + if (x($opts, "cookiejar")) { curl_setopt($ch, CURLOPT_COOKIEJAR, $opts["cookiejar"]); curl_setopt($ch, CURLOPT_COOKIEFILE, $opts["cookiejar"]); } @@ -87,52 +92,61 @@ function z_fetch_url($url,$binary = false, &$redirects = 0, $opts=array()) { // @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // @curl_setopt($ch, CURLOPT_MAXREDIRS, 5); - if (x($opts,'accept_content')){ - curl_setopt($ch,CURLOPT_HTTPHEADER, array ( - "Accept: " . $opts['accept_content'] + if (x($opts, 'accept_content')) { + curl_setopt($ch, CURLOPT_HTTPHEADER, array( + 'Accept: ' . $opts['accept_content'] )); } - @curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); + @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); @curl_setopt($ch, CURLOPT_USERAGENT, $a->get_useragent()); $range = intval(Config::get('system', 'curl_range_bytes', 0)); + if ($range > 0) { - @curl_setopt($ch, CURLOPT_RANGE, '0-'.$range); + @curl_setopt($ch, CURLOPT_RANGE, '0-' . $range); } - if (x($opts,'headers')){ + if (x($opts, 'headers')) { @curl_setopt($ch, CURLOPT_HTTPHEADER, $opts['headers']); } - if (x($opts,'nobody')){ + + if (x($opts, 'nobody')) { @curl_setopt($ch, CURLOPT_NOBODY, $opts['nobody']); } - if (x($opts,'timeout')){ + + if (x($opts, 'timeout')) { @curl_setopt($ch, CURLOPT_TIMEOUT, $opts['timeout']); } else { - $curl_time = intval(get_config('system','curl_timeout')); + $curl_time = intval(get_config('system', 'curl_timeout')); @curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60)); } // by default we will allow self-signed certs // but you can override this - $check_cert = get_config('system','verifyssl'); + $check_cert = get_config('system', 'verifyssl'); @curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false)); + if ($check_cert) { @curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); } - $prx = get_config('system','proxy'); - if (strlen($prx)) { + $proxy = get_config('system', 'proxy'); + + if (strlen($proxy)) { @curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); - @curl_setopt($ch, CURLOPT_PROXY, $prx); - $prxusr = @get_config('system','proxyuser'); - if (strlen($prxusr)) - @curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr); + @curl_setopt($ch, CURLOPT_PROXY, $proxy); + $proxyuser = @get_config('system', 'proxyuser'); + + if (strlen($proxyuser)) { + @curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyuser); + } + } + + if ($binary) { + @curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); } - if ($binary) - @curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); $a->set_curl_code(0); @@ -140,8 +154,9 @@ function z_fetch_url($url,$binary = false, &$redirects = 0, $opts=array()) { // if it throws any errors. $s = @curl_exec($ch); + if (curl_errno($ch) !== CURLE_OK) { - logger('fetch_url error fetching '.$url.': '.curl_error($ch), LOGGER_NORMAL); + logger('fetch_url error fetching ' . $url . ': ' . curl_error($ch), LOGGER_NORMAL); } $ret['errno'] = curl_errno($ch); @@ -150,16 +165,16 @@ function z_fetch_url($url,$binary = false, &$redirects = 0, $opts=array()) { $curl_info = @curl_getinfo($ch); $http_code = $curl_info['http_code']; - logger('fetch_url '.$url.': '.$http_code." ".$s, LOGGER_DATA); + logger('fetch_url ' . $url . ': ' . $http_code . " " . $s, LOGGER_DATA); $header = ''; // Pull out multiple headers, e.g. proxy and continuation headers // allow for HTTP/2.x without fixing code - while (preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/',$base)) { - $chunk = substr($base,0,strpos($base,"\r\n\r\n")+4); + while (preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/', $base)) { + $chunk = substr($base, 0, strpos($base,"\r\n\r\n") + 4); $header .= $chunk; - $base = substr($base,strlen($chunk)); + $base = substr($base, strlen($chunk)); } $a->set_curl_code($http_code); @@ -167,92 +182,100 @@ function z_fetch_url($url,$binary = false, &$redirects = 0, $opts=array()) { $a->set_curl_headers($header); if ($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) { - $new_location_info = @parse_url($curl_info["redirect_url"]); - $old_location_info = @parse_url($curl_info["url"]); + $new_location_info = @parse_url($curl_info['redirect_url']); + $old_location_info = @parse_url($curl_info['url']); - $newurl = $curl_info["redirect_url"]; + $newurl = $curl_info['redirect_url']; - if (($new_location_info["path"] == "") AND ($new_location_info["host"] != "")) - $newurl = $new_location_info["scheme"]."://".$new_location_info["host"].$old_location_info["path"]; + if (($new_location_info['path'] == '') AND ( $new_location_info['host'] != '')) { + $newurl = $new_location_info['scheme'] . '://' . $new_location_info['host'] . $old_location_info['path']; + } $matches = array(); + if (preg_match('/(Location:|URI:)(.*?)\n/i', $header, $matches)) { $newurl = trim(array_pop($matches)); } - if (strpos($newurl,'/') === 0) + if (strpos($newurl,'/') === 0) { $newurl = $old_location_info["scheme"]."://".$old_location_info["host"].$newurl; + } + if (filter_var($newurl, FILTER_VALIDATE_URL)) { $redirects++; @curl_close($ch); - return z_fetch_url($newurl,$binary, $redirects, $opts); + return z_fetch_url($newurl, $binary, $redirects, $opts); } } - $a->set_curl_code($http_code); $a->set_curl_content_type($curl_info['content_type']); - $body = substr($s,strlen($header)); - - + $body = substr($s, strlen($header)); $rc = intval($http_code); $ret['return_code'] = $rc; $ret['success'] = (($rc >= 200 && $rc <= 299) ? true : false); $ret['redirect_url'] = $url; - if (! $ret['success']) { + + if (!$ret['success']) { $ret['error'] = curl_error($ch); $ret['debug'] = $curl_info; logger('z_fetch_url: error: ' . $url . ': ' . $ret['error'], LOGGER_DEBUG); - logger('z_fetch_url: debug: ' . print_r($curl_info,true), LOGGER_DATA); + logger('z_fetch_url: debug: ' . print_r($curl_info, true), LOGGER_DATA); } - $ret['body'] = substr($s,strlen($header)); + + $ret['body'] = substr($s, strlen($header)); $ret['header'] = $header; - if (x($opts,'debug')) { + + if (x($opts, 'debug')) { $ret['debug'] = $curl_info; } + @curl_close($ch); - $a->save_timestamp($stamp1, "network"); + $a->save_timestamp($stamp1, 'network'); return($ret); - } -// post request to $url. $params is an array of post variables. - /** - * @brief Post request to $url + * @brief Send POST request to $url * * @param string $url URL to post - * @param mixed $params + * @param mixed $params array of POST variables * @param string $headers HTTP headers * @param integer $redirects Recursion counter for internal use - default = 0 * @param integer $timeout The timeout in seconds, default system config value or 60 seconds * * @return string The content */ -function post_url($url,$params, $headers = null, &$redirects = 0, $timeout = 0) { +function post_url($url, $params, $headers = null, &$redirects = 0, $timeout = 0) { $stamp1 = microtime(true); + if (blocked_url($url)) { + logger('post_url: domain of ' . $url . ' is blocked', LOGGER_DATA); + return false; + } + $a = get_app(); $ch = curl_init($url); - if (($redirects > 8) || (! $ch)) - return false; - logger("post_url: start ".$url, LOGGER_DATA); + if (($redirects > 8) || (!$ch)) { + return false; + } + + logger('post_url: start ' . $url, LOGGER_DATA); curl_setopt($ch, CURLOPT_HEADER, true); - curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); - curl_setopt($ch, CURLOPT_POST,1); - curl_setopt($ch, CURLOPT_POSTFIELDS,$params); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $params); curl_setopt($ch, CURLOPT_USERAGENT, $a->get_useragent()); if (intval($timeout)) { curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); - } - else { - $curl_time = intval(get_config('system','curl_timeout')); + } else { + $curl_time = intval(get_config('system', 'curl_timeout')); curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60)); } @@ -265,21 +288,27 @@ function post_url($url,$params, $headers = null, &$redirects = 0, $timeout = 0) } } } - if ($headers) - curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); - $check_cert = get_config('system','verifyssl'); + if ($headers) { + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + } + + $check_cert = get_config('system', 'verifyssl'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false)); + if ($check_cert) { @curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); } - $prx = get_config('system','proxy'); - if (strlen($prx)) { + + $proxy = get_config('system', 'proxy'); + + if (strlen($proxy)) { curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); - curl_setopt($ch, CURLOPT_PROXY, $prx); - $prxusr = get_config('system','proxyuser'); - if (strlen($prxusr)) - curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr); + curl_setopt($ch, CURLOPT_PROXY, $proxy); + $proxyuser = get_config('system', 'proxyuser'); + if (strlen($proxyuser)) { + curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyuser); + } } $a->set_curl_code(0); @@ -293,44 +322,48 @@ function post_url($url,$params, $headers = null, &$redirects = 0, $timeout = 0) $curl_info = curl_getinfo($ch); $http_code = $curl_info['http_code']; - logger("post_url: result ".$http_code." - ".$url, LOGGER_DATA); + logger('post_url: result ' . $http_code . ' - ' . $url, LOGGER_DATA); $header = ''; // Pull out multiple headers, e.g. proxy and continuation headers // allow for HTTP/2.x without fixing code - while (preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/',$base)) { - $chunk = substr($base,0,strpos($base,"\r\n\r\n")+4); + while (preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/', $base)) { + $chunk = substr($base, 0, strpos($base, "\r\n\r\n") + 4); $header .= $chunk; - $base = substr($base,strlen($chunk)); + $base = substr($base, strlen($chunk)); } if ($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) { $matches = array(); preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); $newurl = trim(array_pop($matches)); - if (strpos($newurl,'/') === 0) + + if (strpos($newurl, '/') === 0) { $newurl = $old_location_info["scheme"] . "://" . $old_location_info["host"] . $newurl; + } + if (filter_var($newurl, FILTER_VALIDATE_URL)) { $redirects++; - logger("post_url: redirect ".$url." to ".$newurl); - return post_url($newurl,$params, $headers, $redirects, $timeout); - //return fetch_url($newurl,false,$redirects,$timeout); + logger('post_url: redirect ' . $url . ' to ' . $newurl); + return post_url($newurl, $params, $headers, $redirects, $timeout); } } + $a->set_curl_code($http_code); - $body = substr($s,strlen($header)); + + $body = substr($s, strlen($header)); $a->set_curl_headers($header); curl_close($ch); - $a->save_timestamp($stamp1, "network"); + $a->save_timestamp($stamp1, 'network'); - logger("post_url: end ".$url, LOGGER_DATA); + logger('post_url: end ' . $url, LOGGER_DATA); - return($body); + return $body; } // Generic XML return @@ -458,26 +491,27 @@ function allowed_url($url) { return false; } - $str_allowed = get_config('system','allowed_sites'); - if (! $str_allowed) + $str_allowed = Config::get('system', 'allowed_sites'); + if (! $str_allowed) { return true; + } $found = false; $host = strtolower($h['host']); // always allow our own site - - if ($host == strtolower($_SERVER['SERVER_NAME'])) + if ($host == strtolower($_SERVER['SERVER_NAME'])) { return true; + } $fnmatch = function_exists('fnmatch'); - $allowed = explode(',',$str_allowed); + $allowed = explode(',', $str_allowed); if (count($allowed)) { foreach ($allowed as $a) { $pat = strtolower(trim($a)); - if (($fnmatch && fnmatch($pat,$host)) || ($pat == $host)) { + if (($fnmatch && fnmatch($pat, $host)) || ($pat == $host)) { $found = true; break; } @@ -486,6 +520,36 @@ function allowed_url($url) { return $found; } +/** + * Checks if the provided url domain is on the domain blocklist. + * Returns true if it is or malformed URL, false if not. + * + * @param string $url The url to check the domain from + * @return boolean + */ +function blocked_url($url) { + $h = @parse_url($url); + + if (! $h) { + return true; + } + + $domain_blocklist = Config::get('system', 'blocklist', array()); + if (! $domain_blocklist) { + return false; + } + + $host = strtolower($h['host']); + + foreach ($domain_blocklist as $domain_block) { + if (strtolower($domain_block['domain']) == $host) { + return true; + } + } + + return false; +} + /** * @brief Check if email address is allowed to register here. * @@ -659,22 +723,7 @@ function fix_contact_ssl_policy(&$contact,$new_policy) { } if ($ssl_changed) { - q("UPDATE `contact` SET - `url` = '%s', - `request` = '%s', - `notify` = '%s', - `poll` = '%s', - `confirm` = '%s', - `poco` = '%s' - WHERE `id` = %d LIMIT 1", - dbesc($contact['url']), - dbesc($contact['request']), - dbesc($contact['notify']), - dbesc($contact['poll']), - dbesc($contact['confirm']), - dbesc($contact['poco']), - intval($contact['id']) - ); + dba::update('contact', $contact, array('id' => $contact['id'])); } } diff --git a/include/notifier.php b/include/notifier.php index 370611b4eb..4f9b34d014 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -1,13 +1,14 @@ gen_token(); $sec = $this->gen_token(); - + if ($consumer->key){ $k = $consumer->key; } else { $k = $consumer; } - + $r = q("INSERT INTO tokens (id, secret, client_id, scope, expires) VALUES ('%s','%s','%s','%s', UNIX_TIMESTAMP()+%d)", dbesc($key), dbesc($sec), @@ -80,19 +82,19 @@ class FKOAuthDataStore extends OAuthDataStore { function new_access_token($token, $consumer, $verifier = null) { logger(__function__.":".$token.", ". $consumer.", ". $verifier); - + // return a new access token attached to this consumer // for the user associated with this token if the request token // is authorized // should also invalidate the request token - + $ret=Null; - + // get user for this verifier $uverifier = get_config("oauth", $verifier); logger(__function__.":".$verifier.",".$uverifier); if (is_null($verifier) || ($uverifier!==false)){ - + $key = $this->gen_token(); $sec = $this->gen_token(); $r = q("INSERT INTO tokens (id, secret, client_id, scope, expires, uid) VALUES ('%s','%s','%s','%s', UNIX_TIMESTAMP()+%d, %d)", @@ -103,13 +105,13 @@ class FKOAuthDataStore extends OAuthDataStore { intval(ACCESS_TOKEN_DURATION), intval($uverifier)); if ($r) - $ret = new OAuthToken($key,$sec); + $ret = new OAuthToken($key,$sec); } - - + + q("DELETE FROM tokens WHERE id='%s'", $token->key); - - + + if (!is_null($ret) && $uverifier!==false){ del_config("oauth", $verifier); /* $apps = get_pconfig($uverifier, "oauth", "apps"); @@ -117,9 +119,9 @@ class FKOAuthDataStore extends OAuthDataStore { $apps[] = $consumer->key; set_pconfig($uverifier, "oauth", "apps", $apps);*/ } - + return $ret; - + } } @@ -172,9 +174,9 @@ class FKOAuth1 extends OAuthServer { intval($_SESSION['uid']) ); - call_hooks('logged_in', $a->user); + call_hooks('logged_in', $a->user); } - + } /* class FKOAuth2 extends OAuth2 { @@ -190,13 +192,13 @@ class FKOAuth2 extends OAuth2 { dbesc($client_secret), dbesc($redirect_uri) ); - + return $r; } protected function checkClientCredentials($client_id, $client_secret = NULL) { $client_secret = $this->db_secret($client_secret); - + $r = q("SELECT pw FROM clients WHERE client_id = '%s'", dbesc($client_id)); @@ -218,21 +220,21 @@ class FKOAuth2 extends OAuth2 { protected function getAccessToken($oauth_token) { $r = q("SELECT client_id, expires, scope FROM tokens WHERE id = '%s'", dbesc($oauth_token)); - + if (dbm::is_result($r)) return $r[0]; return null; } - + protected function setAccessToken($oauth_token, $client_id, $expires, $scope = NULL) { $r = q("INSERT INTO tokens (id, client_id, expires, scope) VALUES ('%s', '%s', %d, '%s')", dbesc($oauth_token), dbesc($client_id), intval($expires), dbesc($scope)); - + return $r; } @@ -246,23 +248,23 @@ class FKOAuth2 extends OAuth2 { protected function getAuthCode($code) { $r = q("SELECT id, client_id, redirect_uri, expires, scope FROM auth_codes WHERE id = '%s'", dbesc($code)); - + if (dbm::is_result($r)) return $r[0]; return null; } protected function setAuthCode($code, $client_id, $redirect_uri, $expires, $scope = NULL) { - $r = q("INSERT INTO auth_codes - (id, client_id, redirect_uri, expires, scope) VALUES + $r = q("INSERT INTO auth_codes + (id, client_id, redirect_uri, expires, scope) VALUES ('%s', '%s', '%s', %d, '%s')", dbesc($code), dbesc($client_id), dbesc($redirect_uri), intval($expires), dbesc($scope)); - return $r; - } - + return $r; + } + } */ diff --git a/include/oembed.php b/include/oembed.php index 498d9a7212..d28a97e322 100755 --- a/include/oembed.php +++ b/include/oembed.php @@ -4,8 +4,9 @@ * @file include/oembed.php */ -use \Friendica\ParseUrl; -use \Friendica\Core\Config; +use Friendica\App; +use Friendica\ParseUrl; +use Friendica\Core\Config; function oembed_replacecb($matches){ $embedurl=$matches[1]; diff --git a/include/onepoll.php b/include/onepoll.php index 6dac996db5..cf5a1f576a 100644 --- a/include/onepoll.php +++ b/include/onepoll.php @@ -1,6 +1,6 @@ evaluate('atom:author/atom:uri/text()', $context)->item(0)->nodeValue; $author["author-name"] = $xpath->evaluate('atom:author/atom:name/text()', $context)->item(0)->nodeValue; + $addr = $xpath->evaluate('atom:author/atom:email/text()', $context)->item(0)->nodeValue; $aliaslink = $author["author-link"]; $alternate = $xpath->query("atom:author/atom:link[@rel='alternate']", $context)->item(0)->attributes; if (is_object($alternate)) { - foreach($alternate AS $attributes) { - if ($attributes->name == "href") { + foreach ($alternate AS $attributes) { + if (($attributes->name == "href") AND ($attributes->textContent != "")) { $author["author-link"] = $attributes->textContent; } } } - $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `nurl` IN ('%s', '%s') AND `network` != '%s'", - intval($importer["uid"]), dbesc(normalise_link($author["author-link"])), - dbesc(normalise_link($aliaslink)), dbesc(NETWORK_STATUSNET)); - if (dbm::is_result($r)) { - $contact = $r[0]; - $author["contact-id"] = $r[0]["id"]; - } else { - $author["contact-id"] = $contact["id"]; + $author["contact-id"] = $contact["id"]; + + if ($author["author-link"] != "") { + if ($aliaslink == "") { + $aliaslink = $author["author-link"]; + } + + $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `nurl` IN ('%s', '%s') AND `network` != '%s'", + intval($importer["uid"]), dbesc(normalise_link($author["author-link"])), + dbesc(normalise_link($aliaslink)), dbesc(NETWORK_STATUSNET)); + + if (dbm::is_result($r)) { + $contact = $r[0]; + $author["contact-id"] = $r[0]["id"]; + $author["author-link"] = $r[0]["url"]; + } + } elseif ($addr != "") { + // Should not happen + $contact = dba::fetch_first("SELECT * FROM `contact` WHERE `uid` = ? AND `addr` = ? AND `network` != ?", + $importer["uid"], $addr, NETWORK_STATUSNET); + + if (dbm::is_result($contact)) { + $author["contact-id"] = $contact["id"]; + $author["author-link"] = $contact["url"]; + } } $avatarlist = array(); @@ -120,7 +106,7 @@ class ostatus { } if (count($avatarlist) > 0) { krsort($avatarlist); - $author["author-avatar"] = self::fix_avatar(current($avatarlist), $author["author-link"]); + $author["author-avatar"] = Probe::fixAvatar(current($avatarlist), $author["author-link"]); } $displayname = $xpath->evaluate('atom:author/poco:displayName/text()', $context)->item(0)->nodeValue; @@ -320,8 +306,10 @@ class ostatus { if ($first_child == "feed") { $entries = $xpath->query('/atom:feed/atom:entry'); + $header["protocol"] = PROTOCOL_OSTATUS_FEED; } else { $entries = $xpath->query('/atom:entry'); + $header["protocol"] = PROTOCOL_OSTATUS_SALMON; } $conversation = ""; $conversationlist = array(); @@ -378,7 +366,7 @@ class ostatus { } elseif ($item["object-type"] == ACTIVITY_OBJ_QUESTION) { $item["title"] = $xpath->query('atom:title/text()', $entry)->item(0)->nodeValue; } - $item["object"] = $xml; + $item["source"] = $xml; /// @TODO /// Delete a message @@ -426,6 +414,19 @@ class ostatus { $item["created"] = $xpath->query('atom:published/text()', $entry)->item(0)->nodeValue; $item["edited"] = $xpath->query('atom:updated/text()', $entry)->item(0)->nodeValue; $conversation = $xpath->query('ostatus:conversation/text()', $entry)->item(0)->nodeValue; + $item['conversation-uri'] = $conversation; + + $conv = $xpath->query('ostatus:conversation', $entry); + if (is_object($conv->item(0))) { + foreach ($conv->item(0)->attributes AS $attributes) { + if ($attributes->name == "ref") { + $item['conversation-uri'] = $attributes->textContent; + } + if ($attributes->name == "href") { + $item['conversation-href'] = $attributes->textContent; + } + } + } $related = ""; @@ -479,6 +480,10 @@ class ostatus { break; case "ostatus:conversation": $conversation = $attribute['href']; + $item['conversation-href'] = $conversation; + if (!isset($item['conversation-uri'])) { + $item['conversation-uri'] = $item['conversation-href']; + } break; case "enclosure": $enclosure = $attribute['href']; @@ -905,6 +910,8 @@ class ostatus { ($item["verb"] == ACTIVITY_LIKE) OR ($conversation_url == "")) { $item_stored = item_store($item, $all_threads); return $item_stored; + } elseif (count($item) > 0) { + $item = store_conversation($item); } // Get the parent @@ -1162,13 +1169,17 @@ class ostatus { $arr["owner-name"] = $single_conv->actor->portablecontacts_net->displayName; $arr["owner-link"] = $actor; - $arr["owner-avatar"] = self::fix_avatar($single_conv->actor->image->url, $arr["owner-link"]); + $arr["owner-avatar"] = Probe::fixAvatar($single_conv->actor->image->url, $arr["owner-link"]); $arr["author-name"] = $arr["owner-name"]; $arr["author-link"] = $arr["owner-link"]; $arr["author-avatar"] = $arr["owner-avatar"]; $arr["body"] = add_page_info_to_body(html2bbcode($single_conv->content)); + if (isset($single_conv->status_net->conversation)) { + $arr['conversation-uri'] = $single_conv->status_net->conversation; + } + if (isset($single_conv->status_net->notice_info->source)) $arr["app"] = strip_tags($single_conv->status_net->notice_info->source); elseif (isset($single_conv->statusnet->notice_info->source)) @@ -1181,7 +1192,9 @@ class ostatus { $arr["app"] = "OStatus"; - $arr["object"] = json_encode($single_conv); + $arr["source"] = json_encode($single_conv); + $arr["protocol"] = PROTOCOL_GS_CONVERSATION; + $arr["verb"] = $parent["verb"]; $arr["visible"] = $parent["visible"]; $arr["location"] = $single_conv->location->displayName; @@ -1221,7 +1234,7 @@ class ostatus { $arr["author-name"] = $single_conv->object->actor->contact->displayName; } $arr["author-link"] = $single_conv->object->actor->url; - $arr["author-avatar"] = self::fix_avatar($single_conv->object->actor->image->url, $arr["author-link"]); + $arr["author-avatar"] = Probe::fixAvatar($single_conv->object->actor->image->url, $arr["author-link"]); $arr["app"] = $single_conv->object->provider->displayName."#"; //$arr["verb"] = $single_conv->object->verb; @@ -1413,6 +1426,7 @@ class ostatus { $root->setAttribute("xmlns:poco", NAMESPACE_POCO); $root->setAttribute("xmlns:ostatus", NAMESPACE_OSTATUS); $root->setAttribute("xmlns:statusnet", NAMESPACE_STATUSNET); + $root->setAttribute("xmlns:mastodon", NAMESPACE_MASTODON); $attributes = array("uri" => "https://friendi.ca", "version" => FRIENDICA_VERSION."-".DB_UPDATE_VERSION); xml::add_element($doc, $root, "generator", FRIENDICA_PLATFORM, $attributes); @@ -1551,14 +1565,16 @@ class ostatus { */ private function add_author($doc, $owner) { - $r = q("SELECT `homepage` FROM `profile` WHERE `uid` = %d AND `is-default` LIMIT 1", intval($owner["uid"])); + $r = q("SELECT `homepage`, `publish` FROM `profile` WHERE `uid` = %d AND `is-default` LIMIT 1", intval($owner["uid"])); if ($r) $profile = $r[0]; $author = $doc->createElement("author"); + xml::add_element($doc, $author, "id", $owner["url"]); xml::add_element($doc, $author, "activity:object-type", ACTIVITY_OBJ_PERSON); xml::add_element($doc, $author, "uri", $owner["url"]); - xml::add_element($doc, $author, "name", $owner["name"]); + xml::add_element($doc, $author, "name", $owner["nick"]); + xml::add_element($doc, $author, "email", $owner["addr"]); xml::add_element($doc, $author, "summary", bbcode($owner["about"], false, false, 7)); $attributes = array("rel" => "alternate", "type" => "text/html", "href" => $owner["url"]); @@ -1605,6 +1621,9 @@ class ostatus { xml::add_element($doc, $author, "statusnet:profile_info", "", array("local_id" => $owner["uid"])); } + if ($profile["publish"]) { + xml::add_element($doc, $author, "mastodon:scope", "public"); + } return $author; } @@ -1778,7 +1797,7 @@ class ostatus { self::entry_content($doc, $as_object, $repeated_item, $owner, "", "", false); $author = self::add_author($doc, $contact); - $as_object->appendChild($author); + $as_object->appendChild($author); $as_object2 = $doc->createElement("activity:object"); @@ -2000,6 +2019,7 @@ class ostatus { $entry->setAttribute("xmlns:poco", NAMESPACE_POCO); $entry->setAttribute("xmlns:ostatus", NAMESPACE_OSTATUS); $entry->setAttribute("xmlns:statusnet", NAMESPACE_STATUSNET); + $entry->setAttribute("xmlns:mastodon", NAMESPACE_MASTODON); $author = self::add_author($doc, $owner); $entry->appendChild($author); @@ -2066,39 +2086,54 @@ class ostatus { $parent = q("SELECT `guid`, `author-link`, `owner-link` FROM `item` WHERE `id` = %d", intval($item["parent"])); $parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']); - $attributes = array( - "ref" => $parent_item, - "type" => "text/html", - "href" => App::get_baseurl()."/display/".$parent[0]["guid"]); - xml::add_element($doc, $entry, "thr:in-reply-to", "", $attributes); - - $attributes = array( - "rel" => "related", - "href" => App::get_baseurl()."/display/".$parent[0]["guid"]); - xml::add_element($doc, $entry, "link", "", $attributes); - - $mentioned[$parent[0]["author-link"]] = $parent[0]["author-link"]; - $mentioned[$parent[0]["owner-link"]] = $parent[0]["owner-link"]; - - $thrparent = q("SELECT `guid`, `author-link`, `owner-link` FROM `item` WHERE `uid` = %d AND `uri` = '%s'", + $thrparent = q("SELECT `guid`, `author-link`, `owner-link`, `plink` FROM `item` WHERE `uid` = %d AND `uri` = '%s'", intval($owner["uid"]), dbesc($parent_item)); if ($thrparent) { $mentioned[$thrparent[0]["author-link"]] = $thrparent[0]["author-link"]; $mentioned[$thrparent[0]["owner-link"]] = $thrparent[0]["owner-link"]; + $parent_plink = $thrparent[0]["plink"]; + } else { + $mentioned[$parent[0]["author-link"]] = $parent[0]["author-link"]; + $mentioned[$parent[0]["owner-link"]] = $parent[0]["owner-link"]; + $parent_plink = App::get_baseurl()."/display/".$parent[0]["guid"]; } + + $attributes = array( + "ref" => $parent_item, + "href" => $parent_plink); + xml::add_element($doc, $entry, "thr:in-reply-to", "", $attributes); + + $attributes = array( + "rel" => "related", + "href" => $parent_plink); + xml::add_element($doc, $entry, "link", "", $attributes); } if (intval($item["parent"]) > 0) { - $conversation = App::get_baseurl()."/display/".$owner["nick"]."/".$item["parent"]; - xml::add_element($doc, $entry, "link", "", array("rel" => "ostatus:conversation", "href" => $conversation)); + $conversation_href = App::get_baseurl()."/display/".$owner["nick"]."/".$item["parent"]; + $conversation_uri = $conversation_href; + + if (isset($parent_item)) { + $r = dba::fetch_first("SELECT `conversation-uri`, `conversation-href` FROM `conversation` WHERE `item-uri` = ?", $parent_item); + if (dbm::is_result($r)) { + if ($r['conversation-uri'] != '') { + $conversation_uri = $r['conversation-uri']; + } + if ($r['conversation-href'] != '') { + $conversation_href = $r['conversation-href']; + } + } + } + + xml::add_element($doc, $entry, "link", "", array("rel" => "ostatus:conversation", "href" => $conversation_href)); $attributes = array( - "href" => $conversation, + "href" => $conversation_href, "local_id" => $item["parent"], - "ref" => $conversation); + "ref" => $conversation_uri); - xml::add_element($doc, $entry, "ostatus:conversation", $conversation, $attributes); + xml::add_element($doc, $entry, "ostatus:conversation", $conversation_uri, $attributes); } $tags = item_getfeedtags($item); @@ -2136,6 +2171,7 @@ class ostatus { xml::add_element($doc, $entry, "link", "", array("rel" => "mentioned", "ostatus:object-type" => "http://activitystrea.ms/schema/1.0/collection", "href" => "http://activityschema.org/collection/public")); + xml::add_element($doc, $entry, "mastodon:scope", "public"); } if(count($tags)) @@ -2165,7 +2201,7 @@ class ostatus { /** * @brief Creates the XML feed for a given nickname * - * @param app $a The application class + * @param App $a The application class * @param string $owner_nick Nickname of the feed owner * @param string $last_update Date of the last update * @@ -2227,6 +2263,9 @@ class ostatus { $root = self::add_header($doc, $owner); foreach ($items AS $item) { + if (Config::get('system', 'ostatus_debug')) { + $item['body'] .= '🍼'; + } $entry = self::entry($doc, $item, $owner); $root->appendChild($entry); } @@ -2247,6 +2286,10 @@ class ostatus { $doc = new DOMDocument('1.0', 'utf-8'); $doc->formatOutput = true; + if (Config::get('system', 'ostatus_debug')) { + $item['body'] .= '🐟'; + } + $entry = self::entry($doc, $item, $owner, true); $doc->appendChild($entry); @@ -2254,4 +2297,3 @@ class ostatus { return(trim($doc->saveXML())); } } -?> diff --git a/include/pgettext.php b/include/pgettext.php index b42dcec119..9b541e8e3c 100644 --- a/include/pgettext.php +++ b/include/pgettext.php @@ -10,7 +10,7 @@ * */ -use \Friendica\Core\Config; +use Friendica\Core\Config; require_once("include/dba.php"); diff --git a/include/photos.php b/include/photos.php index e872532a48..38cda3f2ba 100644 --- a/include/photos.php +++ b/include/photos.php @@ -4,8 +4,8 @@ * @brief Functions related to photo handling. */ -use \Friendica\Core\Config; -use \Friendica\Core\PConfig; +use Friendica\Core\Config; +use Friendica\Core\PConfig; function getGps($exifCoord, $hemi) { $degrees = count($exifCoord) > 0 ? gps2Num($exifCoord[0]) : 0; diff --git a/include/pidfile.php b/include/pidfile.php index 3093e149ae..dda6b3e9c1 100644 --- a/include/pidfile.php +++ b/include/pidfile.php @@ -38,4 +38,3 @@ class pidfile { return(posix_kill(file_get_contents($this->_file), SIGTERM)); } } -?> diff --git a/include/plaintext.php b/include/plaintext.php index 6ab4ec77d6..215d9f3db7 100644 --- a/include/plaintext.php +++ b/include/plaintext.php @@ -4,7 +4,8 @@ * @file include/plaintext.php */ -use \Friendica\ParseUrl; +use Friendica\App; +use Friendica\ParseUrl; require_once("include/Photo.php"); require_once("include/bbcode.php"); @@ -431,4 +432,3 @@ function plaintext(App $a, $b, $limit = 0, $includedlinks = false, $htmlmode = 2 return($post); } -?> diff --git a/include/plugin.php b/include/plugin.php index 83f6f1ab95..336b213aa3 100644 --- a/include/plugin.php +++ b/include/plugin.php @@ -1,10 +1,11 @@ start_process(); + if ($a->min_memory_reached()) { + return; + } + if (poller_max_connections_reached()) { return; } @@ -67,6 +73,11 @@ function poller_run($argv, $argc){ while ($r = poller_worker_process()) { + // Check free memory + if ($a->min_memory_reached()) { + return; + } + // Count active workers and compare them with a maximum value that depends on the load if (poller_too_much_workers()) { return; @@ -80,7 +91,6 @@ function poller_run($argv, $argc){ if (time() > ($starttime + 3600)) return; } - } /** @@ -678,4 +688,3 @@ if (array_search(__file__,get_included_files())===0){ killme(); } -?> diff --git a/include/post_update.php b/include/post_update.php index f9649961d9..9d18b27b4f 100644 --- a/include/post_update.php +++ b/include/post_update.php @@ -258,5 +258,3 @@ function post_update_1206() { logger("Done", LOGGER_DEBUG); return true; } - -?> diff --git a/include/Scrape.php b/include/probe.php similarity index 52% rename from include/Scrape.php rename to include/probe.php index bb9af60d70..8cf703be80 100644 --- a/include/Scrape.php +++ b/include/probe.php @@ -1,14 +1,6 @@ diff --git a/include/redir.php b/include/redir.php index 76e30a6eac..36f982b12c 100644 --- a/include/redir.php +++ b/include/redir.php @@ -1,5 +1,7 @@ $id), array('limit' => 1)); if (dbm::is_result($r)) { return; } - q("DELETE FROM `item` WHERE `contact-id` = %d", intval($id)); - - q("DELETE FROM `photo` WHERE `contact-id` = %d", intval($id)); - - q("DELETE FROM `mail` WHERE `contact-id` = %d", intval($id)); - - q("DELETE FROM `event` WHERE `cid` = %d", intval($id)); - - q("DELETE FROM `queue` WHERE `cid` = %d", intval($id)); + // Now we delete all the depending table entries + dba::delete('contact', array('id' => $id)); } -?> diff --git a/include/salmon.php b/include/salmon.php index 79fd4c10d9..6e08d0aaf2 100644 --- a/include/salmon.php +++ b/include/salmon.php @@ -1,7 +1,8 @@ totalResults)) { $poco = $server_url."/poco"; - $last_contact = datetime_convert(); - $server = poco_detect_poco_data($data); if ($server) { $platform = $server['platform']; @@ -1072,7 +1072,6 @@ function poco_check_server($server_url, $network = "", $force = false) { $serverret = z_fetch_url($server_url); if (!$serverret["success"] OR ($serverret["body"] == "")) { - $last_failure = datetime_convert(); $failure = true; } else { $server = poco_detect_server_type($serverret["body"]); @@ -1081,7 +1080,6 @@ function poco_check_server($server_url, $network = "", $force = false) { $network = $server['network']; $version = $server['version']; $site_name = $server['site_name']; - $last_contact = datetime_convert(); } $lines = explode("\n",$serverret["header"]); @@ -1095,15 +1093,11 @@ function poco_check_server($server_url, $network = "", $force = false) { $network = NETWORK_DIASPORA; $versionparts = explode("-", $version); $version = $versionparts[0]; - $last_contact = datetime_convert(); } if(stristr($line,'Server: Mastodon')) { $platform = "Mastodon"; $network = NETWORK_OSTATUS; - // Mastodon doesn't reveal version numbers - $version = ""; - $last_contact = datetime_convert(); } } } @@ -1122,7 +1116,6 @@ function poco_check_server($server_url, $network = "", $force = false) { $version = str_replace(chr(239).chr(187).chr(191), "", $serverret["body"]); $version = trim($version, '"'); $network = NETWORK_OSTATUS; - $last_contact = datetime_convert(); } // Test for GNU Social @@ -1134,7 +1127,19 @@ function poco_check_server($server_url, $network = "", $force = false) { $version = str_replace(chr(239).chr(187).chr(191), "", $serverret["body"]); $version = trim($version, '"'); $network = NETWORK_OSTATUS; - $last_contact = datetime_convert(); + } + + // Test for Mastodon + $serverret = z_fetch_url($server_url."/api/v1/instance"); + if ($serverret["success"] AND ($serverret["body"] != '')) { + $data = json_decode($serverret["body"]); + if (isset($data->version)) { + $platform = "Mastodon"; + $version = $data->version; + $site_name = $data->title; + $info = $data->description; + $network = NETWORK_OSTATUS; + } } } @@ -1144,8 +1149,6 @@ function poco_check_server($server_url, $network = "", $force = false) { if ($serverret["success"]) { $data = json_decode($serverret["body"]); if (isset($data->site->server)) { - $last_contact = datetime_convert(); - if (isset($data->site->platform)) { $platform = $data->site->platform->PLATFORM_NAME; $version = $data->site->platform->STD_VERSION; @@ -1192,7 +1195,6 @@ function poco_check_server($server_url, $network = "", $force = false) { } } - // Query statistics.json. Optional package for Diaspora, Friendica and Redmatrix if (!$failure) { $serverret = z_fetch_url($server_url."/statistics.json"); @@ -1220,9 +1222,6 @@ function poco_check_server($server_url, $network = "", $force = false) { } else { $register_policy = REGISTER_CLOSED; } - - if (isset($data->version)) - $last_contact = datetime_convert(); } } @@ -1247,8 +1246,6 @@ function poco_check_server($server_url, $network = "", $force = false) { if (isset($server['site_name'])) { $site_name = $server['site_name']; } - - $last_contact = datetime_convert(); } } @@ -1264,7 +1261,6 @@ function poco_check_server($server_url, $network = "", $force = false) { $data = json_decode($serverret["body"]); if (isset($data->version)) { - $last_contact = datetime_convert(); $network = NETWORK_DFRN; $noscrape = $data->no_scrape_url; @@ -1290,13 +1286,14 @@ function poco_check_server($server_url, $network = "", $force = false) { } if ($possible_failure AND !$failure) { - $last_failure = datetime_convert(); $failure = true; } if ($failure) { $last_contact = $orig_last_contact; + $last_failure = datetime_convert(); } else { + $last_contact = datetime_convert(); $last_failure = $orig_last_failure; } @@ -1430,7 +1427,7 @@ function common_friends_zcid($uid,$zcid,$start = 0, $limit = 9999,$shuffle = fal $r = q("SELECT `gcontact`.* FROM `glink` INNER JOIN `gcontact` on `glink`.`gcid` = `gcontact`.`id` where `glink`.`zcid` = %d - and `gcontact`.`nurl` in (select nurl from contact where uid = %d and self = 0 and blocked = 0 and hidden = 0 ) + and `gcontact`.`nurl` in (select nurl from contact where uid = %d and self = 0 and blocked = 0 and hidden = 0 ) $sql_extra limit %d, %d", intval($zcid), intval($uid), @@ -2345,4 +2342,3 @@ function poco_serverlist() { } return $r; } -?> diff --git a/include/spool_post.php b/include/spool_post.php index f64b39e4b6..2b21e41965 100644 --- a/include/spool_post.php +++ b/include/spool_post.php @@ -4,7 +4,7 @@ * @brief Posts items that wer spooled because they couldn't be posted. */ -use \Friendica\Core\Config; +use Friendica\Core\Config; require_once("include/items.php"); @@ -55,4 +55,3 @@ function spool_post_run($argv, $argc) { } } } -?> diff --git a/include/tags.php b/include/tags.php index 0a09438478..6067f3f4b9 100644 --- a/include/tags.php +++ b/include/tags.php @@ -1,4 +1,7 @@ q("SELECT `oid`,`item`.`guid`, `item`.`created`, `item`.`received` FROM `term` INNER JOIN `item` ON `item`.`id`=`term`.`oid` WHERE `term`.`otype` = 1 AND `term`.`guid` = ''", true); + $messages = dba::p("SELECT `oid`,`item`.`guid`, `item`.`created`, `item`.`received` FROM `term` INNER JOIN `item` ON `item`.`id`=`term`.`oid` WHERE `term`.`otype` = 1 AND `term`.`guid` = ''"); - logger("fetched messages: ".count($messages)); - while ($message = $db->qfetch()) { + logger("fetched messages: ".dba::num_rows($messages)); + while ($message = dba::fetch($messages)) { if ($message["uid"] == 0) { $global = true; @@ -135,15 +137,14 @@ function update_items() { intval($global), intval(TERM_OBJ_POST), intval($message["oid"])); } - $db->qclose(); + dba::close($messages); - $messages = $db->q("SELECT `guid` FROM `item` WHERE `uid` = 0", true); + $messages = dba::p("SELECT `guid` FROM `item` WHERE `uid` = 0"); - logger("fetched messages: ".count($messages)); - while ($message = $db->qfetch()) { + logger("fetched messages: ".dba::num_rows($messages)); + while ($message = dba::fetch(messages)) { q("UPDATE `item` SET `global` = 1 WHERE `guid` = '%s'", dbesc($message["guid"])); } - $db->qclose(); + dba::close($messages); } -?> diff --git a/include/text.php b/include/text.php index 2919989331..c9babba940 100644 --- a/include/text.php +++ b/include/text.php @@ -1,12 +1,13 @@ save_timestamp($stamp1, "file"); }} +/** + * @brief An alternative logger for development. + * Works largely as logger() but allows developers + * to isolate particular elements they are targetting + * personally without background noise + * + * log levels: + * LOGGER_NORMAL (default) + * LOGGER_TRACE + * LOGGER_DEBUG + * LOGGER_DATA + * LOGGER_ALL + * + * @global App $a + * @global dba $db + * @global array $LOGGER_LEVELS + * @param string $msg + * @param int $level + */ + +function dlogger($msg, $level = 0) { + $a = get_app(); + global $db; + + // turn off logger in install mode + if ( + $a->module == 'install' + || ! ($db && $db->connected) + ) { + return; + } + + $logfile = get_config('system','dlogfile'); + + if (! $logfile) { + return; + } + + if (count($LOGGER_LEVELS) == 0) { + foreach (get_defined_constants() as $k => $v) { + if (substr($k, 0, 7) == "LOGGER_") { + $LOGGER_LEVELS[$v] = substr($k, 7, 7); + } + } + } + + $process_id = session_id(); + + if ($process_id == '') { + $process_id = get_app()->process_id; + } + + $callers = debug_backtrace(); + $logline = sprintf("%s@\t%s:\t%s:\t%s\t%s\t%s\n", + datetime_convert(), + $process_id, + basename($callers[0]['file']), + $callers[0]['line'], + $callers[1]['function'], + $msg + ); + + $stamp1 = microtime(true); + @file_put_contents($logfile, $logline, FILE_APPEND); + $a->save_timestamp($stamp1, "file"); +} if(! function_exists('activity_match')) { /** diff --git a/include/threads.php b/include/threads.php index c214cf2644..66622e8746 100644 --- a/include/threads.php +++ b/include/threads.php @@ -1,4 +1,7 @@ q("SELECT `id` FROM `item` WHERE `id` = `parent`", true); + $messages = dba::p("SELECT `id` FROM `item` WHERE `id` = `parent`"); - logger("update_threads: fetched messages: ".count($messages)); + logger("update_threads: fetched messages: ".dba::num_rows($messages)); - while ($message = $db->qfetch()) { + while ($message = dba::fetch($messages)) { add_thread($message["id"]); add_shadow_thread($message["id"]); } - $db->qclose(); + dba::close($messages); } function update_threads_mention() { @@ -283,18 +284,15 @@ function update_threads_mention() { function update_shadow_copy() { - global $db; - logger("start"); - $messages = $db->q(sprintf("SELECT `iid` FROM `thread` WHERE `uid` != 0 AND `network` IN ('', '%s', '%s', '%s') - AND `visible` AND NOT `deleted` AND NOT `moderated` AND NOT `private` ORDER BY `created`", - NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS), true); + $messages = dba::p("SELECT `iid` FROM `thread` WHERE `uid` != 0 AND `network` IN ('', ?, ?, ?) + AND `visible` AND NOT `deleted` AND NOT `moderated` AND NOT `private` ORDER BY `created`", + NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS); - logger("fetched messages: ".count($messages)); - while ($message = $db->qfetch()) + logger("fetched messages: ".dba::num_rows($messages)); + while ($message = dba::fetch($messages)) add_shadow_thread($message["iid"]); - $db->qclose(); + dba::close($messages); } -?> diff --git a/include/uimport.php b/include/uimport.php index 4cc5b6c04b..eb971387fd 100644 --- a/include/uimport.php +++ b/include/uimport.php @@ -1,291 +1,293 @@ -insert_id(); -} - -function last_error() { - global $db; - return $db->error; -} - -/** - * Remove columns from array $arr that aren't in table $table - * - * @param string $table Table name - * @param array &$arr Column=>Value array from json (by ref) - */ -function check_cols($table, &$arr) { - $query = sprintf("SHOW COLUMNS IN `%s`", dbesc($table)); - logger("uimport: $query", LOGGER_DEBUG); - $r = q($query); - $tcols = array(); - // get a plain array of column names - foreach ($r as $tcol) { - $tcols[] = $tcol['Field']; - } - // remove inexistent columns - foreach ($arr as $icol => $ival) { - if (!in_array($icol, $tcols)) { - unset($arr[$icol]); - } - } -} - -/** - * Import data into table $table - * - * @param string $table Table name - * @param array $arr Column=>Value array from json - */ -function db_import_assoc($table, $arr) { - if (isset($arr['id'])) - unset($arr['id']); - check_cols($table, $arr); - $cols = implode("`,`", array_map('dbesc', array_keys($arr))); - $vals = implode("','", array_map('dbesc', array_values($arr))); - $query = "INSERT INTO `$table` (`$cols`) VALUES ('$vals')"; - logger("uimport: $query", LOGGER_TRACE); - if (IMPORT_DEBUG) - return true; - return q($query); -} - -function import_cleanup($newuid) { - q("DELETE FROM `user` WHERE uid = %d", $newuid); - q("DELETE FROM `contact` WHERE uid = %d", $newuid); - q("DELETE FROM `profile` WHERE uid = %d", $newuid); - q("DELETE FROM `photo` WHERE uid = %d", $newuid); - q("DELETE FROM `group` WHERE uid = %d", $newuid); - q("DELETE FROM `group_member` WHERE uid = %d", $newuid); - q("DELETE FROM `pconfig` WHERE uid = %d", $newuid); -} - -function import_account(App $a, $file) { - logger("Start user import from " . $file['tmp_name']); - /* - STEPS - 1. checks - 2. replace old baseurl with new baseurl - 3. import data (look at user id and contacts id) - 4. archive non-dfrn contacts - 5. send message to dfrn contacts - */ - - $account = json_decode(file_get_contents($file['tmp_name']), true); - if ($account === null) { - notice(t("Error decoding account file")); - return; - } - - - if (!x($account, 'version')) { - notice(t("Error! No version data in file! This is not a Friendica account file?")); - return; - } - - /* - // this is not required as we remove columns in json not in current db schema - if ($account['schema'] != DB_UPDATE_VERSION) { - notice(t("Error! I can't import this file: DB schema version is not compatible.")); - return; - } - */ - - // check for username - $r = q("SELECT uid FROM user WHERE nickname='%s'", $account['user']['nickname']); - if ($r === false) { - logger("uimport:check nickname : ERROR : " . last_error(), LOGGER_NORMAL); - notice(t('Error! Cannot check nickname')); - return; - } - if (dbm::is_result($r) > 0) { - notice(sprintf(t("User '%s' already exists on this server!"), $account['user']['nickname'])); - return; - } - // check if username matches deleted account - $r = q("SELECT id FROM userd WHERE username='%s'", $account['user']['nickname']); - if ($r === false) { - logger("uimport:check nickname : ERROR : " . last_error(), LOGGER_NORMAL); - notice(t('Error! Cannot check nickname')); - return; - } - if (dbm::is_result($r) > 0) { - notice(sprintf(t("User '%s' already exists on this server!"), $account['user']['nickname'])); - return; - } - - $oldbaseurl = $account['baseurl']; - $newbaseurl = App::get_baseurl(); - $olduid = $account['user']['uid']; - - unset($account['user']['uid']); - unset($account['user']['account_expired']); - unset($account['user']['account_expires_on']); - unset($account['user']['expire_notification_sent']); - foreach ($account['user'] as $k => &$v) { - $v = str_replace($oldbaseurl, $newbaseurl, $v); - } - - - // import user - $r = db_import_assoc('user', $account['user']); - if ($r === false) { - //echo "
"; var_dump($r, $query, mysql_error()); killme();
-		logger("uimport:insert user : ERROR : " . last_error(), LOGGER_NORMAL);
-		notice(t("User creation error"));
-		return;
-	}
-	$newuid = last_insert_id();
-	//~ $newuid = 1;
-
-	// Generate a new guid for the account. Otherwise there will be problems with diaspora
-	q("UPDATE `user` SET `guid` = '%s' WHERE `uid` = %d",
-		dbesc(generate_user_guid()), intval($newuid));
-
-	foreach ($account['profile'] as &$profile) {
-		foreach ($profile as $k => &$v) {
-			$v = str_replace($oldbaseurl, $newbaseurl, $v);
-			foreach (array("profile", "avatar") as $k)
-				$v = str_replace($oldbaseurl . "/photo/" . $k . "/" . $olduid . ".jpg", $newbaseurl . "/photo/" . $k . "/" . $newuid . ".jpg", $v);
-		}
-		$profile['uid'] = $newuid;
-		$r = db_import_assoc('profile', $profile);
-		if ($r === false) {
-			logger("uimport:insert profile " . $profile['profile-name'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
-			info(t("User profile creation error"));
-			import_cleanup($newuid);
-			return;
-		}
-	}
-
-	$errorcount = 0;
-	foreach ($account['contact'] as &$contact) {
-		if ($contact['uid'] == $olduid && $contact['self'] == '1') {
-			foreach ($contact as $k => &$v) {
-				$v = str_replace($oldbaseurl, $newbaseurl, $v);
-				foreach (array("profile", "avatar", "micro") as $k)
-					$v = str_replace($oldbaseurl . "/photo/" . $k . "/" . $olduid . ".jpg", $newbaseurl . "/photo/" . $k . "/" . $newuid . ".jpg", $v);
-			}
-		}
-		if ($contact['uid'] == $olduid && $contact['self'] == '0') {
-			// set contacts 'avatar-date' to NULL_DATE to let poller to update urls
-			$contact["avatar-date"] = NULL_DATE;
-
-
-			switch ($contact['network']) {
-				case NETWORK_DFRN:
-					//  send relocate message (below)
-					break;
-				case NETWORK_ZOT:
-					/// @TODO handle zot network
-					break;
-				case NETWORK_MAIL2:
-					/// @TODO ?
-					break;
-				case NETWORK_FEED:
-				case NETWORK_MAIL:
-					// Nothing to do
-					break;
-				default:
-					// archive other contacts
-					$contact['archive'] = "1";
-			}
-		}
-		$contact['uid'] = $newuid;
-		$r = db_import_assoc('contact', $contact);
-		if ($r === false) {
-			logger("uimport:insert contact " . $contact['nick'] . "," . $contact['network'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
-			$errorcount++;
-		} else {
-			$contact['newid'] = last_insert_id();
-		}
-	}
-	if ($errorcount > 0) {
-		notice(sprintf(tt("%d contact not imported", "%d contacts not imported", $errorcount), $errorcount));
-	}
-
-	foreach ($account['group'] as &$group) {
-		$group['uid'] = $newuid;
-		$r = db_import_assoc('group', $group);
-		if ($r === false) {
-			logger("uimport:insert group " . $group['name'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
-		} else {
-			$group['newid'] = last_insert_id();
-		}
-	}
-
-	foreach ($account['group_member'] as &$group_member) {
-		$group_member['uid'] = $newuid;
-
-		$import = 0;
-		foreach ($account['group'] as $group) {
-			if ($group['id'] == $group_member['gid'] && isset($group['newid'])) {
-				$group_member['gid'] = $group['newid'];
-				$import++;
-				break;
-			}
-		}
-		foreach ($account['contact'] as $contact) {
-			if ($contact['id'] == $group_member['contact-id'] && isset($contact['newid'])) {
-				$group_member['contact-id'] = $contact['newid'];
-				$import++;
-				break;
-			}
-		}
-		if ($import == 2) {
-			$r = db_import_assoc('group_member', $group_member);
-			if ($r === false) {
-				logger("uimport:insert group member " . $group_member['id'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
-			}
-		}
-	}
-
-
-
-
-
-	foreach ($account['photo'] as &$photo) {
-		$photo['uid'] = $newuid;
-		$photo['data'] = hex2bin($photo['data']);
-
-		$p = new Photo($photo['data'], $photo['type']);
-		$r = $p->store(
-				$photo['uid'], $photo['contact-id'], //0
-				$photo['resource-id'], $photo['filename'], $photo['album'], $photo['scale'], $photo['profile'], //1
-				$photo['allow_cid'], $photo['allow_gid'], $photo['deny_cid'], $photo['deny_gid']
-		);
-
-		if ($r === false) {
-			logger("uimport:insert photo " . $photo['resource-id'] . "," . $photo['scale'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
-		}
-	}
-
-	foreach ($account['pconfig'] as &$pconfig) {
-		$pconfig['uid'] = $newuid;
-		$r = db_import_assoc('pconfig', $pconfig);
-		if ($r === false) {
-			logger("uimport:insert pconfig " . $pconfig['id'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
-		}
-	}
-
-	// send relocate messages
-	proc_run(PRIORITY_HIGH, 'include/notifier.php', 'relocate', $newuid);
-
-	info(t("Done. You can now login with your username and password"));
-	goaway(App::get_baseurl() . "/login");
-}
+insert_id();
+}
+
+function last_error() {
+	global $db;
+	return $db->error;
+}
+
+/**
+ * Remove columns from array $arr that aren't in table $table
+ *
+ * @param string $table Table name
+ * @param array &$arr Column=>Value array from json (by ref)
+ */
+function check_cols($table, &$arr) {
+	$query = sprintf("SHOW COLUMNS IN `%s`", dbesc($table));
+	logger("uimport: $query", LOGGER_DEBUG);
+	$r = q($query);
+	$tcols = array();
+	// get a plain array of column names
+	foreach ($r as $tcol) {
+		$tcols[] = $tcol['Field'];
+	}
+	// remove inexistent columns
+	foreach ($arr as $icol => $ival) {
+		if (!in_array($icol, $tcols)) {
+			unset($arr[$icol]);
+		}
+	}
+}
+
+/**
+ * Import data into table $table
+ *
+ * @param string $table Table name
+ * @param array $arr Column=>Value array from json
+ */
+function db_import_assoc($table, $arr) {
+	if (isset($arr['id']))
+		unset($arr['id']);
+	check_cols($table, $arr);
+	$cols = implode("`,`", array_map('dbesc', array_keys($arr)));
+	$vals = implode("','", array_map('dbesc', array_values($arr)));
+	$query = "INSERT INTO `$table` (`$cols`) VALUES ('$vals')";
+	logger("uimport: $query", LOGGER_TRACE);
+	if (IMPORT_DEBUG) {
+		return true;
+	}
+	return q($query);
+}
+
+function import_cleanup($newuid) {
+	q("DELETE FROM `user` WHERE uid = %d", $newuid);
+	q("DELETE FROM `contact` WHERE uid = %d", $newuid);
+	q("DELETE FROM `profile` WHERE uid = %d", $newuid);
+	q("DELETE FROM `photo` WHERE uid = %d", $newuid);
+	q("DELETE FROM `group` WHERE uid = %d", $newuid);
+	q("DELETE FROM `group_member` WHERE uid = %d", $newuid);
+	q("DELETE FROM `pconfig` WHERE uid = %d", $newuid);
+}
+
+/**
+ * @brief Import account file exported from mod/uexport
+ *
+ * @param App $a Friendica App Class
+ * @param array $file array from $_FILES
+ */
+function import_account(App $a, $file) {
+	logger("Start user import from " . $file['tmp_name']);
+	/*
+	  STEPS
+	  1. checks
+	  2. replace old baseurl with new baseurl
+	  3. import data (look at user id and contacts id)
+	  4. archive non-dfrn contacts
+	  5. send message to dfrn contacts
+	 */
+
+	$account = json_decode(file_get_contents($file['tmp_name']), true);
+	if ($account === null) {
+		notice(t("Error decoding account file"));
+		return;
+	}
+
+
+	if (!x($account, 'version')) {
+		notice(t("Error! No version data in file! This is not a Friendica account file?"));
+		return;
+	}
+
+	/*
+	 * @TODO Old-lost code?
+	// this is not required as we remove columns in json not in current db schema
+	if ($account['schema'] != DB_UPDATE_VERSION) {
+		notice(t("Error! I can't import this file: DB schema version is not compatible."));
+		return;
+	}
+	*/
+
+	// check for username
+	$r = q("SELECT uid FROM user WHERE nickname='%s'", $account['user']['nickname']);
+	if ($r === false) {
+		logger("uimport:check nickname : ERROR : " . last_error(), LOGGER_NORMAL);
+		notice(t('Error! Cannot check nickname'));
+		return;
+	}
+	if (dbm::is_result($r) > 0) {
+		notice(sprintf(t("User '%s' already exists on this server!"), $account['user']['nickname']));
+		return;
+	}
+	// check if username matches deleted account
+	$r = q("SELECT id FROM userd WHERE username='%s'", $account['user']['nickname']);
+	if ($r === false) {
+		logger("uimport:check nickname : ERROR : " . last_error(), LOGGER_NORMAL);
+		notice(t('Error! Cannot check nickname'));
+		return;
+	}
+	if (dbm::is_result($r) > 0) {
+		notice(sprintf(t("User '%s' already exists on this server!"), $account['user']['nickname']));
+		return;
+	}
+
+	$oldbaseurl = $account['baseurl'];
+	$newbaseurl = App::get_baseurl();
+	$olduid = $account['user']['uid'];
+
+	unset($account['user']['uid']);
+	unset($account['user']['account_expired']);
+	unset($account['user']['account_expires_on']);
+	unset($account['user']['expire_notification_sent']);
+
+	foreach ($account['user'] as $k => &$v) {
+		$v = str_replace($oldbaseurl, $newbaseurl, $v);
+	}
+
+	// import user
+	$r = db_import_assoc('user', $account['user']);
+	if ($r === false) {
+		//echo "
"; var_dump($r, $query, mysql_error()); killme();
+		logger("uimport:insert user : ERROR : " . last_error(), LOGGER_NORMAL);
+		notice(t("User creation error"));
+		return;
+	}
+	$newuid = last_insert_id();
+	//~ $newuid = 1;
+
+	// Generate a new guid for the account. Otherwise there will be problems with diaspora
+	q("UPDATE `user` SET `guid` = '%s' WHERE `uid` = %d",
+		dbesc(generate_user_guid()), intval($newuid));
+
+	foreach ($account['profile'] as &$profile) {
+		foreach ($profile as $k => &$v) {
+			$v = str_replace($oldbaseurl, $newbaseurl, $v);
+			foreach (array("profile", "avatar") as $k) {
+				$v = str_replace($oldbaseurl . "/photo/" . $k . "/" . $olduid . ".jpg", $newbaseurl . "/photo/" . $k . "/" . $newuid . ".jpg", $v);
+			}
+		}
+		$profile['uid'] = $newuid;
+		$r = db_import_assoc('profile', $profile);
+		if ($r === false) {
+			logger("uimport:insert profile " . $profile['profile-name'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
+			info(t("User profile creation error"));
+			import_cleanup($newuid);
+			return;
+		}
+	}
+
+	$errorcount = 0;
+	foreach ($account['contact'] as &$contact) {
+		if ($contact['uid'] == $olduid && $contact['self'] == '1') {
+			foreach ($contact as $k => &$v) {
+				$v = str_replace($oldbaseurl, $newbaseurl, $v);
+				foreach (array("profile", "avatar", "micro") as $k) {
+					$v = str_replace($oldbaseurl . "/photo/" . $k . "/" . $olduid . ".jpg", $newbaseurl . "/photo/" . $k . "/" . $newuid . ".jpg", $v);
+				}
+			}
+		}
+		if ($contact['uid'] == $olduid && $contact['self'] == '0') {
+			// set contacts 'avatar-date' to NULL_DATE to let poller to update urls
+			$contact["avatar-date"] = NULL_DATE;
+
+			switch ($contact['network']) {
+				case NETWORK_DFRN:
+					//  send relocate message (below)
+					break;
+				case NETWORK_ZOT:
+					/// @TODO handle zot network
+					break;
+				case NETWORK_MAIL2:
+					/// @TODO ?
+					break;
+				case NETWORK_FEED:
+				case NETWORK_MAIL:
+					// Nothing to do
+					break;
+				default:
+					// archive other contacts
+					$contact['archive'] = "1";
+			}
+		}
+		$contact['uid'] = $newuid;
+		$r = db_import_assoc('contact', $contact);
+		if ($r === false) {
+			logger("uimport:insert contact " . $contact['nick'] . "," . $contact['network'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
+			$errorcount++;
+		} else {
+			$contact['newid'] = last_insert_id();
+		}
+	}
+	if ($errorcount > 0) {
+		notice(sprintf(tt("%d contact not imported", "%d contacts not imported", $errorcount), $errorcount));
+	}
+
+	foreach ($account['group'] as &$group) {
+		$group['uid'] = $newuid;
+		$r = db_import_assoc('group', $group);
+		if ($r === false) {
+			logger("uimport:insert group " . $group['name'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
+		} else {
+			$group['newid'] = last_insert_id();
+		}
+	}
+
+	foreach ($account['group_member'] as &$group_member) {
+		$group_member['uid'] = $newuid;
+
+		$import = 0;
+		foreach ($account['group'] as $group) {
+			if ($group['id'] == $group_member['gid'] && isset($group['newid'])) {
+				$group_member['gid'] = $group['newid'];
+				$import++;
+				break;
+			}
+		}
+		foreach ($account['contact'] as $contact) {
+			if ($contact['id'] == $group_member['contact-id'] && isset($contact['newid'])) {
+				$group_member['contact-id'] = $contact['newid'];
+				$import++;
+				break;
+			}
+		}
+		if ($import == 2) {
+			$r = db_import_assoc('group_member', $group_member);
+			if ($r === false) {
+				logger("uimport:insert group member " . $group_member['id'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
+			}
+		}
+	}
+
+	foreach ($account['photo'] as &$photo) {
+		$photo['uid'] = $newuid;
+		$photo['data'] = hex2bin($photo['data']);
+
+		$p = new Photo($photo['data'], $photo['type']);
+		$r = $p->store(
+				$photo['uid'], $photo['contact-id'], //0
+				$photo['resource-id'], $photo['filename'], $photo['album'], $photo['scale'], $photo['profile'], //1
+				$photo['allow_cid'], $photo['allow_gid'], $photo['deny_cid'], $photo['deny_gid']
+		);
+
+		if ($r === false) {
+			logger("uimport:insert photo " . $photo['resource-id'] . "," . $photo['scale'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
+		}
+	}
+
+	foreach ($account['pconfig'] as &$pconfig) {
+		$pconfig['uid'] = $newuid;
+		$r = db_import_assoc('pconfig', $pconfig);
+		if ($r === false) {
+			logger("uimport:insert pconfig " . $pconfig['id'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
+		}
+	}
+
+	// send relocate messages
+	proc_run(PRIORITY_HIGH, 'include/notifier.php', 'relocate', $newuid);
+
+	info(t("Done. You can now login with your username and password"));
+	goaway(App::get_baseurl() . "/login");
+}
diff --git a/include/update_gcontact.php b/include/update_gcontact.php
index 883a229895..d283bd2689 100644
--- a/include/update_gcontact.php
+++ b/include/update_gcontact.php
@@ -1,11 +1,11 @@
 is_backend()) {
  */
 if (x($_SESSION,'authenticated') && !x($_SESSION,'language')) {
 	// we didn't loaded user data yet, but we need user language
-	$r = q("SELECT language FROM user WHERE uid=%d", intval($_SESSION['uid']));
+	$r = dba::select('user', array('language'), array('uid' => $_SESSION['uid']), array('limit' => 1));
 	$_SESSION['language'] = $lang;
-	if (dbm::is_result($r)) $_SESSION['language'] = $r[0]['language'];
+	if (dbm::is_result($r)) {
+		$_SESSION['language'] = $r['language'];
+	}
 }
 
 if ((x($_SESSION,'language')) && ($_SESSION['language'] !== $lang)) {
@@ -174,6 +177,10 @@ if (! x($_SESSION,'sysmsg_info')) {
 	$_SESSION['sysmsg_info'] = array();
 }
 
+// Array for informations about last received items
+if (! x($_SESSION,'last_updated')) {
+	$_SESSION['last_updated'] = array();
+}
 /*
  * check_config() is responsible for running update scripts. These automatically
  * update the DB schema whenever we push a new one out. It also checks to see if
@@ -482,7 +489,7 @@ header("X-Friendica-Version: " . FRIENDICA_VERSION);
 header("Content-type: text/html; charset=utf-8");
 
 /*
- * We use $_GET["mode"] for special page templates. So we will check if we have 
+ * We use $_GET["mode"] for special page templates. So we will check if we have
  * to load another page template than the default one.
  * The page templates are located in /view/php/ or in the theme directory.
  */
diff --git a/js/autocomplete.js b/js/autocomplete.js
index 3ed9fa30f9..58dde55a6d 100644
--- a/js/autocomplete.js
+++ b/js/autocomplete.js
@@ -78,22 +78,26 @@ function contact_format(item) {
 }
 
 function editor_replace(item) {
-	if(typeof item.replace !== 'undefined') {
+	if (typeof item.replace !== 'undefined') {
 		return '$1$2' + item.replace;
 	}
 
+	if (typeof item.addr !== 'undefined') {
+		return '$1$2' + item.addr + ' ';
+	}
+
 	// $2 ensures that prefix (@,@!) is preserved
 	var id = item.id;
 
 	// don't add the id if it is empty (the id empty eg. if there are unknow contacts in thread)
-	if(id.length < 1)
+	if (id.length < 1) {
 		return '$1$2' + item.nick.replace(' ', '') + ' ';
-
+	}
 	// 16 chars of hash should be enough. Full hash could be used if it can be done in a visually appealing way.
 	// 16 chars is also the minimum length in the backend (otherwise it's interpreted as a local id).
-	if(id.length > 16)
+	if (id.length > 16) {
 		id = item.id.substring(0,16);
-
+	}
 	return '$1$2' + item.nick.replace(' ', '') + '+' + id + ' ';
 }
 
diff --git a/mod/_well_known.php b/mod/_well_known.php
index 622d7fd93f..45c1da494c 100644
--- a/mod/_well_known.php
+++ b/mod/_well_known.php
@@ -1,6 +1,7 @@
 	array("admin/features/", t("Additional features") , "features"),
 		'dbsync' => 	array("admin/dbsync/", t('DB updates'), "dbsync"),
 		'queue'	 =>	array("admin/queue/", t('Inspect Queue'), "queue"),
+		'blocklist' => array("admin/blocklist/", t('Server Blocklist'), "blocklist"),
 		'federation' => array("admin/federation/", t('Federation Statistics'), "federation"),
 	);
 
@@ -236,6 +241,9 @@ function admin_content(App $a) {
 			case 'federation':
 				$o = admin_page_federation($a);
 				break;
+			case 'blocklist':
+				$o = admin_page_blocklist($a);
+				break;
 			default:
 				notice(t("Item not found."));
 		}
@@ -252,6 +260,94 @@ function admin_content(App $a) {
 	}
 }
 
+/**
+ * @brief Subpage to modify the server wide block list via the admin panel.
+ *
+ * This function generates the subpage of the admin panel to allow the
+ * modification of the node wide block/black list to block entire
+ * remote servers from communication with this node. The page allows
+ * adding, removing and editing of entries from the blocklist.
+ *
+ * @param App $a
+ * @return string
+ */
+function admin_page_blocklist(App $a) {
+	$blocklist = Config::get('system', 'blocklist');
+	$blocklistform = array();
+	if (is_array($blocklist)) {
+		foreach($blocklist as $id => $b) {
+			$blocklistform[] = array(
+				'domain' => array("domain[$id]", t('Blocked domain'), $b['domain'], '', t('The blocked domain'), 'required', '', ''),
+				'reason' => array("reason[$id]", t("Reason for the block"), $b['reason'], t('The reason why you blocked this domain.').'('.$b['domain'].')', 'required', '', ''),
+				'delete' => array("delete[$id]", t("Delete domain").' ('.$b['domain'].')', False , t("Check to delete this entry from the blocklist"))
+			);
+		}
+	}
+	$t = get_markup_template("admin_blocklist.tpl");
+	return replace_macros($t, array(
+		'$title' => t('Administration'),
+		'$page' => t('Server Blocklist'),
+		'$intro' => t('This page can be used to define a black list of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server.'),
+		'$public' => t('The list of blocked servers will be made publically available on the /friendica page so that your users and people investigating communication problems can find the reason easily.'),
+		'$addtitle' => t('Add new entry to block list'),
+		'$newdomain' => array('newentry_domain', t('Server Domain'), '', t('The domain of the new server to add to the block list. Do not include the protocol.'), 'required', '', ''),
+		'$newreason' => array('newentry_reason', t('Block reason'), '', t('The reason why you blocked this domain.'), 'required', '', ''),
+		'$submit' => t('Add Entry'),
+		'$savechanges' => t('Save changes to the blocklist'),
+		'$currenttitle' => t('Current Entries in the Blocklist'),
+		'$thurl' => t('Blocked domain'),
+		'$threason' => t('Reason for the block'),
+		'$delentry' => t('Delete entry from blocklist'),
+		'$entries' => $blocklistform,
+		'$baseurl' => App::get_baseurl(true),
+		'$confirm_delete' => t('Delete entry from blocklist?'),
+		'$form_security_token'	=> get_form_security_token("admin_blocklist")
+	));
+}
+
+/**
+ * @brief Process send data from Admin Blocklist Page
+ *
+ * @param App $a
+ */
+function admin_page_blocklist_post(App $a) {
+	if (!x($_POST,"page_blocklist_save") && (!x($_POST['page_blocklist_edit']))) {
+		return;
+	}
+
+	check_form_security_token_redirectOnErr('/admin/blocklist', 'admin_blocklist');
+
+	if (x($_POST['page_blocklist_save'])) {
+		//  Add new item to blocklist
+		$blocklist = get_config('system', 'blocklist');
+		$blocklist[] = array(
+			'domain' => notags(trim($_POST['newentry_domain'])),
+			'reason' => notags(trim($_POST['newentry_reason']))
+		);
+		Config::set('system', 'blocklist', $blocklist);
+		info(t('Server added to blocklist.').EOL);
+	} else {
+		// Edit the entries from blocklist
+		$blocklist = array();
+		foreach ($_POST['domain'] as $id => $domain) {
+			// Trimming whitespaces as well as any lingering slashes
+			$domain = notags(trim($domain, "\x00..\x1F/"));
+			$reason = notags(trim($_POST['reason'][$id]));
+			if (!x($_POST['delete'][$id])) {
+				$blocklist[] = array(
+					'domain' => $domain,
+					'reason' => $reason
+				);
+			}
+		}
+		Config::set('system', 'blocklist', $blocklist);
+		info(t('Site blocklist updated.').EOL);
+	}
+	goaway('admin/blocklist');
+
+	return; // NOTREACHED
+}
+
 /**
  * @brief Subpage with some stats about "the federation" network
  *
@@ -447,7 +543,7 @@ function admin_page_summary(App $a) {
 	$warningtext = array();
 	if (dbm::is_result($r)) {
 		$showwarning = true;
-		$warningtext[] = sprintf(t('Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the convert_innodb.sql in the /util directory of your Friendica installation.
'), 'https://dev.mysql.com/doc/refman/5.7/en/converting-tables-to-innodb.html'); + $warningtext[] = sprintf(t('Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php include/dbstructure.php toinnodb of your Friendica installation for an automatic conversion.
'), 'https://dev.mysql.com/doc/refman/5.7/en/converting-tables-to-innodb.html'); } // MySQL >= 5.7.4 doesn't support the IGNORE keyword in ALTER TABLE statements if ((version_compare($db->server_info(), '5.7.4') >= 0) AND @@ -636,6 +732,7 @@ function admin_page_site_post(App $a) { $timeout = ((x($_POST,'timeout')) ? intval(trim($_POST['timeout'])) : 60); $maxloadavg = ((x($_POST,'maxloadavg')) ? intval(trim($_POST['maxloadavg'])) : 50); $maxloadavg_frontend = ((x($_POST,'maxloadavg_frontend')) ? intval(trim($_POST['maxloadavg_frontend'])) : 50); + $min_memory = ((x($_POST,'min_memory')) ? intval(trim($_POST['min_memory'])) : 0); $optimize_max_tablesize = ((x($_POST,'optimize_max_tablesize')) ? intval(trim($_POST['optimize_max_tablesize'])): 100); $optimize_fragmentation = ((x($_POST,'optimize_fragmentation')) ? intval(trim($_POST['optimize_fragmentation'])): 30); $poco_completion = ((x($_POST,'poco_completion')) ? intval(trim($_POST['poco_completion'])) : false); @@ -721,6 +818,7 @@ function admin_page_site_post(App $a) { set_config('system','ssl_policy',$ssl_policy); set_config('system','maxloadavg',$maxloadavg); set_config('system','maxloadavg_frontend',$maxloadavg_frontend); + set_config('system','min_memory',$min_memory); set_config('system','optimize_max_tablesize',$optimize_max_tablesize); set_config('system','optimize_fragmentation',$optimize_fragmentation); set_config('system','poco_completion',$poco_completion); @@ -1018,6 +1116,7 @@ function admin_page_site(App $a) { '$timeout' => array('timeout', t("Network timeout"), (x(get_config('system','curl_timeout'))?get_config('system','curl_timeout'):60), t("Value is in seconds. Set to 0 for unlimited (not recommended).")), '$maxloadavg' => array('maxloadavg', t("Maximum Load Average"), ((intval(get_config('system','maxloadavg')) > 0)?get_config('system','maxloadavg'):50), t("Maximum system load before delivery and poll processes are deferred - default 50.")), '$maxloadavg_frontend' => array('maxloadavg_frontend', t("Maximum Load Average (Frontend)"), ((intval(get_config('system','maxloadavg_frontend')) > 0)?get_config('system','maxloadavg_frontend'):50), t("Maximum system load before the frontend quits service - default 50.")), + '$min_memory' => array('min_memory', t("Minimal Memory"), ((intval(get_config('system','min_memory')) > 0)?get_config('system','min_memory'):0), t("Minimal free memory in MB for the poller. Needs access to /proc/meminfo - default 0 (deactivated).")), '$optimize_max_tablesize'=> array('optimize_max_tablesize', t("Maximum table size for optimization"), $optimize_max_tablesize, t("Maximum table size (in MB) for the automatic optimization - default 100 MB. Enter -1 to disable it.")), '$optimize_fragmentation'=> array('optimize_fragmentation', t("Minimum level of fragmentation"), ((intval(get_config('system','optimize_fragmentation')) > 0)?get_config('system','optimize_fragmentation'):30), t("Minimum fragmenation level to start the automatic optimization - default value is 30%.")), diff --git a/mod/allfriends.php b/mod/allfriends.php index f51070bbe8..fe3013a7c4 100644 --- a/mod/allfriends.php +++ b/mod/allfriends.php @@ -1,5 +1,7 @@ t('No'), )); - //echo "
"; var_dump($app); killme();
-
 		return $o;
 	}
 
diff --git a/mod/apps.php b/mod/apps.php
index 199ce0f918..0c0df76544 100644
--- a/mod/apps.php
+++ b/mod/apps.php
@@ -1,25 +1,25 @@
 apps)==0)
-		notice( t('No installed applications.') . EOL);
+	if (count($a->apps) == 0) {
+		notice(t('No installed applications.') . EOL);
+	}
 
-
-	$tpl = get_markup_template("apps.tpl");
+	$tpl = get_markup_template('apps.tpl');
 	return replace_macros($tpl, array(
 		'$title' => $title,
 		'$apps' => $a->apps,
 	));
-
-
-
 }
diff --git a/mod/attach.php b/mod/attach.php
index dd7154dfe1..6155a3f99e 100644
--- a/mod/attach.php
+++ b/mod/attach.php
@@ -1,5 +1,7 @@
  App::get_baseurl(true),
 		));
 
-		require_once('include/contact_selectors.php');
+		require_once 'include/contact_selectors.php';
 
 		$tpl = get_markup_template("contact_edit.tpl");
 
@@ -828,7 +831,7 @@ function contacts_content(App $a) {
  *
  * Available Pages are 'Status', 'Profile', 'Contacts' and 'Common Friends'
  *
- * @param app $a
+ * @param App $a
  * @param int $contact_id The ID of the contact
  * @param int $active_tab 1 if tab should be marked as active
  *
diff --git a/mod/content.php b/mod/content.php
index 43f3fc2ba6..a8c3130333 100644
--- a/mod/content.php
+++ b/mod/content.php
@@ -15,6 +15,7 @@
 // fast - e.g. one or two milliseconds to fetch parent items for the current content,
 // and 10-20 milliseconds to fetch all the child items.
 
+use Friendica\App;
 
 function content_content(App $a, $update = 0) {
 
diff --git a/mod/credits.php b/mod/credits.php
index f5c34b6105..e0e834388f 100644
--- a/mod/credits.php
+++ b/mod/credits.php
@@ -1,20 +1,23 @@
  t('Credits'),
-       '$thanks'		=> t('Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!'),
-       '$names'         => $arr,
-    ));
+use Friendica\App;
+
+function credits_content(App $a) {
+	/* fill the page with credits */
+	$f = fopen('util/credits.txt', 'r');
+	$names = fread($f, filesize('util/credits.txt'));
+	$arr = explode("\n", htmlspecialchars($names));
+	fclose($f);
+	$tpl = get_markup_template('credits.tpl');
+	return replace_macros($tpl, array(
+		'$title'  => t('Credits'),
+		'$thanks' => t('Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!'),
+		'$names'  => $arr,
+	));
 }
diff --git a/mod/crepair.php b/mod/crepair.php
index 902a129303..59ac620a37 100644
--- a/mod/crepair.php
+++ b/mod/crepair.php
@@ -1,4 +1,7 @@
 cmd);
+					return; // NOTREACHED
+				}
 
 				$parms = Probe::profile(($hcard) ? $hcard : $url);
 
@@ -530,7 +535,7 @@ function dfrn_request_post(App $a) {
 					if (! x($parms,'photo')) {
 						notice( t('Warning: profile location has no profile photo.') . EOL );
 					}
-					$invalid = Probe::valid_dfrn($parms);
+					$invalid = Probe::validDfrn($parms);
 					if ($invalid) {
 						notice( sprintf( tt("%d required parameter was not found at the given location",
 											"%d required parameters were not found at the given location",
@@ -760,7 +765,7 @@ function dfrn_request_content(App $a) {
 				}
 
 				if($auto_confirm) {
-					require_once('mod/dfrn_confirm.php');
+					require_once 'mod/dfrn_confirm.php';
 					$handsfree = array(
 						'uid'      => $r[0]['uid'],
 						'node'     => $r[0]['nickname'],
diff --git a/mod/directory.php b/mod/directory.php
index ba48bb3926..cb0b1f4cd1 100644
--- a/mod/directory.php
+++ b/mod/directory.php
@@ -1,5 +1,7 @@
 set_pager_itemspage(60);
 
@@ -9,24 +11,18 @@ function directory_init(App $a) {
 		$a->page['aside'] .= findpeople_widget();
 
 		$a->page['aside'] .= follow_widget();
-
 	}
 	else {
 		unset($_SESSION['theme']);
 		unset($_SESSION['mobile-theme']);
 	}
-
-
 }
 
-
 function directory_post(App $a) {
 	if(x($_POST,'search'))
 		$a->data['search'] = $_POST['search'];
 }
 
-
-
 function directory_content(App $a) {
 	global $db;
 
diff --git a/mod/dirfind.php b/mod/dirfind.php
index c5844d13df..a64a804ba8 100644
--- a/mod/dirfind.php
+++ b/mod/dirfind.php
@@ -1,9 +1,13 @@
 page['aside'] .= follow_widget();
 }
 
-
-
 function dirfind_content(App $a, $prefix = "") {
 
 	$community = false;
diff --git a/mod/display.php b/mod/display.php
index 1f1fd11204..ca6809eba1 100644
--- a/mod/display.php
+++ b/mod/display.php
@@ -1,5 +1,7 @@
 
  */
 
+use Friendica\App;
+
 require_once('include/Photo.php');
 
 /**
diff --git a/mod/fetch.php b/mod/fetch.php
index b87fc0e8e0..0afd7af107 100644
--- a/mod/fetch.php
+++ b/mod/fetch.php
@@ -2,6 +2,9 @@
 /*
 This file is part of the Diaspora protocol. It is used for fetching single public posts.
 */
+
+use Friendica\App;
+
 require_once("include/crypto.php");
 require_once("include/diaspora.php");
 require_once("include/xml.php");
diff --git a/mod/filer.php b/mod/filer.php
index 47c4aa5e4c..6259879de2 100644
--- a/mod/filer.php
+++ b/mod/filer.php
@@ -1,10 +1,11 @@
 argv[1]=="json"){
+	if ($a->argv[1] == "json"){
 		$register_policy = Array('REGISTER_CLOSED', 'REGISTER_APPROVE', 'REGISTER_OPEN');
 
 		$sql_extra = '';
-		if(x($a->config,'admin_nickname')) {
-			$sql_extra = sprintf(" AND nickname = '%s' ",dbesc($a->config['admin_nickname']));
+		if (x($a->config,'admin_nickname')) {
+			$sql_extra = sprintf(" AND `nickname` = '%s' ", dbesc($a->config['admin_nickname']));
 		}
-		if (isset($a->config['admin_email']) && $a->config['admin_email']!=''){
-	                $adminlist = explode(",", str_replace(" ", "", $a->config['admin_email']));
+		if (isset($a->config['admin_email']) && $a->config['admin_email']!='') {
+			$adminlist = explode(",", str_replace(" ", "", $a->config['admin_email']));
 
-			//$r = q("SELECT username, nickname FROM user WHERE email='%s' $sql_extra", dbesc($a->config['admin_email']));
-			$r = q("SELECT username, nickname FROM user WHERE email='%s' $sql_extra", dbesc($adminlist[0]));
+			$r = q("SELECT `username`, `nickname` FROM `user` WHERE `email` = '%s' $sql_extra", dbesc($adminlist[0]));
 			$admin = array(
 				'name' => $r[0]['username'],
-				'profile'=> App::get_baseurl().'/profile/'.$r[0]['nickname'],
+				'profile'=> App::get_baseurl() . '/profile/' . $r[0]['nickname'],
 			);
 		} else {
 			$admin = false;
 		}
 
 		$visible_plugins = array();
-		if(is_array($a->plugins) && count($a->plugins)) {
-			$r = q("select * from addon where hidden = 0");
-			if (dbm::is_result($r))
-				foreach($r as $rr)
+		if (is_array($a->plugins) && count($a->plugins)) {
+			$r = q("SELECT * FROM `addon` WHERE `hidden` = 0");
+			if (dbm::is_result($r)) {
+				foreach($r as $rr) {
 					$visible_plugins[] = $rr['name'];
+				}
+			}
 		}
 
 		Config::load('feature_lock');
 		$locked_features = array();
-		if(is_array($a->config['feature_lock']) && count($a->config['feature_lock'])) {
-			foreach($a->config['feature_lock'] as $k => $v) {
-				if($k === 'config_loaded')
+		if (is_array($a->config['feature_lock']) && count($a->config['feature_lock'])) {
+			foreach ($a->config['feature_lock'] as $k => $v) {
+				if ($k === 'config_loaded') {
 					continue;
+				}
+
 				$locked_features[$k] = intval($v);
 			}
 		}
 
 		$data = Array(
-			'version' => FRIENDICA_VERSION,
-			'url' => z_root(),
-			'plugins' => $visible_plugins,
+			'version'         => FRIENDICA_VERSION,
+			'url'             => z_root(),
+			'plugins'         => $visible_plugins,
 			'locked_features' => $locked_features,
 			'register_policy' =>  $register_policy[$a->config['register_policy']],
-			'admin' => $admin,
-			'site_name' => $a->config['sitename'],
-			'platform' => FRIENDICA_PLATFORM,
-			'info' => ((x($a->config,'info')) ? $a->config['info'] : ''),
-			'no_scrape_url' => App::get_baseurl().'/noscrape'
+			'admin'           => $admin,
+			'site_name'       => $a->config['sitename'],
+			'platform'        => FRIENDICA_PLATFORM,
+			'info'            => ((x($a->config,'info')) ? $a->config['info'] : ''),
+			'no_scrape_url'   => App::get_baseurl().'/noscrape'
 		);
 
 		echo json_encode($data);
@@ -59,53 +63,63 @@ function friendica_init(App $a) {
 	}
 }
 
-
-
 function friendica_content(App $a) {
+	$o = '

Friendica

' . PHP_EOL; + $o .= '

'; + $o .= t('This is Friendica, version') . ' ' . FRIENDICA_VERSION . ' '; + $o .= t('running at web location') . ' ' . z_root(); + $o .= '

' . PHP_EOL; - $o = ''; - $o .= '

Friendica

'; + $o .= '

'; + $o .= t('Please visit Friendica.com to learn more about the Friendica project.') . PHP_EOL; + $o .= '

' . PHP_EOL; - - $o .= '

'; - - $o .= t('This is Friendica, version') . ' ' . FRIENDICA_VERSION . ' '; - $o .= t('running at web location') . ' ' . z_root() . '

'; - - $o .= t('Please visit Friendica.com to learn more about the Friendica project.') . '

'; - - $o .= t('Bug reports and issues: please visit') . ' ' . ''.t('the bugtracker at github').'

'; - $o .= t('Suggestions, praise, donations, etc. - please email "Info" at Friendica - dot com') . '

'; - - $o .= '

'; + $o .= '

'; + $o .= t('Bug reports and issues: please visit') . ' ' . ''.t('the bugtracker at github').''; + $o .= '

' . PHP_EOL; + $o .= '

'; + $o .= t('Suggestions, praise, donations, etc. - please email "Info" at Friendica - dot com'); + $o .= '

' . PHP_EOL; $visible_plugins = array(); - if(is_array($a->plugins) && count($a->plugins)) { - $r = q("select * from addon where hidden = 0"); - if (dbm::is_result($r)) - foreach($r as $rr) + if (is_array($a->plugins) && count($a->plugins)) { + $r = q("SELECT * FROM `addon` WHERE `hidden` = 0"); + if (dbm::is_result($r)) { + foreach($r as $rr) { $visible_plugins[] = $rr['name']; + } + } } - - if(count($visible_plugins)) { - $o .= '

' . t('Installed plugins/addons/apps:') . '

'; + if (count($visible_plugins)) { + $o .= '

' . t('Installed plugins/addons/apps:') . '

' . PHP_EOL; $sorted = $visible_plugins; $s = ''; sort($sorted); - foreach($sorted as $p) { - if(strlen($p)) { - if(strlen($s)) $s .= ', '; + foreach ($sorted as $p) { + if (strlen($p)) { + if (strlen($s)) { + $s .= ', '; + } $s .= $p; } } - $o .= '
' . $s . '
'; + $o .= '
' . $s . '
' . PHP_EOL; + } else { + $o .= '

' . t('No installed plugins/addons/apps') . '

' . PHP_EOL; + } + + $blocklist = Config::get('system', 'blocklist'); + if (count($blocklist)) { + $o .= '

' . t('On this server the following remote servers are blocked.') . '

' . PHP_EOL; + $o .= '' . PHP_EOL; + foreach ($blocklist as $b) { + $o .= '' . PHP_EOL; + } + $o .= '
' . t('Blocked domain') . '' . t('Reason for the block') . '
' . $b['domain'] .'' . $b['reason'] . '
' . PHP_EOL; } - else - $o .= '

' . t('No installed plugins/addons/apps') . '

'; call_hooks('about_hook', $o); return $o; - } diff --git a/mod/fsuggest.php b/mod/fsuggest.php index b3d5439712..32ed63b4c2 100644 --- a/mod/fsuggest.php +++ b/mod/fsuggest.php @@ -1,5 +1,6 @@ page['aside'] = group_side('contacts','group','extended',(($a->argc > 1) ? intval($a->argv[1]) : 0)); + if (local_user()) { + require_once 'include/group.php'; + $a->page['aside'] = group_side('contacts', 'group', 'extended', (($a->argc > 1) ? intval($a->argv[1]) : 0)); } } - - function group_post(App $a) { if (! local_user()) { - notice( t('Permission denied.') . EOL); + notice(t('Permission denied.') . EOL); return; } - if(($a->argc == 2) && ($a->argv[1] === 'new')) { + if (($a->argc == 2) && ($a->argv[1] === 'new')) { check_form_security_token_redirectOnErr('/group/new', 'group_edit'); $name = notags(trim($_POST['groupname'])); - $r = group_add(local_user(),$name); + $r = group_add(local_user(), $name); if ($r) { - info( t('Group created.') . EOL ); - $r = group_byname(local_user(),$name); + info(t('Group created.') . EOL); + $r = group_byname(local_user(), $name); if ($r) { goaway(App::get_baseurl() . '/group/' . $r); } } else { - notice( t('Could not create group.') . EOL ); + notice(t('Could not create group.') . EOL); } goaway(App::get_baseurl() . '/group'); return; // NOTREACHED @@ -46,7 +47,7 @@ function group_post(App $a) { intval(local_user()) ); if (! dbm::is_result($r)) { - notice( t('Group not found.') . EOL ); + notice(t('Group not found.') . EOL); goaway(App::get_baseurl() . '/contacts'); return; // NOTREACHED } @@ -60,7 +61,7 @@ function group_post(App $a) { ); if ($r) { - info( t('Group name changed.') . EOL ); + info(t('Group name changed.') . EOL); } } @@ -73,17 +74,19 @@ function group_content(App $a) { $change = false; if (! local_user()) { - notice( t('Permission denied') . EOL); + notice(t('Permission denied') . EOL); return; } // Switch to text mode interface if we have more than 'n' contacts or group members - $switchtotext = get_pconfig(local_user(),'system','groupedit_image_limit'); - if($switchtotext === false) - $switchtotext = get_config('system','groupedit_image_limit'); - if($switchtotext === false) + $switchtotext = get_pconfig(local_user(), 'system', 'groupedit_image_limit'); + if ($switchtotext === false) { + $switchtotext = get_config('system', 'groupedit_image_limit'); + } + if ($switchtotext === false) { $switchtotext = 400; + } $tpl = get_markup_template('group_edit.tpl'); @@ -92,7 +95,6 @@ function group_content(App $a) { ); if (($a->argc == 2) && ($a->argv[1] === 'new')) { - return replace_macros($tpl, $context + array( '$title' => t('Create a group of contacts/friends.'), '$gname' => array('groupname', t('Group Name: '), '', ''), @@ -115,13 +117,13 @@ function group_content(App $a) { $result = null; if (dbm::is_result($r)) { - $result = group_rmv(local_user(),$r[0]['name']); + $result = group_rmv(local_user(), $r[0]['name']); } if ($result) { - info( t('Group removed.') . EOL); + info(t('Group removed.') . EOL); } else { - notice( t('Unable to remove group.') . EOL); + notice(t('Unable to remove group.') . EOL); } } goaway(App::get_baseurl() . '/group'); @@ -135,66 +137,75 @@ function group_content(App $a) { intval($a->argv[2]), intval(local_user()) ); - if (dbm::is_result($r)) + if (dbm::is_result($r)) { $change = intval($a->argv[2]); + } } if (($a->argc > 1) && (intval($a->argv[1]))) { + require_once 'include/acl_selectors.php'; + require_once 'mod/contacts.php'; - require_once('include/acl_selectors.php'); $r = q("SELECT * FROM `group` WHERE `id` = %d AND `uid` = %d AND `deleted` = 0 LIMIT 1", intval($a->argv[1]), intval(local_user()) ); + if (! dbm::is_result($r)) { - notice( t('Group not found.') . EOL ); + notice(t('Group not found.') . EOL); goaway(App::get_baseurl() . '/contacts'); } + $group = $r[0]; $members = group_get_members($group['id']); $preselected = array(); - if(count($members)) { - foreach($members as $member) + $entry = array(); + $id = 0; + + if (count($members)) { + foreach ($members as $member) { $preselected[] = $member['id']; + } } - if($change) { - if(in_array($change,$preselected)) { - group_rmv_member(local_user(),$group['name'],$change); - } - else { - group_add_member(local_user(),$group['name'],$change); + if ($change) { + if (in_array($change, $preselected)) { + group_rmv_member(local_user(), $group['name'], $change); + } else { + group_add_member(local_user(), $group['name'], $change); } $members = group_get_members($group['id']); $preselected = array(); - if(count($members)) { - foreach($members as $member) + if (count($members)) { + foreach ($members as $member) { $preselected[] = $member['id']; + } } } - $drop_tpl = get_markup_template('group_drop.tpl'); $drop_txt = replace_macros($drop_tpl, array( '$id' => $group['id'], - '$delete' => t('Delete'), + '$delete' => t('Delete Group'), '$form_security_token' => get_form_security_token("group_drop"), )); $context = $context + array( '$title' => t('Group Editor'), - '$gname' => array('groupname', t('Group Name: '),$group['name'], ''), + '$gname' => array('groupname', t('Group Name: '), $group['name'], ''), '$gid' => $group['id'], '$drop' => $drop_txt, '$form_security_token' => get_form_security_token('group_edit'), + '$edit_name' => t('Edit Group Name') ); } - if(! isset($group)) + if (! isset($group)) { return; + } $groupeditor = array( 'label_members' => t('Members'), @@ -205,14 +216,24 @@ function group_content(App $a) { ); $sec_token = addslashes(get_form_security_token('group_member_change')); - $textmode = (($switchtotext && (count($members) > $switchtotext)) ? true : false); - foreach($members as $member) { - if($member['url']) { - $member['click'] = 'groupChangeMember(' . $group['id'] . ',' . $member['id'] . ',\'' . $sec_token . '\'); return true;'; - $groupeditor['members'][] = micropro($member,true,'mpgroup', $textmode); + + // Format the data of the group members + foreach ($members as $member) { + if ($member['url']) { + $entry = _contact_detail_for_template($member); + $entry['label'] = 'members'; + $entry['photo_menu'] = ''; + $entry['change_member'] = array( + 'title' => t("Remove Contact"), + 'gid' => $group['id'], + 'cid' => $member['id'], + 'sec_token' => $sec_token + ); + + $groupeditor['members'][] = $entry; + } else { + group_rmv_member(local_user(), $group['name'], $member['id']); } - else - group_rmv_member(local_user(),$group['name'],$member['id']); } $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND NOT `blocked` AND NOT `pending` AND NOT `self` ORDER BY `name` ASC", @@ -220,11 +241,20 @@ function group_content(App $a) { ); if (dbm::is_result($r)) { - $textmode = (($switchtotext && (count($r) > $switchtotext)) ? true : false); - foreach($r as $member) { - if(! in_array($member['id'],$preselected)) { - $member['click'] = 'groupChangeMember(' . $group['id'] . ',' . $member['id'] . ',\'' . $sec_token . '\'); return true;'; - $groupeditor['contacts'][] = micropro($member,true,'mpall', $textmode); + // Format the data of the contacts who aren't in the contact group + foreach ($r as $member) { + if (! in_array($member['id'], $preselected)) { + $entry = _contact_detail_for_template($member); + $entry['label'] = 'contacts'; + $entry['photo_menu'] = ''; + $entry['change_member'] = array( + 'title' => t("Add Contact"), + 'gid' => $group['id'], + 'cid' => $member['id'], + 'sec_token' => $sec_token + ); + + $groupeditor['contacts'][] = $entry; } } } @@ -232,7 +262,11 @@ function group_content(App $a) { $context['$groupeditor'] = $groupeditor; $context['$desc'] = t('Click on a contact to add or remove.'); - if($change) { + // If there are to many contacts we could provide an alternative view mode + $total = count($groupeditor['members']) + count($groupeditor['contacts']); + $context['$shortmode'] = (($switchtotext && ($total > $switchtotext)) ? true : false); + + if ($change) { $tpl = get_markup_template('groupeditor.tpl'); echo replace_macros($tpl, $context); killme(); diff --git a/mod/hcard.php b/mod/hcard.php index 07eb291510..229939a4a3 100644 --- a/mod/hcard.php +++ b/mod/hcard.php @@ -1,5 +1,7 @@ "; $html = implode("\n",$lines); - $a->page['aside'] = $toc.$a->page['aside']; + $a->page['aside'] = '
' . $toc . $a->page['aside'] . '
'; } $html = " diff --git a/mod/home.php b/mod/home.php index b1708d80a2..bd77a840d0 100644 --- a/mod/home.php +++ b/mod/home.php @@ -1,5 +1,7 @@ $cid), array('limit' => 1)); + $profileurl = ($r["nurl"] ? $r["nurl"] : ""); + $self = ($r["self"] ? $r["self"] : ""); } // if it's the url containing https it should be converted to http diff --git a/mod/ignored.php b/mod/ignored.php index 0065d51c58..a7c3ba6e1d 100644 --- a/mod/ignored.php +++ b/mod/ignored.php @@ -1,5 +1,6 @@ argc==2 && $a->argv[1]=="testrewrite") { + if ($a->argc == 2 && $a->argv[1] == "testrewrite") { echo "ok"; killme(); } @@ -18,7 +20,7 @@ function install_init(App $a) { $a->theme['stylesheet'] = App::get_baseurl()."/view/install/style.css"; global $install_wizard_pass; - if (x($_POST,'pass')) { + if (x($_POST, 'pass')) { $install_wizard_pass = intval($_POST['pass']); } @@ -43,27 +45,8 @@ function install_post(App $a) { require_once("include/dba.php"); unset($db); $db = new dba($dbhost, $dbuser, $dbpass, $dbdata, true); - /*if(get_db_errno()) { - unset($db); - $db = new dba($dbhost, $dbuser, $dbpass, '', true); - - if(! get_db_errno()) { - $r = q("CREATE DATABASE '%s' DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci", - dbesc($dbdata) - ); - if ($r) { - unset($db); - $db = new dba($dbhost, $dbuser, $dbpass, $dbdata, true); - } else { - $a->data['db_create_failed']=true; - } - } else { - $a->data['db_conn_failed']=true; - return; - } - }*/ - if (get_db_errno()) { - $a->data['db_conn_failed']=true; + if (!$db->connected) { + $a->data['db_conn_failed'] = true; } return; @@ -117,14 +100,6 @@ function install_post(App $a) { } } -function get_db_errno() { - if (class_exists('mysqli')) { - return mysqli_connect_errno(); - } else { - return mysql_errno(); - } -} - function install_content(App $a) { global $install_wizard_pass, $db; @@ -134,30 +109,30 @@ function install_content(App $a) { - if (x($a->data,'db_conn_failed')) { + if (x($a->data, 'db_conn_failed')) { $install_wizard_pass = 2; - $wizard_status = t('Could not connect to database.'); + $wizard_status = t('Could not connect to database.'); } - if (x($a->data,'db_create_failed')) { + if (x($a->data, 'db_create_failed')) { $install_wizard_pass = 2; - $wizard_status = t('Could not create table.'); + $wizard_status = t('Could not create table.'); } - $db_return_text=""; - if (x($a->data,'db_installed')) { + $db_return_text = ""; + if (x($a->data, 'db_installed')) { $txt = '

'; $txt .= t('Your Friendica site database has been installed.') . EOL; $db_return_text .= $txt; } - if (x($a->data,'db_failed')) { + if (x($a->data, 'db_failed')) { $txt = t('You may need to import the file "database.sql" manually using phpmyadmin or mysql.') . EOL; - $txt .= t('Please see the file "INSTALL.txt".') . EOL ."


" ; - $txt .= "
".$a->data['db_failed'] . "
". EOL ; + $txt .= t('Please see the file "INSTALL.txt".') . EOL ."
"; + $txt .= "
".$a->data['db_failed'] . "
". EOL; $db_return_text .= $txt; } - if($db && $db->connected) { + if ($db && $db->connected) { $r = q("SELECT COUNT(*) as `total` FROM `user`"); if (dbm::is_result($r) && $r[0]['total']) { $tpl = get_markup_template('install.tpl'); @@ -170,11 +145,11 @@ function install_content(App $a) { } } - if (x($a->data,'txt') && strlen($a->data['txt'])) { + if (x($a->data, 'txt') && strlen($a->data['txt'])) { $db_return_text .= manual_config($a); } - if ($db_return_text!="") { + if ($db_return_text != "") { $tpl = get_markup_template('install.tpl'); return replace_macros($tpl, array( '$title' => $install_title, @@ -183,7 +158,7 @@ function install_content(App $a) { )); } - switch ($install_wizard_pass){ + switch ($install_wizard_pass) { case 1: { // System check @@ -199,7 +174,7 @@ function install_content(App $a) { check_keys($checks); - if (x($_POST,'phpath')) { + if (x($_POST, 'phpath')) { $phpath = notags(trim($_POST['phpath'])); } @@ -208,7 +183,7 @@ function install_content(App $a) { check_htaccess($checks); /// @TODO Maybe move this out? - function check_passed($v, $c){ + function check_passed($v, $c) { if ($c['required']) { $v = $v && $c['status']; } @@ -235,7 +210,7 @@ function install_content(App $a) { case 2: { // Database config - $dbhost = ((x($_POST,'dbhost')) ? notags(trim($_POST['dbhost'])) : 'localhost'); + $dbhost = ((x($_POST, 'dbhost')) ? notags(trim($_POST['dbhost'])) : 'localhost'); $dbuser = notags(trim($_POST['dbuser'])); $dbpass = notags(trim($_POST['dbpass'])); $dbdata = notags(trim($_POST['dbdata'])); @@ -273,14 +248,14 @@ function install_content(App $a) { }; break; case 3: { // Site settings require_once('include/datetime.php'); - $dbhost = ((x($_POST,'dbhost')) ? notags(trim($_POST['dbhost'])) : 'localhost'); + $dbhost = ((x($_POST, 'dbhost')) ? notags(trim($_POST['dbhost'])) : 'localhost'); $dbuser = notags(trim($_POST['dbuser'])); $dbpass = notags(trim($_POST['dbpass'])); $dbdata = notags(trim($_POST['dbdata'])); $phpath = notags(trim($_POST['phpath'])); $adminmail = notags(trim($_POST['adminmail'])); - $timezone = ((x($_POST,'timezone')) ? ($_POST['timezone']) : 'America/Los_Angeles'); + $timezone = ((x($_POST, 'timezone')) ? ($_POST['timezone']) : 'America/Los_Angeles'); /* Installed langs */ $lang_choices = get_available_languages(); @@ -322,7 +297,7 @@ function install_content(App $a) { * required : boolean * help : string optional */ -function check_add(&$checks, $title, $status, $required, $help){ +function check_add(&$checks, $title, $status, $required, $help) { $checks[] = array( 'title' => $title, 'status' => $status, @@ -333,7 +308,7 @@ function check_add(&$checks, $title, $status, $required, $help){ function check_php(&$phpath, &$checks) { $passed = $passed2 = $passed3 = false; - if (strlen($phpath)){ + if (strlen($phpath)) { $passed = file_exists($phpath); } else { $phpath = trim(shell_exec('which php')); @@ -342,24 +317,24 @@ function check_php(&$phpath, &$checks) { $help = ""; if (!$passed) { $help .= t('Could not find a command line version of PHP in the web server PATH.'). EOL; - $help .= t("If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron. See 'Setup the poller'") . EOL ; - $help .= EOL . EOL ; + $help .= t("If you don't have a command line version of PHP installed on server, you will not be able to run the background processing. See 'Setup the poller'") . EOL; + $help .= EOL . EOL; $tpl = get_markup_template('field_input.tpl'); $help .= replace_macros($tpl, array( '$field' => array('phpath', t('PHP executable path'), $phpath, t('Enter full path to php executable. You can leave this blank to continue the installation.')), )); - $phpath=""; + $phpath = ""; } check_add($checks, t('Command line PHP').($passed?" ($phpath)":""), $passed, false, $help); - if($passed) { + if ($passed) { $cmd = "$phpath -v"; $result = trim(shell_exec($cmd)); - $passed2 = ( strpos($result, "(cli)") !== false ); + $passed2 = ( strpos($result, "(cli)") !== false); list($result) = explode("\n", $result); $help = ""; - if(!$passed2) { + if (!$passed2) { $help .= t('PHP executable is not the php cli binary (could be cgi-fgci version)'). EOL; $help .= t('Found PHP version: ')."$result"; } @@ -373,7 +348,7 @@ function check_php(&$phpath, &$checks) { $result = trim(shell_exec($cmd)); $passed3 = $result == $str; $help = ""; - if(!$passed3) { + if (!$passed3) { $help .= t('The command line version of PHP on your system does not have "register_argc_argv" enabled.'). EOL; $help .= t('This is required for message delivery to work.'); } @@ -413,12 +388,12 @@ function check_funcs(&$checks) { check_add($ck_funcs, t('libCurl PHP module'), true, true, ""); check_add($ck_funcs, t('GD graphics PHP module'), true, true, ""); check_add($ck_funcs, t('OpenSSL PHP module'), true, true, ""); - check_add($ck_funcs, t('mysqli PHP module'), true, true, ""); + check_add($ck_funcs, t('PDO or MySQLi PHP module'), true, true, ""); check_add($ck_funcs, t('mb_string PHP module'), true, true, ""); check_add($ck_funcs, t('XML PHP module'), true, true, ""); check_add($ck_funcs, t('iconv module'), true, true, ""); - if (function_exists('apache_get_modules')){ + if (function_exists('apache_get_modules')) { if (! in_array('mod_rewrite',apache_get_modules())) { check_add($ck_funcs, t('Apache mod_rewrite module'), false, true, t('Error: Apache webserver mod-rewrite module is required but not installed.')); } else { @@ -426,29 +401,33 @@ function check_funcs(&$checks) { } } - if (! function_exists('curl_init')){ - $ck_funcs[0]['status']= false; - $ck_funcs[0]['help']= t('Error: libCURL PHP module required but not installed.'); + if (! function_exists('curl_init')) { + $ck_funcs[0]['status'] = false; + $ck_funcs[0]['help'] = t('Error: libCURL PHP module required but not installed.'); } - if (! function_exists('imagecreatefromjpeg')){ - $ck_funcs[1]['status']= false; - $ck_funcs[1]['help']= t('Error: GD graphics PHP module with JPEG support required but not installed.'); + if (! function_exists('imagecreatefromjpeg')) { + $ck_funcs[1]['status'] = false; + $ck_funcs[1]['help'] = t('Error: GD graphics PHP module with JPEG support required but not installed.'); } if (! function_exists('openssl_public_encrypt')) { - $ck_funcs[2]['status']= false; - $ck_funcs[2]['help']= t('Error: openssl PHP module required but not installed.'); + $ck_funcs[2]['status'] = false; + $ck_funcs[2]['help'] = t('Error: openssl PHP module required but not installed.'); } - if (! function_exists('mysqli_connect')){ - $ck_funcs[3]['status']= false; - $ck_funcs[3]['help']= t('Error: mysqli PHP module required but not installed.'); + if (! function_exists('mysqli_connect') && !class_exists('pdo')) { + $ck_funcs[3]['status'] = false; + $ck_funcs[3]['help'] = t('Error: PDO or MySQLi PHP module required but not installed.'); } - if (! function_exists('mb_strlen')){ - $ck_funcs[4]['status']= false; - $ck_funcs[4]['help']= t('Error: mb_string PHP module required but not installed.'); + if (!function_exists('mysqli_connect') && class_exists('pdo') && !in_array('mysql', PDO::getAvailableDrivers())) { + $ck_funcs[3]['status'] = false; + $ck_funcs[3]['help'] = t('Error: The MySQL driver for PDO is not installed.'); } - if (! function_exists('iconv_strlen')){ - $ck_funcs[7]['status']= false; - $ck_funcs[7]['help']= t('Error: iconv PHP module required but not installed.'); + if (! function_exists('mb_strlen')) { + $ck_funcs[4]['status'] = false; + $ck_funcs[4]['help'] = t('Error: mb_string PHP module required but not installed.'); + } + if (! function_exists('iconv_strlen')) { + $ck_funcs[7]['status'] = false; + $ck_funcs[7]['help'] = t('Error: iconv PHP module required but not installed.'); } $checks = array_merge($checks, $ck_funcs); @@ -467,9 +446,9 @@ function check_htconfig(&$checks) { $status = true; $help = ""; if ((file_exists('.htconfig.php') && !is_writable('.htconfig.php')) || - (!file_exists('.htconfig.php') && !is_writable('.')) ) { + (!file_exists('.htconfig.php') && !is_writable('.'))) { - $status=false; + $status = false; $help = t('The web installer needs to be able to create a file called ".htconfig.php" in the top folder of your web server and it is unable to do so.') .EOL; $help .= t('This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can.').EOL; $help .= t('At the end of this procedure, we will give you a text to save in a file named .htconfig.php in your Friendica top folder.').EOL; @@ -483,9 +462,9 @@ function check_htconfig(&$checks) { function check_smarty3(&$checks) { $status = true; $help = ""; - if (!is_writable('view/smarty3') ) { + if (!is_writable('view/smarty3')) { - $status=false; + $status = false; $help = t('Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering.') .EOL; $help .= t('In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top level folder.').EOL; $help .= t('Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder.').EOL; @@ -502,11 +481,11 @@ function check_htaccess(&$checks) { if (function_exists('curl_init')) { $test = fetch_url(App::get_baseurl()."/install/testrewrite"); - if ($test!="ok") { + if ($test != "ok") { $test = fetch_url(normalise_link(App::get_baseurl()."/install/testrewrite")); } - if ($test!="ok") { + if ($test != "ok") { $status = false; $help = t('Url rewrite in .htaccess is not working. Check your server configuration.'); } @@ -539,15 +518,15 @@ function check_imagik(&$checks) { } function manual_config(App $a) { - $data = htmlentities($a->data['txt'],ENT_COMPAT,'UTF-8'); + $data = htmlentities($a->data['txt'],ENT_COMPAT, 'UTF-8'); $o = t('The database configuration file ".htconfig.php" could not be written. Please use the enclosed text to create a configuration file in your web server root.'); $o .= ""; return $o; } -function load_database_rem($v, $i){ +function load_database_rem($v, $i) { $l = trim($i); - if (strlen($l)>1 && ($l[0]=="-" || ($l[0]=="/" && $l[1]=="*"))){ + if (strlen($l)>1 && ($l[0] == "-" || ($l[0] == "/" && $l[1] == "*"))) { return $v; } else { return $v."\n".$i; @@ -559,18 +538,6 @@ function load_database($db) { require_once("include/dbstructure.php"); $errors = update_structure(false, true); -/* $str = file_get_contents('database.sql'); - $arr = explode(';',$str); - $errors = false; - foreach($arr as $a) { - if(strlen(trim($a))) { - $r = @$db->q(trim($a)); - if(false === $r) { - $errors .= t('Errors encountered creating database tables.') . $a . EOL; - } - } - }*/ - return $errors; } @@ -584,5 +551,3 @@ function what_next() { .t("Go to your new Friendica node registration page and register as new user. Remember to use the same email you have entered as administrator email. This will allow you to enter the site admin panel.") ."

"; } - - diff --git a/mod/invite.php b/mod/invite.php index f5c60e1ed3..67cd23de74 100644 --- a/mod/invite.php +++ b/mod/invite.php @@ -7,6 +7,8 @@ * */ +use Friendica\App; + require_once('include/email.php'); function invite_post(App $a) { diff --git a/mod/item.php b/mod/item.php index 8bf922d97c..f2d7babcde 100644 --- a/mod/item.php +++ b/mod/item.php @@ -15,6 +15,8 @@ * posting categories go through item_store() instead of this function. */ +use Friendica\App; + require_once 'include/crypto.php'; require_once 'include/enotify.php'; require_once 'include/email.php'; @@ -23,7 +25,7 @@ require_once 'include/files.php'; require_once 'include/threads.php'; require_once 'include/text.php'; require_once 'include/items.php'; -require_once 'include/Scrape.php'; +require_once 'include/probe.php'; require_once 'include/diaspora.php'; require_once 'include/Contact.php'; @@ -142,7 +144,6 @@ function item_post(App $a) { $parent_contact = get_contact_details_by_url($thrparent[0]["author-link"]); if (!isset($parent_contact["nick"])) { - require_once 'include/Scrape.php'; $probed_contact = probe_url($thrparent[0]["author-link"]); if ($probed_contact["network"] != NETWORK_FEED) { $parent_contact = $probed_contact; @@ -723,6 +724,18 @@ function item_post(App $a) { $datarray['last-child'] = 1; $datarray['visible'] = 1; + $datarray['protocol'] = PROTOCOL_DFRN; + + $r = dba::fetch_first("SELECT `conversation-uri`, `conversation-href` FROM `conversation` WHERE `item-uri` = ?", $datarray['parent-uri']); + if (dbm::is_result($r)) { + if ($r['conversation-uri'] != '') { + $datarray['conversation-uri'] = $r['conversation-uri']; + } + if ($r['conversation-href'] != '') { + $datarray['conversation-href'] = $r['conversation-href']; + } + } + if ($orig_post) { $datarray['edit'] = true; } @@ -762,6 +775,8 @@ function item_post(App $a) { // Fill the cache field put_item_in_cache($datarray); + $datarray = store_conversation($datarray); + if ($orig_post) { $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `attach` = '%s', `file` = '%s', `rendered-html` = '%s', `rendered-hash` = '%s', `edited` = '%s', `changed` = '%s' WHERE `id` = %d AND `uid` = %d", dbesc($datarray['title']), @@ -1090,7 +1105,6 @@ function item_content(App $a) { * @return boolean true if replaced, false if not replaced */ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $network = "") { - require_once 'include/Scrape.php'; require_once 'include/socgraph.php'; $replaced = false; diff --git a/mod/like.php b/mod/like.php index 1f6a233f3d..c542a540ab 100755 --- a/mod/like.php +++ b/mod/like.php @@ -1,5 +1,7 @@ config['register_policy'] == REGISTER_CLOSED) ? false : true); + } + return login(($a->config['register_policy'] == REGISTER_CLOSED) ? false : true); } diff --git a/mod/lostpass.php b/mod/lostpass.php index 455a9b1e2e..37ef3e2f82 100644 --- a/mod/lostpass.php +++ b/mod/lostpass.php @@ -1,5 +1,7 @@ App::get_baseurl(), - '$touch_icon' => $touch_icon, - '$title' => Config::get('config', 'sitename', 'Friendica'), - )); - - echo $o; - - killme(); + header('Content-type: application/manifest+json'); + $touch_icon = Config::get('system', 'touch_icon', 'images/friendica-128.png'); + if ($touch_icon == '') { + $touch_icon = 'images/friendica-128.png'; } -?> + + $o = replace_macros($tpl, array( + '$baseurl' => App::get_baseurl(), + '$touch_icon' => $touch_icon, + '$title' => Config::get('config', 'sitename', 'Friendica'), + )); + + echo $o; + + killme(); +} diff --git a/mod/match.php b/mod/match.php index 44f5141ad8..4119bf8e84 100644 --- a/mod/match.php +++ b/mod/match.php @@ -1,5 +1,8 @@ ' . t('Welcome to Friendica') . ''; - $o .= '

' . t('New Member Checklist') . '

'; - $o .= '
'; - $o .= t('We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page. A link to this page will be visible from your home page for two weeks after your initial registration and then will quietly disappear.'); - $o .= '

' . t('Getting Started') . '

'; - $o .= '
    '; - $o .= '
  • ' . '' . t('Friendica Walk-Through') . '
    ' . t('On your Quick Start page - find a brief introduction to your profile and network tabs, make some new connections, and find some groups to join.') . '
  • ' . EOL; - $o .= '
'; - $o .= '

' . t('Settings') . '

'; - $o .= '
    '; - $o .= '
  • ' . '' . t('Go to Your Settings') . '
    ' . t('On your Settings page - change your initial password. Also make a note of your Identity Address. This looks just like an email address - and will be useful in making friends on the free social web.') . '
  • ' . EOL; - $o .= '
  • ' . t('Review the other settings, particularly the privacy settings. An unpublished directory listing is like having an unlisted phone number. In general, you should probably publish your listing - unless all of your friends and potential friends know exactly how to find you.') . '
  • ' . EOL; - $o .= '
'; - $o .= '

' . t('Profile') . '

'; - $o .= '
    '; - $o .= '
  • ' . '' . t('Upload Profile Photo') . '
    ' . t('Upload a profile photo if you have not done so already. Studies have shown that people with real photos of themselves are ten times more likely to make friends than people who do not.') . '
  • ' . EOL; - $o .= '
  • ' . '' . t('Edit Your Profile') . '
    ' . t('Edit your default profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors.') . '
  • ' . EOL; - $o .= '
  • ' . '' . t('Profile Keywords') . '
    ' . t('Set some public keywords for your default profile which describe your interests. We may be able to find other people with similar interests and suggest friendships.') . '
  • ' . EOL; - $o .= '
'; - $o .= '

' . t('Connecting') . '

'; - $o .= '
    '; - $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1); + $mail_disabled = ((function_exists('imap_open') && (!get_config('system', 'imap_disabled'))) ? 0 : 1); - if(! $mail_disabled) + if (!$mail_disabled) { $o .= '
  • ' . '' . t('Importing Emails') . '
    ' . t('Enter your email access information on your Connector Settings page if you wish to import and interact with friends or mailing lists from your email INBOX') . '
  • ' . EOL; + } $o .= '
  • ' . '' . t('Go to Your Contacts Page') . '
    ' . t('Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the Add New Contact dialog.') . '
  • ' . EOL; - $o .= '
  • ' . '' . t("Go to Your Site's Directory") . '
    ' . t('The Directory page lets you find other people in this network or other federated sites. Look for a Connect or Follow link on their profile page. Provide your own Identity Address if requested.') . '
  • ' . EOL; - $o .= '
  • ' . '' . t('Finding New People') . '
    ' . t("On the side panel of the Contacts page are several tools to find new friends. We can match people by interest, look up people by name or interest, and provide suggestions based on network relationships. On a brand new site, friend suggestions will usually begin to be populated within 24 hours.") . '
  • ' . EOL; - $o .= '
'; - $o .= '

' . t('Groups') . '

'; - $o .= '
    '; - $o .= '
  • ' . '' . t('Group Your Contacts') . '
    ' . t('Once you have made some friends, organize them into private conversation groups from the sidebar of your Contacts page and then you can interact with each group privately on your Network page.') . '
  • ' . EOL; - if(get_config('system', 'newuser_private')) { + if (get_config('system', 'newuser_private')) { $o .= '
  • ' . '' . t("Why Aren't My Posts Public?") . '
    ' . t("Friendica respects your privacy. By default, your posts will only show up to people you've added as friends. For more information, see the help section from the link above.") . '
  • ' . EOL; } $o .= '
'; - $o .= '

' . t('Getting Help') . '

'; - $o .= ''; - $o .= '
'; return $o; diff --git a/mod/nodeinfo.php b/mod/nodeinfo.php index 7f010cee41..5d8e8f2a20 100644 --- a/mod/nodeinfo.php +++ b/mod/nodeinfo.php @@ -5,7 +5,8 @@ * Documentation: http://nodeinfo.diaspora.software/schema.html */ -use \Friendica\Core\Config; +use Friendica\App; +use Friendica\Core\Config; require_once 'include/plugin.php'; @@ -251,5 +252,3 @@ function nodeinfo_cron() { logger('cron_end'); Config::set('nodeinfo', 'last_calucation', time()); } - -?> diff --git a/mod/nogroup.php b/mod/nogroup.php index 11b7bdc7aa..ecbfb9176e 100644 --- a/mod/nogroup.php +++ b/mod/nogroup.php @@ -1,5 +1,7 @@ argc > 1) diff --git a/mod/notes.php b/mod/notes.php index c7cfe8d70f..835627586c 100644 --- a/mod/notes.php +++ b/mod/notes.php @@ -1,5 +1,7 @@ friendica items permanent-url compatibility */ - function notice_init(App $a) { - $id = $a->argv[1]; - $r = q("SELECT user.nickname FROM user LEFT JOIN item ON item.uid=user.uid WHERE item.id=%d", - intval($id) - ); - if (dbm::is_result($r)){ - $nick = $r[0]['nickname']; - $url = App::get_baseurl()."/display/$nick/$id"; - goaway($url); - } else { - $a->error = 404; - notice( t('Item not found.') . EOL); +/* identi.ca -> friendica items permanent-url compatibility */ - } - return; +use Friendica\App; +function notice_init(App $a) { + + $id = $a->argv[1]; + $r = q("SELECT `user`.`nickname` FROM `user` LEFT JOIN `item` ON `item`.`uid` = `user`.`uid` WHERE `item`.`id` = %d", intval($id)); + if (dbm::is_result($r)) { + $nick = $r[0]['nickname']; + $url = App::get_baseurl() . "/display/$nick/$id"; + goaway($url); + } else { + $a->error = 404; + notice(t('Item not found.') . EOL); } + + return; +} diff --git a/mod/notifications.php b/mod/notifications.php index bab5fd6274..396361e91b 100644 --- a/mod/notifications.php +++ b/mod/notifications.php @@ -5,6 +5,8 @@ * @brief The notifications module */ +use Friendica\App; + require_once("include/NotificationsManager.php"); require_once("include/contact_selectors.php"); require_once("include/network.php"); @@ -223,6 +225,12 @@ function notifications_content(App $a) { $header .= " (".network_to_name($it['network'], $it['url']).")"; + if ($it['network'] != NETWORK_DIASPORA) { + $discard = t('Discard'); + } else { + $discard = ''; + } + $notif_content[] = replace_macros($tpl, array( '$header' => htmlentities($header), '$str_notifytype' => t('Notification type: '), @@ -255,7 +263,7 @@ function notifications_content(App $a) { '$approve' => t('Approve'), '$note' => $it['note'], '$ignore' => t('Ignore'), - '$discard' => t('Discard'), + '$discard' => $discard, )); break; diff --git a/mod/notify.php b/mod/notify.php index 0026f5ca6e..e380681934 100644 --- a/mod/notify.php +++ b/mod/notify.php @@ -1,4 +1,7 @@ argc > 1) && ($a->argv[1] === 'xrd')) { diff --git a/mod/openid.php b/mod/openid.php index b45cd97975..5707b1b728 100644 --- a/mod/openid.php +++ b/mod/openid.php @@ -1,9 +1,9 @@ App::get_baseurl(), - '$nodename' => $a->get_hostname(), - )); + $tpl = get_markup_template('opensearch.tpl'); - echo $o; + header("Content-type: application/opensearchdescription+xml"); - killme(); + $o = replace_macros($tpl, array( + '$baseurl' => App::get_baseurl(), + '$nodename' => $a->get_hostname(), + )); - } -?> \ No newline at end of file + echo $o; + + killme(); +} diff --git a/mod/ostatus_subscribe.php b/mod/ostatus_subscribe.php index a9f7c3a909..0b399acf29 100644 --- a/mod/ostatus_subscribe.php +++ b/mod/ostatus_subscribe.php @@ -1,7 +1,9 @@ data,'user')) { notice( t('No photos selected') . EOL ); diff --git a/mod/ping.php b/mod/ping.php index ba496a70bd..17180c74ee 100644 --- a/mod/ping.php +++ b/mod/ping.php @@ -1,5 +1,8 @@ argc > 1 && $a->argv[1] === '@server') { + require_once 'include/socgraph.php'; // List of all servers that this server knows $ret = poco_serverlist(); header('Content-type: application/json'); @@ -52,16 +55,16 @@ function poco_init(App $a) { $cid = intval($a->argv[4]); } - if (!$system_mode AND !$global) { - $r = q("SELECT `user`.*,`profile`.`hide-friends` from user left join profile on `user`.`uid` = `profile`.`uid` + if (! $system_mode AND ! $global) { + $users = q("SELECT `user`.*,`profile`.`hide-friends` from user left join profile on `user`.`uid` = `profile`.`uid` where `user`.`nickname` = '%s' and `profile`.`is-default` = 1 limit 1", dbesc($user) ); - if (! dbm::is_result($r) || $r[0]['hidewall'] || $r[0]['hide-friends']) { + if (! dbm::is_result($users) || $users[0]['hidewall'] || $users[0]['hide-friends']) { http_status_exit(404); } - $user = $r[0]; + $user = $users[0]; } if ($justme) { @@ -71,23 +74,23 @@ function poco_init(App $a) { // $sql_extra = " AND `contact`.`self` = 0 "; if ($cid) { - $sql_extra = sprintf(" AND `contact`.`id` = %d ",intval($cid)); + $sql_extra = sprintf(" AND `contact`.`id` = %d ", intval($cid)); } - if (x($_GET,'updatedSince')) { - $update_limit = date("Y-m-d H:i:s",strtotime($_GET['updatedSince'])); + if (x($_GET, 'updatedSince')) { + $update_limit = date("Y-m-d H:i:s", strtotime($_GET['updatedSince'])); } if ($global) { - $r = q("SELECT count(*) AS `total` FROM `gcontact` WHERE `updated` >= '%s' AND `updated` >= `last_failure` AND NOT `hide` AND `network` IN ('%s', '%s', '%s')", + $contacts = q("SELECT count(*) AS `total` FROM `gcontact` WHERE `updated` >= '%s' AND `updated` >= `last_failure` AND NOT `hide` AND `network` IN ('%s', '%s', '%s')", dbesc($update_limit), dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS) ); } elseif ($system_mode) { - $r = q("SELECT count(*) AS `total` FROM `contact` WHERE `self` = 1 + $contacts = q("SELECT count(*) AS `total` FROM `contact` WHERE `self` = 1 AND `uid` IN (SELECT `uid` FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1) "); } else { - $r = q("SELECT count(*) AS `total` FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0 + $contacts = q("SELECT count(*) AS `total` FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0 AND (`success_update` >= `failure_update` OR `last-item` >= `failure_update`) AND `network` IN ('%s', '%s', '%s', '%s') $sql_extra", intval($user['uid']), @@ -97,8 +100,8 @@ function poco_init(App $a) { dbesc(NETWORK_STATUSNET) ); } - if (dbm::is_result($r)) { - $totalResults = intval($r[0]['total']); + if (dbm::is_result($contacts)) { + $totalResults = intval($contacts[0]['total']); } else { $totalResults = 0; } @@ -106,11 +109,11 @@ function poco_init(App $a) { if (! $startIndex) { $startIndex = 0; } - $itemsPerPage = ((x($_GET,'count') && intval($_GET['count'])) ? intval($_GET['count']) : $totalResults); + $itemsPerPage = ((x($_GET, 'count') && intval($_GET['count'])) ? intval($_GET['count']) : $totalResults); if ($global) { logger("Start global query", LOGGER_DEBUG); - $r = q("SELECT * FROM `gcontact` WHERE `updated` > '%s' AND NOT `hide` AND `network` IN ('%s', '%s', '%s') AND `updated` > `last_failure` + $contacts = q("SELECT * FROM `gcontact` WHERE `updated` > '%s' AND NOT `hide` AND `network` IN ('%s', '%s', '%s') AND `updated` > `last_failure` ORDER BY `updated` DESC LIMIT %d, %d", dbesc($update_limit), dbesc(NETWORK_DFRN), @@ -121,7 +124,7 @@ function poco_init(App $a) { ); } elseif ($system_mode) { logger("Start system mode query", LOGGER_DEBUG); - $r = q("SELECT `contact`.*, `profile`.`about` AS `pabout`, `profile`.`locality` AS `plocation`, `profile`.`pub_keywords`, + $contacts = q("SELECT `contact`.*, `profile`.`about` AS `pabout`, `profile`.`locality` AS `plocation`, `profile`.`pub_keywords`, `profile`.`gender` AS `pgender`, `profile`.`address` AS `paddress`, `profile`.`region` AS `pregion`, `profile`.`postal-code` AS `ppostalcode`, `profile`.`country-name` AS `pcountry`, `user`.`account-type` FROM `contact` INNER JOIN `profile` ON `profile`.`uid` = `contact`.`uid` @@ -132,8 +135,8 @@ function poco_init(App $a) { intval($itemsPerPage) ); } else { - logger("Start query for user ".$user['nickname'], LOGGER_DEBUG); - $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0 + logger("Start query for user " . $user['nickname'], LOGGER_DEBUG); + $contacts = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0 AND (`success_update` >= `failure_update` OR `last-item` >= `failure_update`) AND `network` IN ('%s', '%s', '%s', '%s') $sql_extra LIMIT %d, %d", intval($user['uid']), @@ -148,13 +151,13 @@ function poco_init(App $a) { logger("Query done", LOGGER_DEBUG); $ret = array(); - if (x($_GET,'sorted')) { + if (x($_GET, 'sorted')) { $ret['sorted'] = false; } - if (x($_GET,'filtered')) { + if (x($_GET, 'filtered')) { $ret['filtered'] = false; } - if (x($_GET,'updatedSince') AND !$global) { + if (x($_GET, 'updatedSince') AND ! $global) { $ret['updatedSince'] = false; } $ret['startIndex'] = (int) $startIndex; @@ -180,134 +183,135 @@ function poco_init(App $a) { 'generation' => false ); - if ((! x($_GET,'fields')) || ($_GET['fields'] === '@all')) { + if ((! x($_GET, 'fields')) || ($_GET['fields'] === '@all')) { foreach ($fields_ret as $k => $v) { $fields_ret[$k] = true; } } else { - $fields_req = explode(',',$_GET['fields']); + $fields_req = explode(',', $_GET['fields']); foreach ($fields_req as $f) { $fields_ret[trim($f)] = true; } } - if (is_array($r)) { - if (dbm::is_result($r)) { - foreach ($r as $rr) { - if (!isset($rr['generation'])) { + if (is_array($contacts)) { + if (dbm::is_result($contacts)) { + foreach ($contacts as $contact) { + if (! isset($contact['generation'])) { if ($global) { - $rr['generation'] = 3; + $contact['generation'] = 3; } elseif ($system_mode) { - $rr['generation'] = 1; + $contact['generation'] = 1; } else { - $rr['generation'] = 2; + $contact['generation'] = 2; } } - if (($rr['about'] == "") AND isset($rr['pabout'])) { - $rr['about'] = $rr['pabout']; + if (($contact['about'] == "") AND isset($contact['pabout'])) { + $contact['about'] = $contact['pabout']; } - if ($rr['location'] == "") { - if (isset($rr['plocation'])) { - $rr['location'] = $rr['plocation']; + if ($contact['location'] == "") { + if (isset($contact['plocation'])) { + $contact['location'] = $contact['plocation']; } - if (isset($rr['pregion']) AND ($rr['pregion'] != "")) { - if ($rr['location'] != "") { - $rr['location'] .= ", "; + if (isset($contact['pregion']) AND ( $contact['pregion'] != "")) { + if ($contact['location'] != "") { + $contact['location'] .= ", "; } - $rr['location'] .= $rr['pregion']; + $contact['location'] .= $contact['pregion']; } - if (isset($rr['pcountry']) AND ($rr['pcountry'] != "")) { - if ($rr['location'] != "") { - $rr['location'] .= ", "; + if (isset($contact['pcountry']) AND ( $contact['pcountry'] != "")) { + if ($contact['location'] != "") { + $contact['location'] .= ", "; } - $rr['location'] .= $rr['pcountry']; + $contact['location'] .= $contact['pcountry']; } } - if (($rr['gender'] == "") AND isset($rr['pgender'])) { - $rr['gender'] = $rr['pgender']; + if (($contact['gender'] == "") AND isset($contact['pgender'])) { + $contact['gender'] = $contact['pgender']; } - if (($rr['keywords'] == "") AND isset($rr['pub_keywords'])) { - $rr['keywords'] = $rr['pub_keywords']; + if (($contact['keywords'] == "") AND isset($contact['pub_keywords'])) { + $contact['keywords'] = $contact['pub_keywords']; } - if (isset($rr['account-type'])) { - $rr['contact-type'] = $rr['account-type']; + if (isset($contact['account-type'])) { + $contact['contact-type'] = $contact['account-type']; } - $about = Cache::get("about:".$rr['updated'].":".$rr['nurl']); + $about = Cache::get("about:" . $contact['updated'] . ":" . $contact['nurl']); if (is_null($about)) { - $about = bbcode($rr['about'], false, false); - Cache::set("about:".$rr['updated'].":".$rr['nurl'],$about); + require_once 'include/bbcode.php'; + $about = bbcode($contact['about'], false, false); + Cache::set("about:" . $contact['updated'] . ":" . $contact['nurl'], $about); } // Non connected persons can only see the keywords of a Diaspora account - if ($rr['network'] == NETWORK_DIASPORA) { - $rr['location'] = ""; + if ($contact['network'] == NETWORK_DIASPORA) { + $contact['location'] = ""; $about = ""; - $rr['gender'] = ""; + $contact['gender'] = ""; } $entry = array(); if ($fields_ret['id']) { - $entry['id'] = (int)$rr['id']; + $entry['id'] = (int)$contact['id']; } if ($fields_ret['displayName']) { - $entry['displayName'] = $rr['name']; + $entry['displayName'] = $contact['name']; } if ($fields_ret['aboutMe']) { $entry['aboutMe'] = $about; } if ($fields_ret['currentLocation']) { - $entry['currentLocation'] = $rr['location']; + $entry['currentLocation'] = $contact['location']; } if ($fields_ret['gender']) { - $entry['gender'] = $rr['gender']; + $entry['gender'] = $contact['gender']; } if ($fields_ret['generation']) { - $entry['generation'] = (int)$rr['generation']; + $entry['generation'] = (int)$contact['generation']; } if ($fields_ret['urls']) { - $entry['urls'] = array(array('value' => $rr['url'], 'type' => 'profile')); - if ($rr['addr'] && ($rr['network'] !== NETWORK_MAIL)) { - $entry['urls'][] = array('value' => 'acct:' . $rr['addr'], 'type' => 'webfinger'); + $entry['urls'] = array(array('value' => $contact['url'], 'type' => 'profile')); + if ($contact['addr'] && ($contact['network'] !== NETWORK_MAIL)) { + $entry['urls'][] = array('value' => 'acct:' . $contact['addr'], 'type' => 'webfinger'); } } if ($fields_ret['preferredUsername']) { - $entry['preferredUsername'] = $rr['nick']; + $entry['preferredUsername'] = $contact['nick']; } if ($fields_ret['updated']) { - if (!$global) { - $entry['updated'] = $rr['success_update']; + if (! $global) { + $entry['updated'] = $contact['success_update']; - if ($rr['name-date'] > $entry['updated']) { - $entry['updated'] = $rr['name-date']; + if ($contact['name-date'] > $entry['updated']) { + $entry['updated'] = $contact['name-date']; } - if ($rr['uri-date'] > $entry['updated']) { - $entry['updated'] = $rr['uri-date']; + if ($contact['uri-date'] > $entry['updated']) { + $entry['updated'] = $contact['uri-date']; } - if ($rr['avatar-date'] > $entry['updated']) { - $entry['updated'] = $rr['avatar-date']; + if ($contact['avatar-date'] > $entry['updated']) { + $entry['updated'] = $contact['avatar-date']; } } else { - $entry['updated'] = $rr['updated']; + $entry['updated'] = $contact['updated']; } $entry['updated'] = date("c", strtotime($entry['updated'])); } if ($fields_ret['photos']) { - $entry['photos'] = array(array('value' => $rr['photo'], 'type' => 'profile')); + $entry['photos'] = array(array('value' => $contact['photo'], 'type' => 'profile')); } if ($fields_ret['network']) { - $entry['network'] = $rr['network']; + $entry['network'] = $contact['network']; if ($entry['network'] == NETWORK_STATUSNET) { $entry['network'] = NETWORK_OSTATUS; } - if (($entry['network'] == "") AND ($rr['self'])) { + if (($entry['network'] == "") AND ($contact['self'])) { $entry['network'] = NETWORK_DFRN; } } if ($fields_ret['tags']) { - $tags = str_replace(","," ",$rr['keywords']); + $tags = str_replace(",", " ", $contact['keywords']); $tags = explode(" ", $tags); $cleaned = array(); @@ -327,23 +331,23 @@ function poco_init(App $a) { //if (isset($rr['paddress'])) // $entry['address']['streetAddress'] = $rr['paddress']; - if (isset($rr['plocation'])) { - $entry['address']['locality'] = $rr['plocation']; + if (isset($contact['plocation'])) { + $entry['address']['locality'] = $contact['plocation']; } - if (isset($rr['pregion'])) { - $entry['address']['region'] = $rr['pregion']; + if (isset($contact['pregion'])) { + $entry['address']['region'] = $contact['pregion']; } // See above //if (isset($rr['ppostalcode'])) // $entry['address']['postalCode'] = $rr['ppostalcode']; - if (isset($rr['pcountry'])) { - $entry['address']['country'] = $rr['pcountry']; + if (isset($contact['pcountry'])) { + $entry['address']['country'] = $contact['pcountry']; } } if ($fields_ret['contactType']) { - $entry['contactType'] = intval($rr['contact-type']); + $entry['contactType'] = intval($contact['contact-type']); } $ret['entry'][] = $entry; } @@ -357,7 +361,7 @@ function poco_init(App $a) { if ($format === 'xml') { header('Content-type: text/xml'); - echo replace_macros(get_markup_template('poco_xml.tpl'),array_xmlify(array('$response' => $ret))); + echo replace_macros(get_markup_template('poco_xml.tpl'), array_xmlify(array('$response' => $ret))); killme(); } if ($format === 'json') { diff --git a/mod/poke.php b/mod/poke.php index 5161129b31..83f3bf1c73 100644 --- a/mod/poke.php +++ b/mod/poke.php @@ -1,7 +1,6 @@ - get_theme_screenshot($theme), 'desc' => $desc, 'version' => $version, 'credits' => $credits)); } + killme(); } diff --git a/mod/probe.php b/mod/probe.php index 8c951a7fcf..abeccef446 100644 --- a/mod/probe.php +++ b/mod/probe.php @@ -1,31 +1,32 @@ t("Public access denied."), - "description" => t("Only logged in users are permitted to perform a probing."))); + http_status_exit(403, array("title" => t("Public access denied."), + "description" => t("Only logged in users are permitted to perform a probing."))); killme(); } $o .= '

Probe Diagnostic

'; $o .= '
'; - $o .= 'Lookup address: '; + $o .= 'Lookup address: '; $o .= '
'; $o .= '

'; - if(x($_GET,'addr')) { - + if (x($_GET, 'addr')) { $addr = trim($_GET['addr']); $res = probe_url($addr); $o .= '
';
-		$o .= str_replace("\n",'
',print_r($res,true)); + $o .= str_replace("\n", '
', print_r($res, true)); $o .= '
'; } + return $o; } diff --git a/mod/profile.php b/mod/profile.php index a83cb076f2..7a11e9bc6b 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -1,9 +1,10 @@ page,'aside')) @@ -149,6 +150,7 @@ function profile_content(App $a, $update = 0) { } $is_owner = ((local_user()) && (local_user() == $a->profile['profile_uid']) ? true : false); + $last_updated_key = "profile:" . $a->profile['profile_uid'] . ":" . local_user() . ":" . remote_user(); if ($a->profile['hidewall'] && (! $is_owner) && (! $remote_contact)) { notice( t('Access to this profile has been restricted.') . EOL); @@ -195,9 +197,9 @@ function profile_content(App $a, $update = 0) { 'visitor' => (($is_owner || $commvisitor) ? 'block' : 'none'), 'profile_uid' => $a->profile['profile_uid'], 'acl_data' => ( $is_owner ? construct_acl_data($a, $a->user) : '' ), // For non-Javascript ACL selector - ); + ); - $o .= status_editor($a,$x); + $o .= status_editor($a,$x); } } @@ -209,6 +211,16 @@ function profile_content(App $a, $update = 0) { if ($update) { + $last_updated = (x($_SESSION['last_updated'], $last_updated_key) ? $_SESSION['last_updated'][$last_updated_key] : 0); + + // If the page user is the owner of the page we should query for unseen + // items. Otherwise use a timestamp of the last succesful update request. + if ($is_owner || !$last_updated) { + $sql_extra4 = " AND `item`.`unseen`"; + } else { + $gmupdate = gmdate("Y-m-d H:i:s", $last_updated); + $sql_extra4 = " AND `item`.`received` > '" . $gmupdate . "'"; + } $r = q("SELECT distinct(parent) AS `item_id`, `item`.`network` AS `item_network`, `item`.`created` FROM `item` INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` @@ -217,13 +229,18 @@ function profile_content(App $a, $update = 0) { (`item`.`deleted` = 0 OR item.verb = '" . ACTIVITY_LIKE ."' OR item.verb = '" . ACTIVITY_DISLIKE . "' OR item.verb = '" . ACTIVITY_ATTEND . "' OR item.verb = '" . ACTIVITY_ATTENDNO . "' OR item.verb = '" . ACTIVITY_ATTENDMAYBE . "') - AND `item`.`moderated` = 0 and `item`.`unseen` = 1 + AND `item`.`moderated` = 0 AND `item`.`wall` = 1 + $sql_extra4 $sql_extra ORDER BY `item`.`created` DESC", intval($a->profile['profile_uid']) ); + if (!dbm::is_result($r)) { + return ''; + } + } else { $sql_post_table = ""; @@ -283,11 +300,16 @@ function profile_content(App $a, $update = 0) { ORDER BY `thread`.`created` DESC $pager_sql", intval($a->profile['profile_uid']) ); + } $parents_arr = array(); $parents_str = ''; + // Set a time stamp for this page. We will make use of it when we + // search for new items (update routine) + $_SESSION['last_updated'][$last_updated_key] = time(); + if (dbm::is_result($r)) { foreach($r as $rr) $parents_arr[] = $rr['item_id']; diff --git a/mod/profile_photo.php b/mod/profile_photo.php index f9bf60cf54..b2bf6e3b15 100644 --- a/mod/profile_photo.php +++ b/mod/profile_photo.php @@ -1,5 +1,7 @@ user['nickname']); - } - function profile_photo_post(App $a) { if (! local_user()) { diff --git a/mod/profiles.php b/mod/profiles.php index bd57f106d7..7d2bceec1a 100644 --- a/mod/profiles.php +++ b/mod/profiles.php @@ -1,6 +1,9 @@ page['htmlhead'] .= replace_macros(get_markup_template('profed_head.tpl'), array( diff --git a/mod/profperm.php b/mod/profperm.php index a414d8947b..c67a0202e0 100644 --- a/mod/profperm.php +++ b/mod/profperm.php @@ -1,5 +1,7 @@ +use Friendica\App; + define('PROXY_DEFAULT_TIME', 86400); // 1 Day define('PROXY_SIZE_MICRO', 'micro'); diff --git a/mod/pubsub.php b/mod/pubsub.php index 2ba1958a25..ba5e05b0ee 100644 --- a/mod/pubsub.php +++ b/mod/pubsub.php @@ -1,5 +1,7 @@ diff --git a/mod/qsearch.php b/mod/qsearch.php index 8512bea51e..ba62fce0d7 100644 --- a/mod/qsearch.php +++ b/mod/qsearch.php @@ -1,5 +1,7 @@ argc == 2) && ($a->argv[1] === 'public')) { + if (($a->argc == 2) && ($a->argv[1] === 'public')) { $public = true; - } - else { + } else { - if($a->argc != 3 || $a->argv[1] !== 'users') - http_status_exit(500); - - $guid = $a->argv[2]; - - $r = q("SELECT * FROM `user` WHERE `guid` = '%s' AND `account_expired` = 0 AND `account_removed` = 0 LIMIT 1", - dbesc($guid) - ); - if (! dbm::is_result($r)) { + if ($a->argc != 3 || $a->argv[1] !== 'users') { http_status_exit(500); } + $guid = $a->argv[2]; - $importer = $r[0]; + $importer = dba::select('user', array(), array('guid' => $guid, 'account_expired' => false, 'account_removed' => false), array('limit' => 1)); + if (!dbm::is_result($importer)) { + http_status_exit(500); + } } // It is an application/x-www-form-urlencoded @@ -47,29 +40,34 @@ function receive_post(App $a) { $xml = urldecode($_POST['xml']); - logger('mod-diaspora: new salmon ' . $xml, LOGGER_DATA); + if (!$xml) { + $postdata = file_get_contents("php://input"); + if ($postdata == '') { + http_status_exit(500); + } - if(! $xml) - http_status_exit(500); - - logger('mod-diaspora: message is okay', LOGGER_DEBUG); - - $msg = Diaspora::decode($importer,$xml); + logger('mod-diaspora: message is in the new format', LOGGER_DEBUG); + $msg = Diaspora::decode_raw($importer, $postdata); + } else { + logger('mod-diaspora: message is in the old format', LOGGER_DEBUG); + $msg = Diaspora::decode($importer, $xml); + } logger('mod-diaspora: decoded', LOGGER_DEBUG); - logger('mod-diaspora: decoded msg: ' . print_r($msg,true), LOGGER_DATA); + logger('mod-diaspora: decoded msg: ' . print_r($msg, true), LOGGER_DATA); - if(! is_array($msg)) + if (!is_array($msg)) { http_status_exit(500); + } logger('mod-diaspora: dispatching', LOGGER_DEBUG); $ret = 0; - if($public) { + if ($public) { Diaspora::dispatch_public($msg); } else { - $ret = Diaspora::dispatch($importer,$msg); + $ret = Diaspora::dispatch($importer, $msg); } http_status_exit(($ret) ? $ret : 200); diff --git a/mod/redir.php b/mod/redir.php index 12f53900a7..366c398867 100644 --- a/mod/redir.php +++ b/mod/redir.php @@ -1,5 +1,7 @@ - - - Friendica - http://friendica.com/ - - - - http://status.net/wiki/TwitterCompatibleAPI - false - - - - - - '; -die(); + + + Friendica + http://friendica.com/ + + + + http://status.net/wiki/TwitterCompatibleAPI + false + + + + +'; + + killme(); } \ No newline at end of file diff --git a/mod/salmon.php b/mod/salmon.php index 10b1046b02..f42e05deaa 100644 --- a/mod/salmon.php +++ b/mod/salmon.php @@ -1,5 +1,7 @@ argc > 1) ? intval($a->argv[1]) : 0); diff --git a/mod/smilies.php b/mod/smilies.php index 4d8ab6bcaa..289ad887f9 100644 --- a/mod/smilies.php +++ b/mod/smilies.php @@ -3,19 +3,19 @@ /** * @file mod/smilies.php */ +use Friendica\App; require_once("include/Smilies.php"); function smilies_content(App $a) { - if ($a->argv[1]==="json"){ + if ($a->argv[1] === "json") { $tmp = Smilies::get_list(); $results = array(); - for($i = 0; $i < count($tmp['texts']); $i++) { + for ($i = 0; $i < count($tmp['texts']); $i++) { $results[] = array('text' => $tmp['texts'][$i], 'icon' => $tmp['icons'][$i]); } json_return_and_die($results); - } - else { - return Smilies::replace('',true); + } else { + return Smilies::replace('', true); } } diff --git a/mod/starred.php b/mod/starred.php index 46d3fcff66..e1b38cfc4c 100644 --- a/mod/starred.php +++ b/mod/starred.php @@ -1,5 +1,6 @@ $a->config["sitename"], - "network" => FRIENDICA_PLATFORM, - "version" => FRIENDICA_VERSION."-".DB_UPDATE_VERSION, - "registrations_open" => ($a->config['register_policy'] != 0), - "total_users" => get_config('nodeinfo','total_users'), - "active_users_halfyear" => get_config('nodeinfo','active_users_halfyear'), - "active_users_monthly" => get_config('nodeinfo','active_users_monthly'), - "local_posts" => get_config('nodeinfo','local_posts') - ); + "name" => $a->config["sitename"], + "network" => FRIENDICA_PLATFORM, + "version" => FRIENDICA_VERSION . "-" . DB_UPDATE_VERSION, + "registrations_open" => ($a->config['register_policy'] != 0), + "total_users" => get_config('nodeinfo', 'total_users'), + "active_users_halfyear" => get_config('nodeinfo', 'active_users_halfyear'), + "active_users_monthly" => get_config('nodeinfo', 'active_users_monthly'), + "local_posts" => get_config('nodeinfo', 'local_posts') + ); $statistics["services"] = array(); $statistics["services"]["appnet"] = plugin_enabled("appnet"); @@ -53,7 +56,7 @@ function statistics_json_init(App $a) { $statistics["wordpress"] = $statistics["services"]["wordpress"]; header("Content-Type: application/json"); - echo json_encode($statistics, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES); - logger("statistics_init: printed ".print_r($statistics, true), LOGGER_DATA); + echo json_encode($statistics, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + logger("statistics_init: printed " . print_r($statistics, true), LOGGER_DATA); killme(); } diff --git a/mod/subthread.php b/mod/subthread.php index 646a4230c5..0745fc0eef 100644 --- a/mod/subthread.php +++ b/mod/subthread.php @@ -1,10 +1,11 @@ tab where wanted function uexport_content(App $a) { if ($a->argc > 1) { header("Content-type: application/json"); - header('Content-Disposition: attachment; filename="'.$a->user['nickname'].'.'.$a->argv[1].'"'); - switch($a->argv[1]) { + header('Content-Disposition: attachment; filename="' . $a->user['nickname'] . '.' . $a->argv[1] . '"'); + switch ($a->argv[1]) { case "backup": uexport_all($a); killme(); @@ -51,9 +52,9 @@ function _uexport_multirow($query) { $result = array(); $r = q($query); if (dbm::is_result($r)) { - foreach($r as $rr){ + foreach ($r as $rr) { $p = array(); - foreach($rr as $k => $v) { + foreach ($rr as $k => $v) { $p[$k] = $v; } $result[] = $p; @@ -66,8 +67,8 @@ function _uexport_row($query) { $result = array(); $r = q($query); if (dbm::is_result($r)) { - foreach($r as $rr) { - foreach($rr as $k => $v) { + foreach ($r as $rr) { + foreach ($rr as $k => $v) { $result[$k] = $v; } } @@ -75,39 +76,38 @@ function _uexport_row($query) { return $result; } - -function uexport_account($a){ +function uexport_account($a) { $user = _uexport_row( - sprintf( "SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval(local_user()) ) + sprintf("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval(local_user())) ); $contact = _uexport_multirow( - sprintf( "SELECT * FROM `contact` WHERE `uid` = %d ",intval(local_user()) ) + sprintf("SELECT * FROM `contact` WHERE `uid` = %d ", intval(local_user())) ); - $profile =_uexport_multirow( - sprintf( "SELECT * FROM `profile` WHERE `uid` = %d ", intval(local_user()) ) + $profile = _uexport_multirow( + sprintf("SELECT * FROM `profile` WHERE `uid` = %d ", intval(local_user())) ); $photo = _uexport_multirow( - sprintf( "SELECT * FROM `photo` WHERE uid = %d AND profile = 1", intval(local_user()) ) + sprintf("SELECT * FROM `photo` WHERE uid = %d AND profile = 1", intval(local_user())) ); foreach ($photo as &$p) { $p['data'] = bin2hex($p['data']); } $pconfig = _uexport_multirow( - sprintf( "SELECT * FROM `pconfig` WHERE uid = %d",intval(local_user()) ) + sprintf("SELECT * FROM `pconfig` WHERE uid = %d", intval(local_user())) ); $group = _uexport_multirow( - sprintf( "SELECT * FROM `group` WHERE uid = %d",intval(local_user()) ) + sprintf("SELECT * FROM `group` WHERE uid = %d", intval(local_user())) ); $group_member = _uexport_multirow( - sprintf( "SELECT * FROM `group_member` WHERE uid = %d",intval(local_user()) ) + sprintf("SELECT * FROM `group_member` WHERE uid = %d", intval(local_user())) ); $output = array( @@ -150,13 +150,8 @@ function uexport_all(App $a) { intval($x), intval(500) ); - /*if (dbm::is_result($r)) { - foreach($r as $rr) - foreach($rr as $k => $v) - $item[][$k] = $v; - }*/ $output = array('item' => $r); - echo json_encode($output)."\n"; + echo json_encode($output) . "\n"; } } diff --git a/mod/uimport.php b/mod/uimport.php index 336ec1c2dd..b9bde23880 100644 --- a/mod/uimport.php +++ b/mod/uimport.php @@ -1,75 +1,77 @@ -config['register_policy']) { - case REGISTER_OPEN: - $blocked = 0; - $verified = 1; - break; - - case REGISTER_APPROVE: - $blocked = 1; - $verified = 0; - break; - - default: - case REGISTER_CLOSED: - if ((! x($_SESSION,'authenticated') && (! x($_SESSION,'administrator')))) { - notice( t('Permission denied.') . EOL ); - return; - } - $blocked = 1; - $verified = 0; - break; - } - - if (x($_FILES,'accountfile')){ - /// @TODO Pass $blocked / $verified, send email to admin on REGISTER_APPROVE - import_account($a, $_FILES['accountfile']); - return; - } -} - -function uimport_content(App $a) { - - if ((! local_user()) && ($a->config['register_policy'] == REGISTER_CLOSED)) { - notice("Permission denied." . EOL); - return; - } - - $max_dailies = intval(get_config('system','max_daily_registrations')); - if ($max_dailies) { - $r = q("select count(*) as total from user where register_date > UTC_TIMESTAMP - INTERVAL 1 day"); - if ($r && $r[0]['total'] >= $max_dailies) { - logger('max daily registrations exceeded.'); - notice( t('This site has exceeded the number of allowed daily account registrations. Please try again tomorrow.') . EOL); - return; - } - } - - - if (x($_SESSION,'theme')) { - unset($_SESSION['theme']); - } - if (x($_SESSION,'mobile-theme')) { - unset($_SESSION['mobile-theme']); - } - - $tpl = get_markup_template("uimport.tpl"); - return replace_macros($tpl, array( - '$regbutt' => t('Import'), - '$import' => array( - 'title' => t("Move account"), - 'intro' => t("You can import an account from another Friendica server."), - 'instruct' => t("You need to export your account from the old server and upload it here. We will recreate your old account here with all your contacts. We will try also to inform your friends that you moved here."), - 'warn' => t("This feature is experimental. We can't import contacts from the OStatus network (GNU Social/Statusnet) or from Diaspora"), - 'field' => array('accountfile', t('Account file'),'', t('To export your account, go to "Settings->Export your personal data" and select "Export account"')), - ), - )); -} +config['register_policy']) { + case REGISTER_OPEN: + $blocked = 0; + $verified = 1; + break; + + case REGISTER_APPROVE: + $blocked = 1; + $verified = 0; + break; + + default: + case REGISTER_CLOSED: + if ((!x($_SESSION, 'authenticated') && (!x($_SESSION, 'administrator')))) { + notice(t('Permission denied.') . EOL); + return; + } + $blocked = 1; + $verified = 0; + break; + } + + if (x($_FILES, 'accountfile')) { + /// @TODO Pass $blocked / $verified, send email to admin on REGISTER_APPROVE + import_account($a, $_FILES['accountfile']); + return; + } +} + +function uimport_content(App $a) { + + if ((!local_user()) && ($a->config['register_policy'] == REGISTER_CLOSED)) { + notice("Permission denied." . EOL); + return; + } + + $max_dailies = intval(get_config('system', 'max_daily_registrations')); + if ($max_dailies) { + $r = q("select count(*) as total from user where register_date > UTC_TIMESTAMP - INTERVAL 1 day"); + if ($r && $r[0]['total'] >= $max_dailies) { + logger('max daily registrations exceeded.'); + notice(t('This site has exceeded the number of allowed daily account registrations. Please try again tomorrow.') . EOL); + return; + } + } + + + if (x($_SESSION, 'theme')) { + unset($_SESSION['theme']); + } + if (x($_SESSION, 'mobile-theme')) { + unset($_SESSION['mobile-theme']); + } + + $tpl = get_markup_template("uimport.tpl"); + return replace_macros($tpl, array( + '$regbutt' => t('Import'), + '$import' => array( + 'title' => t("Move account"), + 'intro' => t("You can import an account from another Friendica server."), + 'instruct' => t("You need to export your account from the old server and upload it here. We will recreate your old account here with all your contacts. We will try also to inform your friends that you moved here."), + 'warn' => t("This feature is experimental. We can't import contacts from the OStatus network (GNU Social/Statusnet) or from Diaspora"), + 'field' => array('accountfile', t('Account file'), '', t('To export your account, go to "Settings->Export your personal data" and select "Export account"')), + ), + )); +} diff --git a/mod/update_community.php b/mod/update_community.php index 9a39489dcf..f0e96af48c 100644 --- a/mod/update_community.php +++ b/mod/update_community.php @@ -2,6 +2,8 @@ // See update_profile.php for documentation +use Friendica\App; + require_once("mod/community.php"); function update_community_content(App $a) { diff --git a/mod/update_display.php b/mod/update_display.php index 86f4db8259..b8538a256b 100644 --- a/mod/update_display.php +++ b/mod/update_display.php @@ -2,6 +2,8 @@ // See update_profile.php for documentation +use Friendica\App; + require_once("mod/display.php"); require_once("include/group.php"); diff --git a/mod/update_network.php b/mod/update_network.php index 869973ace4..42172486d8 100644 --- a/mod/update_network.php +++ b/mod/update_network.php @@ -2,6 +2,8 @@ // See update_profile.php for documentation +use Friendica\App; + require_once("mod/network.php"); require_once("include/group.php"); diff --git a/mod/update_notes.php b/mod/update_notes.php index d27cc4ca96..9fc8861551 100644 --- a/mod/update_notes.php +++ b/mod/update_notes.php @@ -5,6 +5,8 @@ * Purpose: AJAX synchronisation of notes page */ +use Friendica\App; + require_once("mod/notes.php"); function update_notes_content(App $a) { diff --git a/mod/update_profile.php b/mod/update_profile.php index b77a9cdcfc..5b15f06d30 100644 --- a/mod/update_profile.php +++ b/mod/update_profile.php @@ -5,6 +5,8 @@ * Purpose: AJAX synchronisation of profile page */ +use Friendica\App; + require_once("mod/profile.php"); function update_profile_content(App $a) { diff --git a/mod/videos.php b/mod/videos.php index 269d537854..2ee73c211d 100644 --- a/mod/videos.php +++ b/mod/videos.php @@ -1,11 +1,13 @@ argc > 1) diff --git a/mod/viewcontacts.php b/mod/viewcontacts.php index 5912f6cc77..f7bf912fdf 100644 --- a/mod/viewcontacts.php +++ b/mod/viewcontacts.php @@ -1,4 +1,7 @@ $name), array('limit' => 1)); if (! dbm::is_result($r)) { killme(); } - $salmon_key = salmon_key($r[0]['spubkey']); + $salmon_key = salmon_key($r['spubkey']); header('Access-Control-Allow-Origin: *'); header("Content-type: text/xml"); @@ -33,19 +33,19 @@ function xrd_init(App $a) { $tpl = get_markup_template('xrd_diaspora.tpl'); $dspr = replace_macros($tpl,array( '$baseurl' => App::get_baseurl(), - '$dspr_guid' => $r[0]['guid'], - '$dspr_key' => base64_encode(pemtorsa($r[0]['pubkey'])) + '$dspr_guid' => $r['guid'], + '$dspr_key' => base64_encode(pemtorsa($r['pubkey'])) )); $tpl = get_markup_template('xrd_person.tpl'); - $profile_url = App::get_baseurl().'/profile/'.$r[0]['nickname']; + $profile_url = App::get_baseurl().'/profile/'.$r['nickname']; if ($acct) { $alias = $profile_url; } else { - $alias = 'acct:'.$r[0]['nickname'].'@'.$a->get_hostname(); + $alias = 'acct:'.$r['nickname'].'@'.$a->get_hostname(); if ($a->get_path()) { $alias .= '/'.$a->get_path(); @@ -53,25 +53,25 @@ function xrd_init(App $a) { } $o = replace_macros($tpl, array( - '$nick' => $r[0]['nickname'], + '$nick' => $r['nickname'], '$accturi' => $uri, '$alias' => $alias, '$profile_url' => $profile_url, - '$hcard_url' => App::get_baseurl() . '/hcard/' . $r[0]['nickname'], - '$atom' => App::get_baseurl() . '/dfrn_poll/' . $r[0]['nickname'], - '$zot_post' => App::get_baseurl() . '/post/' . $r[0]['nickname'], - '$poco_url' => App::get_baseurl() . '/poco/' . $r[0]['nickname'], - '$photo' => App::get_baseurl() . '/photo/profile/' . $r[0]['uid'] . '.jpg', + '$hcard_url' => App::get_baseurl() . '/hcard/' . $r['nickname'], + '$atom' => App::get_baseurl() . '/dfrn_poll/' . $r['nickname'], + '$zot_post' => App::get_baseurl() . '/post/' . $r['nickname'], + '$poco_url' => App::get_baseurl() . '/poco/' . $r['nickname'], + '$photo' => App::get_baseurl() . '/photo/profile/' . $r['uid'] . '.jpg', '$dspr' => $dspr, - '$salmon' => App::get_baseurl() . '/salmon/' . $r[0]['nickname'], - '$salmen' => App::get_baseurl() . '/salmon/' . $r[0]['nickname'] . '/mention', + '$salmon' => App::get_baseurl() . '/salmon/' . $r['nickname'], + '$salmen' => App::get_baseurl() . '/salmon/' . $r['nickname'] . '/mention', '$subscribe' => App::get_baseurl() . '/follow?url={uri}', '$modexp' => 'data:application/magic-public-key,' . $salmon_key, - '$bigkey' => salmon_key($r[0]['pubkey']), + '$bigkey' => salmon_key($r['pubkey']), )); - $arr = array('user' => $r[0], 'xml' => $o); + $arr = array('user' => $r, 'xml' => $o); call_hooks('personal_xrd', $arr); echo $arr['xml']; diff --git a/object/BaseObject.php b/object/BaseObject.php index 2666dc1de5..15c7d8dc65 100644 --- a/object/BaseObject.php +++ b/object/BaseObject.php @@ -14,7 +14,7 @@ class BaseObject { /** * Get the app - * + * * Same as get_app from boot.php */ public function get_app() { @@ -33,4 +33,3 @@ class BaseObject { self::$app = $app; } } -?> diff --git a/object/Conversation.php b/object/Conversation.php index eb5b3b9b48..f03b3b1c1b 100644 --- a/object/Conversation.php +++ b/object/Conversation.php @@ -164,4 +164,3 @@ class Conversation extends BaseObject { return false; } } -?> diff --git a/object/Item.php b/object/Item.php index b693520b93..9e8b4738e2 100644 --- a/object/Item.php +++ b/object/Item.php @@ -112,7 +112,7 @@ class Item extends BaseObject { $conv = $this->get_conversation(); - $lock = ((($item['private'] == 1) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid']) + $lock = ((($item['private'] == 1) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid']) || strlen($item['deny_cid']) || strlen($item['deny_gid'])))) ? t('Private Message') : false); @@ -242,17 +242,14 @@ class Item extends BaseObject { 'classundo' => (($item['starred']) ? "" : "hidden"), 'starred' => t('starred'), ); - $r = q("SELECT `ignored` FROM `thread` WHERE `uid` = %d AND `iid` = %d LIMIT 1", - intval($item['uid']), - intval($item['id']) - ); + $r = dba::select('thread', array('ignored'), array('uid' => $item['uid'], 'iid' => $item['id']), array('limit' => 1)); if (dbm::is_result($r)) { $ignore = array( 'do' => t("ignore thread"), 'undo' => t("unignore thread"), 'toggle' => t("toggle ignore status"), - 'classdo' => (($r[0]['ignored']) ? "hidden" : ""), - 'classundo' => (($r[0]['ignored']) ? "" : "hidden"), + 'classdo' => (($r['ignored']) ? "hidden" : ""), + 'classundo' => (($r['ignored']) ? "" : "hidden"), 'ignored' => t('ignored'), ); } @@ -754,20 +751,20 @@ class Item extends BaseObject { if ((! $owner_linkmatch) && (! $alias_linkmatch) && (! $owner_namematch)) { // The author url doesn't match the owner (typically the contact) - // and also doesn't match the contact alias. - // The name match is a hack to catch several weird cases where URLs are + // and also doesn't match the contact alias. + // The name match is a hack to catch several weird cases where URLs are // all over the park. It can be tricked, but this prevents you from // seeing "Bob Smith to Bob Smith via Wall-to-wall" and you know darn - // well that it's the same Bob Smith. + // well that it's the same Bob Smith. - // But it could be somebody else with the same name. It just isn't highly likely. + // But it could be somebody else with the same name. It just isn't highly likely. $this->owner_photo = $this->get_data_value('owner-avatar'); $this->owner_name = $this->get_data_value('owner-name'); $this->wall_to_wall = true; // If it is our contact, use a friendly redirect link - if ((link_compare($this->get_data_value('owner-link'),$this->get_data_value('url'))) + if ((link_compare($this->get_data_value('owner-link'),$this->get_data_value('url'))) && ($this->get_data_value('network') === NETWORK_DFRN)) { $this->owner_url = $this->get_redirect_url(); } else { @@ -807,5 +804,3 @@ class Item extends BaseObject { } } -/// @TODO These are discouraged and should be removed: -?> diff --git a/src/App.php b/src/App.php new file mode 100644 index 0000000000..15538e88da --- /dev/null +++ b/src/App.php @@ -0,0 +1,980 @@ + '', + 'videowidth' => 425, + 'videoheight' => 350, + 'force_max_items' => 0, + 'thread_allow' => true, + 'stylesheet' => '', + 'template_engine' => 'smarty3', + ); + + /** + * @brief An array of registered template engines ('name'=>'class name') + */ + public $template_engines = array(); + + /** + * @brief An array of instanced template engines ('name'=>'instance') + */ + public $template_engine_instance = array(); + public $process_id; + private $ldelim = array( + 'internal' => '', + 'smarty3' => '{{' + ); + private $rdelim = array( + 'internal' => '', + 'smarty3' => '}}' + ); + private $scheme; + private $hostname; + private $db; + private $curl_code; + private $curl_content_type; + private $curl_headers; + private $cached_profile_image; + private $cached_profile_picdate; + private static $a; + + /** + * @brief App constructor. + * + * @param string $basepath Path to the app base folder + */ + function __construct($basepath) { + + global $default_timezone; + + $hostname = ''; + + if (file_exists('.htpreconfig.php')) { + include '.htpreconfig.php'; + } + + $this->timezone = ((x($default_timezone)) ? $default_timezone : 'UTC'); + + date_default_timezone_set($this->timezone); + + $this->performance['start'] = microtime(true); + $this->performance['database'] = 0; + $this->performance['database_write'] = 0; + $this->performance['network'] = 0; + $this->performance['file'] = 0; + $this->performance['rendering'] = 0; + $this->performance['parser'] = 0; + $this->performance['marktime'] = 0; + $this->performance['markstart'] = microtime(true); + + $this->callstack['database'] = array(); + $this->callstack['database_write'] = array(); + $this->callstack['network'] = array(); + $this->callstack['file'] = array(); + $this->callstack['rendering'] = array(); + $this->callstack['parser'] = array(); + + $this->config = array(); + $this->page = array(); + $this->pager = array(); + + $this->query_string = ''; + + $this->process_id = uniqid('log', true); + + startup(); + + $this->scheme = 'http'; + + if ((x($_SERVER, 'HTTPS') && $_SERVER['HTTPS']) || + (x($_SERVER, 'HTTP_FORWARDED') && preg_match('/proto=https/', $_SERVER['HTTP_FORWARDED'])) || + (x($_SERVER, 'HTTP_X_FORWARDED_PROTO') && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') || + (x($_SERVER, 'HTTP_X_FORWARDED_SSL') && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') || + (x($_SERVER, 'FRONT_END_HTTPS') && $_SERVER['FRONT_END_HTTPS'] == 'on') || + (x($_SERVER, 'SERVER_PORT') && (intval($_SERVER['SERVER_PORT']) == 443)) // XXX: reasonable assumption, but isn't this hardcoding too much? + ) { + $this->scheme = 'https'; + } + + if (x($_SERVER, 'SERVER_NAME')) { + $this->hostname = $_SERVER['SERVER_NAME']; + + if (x($_SERVER, 'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) { + $this->hostname .= ':' . $_SERVER['SERVER_PORT']; + } + /* + * Figure out if we are running at the top of a domain + * or in a sub-directory and adjust accordingly + */ + + /// @TODO This kind of escaping breaks syntax-highlightning on CoolEdit (Midnight Commander) + $path = trim(dirname($_SERVER['SCRIPT_NAME']), '/\\'); + if (isset($path) && strlen($path) && ($path != $this->path)) { + $this->path = $path; + } + } + + if ($hostname != '') { + $this->hostname = $hostname; + } + + if (! static::directory_usable($basepath, false)) { + throw new \Exception('Basepath ' . $basepath . ' isn\'t usable.'); + } + + $this->basepath = rtrim($basepath, DIRECTORY_SEPARATOR); + + set_include_path( + get_include_path() . PATH_SEPARATOR + . $this->basepath . DIRECTORY_SEPARATOR . 'include' . PATH_SEPARATOR + . $this->basepath . DIRECTORY_SEPARATOR . 'library' . PATH_SEPARATOR + . $this->basepath . DIRECTORY_SEPARATOR . 'library/langdet' . PATH_SEPARATOR + . $this->basepath); + + + if (is_array($_SERVER['argv']) && $_SERVER['argc'] > 1 && substr(end($_SERVER['argv']), 0, 4) == 'http') { + $this->set_baseurl(array_pop($_SERVER['argv'])); + $_SERVER['argc'] --; + } + + if ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 9) === 'pagename=') { + $this->query_string = substr($_SERVER['QUERY_STRING'], 9); + + // removing trailing / - maybe a nginx problem + $this->query_string = ltrim($this->query_string, '/'); + } elseif ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 2) === 'q=') { + $this->query_string = substr($_SERVER['QUERY_STRING'], 2); + + // removing trailing / - maybe a nginx problem + $this->query_string = ltrim($this->query_string, '/'); + } + + if (x($_GET, 'pagename')) { + $this->cmd = trim($_GET['pagename'], '/\\'); + } elseif (x($_GET, 'q')) { + $this->cmd = trim($_GET['q'], '/\\'); + } + + // fix query_string + $this->query_string = str_replace($this->cmd . '&', $this->cmd . '?', $this->query_string); + + // unix style "homedir" + if (substr($this->cmd, 0, 1) === '~') { + $this->cmd = 'profile/' . substr($this->cmd, 1); + } + + // Diaspora style profile url + if (substr($this->cmd, 0, 2) === 'u/') { + $this->cmd = 'profile/' . substr($this->cmd, 2); + } + + /* + * Break the URL path into C style argc/argv style arguments for our + * modules. Given "http://example.com/module/arg1/arg2", $this->argc + * will be 3 (integer) and $this->argv will contain: + * [0] => 'module' + * [1] => 'arg1' + * [2] => 'arg2' + * + * + * There will always be one argument. If provided a naked domain + * URL, $this->argv[0] is set to "home". + */ + + $this->argv = explode('/', $this->cmd); + $this->argc = count($this->argv); + if ((array_key_exists('0', $this->argv)) && strlen($this->argv[0])) { + $this->module = str_replace('.', '_', $this->argv[0]); + $this->module = str_replace('-', '_', $this->module); + } else { + $this->argc = 1; + $this->argv = array('home'); + $this->module = 'home'; + } + + // See if there is any page number information, and initialise pagination + $this->pager['page'] = ((x($_GET, 'page') && intval($_GET['page']) > 0) ? intval($_GET['page']) : 1); + $this->pager['itemspage'] = 50; + $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage']; + + if ($this->pager['start'] < 0) { + $this->pager['start'] = 0; + } + $this->pager['total'] = 0; + + // Detect mobile devices + $mobile_detect = new \Mobile_Detect(); + $this->is_mobile = $mobile_detect->isMobile(); + $this->is_tablet = $mobile_detect->isTablet(); + + // Friendica-Client + $this->is_friendica_app = ($_SERVER['HTTP_USER_AGENT'] == 'Apache-HttpClient/UNAVAILABLE (java 1.4)'); + + // Register template engines + $dc = get_declared_classes(); + foreach ($dc as $k) { + if (in_array('ITemplateEngine', class_implements($k))) { + $this->register_template_engine($k); + } + } + + self::$a = $this; + } + + /** + * @brief Returns the base filesystem path of the App + * + * It first checks for the internal variable, then for DOCUMENT_ROOT and + * finally for PWD + * + * @return string + */ + public static function get_basepath() { + if (isset($this)) { + $basepath = $this->basepath; + } + + if (! $basepath) { + $basepath = Config::get('system', 'basepath'); + } + + if (! $basepath && x($_SERVER, 'DOCUMENT_ROOT')) { + $basepath = $_SERVER['DOCUMENT_ROOT']; + } + + if (! $basepath && x($_SERVER, 'PWD')) { + $basepath = $_SERVER['PWD']; + } + + return $basepath; + } + + function get_scheme() { + return $this->scheme; + } + + /** + * @brief Retrieves the Friendica instance base URL + * + * This function assembles the base URL from multiple parts: + * - Protocol is determined either by the request or a combination of + * system.ssl_policy and the $ssl parameter. + * - Host name is determined either by system.hostname or inferred from request + * - Path is inferred from SCRIPT_NAME + * + * Note: $ssl parameter value doesn't directly correlate with the resulting protocol + * + * @param bool $ssl Whether to append http or https under SSL_POLICY_SELFSIGN + * @return string Friendica server base URL + */ + function get_baseurl($ssl = false) { + // Is the function called statically? + if (!(isset($this) && get_class($this) == __CLASS__)) { + return self::$a->get_baseurl($ssl); + } + + $scheme = $this->scheme; + + if (Config::get('system', 'ssl_policy') == SSL_POLICY_FULL) { + $scheme = 'https'; + } + + // Basically, we have $ssl = true on any links which can only be seen by a logged in user + // (and also the login link). Anything seen by an outsider will have it turned off. + + if (Config::get('system', 'ssl_policy') == SSL_POLICY_SELFSIGN) { + if ($ssl) { + $scheme = 'https'; + } else { + $scheme = 'http'; + } + } + + if (Config::get('config', 'hostname') != '') { + $this->hostname = Config::get('config', 'hostname'); + } + + return $scheme . '://' . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' ); + } + + /** + * @brief Initializes the baseurl components + * + * Clears the baseurl cache to prevent inconstistencies + * + * @param string $url + */ + function set_baseurl($url) { + $parsed = @parse_url($url); + + if ($parsed) { + $this->scheme = $parsed['scheme']; + + $hostname = $parsed['host']; + if (x($parsed, 'port')) { + $hostname .= ':' . $parsed['port']; + } + if (x($parsed, 'path')) { + $this->path = trim($parsed['path'], '\\/'); + } + + if (file_exists('.htpreconfig.php')) { + include '.htpreconfig.php'; + } + + if (Config::get('config', 'hostname') != '') { + $this->hostname = Config::get('config', 'hostname'); + } + + if (!isset($this->hostname) OR ( $this->hostname == '')) { + $this->hostname = $hostname; + } + } + } + + function get_hostname() { + if (Config::get('config', 'hostname') != '') { + $this->hostname = Config::get('config', 'hostname'); + } + + return $this->hostname; + } + + function set_hostname($h) { + $this->hostname = $h; + } + + function set_path($p) { + $this->path = trim(trim($p), '/'); + } + + function get_path() { + return $this->path; + } + + function set_pager_total($n) { + $this->pager['total'] = intval($n); + } + + function set_pager_itemspage($n) { + $this->pager['itemspage'] = ((intval($n) > 0) ? intval($n) : 0); + $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage']; + } + + function set_pager_page($n) { + $this->pager['page'] = $n; + $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage']; + } + + function init_pagehead() { + $interval = ((local_user()) ? PConfig::get(local_user(), 'system', 'update_interval') : 40000); + + // If the update is 'deactivated' set it to the highest integer number (~24 days) + if ($interval < 0) { + $interval = 2147483647; + } + + if ($interval < 10000) { + $interval = 40000; + } + + // compose the page title from the sitename and the + // current module called + if (!$this->module == '') { + $this->page['title'] = $this->config['sitename'] . ' (' . $this->module . ')'; + } else { + $this->page['title'] = $this->config['sitename']; + } + + /* put the head template at the beginning of page['htmlhead'] + * since the code added by the modules frequently depends on it + * being first + */ + if (!isset($this->page['htmlhead'])) { + $this->page['htmlhead'] = ''; + } + + // If we're using Smarty, then doing replace_macros() will replace + // any unrecognized variables with a blank string. Since we delay + // replacing $stylesheet until later, we need to replace it now + // with another variable name + if ($this->theme['template_engine'] === 'smarty3') { + $stylesheet = $this->get_template_ldelim('smarty3') . '$stylesheet' . $this->get_template_rdelim('smarty3'); + } else { + $stylesheet = '$stylesheet'; + } + + $shortcut_icon = Config::get('system', 'shortcut_icon'); + if ($shortcut_icon == '') { + $shortcut_icon = 'images/friendica-32.png'; + } + + $touch_icon = Config::get('system', 'touch_icon'); + if ($touch_icon == '') { + $touch_icon = 'images/friendica-128.png'; + } + + // get data wich is needed for infinite scroll on the network page + $invinite_scroll = infinite_scroll_data($this->module); + + $tpl = get_markup_template('head.tpl'); + $this->page['htmlhead'] = replace_macros($tpl, array( + '$baseurl' => $this->get_baseurl(), // FIXME for z_path!!!! + '$local_user' => local_user(), + '$generator' => 'Friendica' . ' ' . FRIENDICA_VERSION, + '$delitem' => t('Delete this item?'), + '$showmore' => t('show more'), + '$showfewer' => t('show fewer'), + '$update_interval' => $interval, + '$shortcut_icon' => $shortcut_icon, + '$touch_icon' => $touch_icon, + '$stylesheet' => $stylesheet, + '$infinite_scroll' => $invinite_scroll, + )) . $this->page['htmlhead']; + } + + function init_page_end() { + if (!isset($this->page['end'])) { + $this->page['end'] = ''; + } + $tpl = get_markup_template('end.tpl'); + $this->page['end'] = replace_macros($tpl, array( + '$baseurl' => $this->get_baseurl() // FIXME for z_path!!!! + )) . $this->page['end']; + } + + function set_curl_code($code) { + $this->curl_code = $code; + } + + function get_curl_code() { + return $this->curl_code; + } + + function set_curl_content_type($content_type) { + $this->curl_content_type = $content_type; + } + + function get_curl_content_type() { + return $this->curl_content_type; + } + + function set_curl_headers($headers) { + $this->curl_headers = $headers; + } + + function get_curl_headers() { + return $this->curl_headers; + } + + function get_cached_avatar_image($avatar_image) { + return $avatar_image; + } + + /** + * @brief Removes the baseurl from an url. This avoids some mixed content problems. + * + * @param string $orig_url + * + * @return string The cleaned url + */ + function remove_baseurl($orig_url) { + + // Is the function called statically? + if (!(isset($this) && get_class($this) == __CLASS__)) { + return self::$a->remove_baseurl($orig_url); + } + + // Remove the hostname from the url if it is an internal link + $nurl = normalise_link($orig_url); + $base = normalise_link($this->get_baseurl()); + $url = str_replace($base . '/', '', $nurl); + + // if it is an external link return the orignal value + if ($url == normalise_link($orig_url)) { + return $orig_url; + } else { + return $url; + } + } + + /** + * @brief Register template engine class + * + * If $name is '', is used class static property $class::$name + * + * @param string $class + * @param string $name + */ + function register_template_engine($class, $name = '') { + /// @TODO Really === and not just == ? + if ($name === '') { + $v = get_class_vars($class); + if (x($v, 'name')) + $name = $v['name']; + } + if ($name === '') { + echo "template engine $class cannot be registered without a name.\n"; + killme(); + } + $this->template_engines[$name] = $class; + } + + /** + * @brief Return template engine instance. + * + * If $name is not defined, return engine defined by theme, + * or default + * + * @param strin $name Template engine name + * @return object Template Engine instance + */ + function template_engine($name = '') { + /// @TODO really type-check included? + if ($name !== '') { + $template_engine = $name; + } else { + $template_engine = 'smarty3'; + if (x($this->theme, 'template_engine')) { + $template_engine = $this->theme['template_engine']; + } + } + + if (isset($this->template_engines[$template_engine])) { + if (isset($this->template_engine_instance[$template_engine])) { + return $this->template_engine_instance[$template_engine]; + } else { + $class = $this->template_engines[$template_engine]; + $obj = new $class; + $this->template_engine_instance[$template_engine] = $obj; + return $obj; + } + } + + echo "template engine $template_engine is not registered!\n"; + killme(); + } + + /** + * @brief Returns the active template engine. + * + * @return string + */ + function get_template_engine() { + return $this->theme['template_engine']; + } + + function set_template_engine($engine = 'smarty3') { + $this->theme['template_engine'] = $engine; + } + + function get_template_ldelim($engine = 'smarty3') { + return $this->ldelim[$engine]; + } + + function get_template_rdelim($engine = 'smarty3') { + return $this->rdelim[$engine]; + } + + function save_timestamp($stamp, $value) { + if (!isset($this->config['system']['profiler']) || !$this->config['system']['profiler']) { + return; + } + + $duration = (float) (microtime(true) - $stamp); + + if (!isset($this->performance[$value])) { + // Prevent ugly E_NOTICE + $this->performance[$value] = 0; + } + + $this->performance[$value] += (float) $duration; + $this->performance['marktime'] += (float) $duration; + + $callstack = $this->callstack(); + + if (!isset($this->callstack[$value][$callstack])) { + // Prevent ugly E_NOTICE + $this->callstack[$value][$callstack] = 0; + } + + $this->callstack[$value][$callstack] += (float) $duration; + } + + /** + * @brief Log active processes into the "process" table + */ + function start_process() { + $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1); + + $command = basename($trace[0]['file']); + + $this->remove_inactive_processes(); + + q('START TRANSACTION'); + + $r = q('SELECT `pid` FROM `process` WHERE `pid` = %d', intval(getmypid())); + if (!\dbm::is_result($r)) { + q("INSERT INTO `process` (`pid`,`command`,`created`) VALUES (%d, '%s', '%s')", intval(getmypid()), dbesc($command), dbesc(datetime_convert())); + } + q('COMMIT'); + } + + /** + * @brief Remove inactive processes + */ + function remove_inactive_processes() { + q('START TRANSACTION'); + + $r = q('SELECT `pid` FROM `process`'); + if (\dbm::is_result($r)) { + foreach ($r AS $process) { + if (!posix_kill($process['pid'], 0)) { + q('DELETE FROM `process` WHERE `pid` = %d', intval($process['pid'])); + } + } + } + q('COMMIT'); + } + + /** + * @brief Remove the active process from the "process" table + */ + function end_process() { + q('DELETE FROM `process` WHERE `pid` = %d', intval(getmypid())); + } + + /** + * @brief Returns a string with a callstack. Can be used for logging. + * + * @return string + */ + function callstack() { + $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 6); + + // We remove the first two items from the list since they contain data that we don't need. + array_shift($trace); + array_shift($trace); + + $callstack = array(); + foreach ($trace AS $func) { + $callstack[] = $func['function']; + } + + return implode(', ', $callstack); + } + + function get_useragent() { + return + FRIENDICA_PLATFORM . " '" . + FRIENDICA_CODENAME . "' " . + FRIENDICA_VERSION . '-' . + DB_UPDATE_VERSION . '; ' . + $this->get_baseurl(); + } + + function is_friendica_app() { + return $this->is_friendica_app; + } + + /** + * @brief Checks if the site is called via a backend process + * + * This isn't a perfect solution. But we need this check very early. + * So we cannot wait until the modules are loaded. + * + * @return bool Is it a known backend? + */ + function is_backend() { + static $backends = array(); + $backends[] = '_well_known'; + $backends[] = 'api'; + $backends[] = 'dfrn_notify'; + $backends[] = 'fetch'; + $backends[] = 'hcard'; + $backends[] = 'hostxrd'; + $backends[] = 'nodeinfo'; + $backends[] = 'noscrape'; + $backends[] = 'p'; + $backends[] = 'poco'; + $backends[] = 'post'; + $backends[] = 'proxy'; + $backends[] = 'pubsub'; + $backends[] = 'pubsubhubbub'; + $backends[] = 'receive'; + $backends[] = 'rsd_xml'; + $backends[] = 'salmon'; + $backends[] = 'statistics_json'; + $backends[] = 'xrd'; + + // Check if current module is in backend or backend flag is set + return (in_array($this->module, $backends) || $this->backend); + } + + /** + * @brief Checks if the maximum number of database processes is reached + * + * @return bool Is the limit reached? + */ + function max_processes_reached() { + + if ($this->is_backend()) { + $process = 'backend'; + $max_processes = Config::get('system', 'max_processes_backend'); + if (intval($max_processes) == 0) { + $max_processes = 5; + } + } else { + $process = 'frontend'; + $max_processes = Config::get('system', 'max_processes_frontend'); + if (intval($max_processes) == 0) { + $max_processes = 20; + } + } + + $processlist = \dbm::processlist(); + if ($processlist['list'] != '') { + logger('Processcheck: Processes: ' . $processlist['amount'] . ' - Processlist: ' . $processlist['list'], LOGGER_DEBUG); + + if ($processlist['amount'] > $max_processes) { + logger('Processcheck: Maximum number of processes for ' . $process . ' tasks (' . $max_processes . ') reached.', LOGGER_DEBUG); + return true; + } + } + return false; + } + + /** + * @brief Checks if the minimal memory is reached + * + * @return bool Is the memory limit reached? + */ + public function min_memory_reached() { + $min_memory = Config::get('system', 'min_memory', 0); + if ($min_memory == 0) { + return false; + } + + if (!is_readable('/proc/meminfo')) { + return false; + } + + $memdata = explode("\n", file_get_contents('/proc/meminfo')); + + $meminfo = array(); + foreach ($memdata as $line) { + list($key, $val) = explode(':', $line); + $meminfo[$key] = (int) trim(str_replace('kB', '', $val)); + $meminfo[$key] = (int) ($meminfo[$key] / 1024); + } + + if (!isset($meminfo['MemAvailable']) OR ! isset($meminfo['MemFree'])) { + return false; + } + + $free = $meminfo['MemAvailable'] + $meminfo['MemFree']; + + $reached = ($free < $min_memory); + + if ($reached) { + logger('Minimal memory reached: ' . $free . '/' . $meminfo['MemTotal'] . ' - limit ' . $min_memory, LOGGER_DEBUG); + } + + return $reached; + } + + /** + * @brief Checks if the maximum load is reached + * + * @return bool Is the load reached? + */ + function maxload_reached() { + + if ($this->is_backend()) { + $process = 'backend'; + $maxsysload = intval(Config::get('system', 'maxloadavg')); + if ($maxsysload < 1) { + $maxsysload = 50; + } + } else { + $process = 'frontend'; + $maxsysload = intval(Config::get('system', 'maxloadavg_frontend')); + if ($maxsysload < 1) { + $maxsysload = 50; + } + } + + $load = current_load(); + if ($load) { + if (intval($load) > $maxsysload) { + logger('system: load ' . $load . ' for ' . $process . ' tasks (' . $maxsysload . ') too high.'); + return true; + } + } + return false; + } + + function proc_run($args) { + + if (!function_exists('proc_open')) { + return; + } + + // If the last worker fork was less than 10 seconds before then don't fork another one. + // This should prevent the forking of masses of workers. + $cachekey = 'app:proc_run:started'; + $result = \Cache::get($cachekey); + + if (!is_null($result) AND ( time() - $result) < 10) { + return; + } + + // Set the timestamp of the last proc_run + \Cache::set($cachekey, time(), CACHE_MINUTE); + + array_unshift($args, ((x($this->config, 'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php')); + + // add baseurl to args. cli scripts can't construct it + $args[] = $this->get_baseurl(); + + for ($x = 0; $x < count($args); $x ++) { + $args[$x] = escapeshellarg($args[$x]); + } + + $cmdline = implode($args, ' '); + + if ($this->min_memory_reached()) { + return; + } + + if (Config::get('system', 'proc_windows')) { + $resource = proc_open('cmd /c start /b ' . $cmdline, array(), $foo, $this->get_basepath()); + } else { + $resource = proc_open($cmdline . ' &', array(), $foo, $this->get_basepath()); + } + if (!is_resource($resource)) { + logger('We got no resource for command ' . $cmdline, LOGGER_DEBUG); + return; + } + proc_close($resource); + } + + /** + * @brief Returns the system user that is executing the script + * + * This mostly returns something like "www-data". + * + * @return string system username + */ + static function systemuser() { + if (!function_exists('posix_getpwuid') OR ! function_exists('posix_geteuid')) { + return ''; + } + + $processUser = posix_getpwuid(posix_geteuid()); + return $processUser['name']; + } + + /** + * @brief Checks if a given directory is usable for the system + * + * @return boolean the directory is usable + */ + static function directory_usable($directory, $check_writable = true) { + if ($directory == '') { + logger('Directory is empty. This shouldn\'t happen.', LOGGER_DEBUG); + return false; + } + + if (!file_exists($directory)) { + logger('Path "' . $directory . '" does not exist for user ' . self::systemuser(), LOGGER_DEBUG); + return false; + } + if (is_file($directory)) { + logger('Path "' . $directory . '" is a file for user ' . self::systemuser(), LOGGER_DEBUG); + return false; + } + if (!is_dir($directory)) { + logger('Path "' . $directory . '" is not a directory for user ' . self::systemuser(), LOGGER_DEBUG); + return false; + } + if ($check_writable AND !is_writable($directory)) { + logger('Path "' . $directory . '" is not writable for user ' . self::systemuser(), LOGGER_DEBUG); + return false; + } + return true; + } +} diff --git a/include/Probe.php b/src/Network/Probe.php similarity index 65% rename from include/Probe.php rename to src/Network/Probe.php index f67a821f9d..8e0bc1ab4d 100644 --- a/include/Probe.php +++ b/src/Network/Probe.php @@ -1,16 +1,19 @@ Link to LRDD endpoint * 'lrdd-xml' => Link to LRDD endpoint in XML format @@ -62,7 +69,7 @@ class Probe { $ssl_url = "https://".$host."/.well-known/host-meta"; $url = "http://".$host."/.well-known/host-meta"; - $xrd_timeout = Config::get('system','xrd_timeout', 20); + $xrd_timeout = Config::get('system', 'xrd_timeout', 20); $redirects = 0; $ret = z_fetch_url($ssl_url, false, $redirects, array('timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml')); @@ -81,31 +88,37 @@ class Probe { $xml = $ret['body']; $xrd = parse_xml_string($xml, false); } - if (!is_object($xrd)) + if (!is_object($xrd)) { return false; + } - $links = xml::element_to_array($xrd); - if (!isset($links["xrd"]["link"])) + $links = \xml::element_to_array($xrd); + if (!isset($links["xrd"]["link"])) { return false; + } $xrd_data = array(); - foreach ($links["xrd"]["link"] AS $value => $link) { - if (isset($link["@attributes"])) + foreach ($links["xrd"]["link"] as $value => $link) { + if (isset($link["@attributes"])) { $attributes = $link["@attributes"]; - elseif ($value == "@attributes") + } elseif ($value == "@attributes") { $attributes = $link; - else + } else { continue; + } - if (($attributes["rel"] == "lrdd") AND - ($attributes["type"] == "application/xrd+xml")) + if (($attributes["rel"] == "lrdd") + AND ($attributes["type"] == "application/xrd+xml") + ) { $xrd_data["lrdd-xml"] = $attributes["template"]; - elseif (($attributes["rel"] == "lrdd") AND - ($attributes["type"] == "application/json")) + } elseif (($attributes["rel"] == "lrdd") + AND ($attributes["type"] == "application/json") + ) { $xrd_data["lrdd-json"] = $attributes["template"]; - elseif ($attributes["rel"] == "lrdd") + } elseif ($attributes["rel"] == "lrdd") { $xrd_data["lrdd"] = $attributes["template"]; + } } self::$baseurl = "http://".$host; @@ -129,25 +142,28 @@ class Probe { * a lengthy content page to scrape dfrn attributes * * @param string $webbie Address that should be probed - * @param string $hcard Link to the hcard - is returned by reference + * @param string $hcard_url Link to the hcard - is returned by reference * * @return string profile link */ - public static function webfinger_dfrn($webbie, &$hcard) { + public static function webfingerDfrn($webbie, &$hcard_url) { $profile_link = ''; $links = self::lrdd($webbie); - logger('webfinger_dfrn: '.$webbie.':'.print_r($links,true), LOGGER_DATA); + logger('webfingerDfrn: '.$webbie.':'.print_r($links, true), LOGGER_DATA); if (count($links)) { foreach ($links as $link) { - if ($link['@attributes']['rel'] === NAMESPACE_DFRN) + if ($link['@attributes']['rel'] === NAMESPACE_DFRN) { $profile_link = $link['@attributes']['href']; - if (($link['@attributes']['rel'] === NAMESPACE_OSTATUSSUB) AND ($profile_link == "")) + } + if (($link['@attributes']['rel'] === NAMESPACE_OSTATUSSUB) AND ($profile_link == "")) { $profile_link = 'stat:'.$link['@attributes']['template']; - if ($link['@attributes']['rel'] === 'http://microformats.org/profile/hcard') - $hcard = $link['@attributes']['href']; + } + if ($link['@attributes']['rel'] === 'http://microformats.org/profile/hcard') { + $hcard_url = $link['@attributes']['href']; + } } } return $profile_link; @@ -167,13 +183,18 @@ class Probe { public static function lrdd($uri) { $lrdd = self::xrd($uri); + $webfinger = null; if (!$lrdd) { $parts = @parse_url($uri); - if (!$parts) + if (!$parts) { return array(); + } $host = $parts["host"]; + if (isset($parts["port"])) { + $host .= ':'.$parts["port"]; + } $path_parts = explode("/", trim($parts["path"], "/")); @@ -185,15 +206,18 @@ class Probe { } while (!$lrdd AND (sizeof($path_parts) > 0)); } - if (!$lrdd) + if (!$lrdd) { return array(); + } - foreach ($lrdd AS $key => $link) { - if ($webfinger) + foreach ($lrdd as $key => $link) { + if ($webfinger) { continue; + } - if (!in_array($key, array("lrdd", "lrdd-xml", "lrdd-json"))) + if (!in_array($key, array("lrdd", "lrdd-xml", "lrdd-json"))) { continue; + } $path = str_replace('{uri}', urlencode($uri), $link); $webfinger = self::webfinger($path); @@ -217,19 +241,23 @@ class Probe { } } - if (!is_array($webfinger["links"])) + if (!is_array($webfinger["links"])) { return false; + } $data = array(); - foreach ($webfinger["links"] AS $link) + foreach ($webfinger["links"] as $link) { $data[] = array("@attributes" => $link); + } - if (is_array($webfinger["aliases"])) - foreach ($webfinger["aliases"] AS $alias) + if (is_array($webfinger["aliases"])) { + foreach ($webfinger["aliases"] as $alias) { $data[] = array("@attributes" => array("rel" => "alias", "href" => $alias)); + } + } return $data; } @@ -247,38 +275,44 @@ class Probe { public static function uri($uri, $network = "", $uid = 0, $cache = true) { if ($cache) { - $result = Cache::get("probe_url:".$network.":".$uri); + $result = \Cache::get("probe_url:".$network.":".$uri); if (!is_null($result)) { return $result; } } - if ($uid == 0) + if ($uid == 0) { $uid = local_user(); + } $data = self::detect($uri, $network, $uid); - if (!isset($data["url"])) + if (!isset($data["url"])) { $data["url"] = $uri; + } - if ($data["photo"] != "") + if ($data["photo"] != "") { $data["baseurl"] = matching_url(normalise_link($data["baseurl"]), normalise_link($data["photo"])); - else + } else { $data["photo"] = App::get_baseurl().'/images/person-175.jpg'; + } if (!isset($data["name"]) OR ($data["name"] == "")) { - if (isset($data["nick"])) + if (isset($data["nick"])) { $data["name"] = $data["nick"]; + } - if ($data["name"] == "") + if ($data["name"] == "") { $data["name"] = $data["url"]; + } } if (!isset($data["nick"]) OR ($data["nick"] == "")) { $data["nick"] = strtolower($data["name"]); - if (strpos($data['nick'], ' ')) + if (strpos($data['nick'], ' ')) { $data['nick'] = trim(substr($data['nick'], 0, strpos($data['nick'], ' '))); + } } if (self::$baseurl != "") { @@ -289,17 +323,24 @@ class Probe { $data["network"] = NETWORK_PHANTOM; } - $data = self::rearrange_data($data); + $data = self::rearrangeData($data); // Only store into the cache if the value seems to be valid if (!in_array($data['network'], array(NETWORK_PHANTOM, NETWORK_MAIL))) { - Cache::set("probe_url:".$network.":".$uri, $data, CACHE_DAY); + \Cache::set("probe_url:".$network.":".$uri, $data, CACHE_DAY); /// @todo temporary fix - we need a real contact update function that updates only changing fields /// The biggest problem is the avatar picture that could have a reduced image size. /// It should only be updated if the existing picture isn't existing anymore. - if (($data['network'] != NETWORK_FEED) AND ($mode == PROBE_NORMAL) AND - $data["name"] AND $data["nick"] AND $data["url"] AND $data["addr"] AND $data["poll"]) + /// We only update the contact when it is no probing for a specific network. + if (($data['network'] != NETWORK_FEED) + AND ($network == "") + AND $data["name"] + AND $data["nick"] + AND $data["url"] + AND $data["addr"] + AND $data["poll"] + ) { q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `url` = '%s', `addr` = '%s', `notify` = '%s', `poll` = '%s', `alias` = '%s', `success_update` = '%s' WHERE `nurl` = '%s' AND NOT `self` AND `uid` = 0", @@ -312,7 +353,8 @@ class Probe { dbesc($data["alias"]), dbesc(datetime_convert()), dbesc(normalise_link($data['url'])) - ); + ); + } } return $data; @@ -333,9 +375,10 @@ class Probe { $parts = parse_url($uri); if (isset($parts["scheme"]) AND isset($parts["host"]) AND isset($parts["path"])) { - - /// @todo: Ports? $host = $parts["host"]; + if (isset($parts["port"])) { + $host .= ':'.$parts["port"]; + } if ($host == 'twitter.com') { return array("network" => NETWORK_TWITTER); @@ -357,10 +400,11 @@ class Probe { $nick = ltrim($nick, '@'); $addr = $nick."@".$host; + } elseif (strstr($uri, '@')) { // If the URI starts with "mailto:" then jump directly to the mail detection - if (strpos($url,'mailto:') !== false) { - $uri = str_replace('mailto:', '', $url); + if (strpos($uri, 'mailto:') !== false) { + $uri = str_replace('mailto:', '', $uri); return self::mail($uri, $uid); } @@ -370,8 +414,8 @@ class Probe { // Remove "acct:" from the URI $uri = str_replace('acct:', '', $uri); - $host = substr($uri,strpos($uri, '@') + 1); - $nick = substr($uri,0, strpos($uri, '@')); + $host = substr($uri, strpos($uri, '@') + 1); + $nick = substr($uri, 0, strpos($uri, '@')); if (strpos($uri, '@twitter.com')) { return array("network" => NETWORK_TWITTER); @@ -382,6 +426,7 @@ class Probe { return self::mail($uri, $uid); } $addr = $uri; + } else { return false; } @@ -390,7 +435,7 @@ class Probe { /// @todo Do we need the prefix "acct:" or "acct://"? - foreach ($lrdd AS $key => $link) { + foreach ($lrdd as $key => $link) { if ($webfinger) { continue; } @@ -427,32 +472,39 @@ class Probe { logger("Probing ".$uri, LOGGER_DEBUG); - if (in_array($network, array("", NETWORK_DFRN))) + if (in_array($network, array("", NETWORK_DFRN))) { $result = self::dfrn($webfinger); - if ((!$result AND ($network == "")) OR ($network == NETWORK_DIASPORA)) + } + if ((!$result AND ($network == "")) OR ($network == NETWORK_DIASPORA)) { $result = self::diaspora($webfinger); - if ((!$result AND ($network == "")) OR ($network == NETWORK_OSTATUS)) + } + if ((!$result AND ($network == "")) OR ($network == NETWORK_OSTATUS)) { $result = self::ostatus($webfinger); - if ((!$result AND ($network == "")) OR ($network == NETWORK_PUMPIO)) + } + if ((!$result AND ($network == "")) OR ($network == NETWORK_PUMPIO)) { $result = self::pumpio($webfinger); - if ((!$result AND ($network == "")) OR ($network == NETWORK_FEED)) + } + if ((!$result AND ($network == "")) OR ($network == NETWORK_FEED)) { $result = self::feed($uri); - else { + } else { // We overwrite the detected nick with our try if the previois routines hadn't detected it. // Additionally it is overwritten when the nickname doesn't make sense (contains spaces). - if ((!isset($result["nick"]) OR ($result["nick"] == "") OR (strstr($result["nick"], " "))) AND ($nick != "")) + if ((!isset($result["nick"]) OR ($result["nick"] == "") OR (strstr($result["nick"], " "))) AND ($nick != "")) { $result["nick"] = $nick; + } - if ((!isset($result["addr"]) OR ($result["addr"] == "")) AND ($addr != "")) + if ((!isset($result["addr"]) OR ($result["addr"] == "")) AND ($addr != "")) { $result["addr"] = $addr; + } } logger($uri." is ".$result["network"], LOGGER_DEBUG); if (!isset($result["baseurl"]) OR ($result["baseurl"] == "")) { $pos = strpos($result["url"], $host); - if ($pos) + if ($pos) { $result["baseurl"] = substr($result["url"], 0, $pos).$host; + } } return $result; @@ -469,7 +521,7 @@ class Probe { */ private function webfinger($url) { - $xrd_timeout = Config::get('system','xrd_timeout', 20); + $xrd_timeout = Config::get('system', 'xrd_timeout', 20); $redirects = 0; $ret = z_fetch_url($url, false, $redirects, array('timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml')); @@ -484,33 +536,38 @@ class Probe { // If it is not XML, maybe it is JSON $webfinger = json_decode($data, true); - if (!isset($webfinger["links"])) + if (!isset($webfinger["links"])) { return false; + } return $webfinger; } - $xrd_arr = xml::element_to_array($xrd); - if (!isset($xrd_arr["xrd"]["link"])) + $xrd_arr = \xml::element_to_array($xrd); + if (!isset($xrd_arr["xrd"]["link"])) { return false; + } $webfinger = array(); - if (isset($xrd_arr["xrd"]["subject"])) + if (isset($xrd_arr["xrd"]["subject"])) { $webfinger["subject"] = $xrd_arr["xrd"]["subject"]; + } - if (isset($xrd_arr["xrd"]["alias"])) + if (isset($xrd_arr["xrd"]["alias"])) { $webfinger["aliases"] = $xrd_arr["xrd"]["alias"]; + } $webfinger["links"] = array(); - foreach ($xrd_arr["xrd"]["link"] AS $value => $data) { - if (isset($data["@attributes"])) + foreach ($xrd_arr["xrd"]["link"] as $value => $data) { + if (isset($data["@attributes"])) { $attributes = $data["@attributes"]; - elseif ($value == "@attributes") + } elseif ($value == "@attributes") { $attributes = $data; - else + } else { continue; + } $webfinger["links"][] = $attributes; } @@ -523,13 +580,13 @@ class Probe { * "noscrape" is a faster alternative to fetch the data from the hcard. * This functionality was originally created for the directory. * - * @param string $noscrape Link to the noscrape page + * @param string $noscrape_url Link to the noscrape page * @param array $data The already fetched data * * @return array noscrape data */ - private function poll_noscrape($noscrape, $data) { - $ret = z_fetch_url($noscrape); + private function pollNoscrape($noscrape_url, $data) { + $ret = z_fetch_url($noscrape_url); if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) { return false; } @@ -539,51 +596,65 @@ class Probe { } $json = json_decode($content, true); - if (!is_array($json)) + if (!is_array($json)) { return false; + } - if (isset($json["fn"])) + if (isset($json["fn"])) { $data["name"] = $json["fn"]; + } - if (isset($json["addr"])) + if (isset($json["addr"])) { $data["addr"] = $json["addr"]; + } - if (isset($json["nick"])) + if (isset($json["nick"])) { $data["nick"] = $json["nick"]; + } - if (isset($json["comm"])) + if (isset($json["comm"])) { $data["community"] = $json["comm"]; + } if (isset($json["tags"])) { $keywords = implode(" ", $json["tags"]); - if ($keywords != "") + if ($keywords != "") { $data["keywords"] = $keywords; + } } $location = formatted_location($json); - if ($location) + if ($location) { $data["location"] = $location; + } - if (isset($json["about"])) + if (isset($json["about"])) { $data["about"] = $json["about"]; + } - if (isset($json["key"])) + if (isset($json["key"])) { $data["pubkey"] = $json["key"]; + } - if (isset($json["photo"])) + if (isset($json["photo"])) { $data["photo"] = $json["photo"]; + } - if (isset($json["dfrn-request"])) + if (isset($json["dfrn-request"])) { $data["request"] = $json["dfrn-request"]; + } - if (isset($json["dfrn-confirm"])) + if (isset($json["dfrn-confirm"])) { $data["confirm"] = $json["dfrn-confirm"]; + } - if (isset($json["dfrn-notify"])) + if (isset($json["dfrn-notify"])) { $data["notify"] = $json["dfrn-notify"]; + } - if (isset($json["dfrn-poll"])) + if (isset($json["dfrn-poll"])) { $data["poll"] = $json["dfrn-poll"]; + } return $data; } @@ -595,57 +666,67 @@ class Probe { * * @return int Number of errors */ - public static function valid_dfrn($data) { + public static function validDfrn($data) { $errors = 0; - if(!isset($data['key'])) + if (!isset($data['key'])) { $errors ++; - if(!isset($data['dfrn-request'])) + } + if (!isset($data['dfrn-request'])) { $errors ++; - if(!isset($data['dfrn-confirm'])) + } + if (!isset($data['dfrn-confirm'])) { $errors ++; - if(!isset($data['dfrn-notify'])) + } + if (!isset($data['dfrn-notify'])) { $errors ++; - if(!isset($data['dfrn-poll'])) + } + if (!isset($data['dfrn-poll'])) { $errors ++; + } return $errors; } /** * @brief Fetch data from a DFRN profile page and via "noscrape" * - * @param string $profile Link to the profile page + * @param string $profile_link Link to the profile page * * @return array profile data */ - public static function profile($profile) { + public static function profile($profile_link) { $data = array(); - logger("Check profile ".$profile, LOGGER_DEBUG); + logger("Check profile ".$profile_link, LOGGER_DEBUG); // Fetch data via noscrape - this is faster - $noscrape = str_replace(array("/hcard/", "/profile/"), "/noscrape/", $profile); - $data = self::poll_noscrape($noscrape, $data); + $noscrape_url = str_replace(array("/hcard/", "/profile/"), "/noscrape/", $profile_link); + $data = self::pollNoscrape($noscrape_url, $data); - if (!isset($data["notify"]) OR !isset($data["confirm"]) OR - !isset($data["request"]) OR !isset($data["poll"]) OR - !isset($data["poco"]) OR !isset($data["name"]) OR - !isset($data["photo"])) - $data = self::poll_hcard($profile, $data, true); + if (!isset($data["notify"]) + OR !isset($data["confirm"]) + OR !isset($data["request"]) + OR !isset($data["poll"]) + OR !isset($data["poco"]) + OR !isset($data["name"]) + OR !isset($data["photo"]) + ) { + $data = self::pollHcard($profile_link, $data, true); + } $prof_data = array(); - $prof_data["addr"] = $data["addr"]; - $prof_data["nick"] = $data["nick"]; + $prof_data["addr"] = $data["addr"]; + $prof_data["nick"] = $data["nick"]; $prof_data["dfrn-request"] = $data["request"]; $prof_data["dfrn-confirm"] = $data["confirm"]; - $prof_data["dfrn-notify"] = $data["notify"]; - $prof_data["dfrn-poll"] = $data["poll"]; - $prof_data["dfrn-poco"] = $data["poco"]; - $prof_data["photo"] = $data["photo"]; - $prof_data["fn"] = $data["name"]; - $prof_data["key"] = $data["pubkey"]; + $prof_data["dfrn-notify"] = $data["notify"]; + $prof_data["dfrn-poll"] = $data["poll"]; + $prof_data["dfrn-poco"] = $data["poco"]; + $prof_data["photo"] = $data["photo"]; + $prof_data["fn"] = $data["name"]; + $prof_data["key"] = $data["pubkey"]; - logger("Result for profile ".$profile.": ".print_r($prof_data, true), LOGGER_DEBUG); + logger("Result for profile ".$profile_link.": ".print_r($prof_data, true), LOGGER_DEBUG); return $prof_data; } @@ -659,48 +740,54 @@ class Probe { */ private function dfrn($webfinger) { - $hcard = ""; + $hcard_url = ""; $data = array(); - foreach ($webfinger["links"] AS $link) { - if (($link["rel"] == NAMESPACE_DFRN) AND ($link["href"] != "")) + foreach ($webfinger["links"] as $link) { + if (($link["rel"] == NAMESPACE_DFRN) AND ($link["href"] != "")) { $data["network"] = NETWORK_DFRN; - elseif (($link["rel"] == NAMESPACE_FEED) AND ($link["href"] != "")) + } elseif (($link["rel"] == NAMESPACE_FEED) AND ($link["href"] != "")) { $data["poll"] = $link["href"]; - elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") AND - ($link["type"] == "text/html") AND ($link["href"] != "")) + } elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") AND ($link["type"] == "text/html") AND ($link["href"] != "")) { $data["url"] = $link["href"]; - elseif (($link["rel"] == "http://microformats.org/profile/hcard") AND ($link["href"] != "")) - $hcard = $link["href"]; - elseif (($link["rel"] == NAMESPACE_POCO) AND ($link["href"] != "")) + } elseif (($link["rel"] == "http://microformats.org/profile/hcard") AND ($link["href"] != "")) { + $hcard_url = $link["href"]; + } elseif (($link["rel"] == NAMESPACE_POCO) AND ($link["href"] != "")) { $data["poco"] = $link["href"]; - elseif (($link["rel"] == "http://webfinger.net/rel/avatar") AND ($link["href"] != "")) + } elseif (($link["rel"] == "http://webfinger.net/rel/avatar") AND ($link["href"] != "")) { $data["photo"] = $link["href"]; - - elseif (($link["rel"] == "http://joindiaspora.com/seed_location") AND ($link["href"] != "")) + } elseif (($link["rel"] == "http://joindiaspora.com/seed_location") AND ($link["href"] != "")) { $data["baseurl"] = trim($link["href"], '/'); - elseif (($link["rel"] == "http://joindiaspora.com/guid") AND ($link["href"] != "")) + } elseif (($link["rel"] == "http://joindiaspora.com/guid") AND ($link["href"] != "")) { $data["guid"] = $link["href"]; - elseif (($link["rel"] == "diaspora-public-key") AND ($link["href"] != "")) { + } elseif (($link["rel"] == "diaspora-public-key") AND ($link["href"] != "")) { $data["pubkey"] = base64_decode($link["href"]); //if (strstr($data["pubkey"], 'RSA ') OR ($link["type"] == "RSA")) - if (strstr($data["pubkey"], 'RSA ')) + if (strstr($data["pubkey"], 'RSA ')) { $data["pubkey"] = rsatopem($data["pubkey"]); + } } } - if (!isset($data["network"]) OR ($hcard == "")) + if (!isset($data["network"]) OR ($hcard_url == "")) { return false; + } // Fetch data via noscrape - this is faster - $noscrape = str_replace("/hcard/", "/noscrape/", $hcard); - $data = self::poll_noscrape($noscrape, $data); + $noscrape_url = str_replace("/hcard/", "/noscrape/", $hcard_url); + $data = self::pollNoscrape($noscrape_url, $data); - if (isset($data["notify"]) AND isset($data["confirm"]) AND isset($data["request"]) AND - isset($data["poll"]) AND isset($data["name"]) AND isset($data["photo"])) + if (isset($data["notify"]) + AND isset($data["confirm"]) + AND isset($data["request"]) + AND isset($data["poll"]) + AND isset($data["name"]) + AND isset($data["photo"]) + ) { return $data; + } - $data = self::poll_hcard($hcard, $data, true); + $data = self::pollHcard($hcard_url, $data, true); return $data; } @@ -708,14 +795,14 @@ class Probe { /** * @brief Poll the hcard page (Diaspora and Friendica specific) * - * @param string $hcard Link to the hcard page + * @param string $hcard_url Link to the hcard page * @param array $data The already fetched data * @param boolean $dfrn Poll DFRN specific data * * @return array hcard data */ - private function poll_hcard($hcard, $data, $dfrn = false) { - $ret = z_fetch_url($hcard); + private function pollHcard($hcard_url, $data, $dfrn = false) { + $ret = z_fetch_url($hcard_url); if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) { return false; } @@ -724,15 +811,17 @@ class Probe { return false; } - $doc = new DOMDocument(); - if (!@$doc->loadHTML($content)) + $doc = new \DOMDocument(); + if (!@$doc->loadHTML($content)) { return false; + } - $xpath = new DomXPath($doc); + $xpath = new \DomXPath($doc); $vcards = $xpath->query("//div[contains(concat(' ', @class, ' '), ' vcard ')]"); - if (!is_object($vcards)) + if (!is_object($vcards)) { return false; + } if ($vcards->length > 0) { $vcard = $vcards->item(0); @@ -740,36 +829,42 @@ class Probe { // We have to discard the guid from the hcard in favour of the guid from lrdd // Reason: Hubzilla doesn't use the value "uid" in the hcard like Diaspora does. $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' uid ')]", $vcard); // */ - if (($search->length > 0) AND ($data["guid"] == "")) + if (($search->length > 0) AND ($data["guid"] == "")) { $data["guid"] = $search->item(0)->nodeValue; + } $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' nickname ')]", $vcard); // */ - if ($search->length > 0) + if ($search->length > 0) { $data["nick"] = $search->item(0)->nodeValue; + } $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' fn ')]", $vcard); // */ - if ($search->length > 0) + if ($search->length > 0) { $data["name"] = $search->item(0)->nodeValue; + } $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' searchable ')]", $vcard); // */ - if ($search->length > 0) + if ($search->length > 0) { $data["searchable"] = $search->item(0)->nodeValue; + } $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' key ')]", $vcard); // */ if ($search->length > 0) { $data["pubkey"] = $search->item(0)->nodeValue; - if (strstr($data["pubkey"], 'RSA ')) + if (strstr($data["pubkey"], 'RSA ')) { $data["pubkey"] = rsatopem($data["pubkey"]); + } } $search = $xpath->query("//*[@id='pod_location']", $vcard); // */ - if ($search->length > 0) + if ($search->length > 0) { $data["baseurl"] = trim($search->item(0)->nodeValue, "/"); + } } $avatar = array(); $photos = $xpath->query("//*[contains(concat(' ', @class, ' '), ' photo ') or contains(concat(' ', @class, ' '), ' avatar ')]", $vcard); // */ - foreach ($photos AS $photo) { + foreach ($photos as $photo) { $attr = array(); foreach ($photo->attributes as $attribute) { $attr[$attribute->name] = trim($attribute->value); @@ -788,26 +883,28 @@ class Probe { if (sizeof($avatar)) { ksort($avatar); - $data["photo"] = array_pop($avatar); + $data["photo"] = self::fixAvatar(array_pop($avatar), $data["baseurl"]); } if ($dfrn) { // Poll DFRN specific data $search = $xpath->query("//link[contains(concat(' ', @rel), ' dfrn-')]"); if ($search->length > 0) { - foreach ($search AS $link) { + foreach ($search as $link) { //$data["request"] = $search->item(0)->nodeValue; $attr = array(); - foreach ($link->attributes as $attribute) + foreach ($link->attributes as $attribute) { $attr[$attribute->name] = trim($attribute->value); + } $data[substr($attr["rel"], 5)] = $attr["href"]; } } // Older Friendica versions had used the "uid" field differently than newer versions - if ($data["nick"] == $data["guid"]) + if ($data["nick"] == $data["guid"]) { unset($data["guid"]); + } } @@ -823,59 +920,69 @@ class Probe { */ private function diaspora($webfinger) { - $hcard = ""; + $hcard_url = ""; $data = array(); - foreach ($webfinger["links"] AS $link) { - if (($link["rel"] == "http://microformats.org/profile/hcard") AND ($link["href"] != "")) - $hcard = $link["href"]; - elseif (($link["rel"] == "http://joindiaspora.com/seed_location") AND ($link["href"] != "")) + foreach ($webfinger["links"] as $link) { + if (($link["rel"] == "http://microformats.org/profile/hcard") AND ($link["href"] != "")) { + $hcard_url = $link["href"]; + } elseif (($link["rel"] == "http://joindiaspora.com/seed_location") AND ($link["href"] != "")) { $data["baseurl"] = trim($link["href"], '/'); - elseif (($link["rel"] == "http://joindiaspora.com/guid") AND ($link["href"] != "")) + } elseif (($link["rel"] == "http://joindiaspora.com/guid") AND ($link["href"] != "")) { $data["guid"] = $link["href"]; - elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") AND - ($link["type"] == "text/html") AND ($link["href"] != "")) + } elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") AND ($link["type"] == "text/html") AND ($link["href"] != "")) { $data["url"] = $link["href"]; - elseif (($link["rel"] == NAMESPACE_FEED) AND ($link["href"] != "")) + } elseif (($link["rel"] == NAMESPACE_FEED) AND ($link["href"] != "")) { $data["poll"] = $link["href"]; - elseif (($link["rel"] == NAMESPACE_POCO) AND ($link["href"] != "")) + } elseif (($link["rel"] == NAMESPACE_POCO) AND ($link["href"] != "")) { $data["poco"] = $link["href"]; - elseif (($link["rel"] == "salmon") AND ($link["href"] != "")) + } elseif (($link["rel"] == "salmon") AND ($link["href"] != "")) { $data["notify"] = $link["href"]; - elseif (($link["rel"] == "diaspora-public-key") AND ($link["href"] != "")) { + } elseif (($link["rel"] == "diaspora-public-key") AND ($link["href"] != "")) { $data["pubkey"] = base64_decode($link["href"]); //if (strstr($data["pubkey"], 'RSA ') OR ($link["type"] == "RSA")) - if (strstr($data["pubkey"], 'RSA ')) + if (strstr($data["pubkey"], 'RSA ')) { $data["pubkey"] = rsatopem($data["pubkey"]); + } } } - if (!isset($data["url"]) OR ($hcard == "")) + if (!isset($data["url"]) OR ($hcard_url == "")) { return false; + } - if (is_array($webfinger["aliases"])) - foreach ($webfinger["aliases"] AS $alias) - if (normalise_link($alias) != normalise_link($data["url"]) AND !strstr($alias, "@")) + if (is_array($webfinger["aliases"])) { + foreach ($webfinger["aliases"] as $alias) { + if (normalise_link($alias) != normalise_link($data["url"]) AND ! strstr($alias, "@")) { $data["alias"] = $alias; + } + } + } // Fetch further information from the hcard - $data = self::poll_hcard($hcard, $data); + $data = self::pollHcard($hcard_url, $data); - if (!$data) + if (!$data) { return false; + } - if (isset($data["url"]) AND isset($data["guid"]) AND isset($data["baseurl"]) AND - isset($data["pubkey"]) AND ($hcard != "")) { + if (isset($data["url"]) + AND isset($data["guid"]) + AND isset($data["baseurl"]) + AND isset($data["pubkey"]) + AND ($hcard_url != "") + ) { $data["network"] = NETWORK_DIASPORA; // The Diaspora handle must always be lowercase $data["addr"] = strtolower($data["addr"]); // We have to overwrite the detected value for "notify" since Hubzilla doesn't send it - $data["notify"] = $data["baseurl"]."/receive/users/".$data["guid"]; - $data["batch"] = $data["baseurl"]."/receive/public"; - } else + $data["notify"] = $data["baseurl"] . "/receive/users/" . $data["guid"]; + $data["batch"] = $data["baseurl"] . "/receive/public"; + } else { return false; + } return $data; } @@ -890,7 +997,7 @@ class Probe { private function ostatus($webfinger) { $data = array(); if (is_array($webfinger["aliases"])) { - foreach ($webfinger["aliases"] AS $alias) { + foreach ($webfinger["aliases"] as $alias) { if (strstr($alias, "@")) { $data["addr"] = str_replace('acct:', '', $alias); } @@ -901,9 +1008,11 @@ class Probe { $data["addr"] = str_replace('acct:', '', $webfinger["subject"]); } $pubkey = ""; - foreach ($webfinger["links"] AS $link) { - if (($link["rel"] == "http://webfinger.net/rel/profile-page") AND - ($link["type"] == "text/html") AND ($link["href"] != "")) { + foreach ($webfinger["links"] as $link) { + if (($link["rel"] == "http://webfinger.net/rel/profile-page") + AND ($link["type"] == "text/html") + AND ($link["href"] != "") + ) { $data["url"] = $link["href"]; } elseif (($link["rel"] == "salmon") AND ($link["href"] != "")) { $data["notify"] = $link["href"]; @@ -931,13 +1040,15 @@ class Probe { if (sizeof($key) >= 3) { $m = base64url_decode($key[1]); $e = base64url_decode($key[2]); - $data["pubkey"] = metopem($m,$e); + $data["pubkey"] = metopem($m, $e); } } } - if (isset($data["notify"]) AND isset($data["pubkey"]) AND - isset($data["poll"]) AND isset($data["url"])) { + if (isset($data["notify"]) AND isset($data["pubkey"]) + AND isset($data["poll"]) + AND isset($data["url"]) + ) { $data["network"] = NETWORK_OSTATUS; } else { return false; @@ -948,7 +1059,7 @@ class Probe { return false; } $feed = $ret['body']; - $feed_data = feed_import($feed,$dummy1,$dummy2, $dummy3, true); + $feed_data = feed_import($feed, $dummy1, $dummy2, $dummy3, true); if (!$feed_data) { return false; } @@ -959,7 +1070,7 @@ class Probe { $data["nick"] = $feed_data["header"]["author-nick"]; } if ($feed_data["header"]["author-avatar"] != "") { - $data["photo"] = ostatus::fix_avatar($feed_data["header"]["author-avatar"], $data["url"]); + $data["photo"] = self::fixAvatar($feed_data["header"]["author-avatar"], $data["url"]); } if ($feed_data["header"]["author-id"] != "") { $data["alias"] = $feed_data["header"]["author-id"]; @@ -982,31 +1093,36 @@ class Probe { /** * @brief Fetch data from a pump.io profile page * - * @param string $profile Link to the profile page + * @param string $profile_link Link to the profile page * * @return array profile data */ - private function pumpio_profile_data($profile) { + private function pumpioProfileData($profile_link) { - $doc = new DOMDocument(); - if (!@$doc->loadHTMLFile($profile)) + $doc = new \DOMDocument(); + if (!@$doc->loadHTMLFile($profile_link)) { return false; + } - $xpath = new DomXPath($doc); + $xpath = new \DomXPath($doc); $data = array(); // This is ugly - but pump.io doesn't seem to know a better way for it $data["name"] = trim($xpath->query("//h1[@class='media-header']")->item(0)->nodeValue); $pos = strpos($data["name"], chr(10)); - if ($pos) + if ($pos) { $data["name"] = trim(substr($data["name"], 0, $pos)); + } $avatar = $xpath->query("//img[@class='img-rounded media-object']")->item(0); - if ($avatar) - foreach ($avatar->attributes as $attribute) - if ($attribute->name == "src") + if ($avatar) { + foreach ($avatar->attributes as $attribute) { + if ($attribute->name == "src") { $data["photo"] = trim($attribute->value); + } + } + } $data["location"] = $xpath->query("//p[@class='location']")->item(0)->nodeValue; $data["about"] = $xpath->query("//p[@class='summary']")->item(0)->nodeValue; @@ -1024,32 +1140,38 @@ class Probe { private function pumpio($webfinger) { $data = array(); - foreach ($webfinger["links"] AS $link) { - if (($link["rel"] == "http://webfinger.net/rel/profile-page") AND - ($link["type"] == "text/html") AND ($link["href"] != "")) + foreach ($webfinger["links"] as $link) { + if (($link["rel"] == "http://webfinger.net/rel/profile-page") + AND ($link["type"] == "text/html") + AND ($link["href"] != "") + ) { $data["url"] = $link["href"]; - elseif (($link["rel"] == "activity-inbox") AND ($link["href"] != "")) + } elseif (($link["rel"] == "activity-inbox") AND ($link["href"] != "")) { $data["notify"] = $link["href"]; - elseif (($link["rel"] == "activity-outbox") AND ($link["href"] != "")) + } elseif (($link["rel"] == "activity-outbox") AND ($link["href"] != "")) { $data["poll"] = $link["href"]; - elseif (($link["rel"] == "dialback") AND ($link["href"] != "")) + } elseif (($link["rel"] == "dialback") AND ($link["href"] != "")) { $data["dialback"] = $link["href"]; + } } - if (isset($data["poll"]) AND isset($data["notify"]) AND - isset($data["dialback"]) AND isset($data["url"])) { - + if (isset($data["poll"]) AND isset($data["notify"]) + AND isset($data["dialback"]) + AND isset($data["url"]) + ) { // by now we use these fields only for the network type detection // So we unset all data that isn't used at the moment unset($data["dialback"]); $data["network"] = NETWORK_PUMPIO; - } else + } else { return false; + } - $profile_data = self::pumpio_profile_data($data["url"]); + $profile_data = self::pumpioProfileData($data["url"]); - if (!$profile_data) + if (!$profile_data) { return false; + } $data = array_merge($data, $profile_data); @@ -1063,31 +1185,36 @@ class Probe { * * @return string feed link */ - private function get_feed_link($url) { - $doc = new DOMDocument(); + private function getFeedLink($url) { + $doc = new \DOMDocument(); - if (!@$doc->loadHTMLFile($url)) + if (!@$doc->loadHTMLFile($url)) { return false; + } - $xpath = new DomXPath($doc); + $xpath = new \DomXPath($doc); //$feeds = $xpath->query("/html/head/link[@type='application/rss+xml']"); $feeds = $xpath->query("/html/head/link[@type='application/rss+xml' and @rel='alternate']"); - if (!is_object($feeds)) + if (!is_object($feeds)) { return false; + } - if ($feeds->length == 0) + if ($feeds->length == 0) { return false; + } $feed_url = ""; - foreach ($feeds AS $feed) { + foreach ($feeds as $feed) { $attr = array(); - foreach ($feed->attributes as $attribute) - $attr[$attribute->name] = trim($attribute->value); + foreach ($feed->attributes as $attribute) { + $attr[$attribute->name] = trim($attribute->value); + } - if ($feed_url == "") + if ($feed_url == "") { $feed_url = $attr["href"]; + } } return $feed_url; @@ -1110,36 +1237,43 @@ class Probe { $feed_data = feed_import($feed, $dummy1, $dummy2, $dummy3, true); if (!$feed_data) { - if (!$probe) + if (!$probe) { return false; + } - $feed_url = self::get_feed_link($url); + $feed_url = self::getFeedLink($url); - if (!$feed_url) + if (!$feed_url) { return false; + } return self::feed($feed_url, false); } - if ($feed_data["header"]["author-name"] != "") + if ($feed_data["header"]["author-name"] != "") { $data["name"] = $feed_data["header"]["author-name"]; + } - if ($feed_data["header"]["author-nick"] != "") + if ($feed_data["header"]["author-nick"] != "") { $data["nick"] = $feed_data["header"]["author-nick"]; + } - if ($feed_data["header"]["author-avatar"] != "") + if ($feed_data["header"]["author-avatar"] != "") { $data["photo"] = $feed_data["header"]["author-avatar"]; + } - if ($feed_data["header"]["author-id"] != "") + if ($feed_data["header"]["author-id"] != "") { $data["alias"] = $feed_data["header"]["author-id"]; + } $data["url"] = $url; $data["poll"] = $url; - if ($feed_data["header"]["author-link"] != "") + if ($feed_data["header"]["author-link"] != "") { $data["baseurl"] = $feed_data["header"]["author-link"]; - else + } else { $data["baseurl"] = $data["url"]; + } $data["network"] = NETWORK_FEED; @@ -1156,59 +1290,64 @@ class Probe { */ private function mail($uri, $uid) { - if (!validate_email($uri)) + if (!validate_email($uri)) { return false; + } $x = q("SELECT `prvkey` FROM `user` WHERE `uid` = %d LIMIT 1", intval($uid)); $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1", intval($uid)); - if (dbm::is_result($x) && dbm::is_result($r)) { + if (\dbm::is_result($x) && \dbm::is_result($r)) { $mailbox = construct_mailbox_name($r[0]); $password = ''; - openssl_private_decrypt(hex2bin($r[0]['pass']), $password,$x[0]['prvkey']); - $mbox = email_connect($mailbox,$r[0]['user'], $password); - if(!mbox) + openssl_private_decrypt(hex2bin($r[0]['pass']), $password, $x[0]['prvkey']); + $mbox = email_connect($mailbox, $r[0]['user'], $password); + if (!mbox) { return false; + } } $msgs = email_poll($mbox, $uri); logger('searching '.$uri.', '.count($msgs).' messages found.', LOGGER_DEBUG); - if (!count($msgs)) + if (!count($msgs)) { return false; + } + + $phost = substr($uri, strpos($uri, '@') + 1); $data = array(); - - $data["addr"] = $uri; + $data["addr"] = $uri; $data["network"] = NETWORK_MAIL; - $data["name"] = substr($uri, 0, strpos($uri,'@')); - $data["nick"] = $data["name"]; - $data["photo"] = avatar_img($uri); - - $phost = substr($uri, strpos($uri,'@') + 1); - $data["url"] = 'http://'.$phost."/".$data["nick"]; - $data["notify"] = 'smtp '.random_string(); - $data["poll"] = 'email '.random_string(); + $data["name"] = substr($uri, 0, strpos($uri, '@')); + $data["nick"] = $data["name"]; + $data["photo"] = avatar_img($uri); + $data["url"] = 'http://'.$phost."/".$data["nick"]; + $data["notify"] = 'smtp '.random_string(); + $data["poll"] = 'email '.random_string(); $x = email_msg_meta($mbox, $msgs[0]); - if(stristr($x[0]->from, $uri)) + if (stristr($x[0]->from, $uri)) { $adr = imap_rfc822_parse_adrlist($x[0]->from, ''); - elseif(stristr($x[0]->to, $uri)) + } elseif (stristr($x[0]->to, $uri)) { $adr = imap_rfc822_parse_adrlist($x[0]->to, ''); - if(isset($adr)) { - foreach($adr as $feadr) { - if((strcasecmp($feadr->mailbox, $data["name"]) == 0) + } + if (isset($adr)) { + foreach ($adr as $feadr) { + if ((strcasecmp($feadr->mailbox, $data["name"]) == 0) &&(strcasecmp($feadr->host, $phost) == 0) - && (strlen($feadr->personal))) { - + && (strlen($feadr->personal)) + ) { $personal = imap_mime_header_decode($feadr->personal); $data["name"] = ""; - foreach($personal as $perspart) - if ($perspart->charset != "default") + foreach ($personal as $perspart) { + if ($perspart->charset != "default") { $data["name"] .= iconv($perspart->charset, 'UTF-8//IGNORE', $perspart->text); - else + } else { $data["name"] .= $perspart->text; + } + } $data["name"] = notags($data["name"]); } @@ -1218,5 +1357,40 @@ class Probe { return $data; } + + /** + * @brief Mix two paths together to possibly fix missing parts + * + * @param string $avatar Path to the avatar + * @param string $base Another path that is hopefully complete + * + * @return string fixed avatar path + */ + public static function fixAvatar($avatar, $base) { + $base_parts = parse_url($base); + + // Remove all parts that could create a problem + unset($base_parts['path']); + unset($base_parts['query']); + unset($base_parts['fragment']); + + $avatar_parts = parse_url($avatar); + + // Now we mix them + $parts = array_merge($base_parts, $avatar_parts); + + // And put them together again + $scheme = isset($parts['scheme']) ? $parts['scheme'] . '://' : ''; + $host = isset($parts['host']) ? $parts['host'] : ''; + $port = isset($parts['port']) ? ':' . $parts['port'] : ''; + $path = isset($parts['path']) ? $parts['path'] : ''; + $query = isset($parts['query']) ? '?' . $parts['query'] : ''; + $fragment = isset($parts['fragment']) ? '#' . $parts['fragment'] : ''; + + $fixed = $scheme.$host.$port.$path.$query.$fragment; + + logger('Base: '.$base.' - Avatar: '.$avatar.' - Fixed: '.$fixed, LOGGER_DATA); + + return $fixed; + } } -?> diff --git a/src/ParseUrl.php b/src/ParseUrl.php index e9ac527a1a..943725ffe0 100644 --- a/src/ParseUrl.php +++ b/src/ParseUrl.php @@ -7,7 +7,7 @@ namespace Friendica; -use \Friendica\Core\Config; +use Friendica\Core\Config; require_once("include/network.php"); require_once("include/Photo.php"); diff --git a/tests/xss_filter_test.php b/tests/xss_filter_test.php index 3fb6ac3109..5bc8e0ad3f 100644 --- a/tests/xss_filter_test.php +++ b/tests/xss_filter_test.php @@ -1,7 +1,7 @@ I want to break\n this!11!"; - $xml=xmlify($text); + $xml=xmlify($text); $retext=unxmlify($text); $this->assertEquals($text, $retext); } - - /** - * xmlify and put in a document - */ - public function testXmlifyDocument() { - $tag="I want to break"; + + /** + * xmlify and put in a document + */ + public function testXmlifyDocument() { + $tag="I want to break"; $xml=xmlify($tag); - $text=''.$xml.''; - - $xml_parser=xml_parser_create(); + $text=''.$xml.''; + + $xml_parser=xml_parser_create(); //should be possible to parse it - $values=array(); $index=array(); - $this->assertEquals(1, xml_parse_into_struct($xml_parser, $text, $values, $index)); - - $this->assertEquals(array('TEXT'=>array(0)), - $index); - $this->assertEquals(array(array('tag'=>'TEXT', 'type'=>'complete', 'level'=>1, 'value'=>$tag)), + $values=array(); $index=array(); + $this->assertEquals(1, xml_parse_into_struct($xml_parser, $text, $values, $index)); + + $this->assertEquals(array('TEXT'=>array(0)), + $index); + $this->assertEquals(array(array('tag'=>'TEXT', 'type'=>'complete', 'level'=>1, 'value'=>$tag)), $values); - - xml_parser_free($xml_parser); + + xml_parser_free($xml_parser); } /** @@ -68,4 +68,3 @@ class AntiXSSTest extends PHPUnit_Framework_TestCase { //get_mentions //get_contact_block, bis Zeile 538 } -?> diff --git a/update.php b/update.php index 8da76336fc..e3b1c31b33 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ diff --git a/util/credits.txt b/util/credits.txt index 31ec44bc0a..92d8aca92c 100644 --- a/util/credits.txt +++ b/util/credits.txt @@ -43,6 +43,7 @@ Daria Początek David David Martín Miranda David Rabel +Denis Chenu Devlon Duthie Diego Souza Domovoy diff --git a/util/daemon.php b/util/daemon.php index 266ddcd754..4accef3960 100644 --- a/util/daemon.php +++ b/util/daemon.php @@ -98,4 +98,3 @@ while (true) { // Now sleep for 5 minutes sleep(300); } -?> diff --git a/util/db_update.php b/util/db_update.php index 32b44e6d00..1e717e9875 100644 --- a/util/db_update.php +++ b/util/db_update.php @@ -1,14 +1,17 @@ \n" "Language-Team: LANGUAGE \n" @@ -18,154 +18,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" -#: boot.php:976 -msgid "Delete this item?" -msgstr "" - -#: boot.php:977 include/ForumManager.php:119 include/contact_widgets.php:253 -#: include/items.php:2254 mod/content.php:624 object/Item.php:420 -#: view/theme/vier/theme.php:255 -msgid "show more" -msgstr "" - -#: boot.php:978 -msgid "show fewer" -msgstr "" - -#: boot.php:1667 -#, php-format -msgid "Update %s failed. See error logs." -msgstr "" - -#: boot.php:1779 -msgid "Create a New Account" -msgstr "" - -#: boot.php:1780 include/nav.php:109 mod/register.php:289 -msgid "Register" -msgstr "" - -#: boot.php:1804 include/nav.php:78 view/theme/frio/theme.php:243 -msgid "Logout" -msgstr "" - -#: boot.php:1805 include/nav.php:95 mod/bookmarklet.php:12 -msgid "Login" -msgstr "" - -#: boot.php:1807 mod/lostpass.php:161 -msgid "Nickname or Email: " -msgstr "" - -#: boot.php:1808 -msgid "Password: " -msgstr "" - -#: boot.php:1809 -msgid "Remember me" -msgstr "" - -#: boot.php:1812 -msgid "Or login using OpenID: " -msgstr "" - -#: boot.php:1818 -msgid "Forgot your password?" -msgstr "" - -#: boot.php:1819 mod/lostpass.php:110 -msgid "Password Reset" -msgstr "" - -#: boot.php:1821 -msgid "Website Terms of Service" -msgstr "" - -#: boot.php:1822 -msgid "terms of service" -msgstr "" - -#: boot.php:1824 -msgid "Website Privacy Policy" -msgstr "" - -#: boot.php:1825 -msgid "privacy policy" -msgstr "" - -#: include/Contact.php:387 include/Contact.php:400 include/Contact.php:445 -#: include/conversation.php:970 include/conversation.php:986 -#: mod/allfriends.php:68 mod/directory.php:157 mod/dirfind.php:209 -#: mod/match.php:73 mod/suggest.php:82 -msgid "View Profile" -msgstr "" - -#: include/Contact.php:401 include/contact_widgets.php:32 -#: include/conversation.php:983 mod/allfriends.php:69 mod/contacts.php:610 -#: mod/dirfind.php:210 mod/follow.php:106 mod/match.php:74 mod/suggest.php:83 -msgid "Connect/Follow" -msgstr "" - -#: include/Contact.php:444 include/conversation.php:969 -msgid "View Status" -msgstr "" - -#: include/Contact.php:446 include/conversation.php:971 -msgid "View Photos" -msgstr "" - -#: include/Contact.php:447 include/conversation.php:972 -msgid "Network Posts" -msgstr "" - -#: include/Contact.php:448 include/conversation.php:973 -msgid "View Contact" -msgstr "" - -#: include/Contact.php:449 -msgid "Drop Contact" -msgstr "" - -#: include/Contact.php:450 include/conversation.php:974 -msgid "Send PM" -msgstr "" - -#: include/Contact.php:451 include/conversation.php:978 -msgid "Poke" -msgstr "" - -#: include/Contact.php:828 -msgid "Organisation" -msgstr "" - -#: include/Contact.php:831 -msgid "News" -msgstr "" - -#: include/Contact.php:834 -msgid "Forum" -msgstr "" - -#: include/ForumManager.php:114 include/nav.php:131 include/text.php:1027 -#: view/theme/vier/theme.php:250 +#: include/ForumManager.php:114 include/nav.php:131 include/text.php:1093 +#: view/theme/vier/theme.php:254 msgid "Forums" msgstr "" -#: include/ForumManager.php:116 view/theme/vier/theme.php:252 +#: include/ForumManager.php:116 view/theme/vier/theme.php:256 msgid "External link to forum" msgstr "" +#: include/ForumManager.php:119 include/contact_widgets.php:269 +#: include/items.php:2450 mod/content.php:624 object/Item.php:420 +#: view/theme/vier/theme.php:259 boot.php:1000 +msgid "show more" +msgstr "" + #: include/NotificationsManager.php:153 msgid "System" msgstr "" -#: include/NotificationsManager.php:160 include/nav.php:158 mod/admin.php:421 +#: include/NotificationsManager.php:160 include/nav.php:158 mod/admin.php:517 #: view/theme/frio/theme.php:253 msgid "Network" msgstr "" -#: include/NotificationsManager.php:167 mod/network.php:829 -#: mod/profiles.php:695 +#: include/NotificationsManager.php:167 mod/network.php:832 +#: mod/profiles.php:696 msgid "Personal" msgstr "" @@ -231,128 +109,807 @@ msgid "New Follower" msgstr "" #: include/Photo.php:1038 include/Photo.php:1054 include/Photo.php:1062 -#: include/Photo.php:1087 include/message.php:146 mod/item.php:462 -#: mod/wall_upload.php:216 mod/wall_upload.php:230 mod/wall_upload.php:237 +#: include/Photo.php:1087 include/message.php:146 mod/wall_upload.php:249 +#: mod/item.php:467 msgid "Wall Photos" msgstr "" -#: include/acl_selectors.php:341 +#: include/delivery.php:427 +msgid "(no subject)" +msgstr "" + +#: include/delivery.php:439 include/enotify.php:43 +msgid "noreply" +msgstr "" + +#: include/like.php:27 include/conversation.php:153 include/diaspora.php:1576 +#, php-format +msgid "%1$s likes %2$s's %3$s" +msgstr "" + +#: include/like.php:31 include/like.php:36 include/conversation.php:156 +#, php-format +msgid "%1$s doesn't like %2$s's %3$s" +msgstr "" + +#: include/like.php:41 +#, php-format +msgid "%1$s is attending %2$s's %3$s" +msgstr "" + +#: include/like.php:46 +#, php-format +msgid "%1$s is not attending %2$s's %3$s" +msgstr "" + +#: include/like.php:51 +#, php-format +msgid "%1$s may attend %2$s's %3$s" +msgstr "" + +#: include/like.php:178 include/conversation.php:141 +#: include/conversation.php:293 include/text.php:1872 mod/subthread.php:88 +#: mod/tagger.php:62 +msgid "photo" +msgstr "" + +#: include/like.php:178 include/conversation.php:136 +#: include/conversation.php:146 include/conversation.php:288 +#: include/conversation.php:297 include/diaspora.php:1580 mod/subthread.php:88 +#: mod/tagger.php:62 +msgid "status" +msgstr "" + +#: include/like.php:180 include/conversation.php:133 +#: include/conversation.php:285 include/text.php:1870 +msgid "event" +msgstr "" + +#: include/message.php:15 include/message.php:169 +msgid "[no subject]" +msgstr "" + +#: include/nav.php:35 mod/navigation.php:19 +msgid "Nothing new here" +msgstr "" + +#: include/nav.php:39 mod/navigation.php:23 +msgid "Clear notifications" +msgstr "" + +#: include/nav.php:40 include/text.php:1083 +msgid "@name, !forum, #tags, content" +msgstr "" + +#: include/nav.php:78 view/theme/frio/theme.php:243 boot.php:1867 +msgid "Logout" +msgstr "" + +#: include/nav.php:78 view/theme/frio/theme.php:243 +msgid "End this session" +msgstr "" + +#: include/nav.php:81 include/identity.php:769 mod/contacts.php:645 +#: mod/contacts.php:841 view/theme/frio/theme.php:246 +msgid "Status" +msgstr "" + +#: include/nav.php:81 include/nav.php:161 view/theme/frio/theme.php:246 +msgid "Your posts and conversations" +msgstr "" + +#: include/nav.php:82 include/identity.php:622 include/identity.php:744 +#: include/identity.php:777 mod/contacts.php:647 mod/contacts.php:849 +#: mod/newmember.php:32 mod/profperm.php:105 view/theme/frio/theme.php:247 +msgid "Profile" +msgstr "" + +#: include/nav.php:82 view/theme/frio/theme.php:247 +msgid "Your profile page" +msgstr "" + +#: include/nav.php:83 include/identity.php:785 mod/fbrowser.php:31 +#: view/theme/frio/theme.php:248 +msgid "Photos" +msgstr "" + +#: include/nav.php:83 view/theme/frio/theme.php:248 +msgid "Your photos" +msgstr "" + +#: include/nav.php:84 include/identity.php:793 include/identity.php:796 +#: view/theme/frio/theme.php:249 +msgid "Videos" +msgstr "" + +#: include/nav.php:84 view/theme/frio/theme.php:249 +msgid "Your videos" +msgstr "" + +#: include/nav.php:85 include/nav.php:149 include/identity.php:805 +#: include/identity.php:816 mod/cal.php:270 mod/events.php:374 +#: view/theme/frio/theme.php:250 view/theme/frio/theme.php:254 +msgid "Events" +msgstr "" + +#: include/nav.php:85 view/theme/frio/theme.php:250 +msgid "Your events" +msgstr "" + +#: include/nav.php:86 +msgid "Personal notes" +msgstr "" + +#: include/nav.php:86 +msgid "Your personal notes" +msgstr "" + +#: include/nav.php:95 mod/bookmarklet.php:12 boot.php:1868 +msgid "Login" +msgstr "" + +#: include/nav.php:95 +msgid "Sign in" +msgstr "" + +#: include/nav.php:105 +msgid "Home Page" +msgstr "" + +#: include/nav.php:109 mod/register.php:289 boot.php:1844 +msgid "Register" +msgstr "" + +#: include/nav.php:109 +msgid "Create an account" +msgstr "" + +#: include/nav.php:115 mod/help.php:47 view/theme/vier/theme.php:297 +msgid "Help" +msgstr "" + +#: include/nav.php:115 +msgid "Help and documentation" +msgstr "" + +#: include/nav.php:119 +msgid "Apps" +msgstr "" + +#: include/nav.php:119 +msgid "Addon applications, utilities, games" +msgstr "" + +#: include/nav.php:123 include/text.php:1080 mod/search.php:149 +msgid "Search" +msgstr "" + +#: include/nav.php:123 +msgid "Search site content" +msgstr "" + +#: include/nav.php:126 include/text.php:1088 +msgid "Full Text" +msgstr "" + +#: include/nav.php:127 include/text.php:1089 +msgid "Tags" +msgstr "" + +#: include/nav.php:128 include/nav.php:192 include/identity.php:838 +#: include/identity.php:841 include/text.php:1090 mod/contacts.php:800 +#: mod/contacts.php:861 mod/viewcontacts.php:121 view/theme/frio/theme.php:257 +msgid "Contacts" +msgstr "" + +#: include/nav.php:143 include/nav.php:145 mod/community.php:32 +msgid "Community" +msgstr "" + +#: include/nav.php:143 +msgid "Conversations on this site" +msgstr "" + +#: include/nav.php:145 +msgid "Conversations on the network" +msgstr "" + +#: include/nav.php:149 include/identity.php:808 include/identity.php:819 +#: view/theme/frio/theme.php:254 +msgid "Events and Calendar" +msgstr "" + +#: include/nav.php:152 +msgid "Directory" +msgstr "" + +#: include/nav.php:152 +msgid "People directory" +msgstr "" + +#: include/nav.php:154 +msgid "Information" +msgstr "" + +#: include/nav.php:154 +msgid "Information about this friendica instance" +msgstr "" + +#: include/nav.php:158 view/theme/frio/theme.php:253 +msgid "Conversations from your friends" +msgstr "" + +#: include/nav.php:159 +msgid "Network Reset" +msgstr "" + +#: include/nav.php:159 +msgid "Load Network page with no filters" +msgstr "" + +#: include/nav.php:166 +msgid "Friend Requests" +msgstr "" + +#: include/nav.php:169 mod/notifications.php:96 +msgid "Notifications" +msgstr "" + +#: include/nav.php:170 +msgid "See all notifications" +msgstr "" + +#: include/nav.php:171 mod/settings.php:906 +msgid "Mark as seen" +msgstr "" + +#: include/nav.php:171 +msgid "Mark all system notifications seen" +msgstr "" + +#: include/nav.php:175 mod/message.php:179 view/theme/frio/theme.php:255 +msgid "Messages" +msgstr "" + +#: include/nav.php:175 view/theme/frio/theme.php:255 +msgid "Private mail" +msgstr "" + +#: include/nav.php:176 +msgid "Inbox" +msgstr "" + +#: include/nav.php:177 +msgid "Outbox" +msgstr "" + +#: include/nav.php:178 mod/message.php:16 +msgid "New Message" +msgstr "" + +#: include/nav.php:181 +msgid "Manage" +msgstr "" + +#: include/nav.php:181 +msgid "Manage other pages" +msgstr "" + +#: include/nav.php:184 mod/settings.php:81 +msgid "Delegations" +msgstr "" + +#: include/nav.php:184 mod/delegate.php:130 +msgid "Delegate Page Management" +msgstr "" + +#: include/nav.php:186 mod/newmember.php:22 mod/settings.php:111 +#: mod/admin.php:1618 mod/admin.php:1894 view/theme/frio/theme.php:256 +msgid "Settings" +msgstr "" + +#: include/nav.php:186 view/theme/frio/theme.php:256 +msgid "Account settings" +msgstr "" + +#: include/nav.php:189 include/identity.php:290 +msgid "Profiles" +msgstr "" + +#: include/nav.php:189 +msgid "Manage/Edit Profiles" +msgstr "" + +#: include/nav.php:192 view/theme/frio/theme.php:257 +msgid "Manage/edit friends and contacts" +msgstr "" + +#: include/nav.php:197 mod/admin.php:196 +msgid "Admin" +msgstr "" + +#: include/nav.php:197 +msgid "Site setup and configuration" +msgstr "" + +#: include/nav.php:200 +msgid "Navigation" +msgstr "" + +#: include/nav.php:200 +msgid "Site map" +msgstr "" + +#: include/plugin.php:530 include/plugin.php:532 +msgid "Click here to upgrade." +msgstr "" + +#: include/plugin.php:538 +msgid "This action exceeds the limits set by your subscription plan." +msgstr "" + +#: include/plugin.php:543 +msgid "This action is not available under your subscription plan." +msgstr "" + +#: include/profile_selectors.php:6 +msgid "Male" +msgstr "" + +#: include/profile_selectors.php:6 +msgid "Female" +msgstr "" + +#: include/profile_selectors.php:6 +msgid "Currently Male" +msgstr "" + +#: include/profile_selectors.php:6 +msgid "Currently Female" +msgstr "" + +#: include/profile_selectors.php:6 +msgid "Mostly Male" +msgstr "" + +#: include/profile_selectors.php:6 +msgid "Mostly Female" +msgstr "" + +#: include/profile_selectors.php:6 +msgid "Transgender" +msgstr "" + +#: include/profile_selectors.php:6 +msgid "Intersex" +msgstr "" + +#: include/profile_selectors.php:6 +msgid "Transsexual" +msgstr "" + +#: include/profile_selectors.php:6 +msgid "Hermaphrodite" +msgstr "" + +#: include/profile_selectors.php:6 +msgid "Neuter" +msgstr "" + +#: include/profile_selectors.php:6 +msgid "Non-specific" +msgstr "" + +#: include/profile_selectors.php:6 +msgid "Other" +msgstr "" + +#: include/profile_selectors.php:6 include/conversation.php:1547 +msgid "Undecided" +msgid_plural "Undecided" +msgstr[0] "" +msgstr[1] "" + +#: include/profile_selectors.php:23 +msgid "Males" +msgstr "" + +#: include/profile_selectors.php:23 +msgid "Females" +msgstr "" + +#: include/profile_selectors.php:23 +msgid "Gay" +msgstr "" + +#: include/profile_selectors.php:23 +msgid "Lesbian" +msgstr "" + +#: include/profile_selectors.php:23 +msgid "No Preference" +msgstr "" + +#: include/profile_selectors.php:23 +msgid "Bisexual" +msgstr "" + +#: include/profile_selectors.php:23 +msgid "Autosexual" +msgstr "" + +#: include/profile_selectors.php:23 +msgid "Abstinent" +msgstr "" + +#: include/profile_selectors.php:23 +msgid "Virgin" +msgstr "" + +#: include/profile_selectors.php:23 +msgid "Deviant" +msgstr "" + +#: include/profile_selectors.php:23 +msgid "Fetish" +msgstr "" + +#: include/profile_selectors.php:23 +msgid "Oodles" +msgstr "" + +#: include/profile_selectors.php:23 +msgid "Nonsexual" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Single" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Lonely" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Available" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Unavailable" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Has crush" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Infatuated" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Dating" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Unfaithful" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Sex Addict" +msgstr "" + +#: include/profile_selectors.php:42 include/user.php:263 include/user.php:267 +msgid "Friends" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Friends/Benefits" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Casual" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Engaged" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Married" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Imaginarily married" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Partners" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Cohabiting" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Common law" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Happy" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Not looking" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Swinger" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Betrayed" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Separated" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Unstable" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Divorced" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Imaginarily divorced" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Widowed" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Uncertain" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "It's complicated" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Don't care" +msgstr "" + +#: include/profile_selectors.php:42 +msgid "Ask me" +msgstr "" + +#: include/security.php:61 +msgid "Welcome " +msgstr "" + +#: include/security.php:62 +msgid "Please upload a profile photo." +msgstr "" + +#: include/security.php:65 +msgid "Welcome back " +msgstr "" + +#: include/security.php:429 +msgid "" +"The form security token was not correct. This probably happened because the " +"form has been opened for too long (>3 hours) before submitting it." +msgstr "" + +#: include/uimport.php:91 +msgid "Error decoding account file" +msgstr "" + +#: include/uimport.php:97 +msgid "Error! No version data in file! This is not a Friendica account file?" +msgstr "" + +#: include/uimport.php:113 include/uimport.php:124 +msgid "Error! Cannot check nickname" +msgstr "" + +#: include/uimport.php:117 include/uimport.php:128 +#, php-format +msgid "User '%s' already exists on this server!" +msgstr "" + +#: include/uimport.php:150 +msgid "User creation error" +msgstr "" + +#: include/uimport.php:170 +msgid "User profile creation error" +msgstr "" + +#: include/uimport.php:219 +#, php-format +msgid "%d contact not imported" +msgid_plural "%d contacts not imported" +msgstr[0] "" +msgstr[1] "" + +#: include/uimport.php:289 +msgid "Done. You can now login with your username and password" +msgstr "" + +#: include/Contact.php:395 include/Contact.php:408 include/Contact.php:453 +#: include/conversation.php:1004 include/conversation.php:1020 +#: mod/allfriends.php:68 mod/directory.php:157 mod/match.php:73 +#: mod/suggest.php:82 mod/dirfind.php:209 +msgid "View Profile" +msgstr "" + +#: include/Contact.php:409 include/contact_widgets.php:32 +#: include/conversation.php:1017 mod/allfriends.php:69 mod/contacts.php:610 +#: mod/match.php:74 mod/suggest.php:83 mod/dirfind.php:210 mod/follow.php:106 +msgid "Connect/Follow" +msgstr "" + +#: include/Contact.php:452 include/conversation.php:1003 +msgid "View Status" +msgstr "" + +#: include/Contact.php:454 include/conversation.php:1005 +msgid "View Photos" +msgstr "" + +#: include/Contact.php:455 include/conversation.php:1006 +msgid "Network Posts" +msgstr "" + +#: include/Contact.php:456 include/conversation.php:1007 +msgid "View Contact" +msgstr "" + +#: include/Contact.php:457 +msgid "Drop Contact" +msgstr "" + +#: include/Contact.php:458 include/conversation.php:1008 +msgid "Send PM" +msgstr "" + +#: include/Contact.php:459 include/conversation.php:1012 +msgid "Poke" +msgstr "" + +#: include/Contact.php:840 +msgid "Organisation" +msgstr "" + +#: include/Contact.php:843 +msgid "News" +msgstr "" + +#: include/Contact.php:846 +msgid "Forum" +msgstr "" + +#: include/acl_selectors.php:353 msgid "Post to Email" msgstr "" -#: include/acl_selectors.php:346 +#: include/acl_selectors.php:358 #, php-format msgid "Connectors disabled, since \"%s\" is enabled." msgstr "" -#: include/acl_selectors.php:347 mod/settings.php:1188 +#: include/acl_selectors.php:359 mod/settings.php:1188 msgid "Hide your profile details from unknown viewers?" msgstr "" -#: include/acl_selectors.php:352 +#: include/acl_selectors.php:365 msgid "Visible to everybody" msgstr "" -#: include/acl_selectors.php:353 view/theme/vier/config.php:108 +#: include/acl_selectors.php:366 view/theme/vier/config.php:108 msgid "show" msgstr "" -#: include/acl_selectors.php:354 view/theme/vier/config.php:108 +#: include/acl_selectors.php:367 view/theme/vier/config.php:108 msgid "don't show" msgstr "" -#: include/acl_selectors.php:360 mod/editpost.php:123 +#: include/acl_selectors.php:373 mod/editpost.php:123 msgid "CC: email addresses" msgstr "" -#: include/acl_selectors.php:361 mod/editpost.php:130 +#: include/acl_selectors.php:374 mod/editpost.php:130 msgid "Example: bob@example.com, mary@example.com" msgstr "" -#: include/acl_selectors.php:363 mod/events.php:516 mod/photos.php:1176 -#: mod/photos.php:1558 +#: include/acl_selectors.php:376 mod/events.php:508 mod/photos.php:1196 +#: mod/photos.php:1593 msgid "Permissions" msgstr "" -#: include/acl_selectors.php:364 +#: include/acl_selectors.php:377 msgid "Close" msgstr "" -#: include/api.php:1021 +#: include/api.php:1089 #, php-format msgid "Daily posting limit of %d posts reached. The post was rejected." msgstr "" -#: include/api.php:1041 +#: include/api.php:1110 #, php-format msgid "Weekly posting limit of %d posts reached. The post was rejected." msgstr "" -#: include/api.php:1062 +#: include/api.php:1131 #, php-format msgid "Monthly posting limit of %d posts reached. The post was rejected." msgstr "" -#: include/auth.php:45 +#: include/auth.php:51 msgid "Logged out." msgstr "" -#: include/auth.php:116 include/auth.php:178 mod/openid.php:110 +#: include/auth.php:122 include/auth.php:184 mod/openid.php:110 msgid "Login failed." msgstr "" -#: include/auth.php:132 include/user.php:75 +#: include/auth.php:138 include/user.php:75 msgid "" "We encountered a problem while logging in with the OpenID you provided. " "Please check the correct spelling of the ID." msgstr "" -#: include/auth.php:132 include/user.php:75 +#: include/auth.php:138 include/user.php:75 msgid "The error message was:" msgstr "" -#: include/bb2diaspora.php:199 include/event.php:16 mod/localtime.php:12 +#: include/bb2diaspora.php:230 include/event.php:17 mod/localtime.php:12 msgid "l F d, Y \\@ g:i A" msgstr "" -#: include/bb2diaspora.php:205 include/event.php:33 include/event.php:51 -#: include/event.php:488 +#: include/bb2diaspora.php:236 include/event.php:34 include/event.php:54 +#: include/event.php:525 msgid "Starts:" msgstr "" -#: include/bb2diaspora.php:213 include/event.php:36 include/event.php:57 -#: include/event.php:489 +#: include/bb2diaspora.php:244 include/event.php:37 include/event.php:60 +#: include/event.php:526 msgid "Finishes:" msgstr "" -#: include/bb2diaspora.php:221 include/event.php:39 include/event.php:63 -#: include/event.php:490 include/identity.php:331 mod/contacts.php:636 -#: mod/directory.php:139 mod/events.php:501 mod/notifications.php:238 +#: include/bb2diaspora.php:253 include/event.php:41 include/event.php:67 +#: include/event.php:527 include/identity.php:336 mod/contacts.php:636 +#: mod/directory.php:139 mod/events.php:493 mod/notifications.php:244 msgid "Location:" msgstr "" -#: include/bbcode.php:350 include/bbcode.php:1055 include/bbcode.php:1056 +#: include/bbcode.php:380 include/bbcode.php:1132 include/bbcode.php:1133 msgid "Image/photo" msgstr "" -#: include/bbcode.php:467 +#: include/bbcode.php:497 #, php-format msgid "%2$s %3$s" msgstr "" -#: include/bbcode.php:1015 include/bbcode.php:1035 +#: include/bbcode.php:1089 include/bbcode.php:1111 msgid "$1 wrote:" msgstr "" -#: include/bbcode.php:1064 include/bbcode.php:1065 +#: include/bbcode.php:1141 include/bbcode.php:1142 msgid "Encrypted content" msgstr "" -#: include/bbcode.php:1169 +#: include/bbcode.php:1257 msgid "Invalid source protocol" msgstr "" -#: include/bbcode.php:1179 +#: include/bbcode.php:1267 msgid "Invalid link protocol" msgstr "" @@ -380,19 +937,19 @@ msgstr "" msgid "Reputable, has my trust" msgstr "" -#: include/contact_selectors.php:56 mod/admin.php:893 +#: include/contact_selectors.php:56 mod/admin.php:980 msgid "Frequently" msgstr "" -#: include/contact_selectors.php:57 mod/admin.php:894 +#: include/contact_selectors.php:57 mod/admin.php:981 msgid "Hourly" msgstr "" -#: include/contact_selectors.php:58 mod/admin.php:895 +#: include/contact_selectors.php:58 mod/admin.php:982 msgid "Twice daily" msgstr "" -#: include/contact_selectors.php:59 mod/admin.php:896 +#: include/contact_selectors.php:59 mod/admin.php:983 msgid "Daily" msgstr "" @@ -404,7 +961,7 @@ msgstr "" msgid "Monthly" msgstr "" -#: include/contact_selectors.php:76 mod/dfrn_request.php:881 +#: include/contact_selectors.php:76 mod/dfrn_request.php:886 msgid "Friendica" msgstr "" @@ -417,11 +974,11 @@ msgid "RSS/Atom" msgstr "" #: include/contact_selectors.php:79 include/contact_selectors.php:86 -#: mod/admin.php:1405 mod/admin.php:1418 mod/admin.php:1431 mod/admin.php:1449 +#: mod/admin.php:1490 mod/admin.php:1503 mod/admin.php:1516 mod/admin.php:1534 msgid "Email" msgstr "" -#: include/contact_selectors.php:80 mod/dfrn_request.php:883 +#: include/contact_selectors.php:80 mod/dfrn_request.php:888 #: mod/settings.php:848 msgid "Diaspora" msgstr "" @@ -463,7 +1020,7 @@ msgid "Diaspora Connector" msgstr "" #: include/contact_selectors.php:91 -msgid "GNU Social" +msgid "GNU Social Connector" msgstr "" #: include/contact_selectors.php:92 @@ -474,10 +1031,6 @@ msgstr "" msgid "App.net" msgstr "" -#: include/contact_selectors.php:104 -msgid "Hubzilla/Redmatrix" -msgstr "" - #: include/contact_widgets.php:6 msgid "Add New Contact" msgstr "" @@ -490,9 +1043,9 @@ msgstr "" msgid "Example: bob@example.com, http://example.com/barbara" msgstr "" -#: include/contact_widgets.php:10 include/identity.php:219 -#: mod/allfriends.php:85 mod/dirfind.php:207 mod/match.php:89 -#: mod/suggest.php:101 +#: include/contact_widgets.php:10 include/identity.php:224 +#: mod/allfriends.php:85 mod/match.php:89 mod/suggest.php:101 +#: mod/dirfind.php:207 msgid "Connect" msgstr "" @@ -520,11 +1073,11 @@ msgid "Find" msgstr "" #: include/contact_widgets.php:35 mod/suggest.php:114 -#: view/theme/vier/theme.php:198 +#: view/theme/vier/theme.php:201 msgid "Friend Suggestions" msgstr "" -#: include/contact_widgets.php:36 view/theme/vier/theme.php:197 +#: include/contact_widgets.php:36 view/theme/vier/theme.php:200 msgid "Similar Interests" msgstr "" @@ -532,605 +1085,521 @@ msgstr "" msgid "Random Profile" msgstr "" -#: include/contact_widgets.php:38 view/theme/vier/theme.php:199 +#: include/contact_widgets.php:38 view/theme/vier/theme.php:202 msgid "Invite Friends" msgstr "" -#: include/contact_widgets.php:115 +#: include/contact_widgets.php:125 msgid "Networks" msgstr "" -#: include/contact_widgets.php:118 +#: include/contact_widgets.php:128 msgid "All Networks" msgstr "" -#: include/contact_widgets.php:150 include/features.php:104 +#: include/contact_widgets.php:160 include/features.php:104 msgid "Saved Folders" msgstr "" -#: include/contact_widgets.php:153 include/contact_widgets.php:187 +#: include/contact_widgets.php:163 include/contact_widgets.php:198 msgid "Everything" msgstr "" -#: include/contact_widgets.php:184 +#: include/contact_widgets.php:195 msgid "Categories" msgstr "" -#: include/contact_widgets.php:248 +#: include/contact_widgets.php:264 #, php-format msgid "%d contact in common" msgid_plural "%d contacts in common" msgstr[0] "" msgstr[1] "" -#: include/conversation.php:122 include/conversation.php:258 -#: include/like.php:180 include/text.php:1804 -msgid "event" -msgstr "" - -#: include/conversation.php:125 include/conversation.php:134 -#: include/conversation.php:261 include/conversation.php:270 -#: include/diaspora.php:1530 include/like.php:178 mod/subthread.php:88 -#: mod/tagger.php:62 -msgid "status" -msgstr "" - -#: include/conversation.php:130 include/conversation.php:266 -#: include/like.php:178 include/text.php:1806 mod/subthread.php:88 -#: mod/tagger.php:62 -msgid "photo" -msgstr "" - -#: include/conversation.php:141 include/diaspora.php:1526 include/like.php:27 -#, php-format -msgid "%1$s likes %2$s's %3$s" -msgstr "" - -#: include/conversation.php:144 include/like.php:31 include/like.php:36 -#, php-format -msgid "%1$s doesn't like %2$s's %3$s" -msgstr "" - -#: include/conversation.php:147 +#: include/conversation.php:159 #, php-format msgid "%1$s attends %2$s's %3$s" msgstr "" -#: include/conversation.php:150 +#: include/conversation.php:162 #, php-format msgid "%1$s doesn't attend %2$s's %3$s" msgstr "" -#: include/conversation.php:153 +#: include/conversation.php:165 #, php-format msgid "%1$s attends maybe %2$s's %3$s" msgstr "" -#: include/conversation.php:185 mod/dfrn_confirm.php:478 +#: include/conversation.php:198 mod/dfrn_confirm.php:478 #, php-format msgid "%1$s is now friends with %2$s" msgstr "" -#: include/conversation.php:219 +#: include/conversation.php:239 #, php-format msgid "%1$s poked %2$s" msgstr "" -#: include/conversation.php:239 mod/mood.php:63 +#: include/conversation.php:260 mod/mood.php:63 #, php-format msgid "%1$s is currently %2$s" msgstr "" -#: include/conversation.php:278 mod/tagger.php:95 +#: include/conversation.php:307 mod/tagger.php:95 #, php-format msgid "%1$s tagged %2$s's %3$s with %4$s" msgstr "" -#: include/conversation.php:303 +#: include/conversation.php:334 msgid "post/item" msgstr "" -#: include/conversation.php:304 +#: include/conversation.php:335 #, php-format msgid "%1$s marked %2$s's %3$s as favorite" msgstr "" -#: include/conversation.php:587 mod/content.php:372 mod/photos.php:1629 -#: mod/profiles.php:346 +#: include/conversation.php:614 mod/content.php:372 mod/photos.php:1662 +#: mod/profiles.php:340 msgid "Likes" msgstr "" -#: include/conversation.php:587 mod/content.php:372 mod/photos.php:1629 -#: mod/profiles.php:350 +#: include/conversation.php:614 mod/content.php:372 mod/photos.php:1662 +#: mod/profiles.php:344 msgid "Dislikes" msgstr "" -#: include/conversation.php:588 include/conversation.php:1473 -#: mod/content.php:373 mod/photos.php:1630 +#: include/conversation.php:615 include/conversation.php:1541 +#: mod/content.php:373 mod/photos.php:1663 msgid "Attending" msgid_plural "Attending" msgstr[0] "" msgstr[1] "" -#: include/conversation.php:588 mod/content.php:373 mod/photos.php:1630 +#: include/conversation.php:615 mod/content.php:373 mod/photos.php:1663 msgid "Not attending" msgstr "" -#: include/conversation.php:588 mod/content.php:373 mod/photos.php:1630 +#: include/conversation.php:615 mod/content.php:373 mod/photos.php:1663 msgid "Might attend" msgstr "" -#: include/conversation.php:710 mod/content.php:453 mod/content.php:759 -#: mod/photos.php:1703 object/Item.php:137 +#: include/conversation.php:747 mod/content.php:453 mod/content.php:759 +#: mod/photos.php:1728 object/Item.php:137 msgid "Select" msgstr "" -#: include/conversation.php:711 mod/admin.php:1423 mod/contacts.php:816 -#: mod/contacts.php:1015 mod/content.php:454 mod/content.php:760 -#: mod/group.php:181 mod/photos.php:1704 mod/settings.php:744 -#: object/Item.php:138 +#: include/conversation.php:748 mod/contacts.php:816 mod/contacts.php:1015 +#: mod/content.php:454 mod/content.php:760 mod/photos.php:1729 +#: mod/settings.php:744 mod/admin.php:1508 object/Item.php:138 msgid "Delete" msgstr "" -#: include/conversation.php:755 mod/content.php:487 mod/content.php:915 +#: include/conversation.php:791 mod/content.php:487 mod/content.php:915 #: mod/content.php:916 object/Item.php:356 object/Item.php:357 #, php-format msgid "View %s's profile @ %s" msgstr "" -#: include/conversation.php:767 object/Item.php:344 +#: include/conversation.php:803 object/Item.php:344 msgid "Categories:" msgstr "" -#: include/conversation.php:768 object/Item.php:345 +#: include/conversation.php:804 object/Item.php:345 msgid "Filed under:" msgstr "" -#: include/conversation.php:775 mod/content.php:497 mod/content.php:928 +#: include/conversation.php:811 mod/content.php:497 mod/content.php:928 #: object/Item.php:370 #, php-format msgid "%s from %s" msgstr "" -#: include/conversation.php:791 mod/content.php:513 +#: include/conversation.php:827 mod/content.php:513 msgid "View in context" msgstr "" -#: include/conversation.php:793 include/conversation.php:1256 +#: include/conversation.php:829 include/conversation.php:1298 #: mod/content.php:515 mod/content.php:953 mod/editpost.php:114 -#: mod/message.php:337 mod/message.php:522 mod/photos.php:1592 -#: mod/wallmessage.php:140 object/Item.php:395 +#: mod/wallmessage.php:140 mod/message.php:337 mod/message.php:522 +#: mod/photos.php:1627 object/Item.php:395 msgid "Please wait" msgstr "" -#: include/conversation.php:872 +#: include/conversation.php:906 msgid "remove" msgstr "" -#: include/conversation.php:876 +#: include/conversation.php:910 msgid "Delete Selected Items" msgstr "" -#: include/conversation.php:968 +#: include/conversation.php:1002 msgid "Follow Thread" msgstr "" -#: include/conversation.php:1100 +#: include/conversation.php:1139 #, php-format msgid "%s likes this." msgstr "" -#: include/conversation.php:1103 +#: include/conversation.php:1142 #, php-format msgid "%s doesn't like this." msgstr "" -#: include/conversation.php:1106 +#: include/conversation.php:1145 #, php-format msgid "%s attends." msgstr "" -#: include/conversation.php:1109 +#: include/conversation.php:1148 #, php-format msgid "%s doesn't attend." msgstr "" -#: include/conversation.php:1112 +#: include/conversation.php:1151 #, php-format msgid "%s attends maybe." msgstr "" -#: include/conversation.php:1122 +#: include/conversation.php:1162 msgid "and" msgstr "" -#: include/conversation.php:1128 +#: include/conversation.php:1168 #, php-format msgid ", and %d other people" msgstr "" -#: include/conversation.php:1137 +#: include/conversation.php:1177 #, php-format msgid "%2$d people like this" msgstr "" -#: include/conversation.php:1138 +#: include/conversation.php:1178 #, php-format msgid "%s like this." msgstr "" -#: include/conversation.php:1141 +#: include/conversation.php:1181 #, php-format msgid "%2$d people don't like this" msgstr "" -#: include/conversation.php:1142 +#: include/conversation.php:1182 #, php-format msgid "%s don't like this." msgstr "" -#: include/conversation.php:1145 +#: include/conversation.php:1185 #, php-format msgid "%2$d people attend" msgstr "" -#: include/conversation.php:1146 +#: include/conversation.php:1186 #, php-format msgid "%s attend." msgstr "" -#: include/conversation.php:1149 +#: include/conversation.php:1189 #, php-format msgid "%2$d people don't attend" msgstr "" -#: include/conversation.php:1150 +#: include/conversation.php:1190 #, php-format msgid "%s don't attend." msgstr "" -#: include/conversation.php:1153 +#: include/conversation.php:1193 #, php-format msgid "%2$d people attend maybe" msgstr "" -#: include/conversation.php:1154 +#: include/conversation.php:1194 #, php-format msgid "%s anttend maybe." msgstr "" -#: include/conversation.php:1184 include/conversation.php:1200 +#: include/conversation.php:1223 include/conversation.php:1239 msgid "Visible to everybody" msgstr "" -#: include/conversation.php:1185 include/conversation.php:1201 -#: mod/message.php:271 mod/message.php:278 mod/message.php:418 -#: mod/message.php:425 mod/wallmessage.php:114 mod/wallmessage.php:121 +#: include/conversation.php:1224 include/conversation.php:1240 +#: mod/wallmessage.php:114 mod/wallmessage.php:121 mod/message.php:271 +#: mod/message.php:278 mod/message.php:418 mod/message.php:425 msgid "Please enter a link URL:" msgstr "" -#: include/conversation.php:1186 include/conversation.php:1202 +#: include/conversation.php:1225 include/conversation.php:1241 msgid "Please enter a video link/URL:" msgstr "" -#: include/conversation.php:1187 include/conversation.php:1203 +#: include/conversation.php:1226 include/conversation.php:1242 msgid "Please enter an audio link/URL:" msgstr "" -#: include/conversation.php:1188 include/conversation.php:1204 +#: include/conversation.php:1227 include/conversation.php:1243 msgid "Tag term:" msgstr "" -#: include/conversation.php:1189 include/conversation.php:1205 +#: include/conversation.php:1228 include/conversation.php:1244 #: mod/filer.php:30 msgid "Save to Folder:" msgstr "" -#: include/conversation.php:1190 include/conversation.php:1206 +#: include/conversation.php:1229 include/conversation.php:1245 msgid "Where are you right now?" msgstr "" -#: include/conversation.php:1191 +#: include/conversation.php:1230 msgid "Delete item(s)?" msgstr "" -#: include/conversation.php:1237 +#: include/conversation.php:1279 msgid "Share" msgstr "" -#: include/conversation.php:1238 mod/editpost.php:100 mod/message.php:335 -#: mod/message.php:519 mod/wallmessage.php:138 +#: include/conversation.php:1280 mod/editpost.php:100 mod/wallmessage.php:138 +#: mod/message.php:335 mod/message.php:519 msgid "Upload photo" msgstr "" -#: include/conversation.php:1239 mod/editpost.php:101 +#: include/conversation.php:1281 mod/editpost.php:101 msgid "upload photo" msgstr "" -#: include/conversation.php:1240 mod/editpost.php:102 +#: include/conversation.php:1282 mod/editpost.php:102 msgid "Attach file" msgstr "" -#: include/conversation.php:1241 mod/editpost.php:103 +#: include/conversation.php:1283 mod/editpost.php:103 msgid "attach file" msgstr "" -#: include/conversation.php:1242 mod/editpost.php:104 mod/message.php:336 -#: mod/message.php:520 mod/wallmessage.php:139 +#: include/conversation.php:1284 mod/editpost.php:104 mod/wallmessage.php:139 +#: mod/message.php:336 mod/message.php:520 msgid "Insert web link" msgstr "" -#: include/conversation.php:1243 mod/editpost.php:105 +#: include/conversation.php:1285 mod/editpost.php:105 msgid "web link" msgstr "" -#: include/conversation.php:1244 mod/editpost.php:106 +#: include/conversation.php:1286 mod/editpost.php:106 msgid "Insert video link" msgstr "" -#: include/conversation.php:1245 mod/editpost.php:107 +#: include/conversation.php:1287 mod/editpost.php:107 msgid "video link" msgstr "" -#: include/conversation.php:1246 mod/editpost.php:108 +#: include/conversation.php:1288 mod/editpost.php:108 msgid "Insert audio link" msgstr "" -#: include/conversation.php:1247 mod/editpost.php:109 +#: include/conversation.php:1289 mod/editpost.php:109 msgid "audio link" msgstr "" -#: include/conversation.php:1248 mod/editpost.php:110 +#: include/conversation.php:1290 mod/editpost.php:110 msgid "Set your location" msgstr "" -#: include/conversation.php:1249 mod/editpost.php:111 +#: include/conversation.php:1291 mod/editpost.php:111 msgid "set location" msgstr "" -#: include/conversation.php:1250 mod/editpost.php:112 +#: include/conversation.php:1292 mod/editpost.php:112 msgid "Clear browser location" msgstr "" -#: include/conversation.php:1251 mod/editpost.php:113 +#: include/conversation.php:1293 mod/editpost.php:113 msgid "clear location" msgstr "" -#: include/conversation.php:1253 mod/editpost.php:127 +#: include/conversation.php:1295 mod/editpost.php:127 msgid "Set title" msgstr "" -#: include/conversation.php:1255 mod/editpost.php:129 +#: include/conversation.php:1297 mod/editpost.php:129 msgid "Categories (comma-separated list)" msgstr "" -#: include/conversation.php:1257 mod/editpost.php:115 +#: include/conversation.php:1299 mod/editpost.php:115 msgid "Permission settings" msgstr "" -#: include/conversation.php:1258 mod/editpost.php:144 +#: include/conversation.php:1300 mod/editpost.php:144 msgid "permissions" msgstr "" -#: include/conversation.php:1266 mod/editpost.php:124 +#: include/conversation.php:1308 mod/editpost.php:124 msgid "Public post" msgstr "" -#: include/conversation.php:1271 mod/content.php:737 mod/editpost.php:135 -#: mod/events.php:511 mod/photos.php:1613 mod/photos.php:1661 -#: mod/photos.php:1747 object/Item.php:714 +#: include/conversation.php:1313 mod/content.php:737 mod/editpost.php:135 +#: mod/events.php:503 mod/photos.php:1647 mod/photos.php:1689 +#: mod/photos.php:1769 object/Item.php:714 msgid "Preview" msgstr "" -#: include/conversation.php:1275 include/items.php:1983 mod/contacts.php:455 -#: mod/dfrn_request.php:889 mod/editpost.php:138 mod/fbrowser.php:100 -#: mod/fbrowser.php:135 mod/follow.php:124 mod/message.php:209 -#: mod/photos.php:240 mod/photos.php:331 mod/settings.php:682 -#: mod/settings.php:708 mod/suggest.php:32 mod/tagrm.php:11 mod/tagrm.php:96 -#: mod/videos.php:132 +#: include/conversation.php:1317 include/items.php:2167 mod/contacts.php:455 +#: mod/editpost.php:138 mod/fbrowser.php:100 mod/fbrowser.php:135 +#: mod/suggest.php:32 mod/tagrm.php:11 mod/tagrm.php:96 +#: mod/dfrn_request.php:894 mod/follow.php:124 mod/message.php:209 +#: mod/photos.php:245 mod/photos.php:337 mod/settings.php:682 +#: mod/settings.php:708 mod/videos.php:132 msgid "Cancel" msgstr "" -#: include/conversation.php:1281 +#: include/conversation.php:1323 msgid "Post to Groups" msgstr "" -#: include/conversation.php:1282 +#: include/conversation.php:1324 msgid "Post to Contacts" msgstr "" -#: include/conversation.php:1283 +#: include/conversation.php:1325 msgid "Private post" msgstr "" -#: include/conversation.php:1288 include/identity.php:259 mod/editpost.php:142 +#: include/conversation.php:1330 include/identity.php:264 mod/editpost.php:142 msgid "Message" msgstr "" -#: include/conversation.php:1289 mod/editpost.php:143 +#: include/conversation.php:1331 mod/editpost.php:143 msgid "Browser" msgstr "" -#: include/conversation.php:1445 +#: include/conversation.php:1513 msgid "View all" msgstr "" -#: include/conversation.php:1467 +#: include/conversation.php:1535 msgid "Like" msgid_plural "Likes" msgstr[0] "" msgstr[1] "" -#: include/conversation.php:1470 +#: include/conversation.php:1538 msgid "Dislike" msgid_plural "Dislikes" msgstr[0] "" msgstr[1] "" -#: include/conversation.php:1476 +#: include/conversation.php:1544 msgid "Not Attending" msgid_plural "Not Attending" msgstr[0] "" msgstr[1] "" -#: include/conversation.php:1479 include/profile_selectors.php:6 -msgid "Undecided" -msgid_plural "Undecided" -msgstr[0] "" -msgstr[1] "" - -#: include/datetime.php:58 include/datetime.php:60 mod/profiles.php:697 +#: include/datetime.php:66 include/datetime.php:68 mod/profiles.php:698 msgid "Miscellaneous" msgstr "" -#: include/datetime.php:184 include/identity.php:641 +#: include/datetime.php:196 include/identity.php:644 msgid "Birthday:" msgstr "" -#: include/datetime.php:186 mod/profiles.php:720 +#: include/datetime.php:198 mod/profiles.php:721 msgid "Age: " msgstr "" -#: include/datetime.php:188 +#: include/datetime.php:200 msgid "YYYY-MM-DD or MM-DD" msgstr "" -#: include/datetime.php:343 +#: include/datetime.php:370 msgid "never" msgstr "" -#: include/datetime.php:349 +#: include/datetime.php:376 msgid "less than a second ago" msgstr "" -#: include/datetime.php:352 +#: include/datetime.php:379 msgid "year" msgstr "" -#: include/datetime.php:352 +#: include/datetime.php:379 msgid "years" msgstr "" -#: include/datetime.php:353 include/event.php:481 mod/cal.php:279 -#: mod/events.php:396 +#: include/datetime.php:380 include/event.php:519 mod/cal.php:279 +#: mod/events.php:384 msgid "month" msgstr "" -#: include/datetime.php:353 +#: include/datetime.php:380 msgid "months" msgstr "" -#: include/datetime.php:354 include/event.php:482 mod/cal.php:280 -#: mod/events.php:397 +#: include/datetime.php:381 include/event.php:520 mod/cal.php:280 +#: mod/events.php:385 msgid "week" msgstr "" -#: include/datetime.php:354 +#: include/datetime.php:381 msgid "weeks" msgstr "" -#: include/datetime.php:355 include/event.php:483 mod/cal.php:281 -#: mod/events.php:398 +#: include/datetime.php:382 include/event.php:521 mod/cal.php:281 +#: mod/events.php:386 msgid "day" msgstr "" -#: include/datetime.php:355 +#: include/datetime.php:382 msgid "days" msgstr "" -#: include/datetime.php:356 +#: include/datetime.php:383 msgid "hour" msgstr "" -#: include/datetime.php:356 +#: include/datetime.php:383 msgid "hours" msgstr "" -#: include/datetime.php:357 +#: include/datetime.php:384 msgid "minute" msgstr "" -#: include/datetime.php:357 +#: include/datetime.php:384 msgid "minutes" msgstr "" -#: include/datetime.php:358 +#: include/datetime.php:385 msgid "second" msgstr "" -#: include/datetime.php:358 +#: include/datetime.php:385 msgid "seconds" msgstr "" -#: include/datetime.php:367 +#: include/datetime.php:394 #, php-format msgid "%1$d %2$s ago" msgstr "" -#: include/datetime.php:585 +#: include/datetime.php:620 #, php-format msgid "%s's birthday" msgstr "" -#: include/datetime.php:586 include/dfrn.php:1131 +#: include/datetime.php:621 include/dfrn.php:1252 #, php-format msgid "Happy Birthday %s" msgstr "" -#: include/dba.php:43 include/dba_pdo.php:72 +#: include/dba_pdo.php:72 include/dba.php:47 #, php-format msgid "Cannot locate DNS info for database server '%s'" msgstr "" -#: include/dbstructure.php:36 -#, php-format -msgid "" -"\n" -"\t\t\tThe friendica developers released update %s recently,\n" -"\t\t\tbut when I tried to install it, something went terribly wrong.\n" -"\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n" -"\t\t\tfriendica developer if you can not help me on your own. My database " -"might be invalid." -msgstr "" - -#: include/dbstructure.php:41 -#, php-format -msgid "" -"The error message is\n" -"[pre]%s[/pre]" -msgstr "" - -#: include/dbstructure.php:199 -msgid "Errors encountered creating database tables." -msgstr "" - -#: include/dbstructure.php:333 include/dbstructure.php:341 -#: include/dbstructure.php:349 include/dbstructure.php:354 -#: include/dbstructure.php:359 -msgid "Errors encountered performing database changes." -msgstr "" - -#: include/delivery.php:427 -msgid "(no subject)" -msgstr "" - -#: include/delivery.php:439 include/enotify.php:43 -msgid "noreply" -msgstr "" - -#: include/dfrn.php:1130 -#, php-format -msgid "%s\\'s birthday" -msgstr "" - -#: include/diaspora.php:2087 -msgid "Sharing notification from Diaspora network" -msgstr "" - -#: include/diaspora.php:3096 -msgid "Attachments:" -msgstr "" - #: include/enotify.php:24 msgid "Friendica Notification" msgstr "" @@ -1423,187 +1892,191 @@ msgstr "" msgid "Please visit %s to approve or reject the request." msgstr "" -#: include/event.php:442 -msgid "Sun" -msgstr "" - -#: include/event.php:443 -msgid "Mon" -msgstr "" - -#: include/event.php:444 -msgid "Tue" -msgstr "" - -#: include/event.php:445 -msgid "Wed" -msgstr "" - -#: include/event.php:446 -msgid "Thu" -msgstr "" - -#: include/event.php:447 -msgid "Fri" -msgstr "" - -#: include/event.php:448 -msgid "Sat" -msgstr "" - -#: include/event.php:449 include/text.php:1132 mod/settings.php:981 -msgid "Sunday" -msgstr "" - -#: include/event.php:450 include/text.php:1132 mod/settings.php:981 -msgid "Monday" -msgstr "" - -#: include/event.php:451 include/text.php:1132 -msgid "Tuesday" -msgstr "" - -#: include/event.php:452 include/text.php:1132 -msgid "Wednesday" -msgstr "" - -#: include/event.php:453 include/text.php:1132 -msgid "Thursday" -msgstr "" - -#: include/event.php:454 include/text.php:1132 -msgid "Friday" -msgstr "" - -#: include/event.php:455 include/text.php:1132 -msgid "Saturday" -msgstr "" - -#: include/event.php:456 -msgid "Jan" -msgstr "" - -#: include/event.php:457 -msgid "Feb" -msgstr "" - -#: include/event.php:458 -msgid "Mar" -msgstr "" - -#: include/event.php:459 -msgid "Apr" -msgstr "" - -#: include/event.php:460 include/event.php:472 include/text.php:1136 -msgid "May" -msgstr "" - -#: include/event.php:461 -msgid "Jun" -msgstr "" - -#: include/event.php:462 -msgid "Jul" -msgstr "" - -#: include/event.php:463 -msgid "Aug" -msgstr "" - -#: include/event.php:464 -msgid "Sept" -msgstr "" - -#: include/event.php:465 -msgid "Oct" -msgstr "" - -#: include/event.php:466 -msgid "Nov" -msgstr "" - -#: include/event.php:467 -msgid "Dec" -msgstr "" - -#: include/event.php:468 include/text.php:1136 -msgid "January" -msgstr "" - -#: include/event.php:469 include/text.php:1136 -msgid "February" -msgstr "" - -#: include/event.php:470 include/text.php:1136 -msgid "March" -msgstr "" - -#: include/event.php:471 include/text.php:1136 -msgid "April" -msgstr "" - -#: include/event.php:473 include/text.php:1136 -msgid "June" -msgstr "" - -#: include/event.php:474 include/text.php:1136 -msgid "July" -msgstr "" - -#: include/event.php:475 include/text.php:1136 -msgid "August" -msgstr "" - -#: include/event.php:476 include/text.php:1136 -msgid "September" -msgstr "" - -#: include/event.php:477 include/text.php:1136 -msgid "October" -msgstr "" - -#: include/event.php:478 include/text.php:1136 -msgid "November" -msgstr "" - -#: include/event.php:479 include/text.php:1136 -msgid "December" -msgstr "" - -#: include/event.php:480 mod/cal.php:278 mod/events.php:395 -msgid "today" -msgstr "" - -#: include/event.php:484 +#: include/event.php:474 msgid "all-day" msgstr "" -#: include/event.php:486 +#: include/event.php:476 +msgid "Sun" +msgstr "" + +#: include/event.php:477 +msgid "Mon" +msgstr "" + +#: include/event.php:478 +msgid "Tue" +msgstr "" + +#: include/event.php:479 +msgid "Wed" +msgstr "" + +#: include/event.php:480 +msgid "Thu" +msgstr "" + +#: include/event.php:481 +msgid "Fri" +msgstr "" + +#: include/event.php:482 +msgid "Sat" +msgstr "" + +#: include/event.php:484 include/text.php:1198 mod/settings.php:981 +msgid "Sunday" +msgstr "" + +#: include/event.php:485 include/text.php:1198 mod/settings.php:981 +msgid "Monday" +msgstr "" + +#: include/event.php:486 include/text.php:1198 +msgid "Tuesday" +msgstr "" + +#: include/event.php:487 include/text.php:1198 +msgid "Wednesday" +msgstr "" + +#: include/event.php:488 include/text.php:1198 +msgid "Thursday" +msgstr "" + +#: include/event.php:489 include/text.php:1198 +msgid "Friday" +msgstr "" + +#: include/event.php:490 include/text.php:1198 +msgid "Saturday" +msgstr "" + +#: include/event.php:492 +msgid "Jan" +msgstr "" + +#: include/event.php:493 +msgid "Feb" +msgstr "" + +#: include/event.php:494 +msgid "Mar" +msgstr "" + +#: include/event.php:495 +msgid "Apr" +msgstr "" + +#: include/event.php:496 include/event.php:509 include/text.php:1202 +msgid "May" +msgstr "" + +#: include/event.php:497 +msgid "Jun" +msgstr "" + +#: include/event.php:498 +msgid "Jul" +msgstr "" + +#: include/event.php:499 +msgid "Aug" +msgstr "" + +#: include/event.php:500 +msgid "Sept" +msgstr "" + +#: include/event.php:501 +msgid "Oct" +msgstr "" + +#: include/event.php:502 +msgid "Nov" +msgstr "" + +#: include/event.php:503 +msgid "Dec" +msgstr "" + +#: include/event.php:505 include/text.php:1202 +msgid "January" +msgstr "" + +#: include/event.php:506 include/text.php:1202 +msgid "February" +msgstr "" + +#: include/event.php:507 include/text.php:1202 +msgid "March" +msgstr "" + +#: include/event.php:508 include/text.php:1202 +msgid "April" +msgstr "" + +#: include/event.php:510 include/text.php:1202 +msgid "June" +msgstr "" + +#: include/event.php:511 include/text.php:1202 +msgid "July" +msgstr "" + +#: include/event.php:512 include/text.php:1202 +msgid "August" +msgstr "" + +#: include/event.php:513 include/text.php:1202 +msgid "September" +msgstr "" + +#: include/event.php:514 include/text.php:1202 +msgid "October" +msgstr "" + +#: include/event.php:515 include/text.php:1202 +msgid "November" +msgstr "" + +#: include/event.php:516 include/text.php:1202 +msgid "December" +msgstr "" + +#: include/event.php:518 mod/cal.php:278 mod/events.php:383 +msgid "today" +msgstr "" + +#: include/event.php:523 msgid "No events to display" msgstr "" -#: include/event.php:596 +#: include/event.php:636 msgid "l, F j" msgstr "" -#: include/event.php:615 +#: include/event.php:658 msgid "Edit event" msgstr "" -#: include/event.php:637 include/text.php:1534 include/text.php:1541 +#: include/event.php:659 +msgid "Delete event" +msgstr "" + +#: include/event.php:685 include/text.php:1600 include/text.php:1607 msgid "link to source" msgstr "" -#: include/event.php:872 +#: include/event.php:939 msgid "Export" msgstr "" -#: include/event.php:873 +#: include/event.php:940 msgid "Export calendar as ical" msgstr "" -#: include/event.php:874 +#: include/event.php:941 msgid "Export calendar as csv" msgstr "" @@ -1694,7 +2167,7 @@ msgstr "" msgid "Enable widget to display Network posts only from selected network" msgstr "" -#: include/features.php:86 mod/network.php:199 mod/search.php:34 +#: include/features.php:86 mod/network.php:206 mod/search.php:34 msgid "Saved Searches" msgstr "" @@ -1806,54 +2279,59 @@ msgstr "" msgid "Disallowed profile URL." msgstr "" -#: include/follow.php:86 +#: include/follow.php:86 mod/dfrn_request.php:518 mod/friendica.php:114 +#: mod/admin.php:279 mod/admin.php:297 +msgid "Blocked domain" +msgstr "" + +#: include/follow.php:91 msgid "Connect URL missing." msgstr "" -#: include/follow.php:114 +#: include/follow.php:119 msgid "" "This site is not configured to allow communications with other networks." msgstr "" -#: include/follow.php:115 include/follow.php:129 +#: include/follow.php:120 include/follow.php:134 msgid "No compatible communication protocols or feeds were discovered." msgstr "" -#: include/follow.php:127 +#: include/follow.php:132 msgid "The profile address specified does not provide adequate information." msgstr "" -#: include/follow.php:132 +#: include/follow.php:137 msgid "An author or name was not found." msgstr "" -#: include/follow.php:135 +#: include/follow.php:140 msgid "No browser URL could be matched to this address." msgstr "" -#: include/follow.php:138 +#: include/follow.php:143 msgid "" "Unable to match @-style Identity Address with a known protocol or email " "contact." msgstr "" -#: include/follow.php:139 +#: include/follow.php:144 msgid "Use mailto: in front of address to force email check." msgstr "" -#: include/follow.php:145 +#: include/follow.php:150 msgid "" "The profile address specified belongs to a network which has been disabled " "on this site." msgstr "" -#: include/follow.php:150 +#: include/follow.php:155 msgid "" "Limited profile. This person will be unable to receive direct/personal " "notifications from you." msgstr "" -#: include/follow.php:251 +#: include/follow.php:256 msgid "Unable to retrieve contact information." msgstr "" @@ -1892,7 +2370,7 @@ msgstr "" msgid "Create a new group" msgstr "" -#: include/group.php:293 mod/group.php:98 mod/group.php:188 +#: include/group.php:293 mod/group.php:99 mod/group.php:196 msgid "Group Name: " msgstr "" @@ -1900,7 +2378,7 @@ msgstr "" msgid "Contacts not in any group" msgstr "" -#: include/group.php:297 mod/network.php:200 +#: include/group.php:297 mod/network.php:207 msgid "add" msgstr "" @@ -1912,1092 +2390,234 @@ msgstr "" msgid "Requested profile is not available." msgstr "" -#: include/identity.php:96 include/identity.php:314 include/identity.php:737 +#: include/identity.php:96 include/identity.php:319 include/identity.php:740 msgid "Edit profile" msgstr "" -#: include/identity.php:254 +#: include/identity.php:259 msgid "Atom feed" msgstr "" -#: include/identity.php:285 include/nav.php:189 -msgid "Profiles" -msgstr "" - -#: include/identity.php:285 +#: include/identity.php:290 msgid "Manage/edit profiles" msgstr "" -#: include/identity.php:290 include/identity.php:316 mod/profiles.php:789 +#: include/identity.php:295 include/identity.php:321 mod/profiles.php:787 msgid "Change profile photo" msgstr "" -#: include/identity.php:291 mod/profiles.php:790 +#: include/identity.php:296 mod/profiles.php:788 msgid "Create New Profile" msgstr "" -#: include/identity.php:301 mod/profiles.php:779 +#: include/identity.php:306 mod/profiles.php:777 msgid "Profile Image" msgstr "" -#: include/identity.php:304 mod/profiles.php:781 +#: include/identity.php:309 mod/profiles.php:779 msgid "visible to everybody" msgstr "" -#: include/identity.php:305 mod/profiles.php:683 mod/profiles.php:782 +#: include/identity.php:310 mod/profiles.php:684 mod/profiles.php:780 msgid "Edit visibility" msgstr "" -#: include/identity.php:333 include/identity.php:628 mod/directory.php:141 -#: mod/notifications.php:244 +#: include/identity.php:338 include/identity.php:633 mod/directory.php:141 +#: mod/notifications.php:250 msgid "Gender:" msgstr "" -#: include/identity.php:336 include/identity.php:648 mod/directory.php:143 +#: include/identity.php:341 include/identity.php:651 mod/directory.php:143 msgid "Status:" msgstr "" -#: include/identity.php:338 include/identity.php:664 mod/directory.php:145 +#: include/identity.php:343 include/identity.php:667 mod/directory.php:145 msgid "Homepage:" msgstr "" -#: include/identity.php:340 include/identity.php:684 mod/contacts.php:640 -#: mod/directory.php:147 mod/notifications.php:240 +#: include/identity.php:345 include/identity.php:687 mod/contacts.php:640 +#: mod/directory.php:147 mod/notifications.php:246 msgid "About:" msgstr "" -#: include/identity.php:342 mod/contacts.php:638 +#: include/identity.php:347 mod/contacts.php:638 msgid "XMPP:" msgstr "" -#: include/identity.php:428 mod/contacts.php:55 mod/notifications.php:252 +#: include/identity.php:433 mod/contacts.php:55 mod/notifications.php:258 msgid "Network:" msgstr "" -#: include/identity.php:457 include/identity.php:547 +#: include/identity.php:462 include/identity.php:552 msgid "g A l F d" msgstr "" -#: include/identity.php:458 include/identity.php:548 +#: include/identity.php:463 include/identity.php:553 msgid "F d" msgstr "" -#: include/identity.php:509 include/identity.php:594 +#: include/identity.php:514 include/identity.php:599 msgid "[today]" msgstr "" -#: include/identity.php:521 +#: include/identity.php:526 msgid "Birthday Reminders" msgstr "" -#: include/identity.php:522 +#: include/identity.php:527 msgid "Birthdays this week:" msgstr "" -#: include/identity.php:581 +#: include/identity.php:586 msgid "[No description]" msgstr "" -#: include/identity.php:605 +#: include/identity.php:610 msgid "Event Reminders" msgstr "" -#: include/identity.php:606 +#: include/identity.php:611 msgid "Events this week:" msgstr "" -#: include/identity.php:617 include/identity.php:741 include/identity.php:774 -#: include/nav.php:82 mod/contacts.php:647 mod/contacts.php:849 -#: mod/newmember.php:32 mod/profperm.php:105 view/theme/frio/theme.php:247 -msgid "Profile" -msgstr "" - -#: include/identity.php:626 mod/settings.php:1286 +#: include/identity.php:631 mod/settings.php:1286 msgid "Full Name:" msgstr "" -#: include/identity.php:633 +#: include/identity.php:636 msgid "j F, Y" msgstr "" -#: include/identity.php:634 +#: include/identity.php:637 msgid "j F" msgstr "" -#: include/identity.php:645 +#: include/identity.php:648 msgid "Age:" msgstr "" -#: include/identity.php:656 +#: include/identity.php:659 #, php-format msgid "for %1$d %2$s" msgstr "" -#: include/identity.php:660 mod/profiles.php:702 +#: include/identity.php:663 mod/profiles.php:703 msgid "Sexual Preference:" msgstr "" -#: include/identity.php:668 mod/profiles.php:729 +#: include/identity.php:671 mod/profiles.php:730 msgid "Hometown:" msgstr "" -#: include/identity.php:672 mod/contacts.php:642 mod/follow.php:137 -#: mod/notifications.php:242 +#: include/identity.php:675 mod/contacts.php:642 mod/follow.php:137 +#: mod/notifications.php:248 msgid "Tags:" msgstr "" -#: include/identity.php:676 mod/profiles.php:730 +#: include/identity.php:679 mod/profiles.php:731 msgid "Political Views:" msgstr "" -#: include/identity.php:680 +#: include/identity.php:683 msgid "Religion:" msgstr "" -#: include/identity.php:688 +#: include/identity.php:691 msgid "Hobbies/Interests:" msgstr "" -#: include/identity.php:692 mod/profiles.php:734 +#: include/identity.php:695 mod/profiles.php:735 msgid "Likes:" msgstr "" -#: include/identity.php:696 mod/profiles.php:735 +#: include/identity.php:699 mod/profiles.php:736 msgid "Dislikes:" msgstr "" -#: include/identity.php:700 +#: include/identity.php:703 msgid "Contact information and Social Networks:" msgstr "" -#: include/identity.php:704 +#: include/identity.php:707 msgid "Musical interests:" msgstr "" -#: include/identity.php:708 +#: include/identity.php:711 msgid "Books, literature:" msgstr "" -#: include/identity.php:712 +#: include/identity.php:715 msgid "Television:" msgstr "" -#: include/identity.php:716 +#: include/identity.php:719 msgid "Film/dance/culture/entertainment:" msgstr "" -#: include/identity.php:720 +#: include/identity.php:723 msgid "Love/Romance:" msgstr "" -#: include/identity.php:724 +#: include/identity.php:727 msgid "Work/employment:" msgstr "" -#: include/identity.php:728 +#: include/identity.php:731 msgid "School/education:" msgstr "" -#: include/identity.php:733 +#: include/identity.php:736 msgid "Forums:" msgstr "" -#: include/identity.php:742 mod/events.php:514 +#: include/identity.php:745 mod/events.php:506 msgid "Basic" msgstr "" -#: include/identity.php:743 mod/admin.php:972 mod/contacts.php:878 -#: mod/events.php:515 +#: include/identity.php:746 mod/contacts.php:878 mod/events.php:507 +#: mod/admin.php:1059 msgid "Advanced" msgstr "" -#: include/identity.php:766 include/nav.php:81 mod/contacts.php:645 -#: mod/contacts.php:841 view/theme/frio/theme.php:246 -msgid "Status" -msgstr "" - -#: include/identity.php:769 mod/contacts.php:844 mod/follow.php:145 +#: include/identity.php:772 mod/contacts.php:844 mod/follow.php:145 msgid "Status Messages and Posts" msgstr "" -#: include/identity.php:777 mod/contacts.php:852 +#: include/identity.php:780 mod/contacts.php:852 msgid "Profile Details" msgstr "" -#: include/identity.php:782 include/nav.php:83 mod/fbrowser.php:31 -#: view/theme/frio/theme.php:248 -msgid "Photos" -msgstr "" - -#: include/identity.php:785 mod/photos.php:89 +#: include/identity.php:788 mod/photos.php:93 msgid "Photo Albums" msgstr "" -#: include/identity.php:790 include/identity.php:793 include/nav.php:84 -#: view/theme/frio/theme.php:249 -msgid "Videos" -msgstr "" - -#: include/identity.php:802 include/identity.php:813 include/nav.php:85 -#: include/nav.php:149 mod/cal.php:270 mod/events.php:386 -#: view/theme/frio/theme.php:250 view/theme/frio/theme.php:254 -msgid "Events" -msgstr "" - -#: include/identity.php:805 include/identity.php:816 include/nav.php:149 -#: view/theme/frio/theme.php:254 -msgid "Events and Calendar" -msgstr "" - -#: include/identity.php:824 mod/notes.php:47 +#: include/identity.php:827 mod/notes.php:47 msgid "Personal Notes" msgstr "" -#: include/identity.php:827 +#: include/identity.php:830 msgid "Only You Can See This" msgstr "" -#: include/identity.php:835 include/identity.php:838 include/nav.php:128 -#: include/nav.php:192 include/text.php:1024 mod/contacts.php:800 -#: mod/contacts.php:861 mod/viewcontacts.php:121 view/theme/frio/theme.php:257 -msgid "Contacts" -msgstr "" - -#: include/items.php:1584 mod/dfrn_confirm.php:735 mod/dfrn_request.php:754 -msgid "[Name Withheld]" -msgstr "" - -#: include/items.php:1939 mod/admin.php:240 mod/admin.php:1480 -#: mod/admin.php:1731 mod/display.php:103 mod/display.php:279 -#: mod/display.php:484 mod/notice.php:15 mod/viewsrc.php:15 -msgid "Item not found." -msgstr "" - -#: include/items.php:1978 -msgid "Do you really want to delete this item?" -msgstr "" - -#: include/items.php:1980 mod/api.php:105 mod/contacts.php:452 -#: mod/dfrn_request.php:875 mod/follow.php:113 mod/message.php:206 -#: mod/profiles.php:640 mod/profiles.php:643 mod/profiles.php:669 -#: mod/register.php:245 mod/settings.php:1171 mod/settings.php:1177 -#: mod/settings.php:1184 mod/settings.php:1188 mod/settings.php:1193 -#: mod/settings.php:1198 mod/settings.php:1203 mod/settings.php:1208 -#: mod/settings.php:1234 mod/settings.php:1235 mod/settings.php:1236 -#: mod/settings.php:1237 mod/settings.php:1238 mod/suggest.php:29 -msgid "Yes" -msgstr "" - -#: include/items.php:2143 index.php:407 mod/allfriends.php:12 mod/api.php:26 -#: mod/api.php:31 mod/attach.php:33 mod/cal.php:299 mod/common.php:18 -#: mod/contacts.php:360 mod/crepair.php:102 mod/delegate.php:12 -#: mod/dfrn_confirm.php:61 mod/dirfind.php:11 mod/display.php:481 -#: mod/editpost.php:10 mod/events.php:195 mod/follow.php:11 mod/follow.php:74 -#: mod/follow.php:158 mod/fsuggest.php:79 mod/group.php:19 mod/invite.php:15 -#: mod/invite.php:103 mod/item.php:193 mod/item.php:205 mod/manage.php:98 -#: mod/message.php:46 mod/message.php:171 mod/mood.php:115 mod/network.php:4 -#: mod/nogroup.php:27 mod/notes.php:23 mod/notifications.php:71 -#: mod/ostatus_subscribe.php:9 mod/photos.php:161 mod/photos.php:1092 -#: mod/poke.php:154 mod/profile_photo.php:19 mod/profile_photo.php:180 -#: mod/profile_photo.php:191 mod/profile_photo.php:204 mod/profiles.php:166 -#: mod/profiles.php:607 mod/register.php:42 mod/regmod.php:113 -#: mod/repair_ostatus.php:9 mod/settings.php:22 mod/settings.php:130 -#: mod/settings.php:668 mod/suggest.php:58 mod/uimport.php:24 -#: mod/viewcontacts.php:46 mod/wall_attach.php:67 mod/wall_attach.php:70 -#: mod/wall_upload.php:77 mod/wall_upload.php:80 mod/wallmessage.php:9 -#: mod/wallmessage.php:33 mod/wallmessage.php:73 mod/wallmessage.php:97 -msgid "Permission denied." -msgstr "" - -#: include/items.php:2248 -msgid "Archives" -msgstr "" - -#: include/like.php:41 -#, php-format -msgid "%1$s is attending %2$s's %3$s" -msgstr "" - -#: include/like.php:46 -#, php-format -msgid "%1$s is not attending %2$s's %3$s" -msgstr "" - -#: include/like.php:51 -#, php-format -msgid "%1$s may attend %2$s's %3$s" -msgstr "" - -#: include/message.php:15 include/message.php:169 -msgid "[no subject]" -msgstr "" - -#: include/nav.php:35 mod/navigation.php:19 -msgid "Nothing new here" -msgstr "" - -#: include/nav.php:39 mod/navigation.php:23 -msgid "Clear notifications" -msgstr "" - -#: include/nav.php:40 include/text.php:1017 -msgid "@name, !forum, #tags, content" -msgstr "" - -#: include/nav.php:78 view/theme/frio/theme.php:243 -msgid "End this session" -msgstr "" - -#: include/nav.php:81 include/nav.php:161 view/theme/frio/theme.php:246 -msgid "Your posts and conversations" -msgstr "" - -#: include/nav.php:82 view/theme/frio/theme.php:247 -msgid "Your profile page" -msgstr "" - -#: include/nav.php:83 view/theme/frio/theme.php:248 -msgid "Your photos" -msgstr "" - -#: include/nav.php:84 view/theme/frio/theme.php:249 -msgid "Your videos" -msgstr "" - -#: include/nav.php:85 view/theme/frio/theme.php:250 -msgid "Your events" -msgstr "" - -#: include/nav.php:86 -msgid "Personal notes" -msgstr "" - -#: include/nav.php:86 -msgid "Your personal notes" -msgstr "" - -#: include/nav.php:95 -msgid "Sign in" -msgstr "" - -#: include/nav.php:105 -msgid "Home Page" -msgstr "" - -#: include/nav.php:109 -msgid "Create an account" -msgstr "" - -#: include/nav.php:115 mod/help.php:47 view/theme/vier/theme.php:293 -msgid "Help" -msgstr "" - -#: include/nav.php:115 -msgid "Help and documentation" -msgstr "" - -#: include/nav.php:119 -msgid "Apps" -msgstr "" - -#: include/nav.php:119 -msgid "Addon applications, utilities, games" -msgstr "" - -#: include/nav.php:123 include/text.php:1014 mod/search.php:149 -msgid "Search" -msgstr "" - -#: include/nav.php:123 -msgid "Search site content" -msgstr "" - -#: include/nav.php:126 include/text.php:1022 -msgid "Full Text" -msgstr "" - -#: include/nav.php:127 include/text.php:1023 -msgid "Tags" -msgstr "" - -#: include/nav.php:143 include/nav.php:145 mod/community.php:36 -msgid "Community" -msgstr "" - -#: include/nav.php:143 -msgid "Conversations on this site" -msgstr "" - -#: include/nav.php:145 -msgid "Conversations on the network" -msgstr "" - -#: include/nav.php:152 -msgid "Directory" -msgstr "" - -#: include/nav.php:152 -msgid "People directory" -msgstr "" - -#: include/nav.php:154 -msgid "Information" -msgstr "" - -#: include/nav.php:154 -msgid "Information about this friendica instance" -msgstr "" - -#: include/nav.php:158 view/theme/frio/theme.php:253 -msgid "Conversations from your friends" -msgstr "" - -#: include/nav.php:159 -msgid "Network Reset" -msgstr "" - -#: include/nav.php:159 -msgid "Load Network page with no filters" -msgstr "" - -#: include/nav.php:166 -msgid "Friend Requests" -msgstr "" - -#: include/nav.php:169 mod/notifications.php:96 -msgid "Notifications" -msgstr "" - -#: include/nav.php:170 -msgid "See all notifications" -msgstr "" - -#: include/nav.php:171 mod/settings.php:906 -msgid "Mark as seen" -msgstr "" - -#: include/nav.php:171 -msgid "Mark all system notifications seen" -msgstr "" - -#: include/nav.php:175 mod/message.php:179 view/theme/frio/theme.php:255 -msgid "Messages" -msgstr "" - -#: include/nav.php:175 view/theme/frio/theme.php:255 -msgid "Private mail" -msgstr "" - -#: include/nav.php:176 -msgid "Inbox" -msgstr "" - -#: include/nav.php:177 -msgid "Outbox" -msgstr "" - -#: include/nav.php:178 mod/message.php:16 -msgid "New Message" -msgstr "" - -#: include/nav.php:181 -msgid "Manage" -msgstr "" - -#: include/nav.php:181 -msgid "Manage other pages" -msgstr "" - -#: include/nav.php:184 mod/settings.php:81 -msgid "Delegations" -msgstr "" - -#: include/nav.php:184 mod/delegate.php:130 -msgid "Delegate Page Management" -msgstr "" - -#: include/nav.php:186 mod/admin.php:1533 mod/admin.php:1809 -#: mod/newmember.php:22 mod/settings.php:111 view/theme/frio/theme.php:256 -msgid "Settings" -msgstr "" - -#: include/nav.php:186 view/theme/frio/theme.php:256 -msgid "Account settings" -msgstr "" - -#: include/nav.php:189 -msgid "Manage/Edit Profiles" -msgstr "" - -#: include/nav.php:192 view/theme/frio/theme.php:257 -msgid "Manage/edit friends and contacts" -msgstr "" - -#: include/nav.php:197 mod/admin.php:192 -msgid "Admin" -msgstr "" - -#: include/nav.php:197 -msgid "Site setup and configuration" -msgstr "" - -#: include/nav.php:200 -msgid "Navigation" -msgstr "" - -#: include/nav.php:200 -msgid "Site map" -msgstr "" - -#: include/network.php:622 +#: include/network.php:687 msgid "view full size" msgstr "" -#: include/oembed.php:266 +#: include/oembed.php:255 msgid "Embedded content" msgstr "" -#: include/oembed.php:274 +#: include/oembed.php:263 msgid "Embedding disabled" msgstr "" -#: include/ostatus.php:1832 -#, php-format -msgid "%s is now following %s." -msgstr "" - -#: include/ostatus.php:1833 -msgid "following" -msgstr "" - -#: include/ostatus.php:1836 -#, php-format -msgid "%s stopped following %s." -msgstr "" - -#: include/ostatus.php:1837 -msgid "stopped following" -msgstr "" - -#: include/photos.php:57 include/photos.php:67 mod/fbrowser.php:40 -#: mod/fbrowser.php:61 mod/photos.php:182 mod/photos.php:1106 -#: mod/photos.php:1231 mod/photos.php:1252 mod/photos.php:1817 -#: mod/photos.php:1829 +#: include/photos.php:57 include/photos.php:66 mod/fbrowser.php:40 +#: mod/fbrowser.php:61 mod/photos.php:187 mod/photos.php:1123 +#: mod/photos.php:1256 mod/photos.php:1277 mod/photos.php:1839 +#: mod/photos.php:1853 msgid "Contact Photos" msgstr "" -#: include/plugin.php:530 include/plugin.php:532 -msgid "Click here to upgrade." -msgstr "" - -#: include/plugin.php:538 -msgid "This action exceeds the limits set by your subscription plan." -msgstr "" - -#: include/plugin.php:543 -msgid "This action is not available under your subscription plan." -msgstr "" - -#: include/profile_selectors.php:6 -msgid "Male" -msgstr "" - -#: include/profile_selectors.php:6 -msgid "Female" -msgstr "" - -#: include/profile_selectors.php:6 -msgid "Currently Male" -msgstr "" - -#: include/profile_selectors.php:6 -msgid "Currently Female" -msgstr "" - -#: include/profile_selectors.php:6 -msgid "Mostly Male" -msgstr "" - -#: include/profile_selectors.php:6 -msgid "Mostly Female" -msgstr "" - -#: include/profile_selectors.php:6 -msgid "Transgender" -msgstr "" - -#: include/profile_selectors.php:6 -msgid "Intersex" -msgstr "" - -#: include/profile_selectors.php:6 -msgid "Transsexual" -msgstr "" - -#: include/profile_selectors.php:6 -msgid "Hermaphrodite" -msgstr "" - -#: include/profile_selectors.php:6 -msgid "Neuter" -msgstr "" - -#: include/profile_selectors.php:6 -msgid "Non-specific" -msgstr "" - -#: include/profile_selectors.php:6 -msgid "Other" -msgstr "" - -#: include/profile_selectors.php:23 -msgid "Males" -msgstr "" - -#: include/profile_selectors.php:23 -msgid "Females" -msgstr "" - -#: include/profile_selectors.php:23 -msgid "Gay" -msgstr "" - -#: include/profile_selectors.php:23 -msgid "Lesbian" -msgstr "" - -#: include/profile_selectors.php:23 -msgid "No Preference" -msgstr "" - -#: include/profile_selectors.php:23 -msgid "Bisexual" -msgstr "" - -#: include/profile_selectors.php:23 -msgid "Autosexual" -msgstr "" - -#: include/profile_selectors.php:23 -msgid "Abstinent" -msgstr "" - -#: include/profile_selectors.php:23 -msgid "Virgin" -msgstr "" - -#: include/profile_selectors.php:23 -msgid "Deviant" -msgstr "" - -#: include/profile_selectors.php:23 -msgid "Fetish" -msgstr "" - -#: include/profile_selectors.php:23 -msgid "Oodles" -msgstr "" - -#: include/profile_selectors.php:23 -msgid "Nonsexual" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Single" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Lonely" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Available" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Unavailable" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Has crush" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Infatuated" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Dating" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Unfaithful" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Sex Addict" -msgstr "" - -#: include/profile_selectors.php:42 include/user.php:280 include/user.php:284 -msgid "Friends" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Friends/Benefits" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Casual" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Engaged" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Married" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Imaginarily married" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Partners" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Cohabiting" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Common law" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Happy" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Not looking" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Swinger" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Betrayed" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Separated" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Unstable" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Divorced" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Imaginarily divorced" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Widowed" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Uncertain" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "It's complicated" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Don't care" -msgstr "" - -#: include/profile_selectors.php:42 -msgid "Ask me" -msgstr "" - -#: include/security.php:61 -msgid "Welcome " -msgstr "" - -#: include/security.php:62 -msgid "Please upload a profile photo." -msgstr "" - -#: include/security.php:65 -msgid "Welcome back " -msgstr "" - -#: include/security.php:429 -msgid "" -"The form security token was not correct. This probably happened because the " -"form has been opened for too long (>3 hours) before submitting it." -msgstr "" - -#: include/text.php:307 -msgid "newer" -msgstr "" - -#: include/text.php:308 -msgid "older" -msgstr "" - -#: include/text.php:313 -msgid "first" -msgstr "" - -#: include/text.php:314 -msgid "prev" -msgstr "" - -#: include/text.php:348 -msgid "next" -msgstr "" - -#: include/text.php:349 -msgid "last" -msgstr "" - -#: include/text.php:403 -msgid "Loading more entries..." -msgstr "" - -#: include/text.php:404 -msgid "The end" -msgstr "" - -#: include/text.php:889 -msgid "No contacts" -msgstr "" - -#: include/text.php:914 -#, php-format -msgid "%d Contact" -msgid_plural "%d Contacts" -msgstr[0] "" -msgstr[1] "" - -#: include/text.php:927 -msgid "View Contacts" -msgstr "" - -#: include/text.php:1015 mod/editpost.php:99 mod/filer.php:31 mod/notes.php:62 -msgid "Save" -msgstr "" - -#: include/text.php:1078 -msgid "poke" -msgstr "" - -#: include/text.php:1078 -msgid "poked" -msgstr "" - -#: include/text.php:1079 -msgid "ping" -msgstr "" - -#: include/text.php:1079 -msgid "pinged" -msgstr "" - -#: include/text.php:1080 -msgid "prod" -msgstr "" - -#: include/text.php:1080 -msgid "prodded" -msgstr "" - -#: include/text.php:1081 -msgid "slap" -msgstr "" - -#: include/text.php:1081 -msgid "slapped" -msgstr "" - -#: include/text.php:1082 -msgid "finger" -msgstr "" - -#: include/text.php:1082 -msgid "fingered" -msgstr "" - -#: include/text.php:1083 -msgid "rebuff" -msgstr "" - -#: include/text.php:1083 -msgid "rebuffed" -msgstr "" - -#: include/text.php:1097 -msgid "happy" -msgstr "" - -#: include/text.php:1098 -msgid "sad" -msgstr "" - -#: include/text.php:1099 -msgid "mellow" -msgstr "" - -#: include/text.php:1100 -msgid "tired" -msgstr "" - -#: include/text.php:1101 -msgid "perky" -msgstr "" - -#: include/text.php:1102 -msgid "angry" -msgstr "" - -#: include/text.php:1103 -msgid "stupified" -msgstr "" - -#: include/text.php:1104 -msgid "puzzled" -msgstr "" - -#: include/text.php:1105 -msgid "interested" -msgstr "" - -#: include/text.php:1106 -msgid "bitter" -msgstr "" - -#: include/text.php:1107 -msgid "cheerful" -msgstr "" - -#: include/text.php:1108 -msgid "alive" -msgstr "" - -#: include/text.php:1109 -msgid "annoyed" -msgstr "" - -#: include/text.php:1110 -msgid "anxious" -msgstr "" - -#: include/text.php:1111 -msgid "cranky" -msgstr "" - -#: include/text.php:1112 -msgid "disturbed" -msgstr "" - -#: include/text.php:1113 -msgid "frustrated" -msgstr "" - -#: include/text.php:1114 -msgid "motivated" -msgstr "" - -#: include/text.php:1115 -msgid "relaxed" -msgstr "" - -#: include/text.php:1116 -msgid "surprised" -msgstr "" - -#: include/text.php:1326 mod/videos.php:384 -msgid "View Video" -msgstr "" - -#: include/text.php:1358 -msgid "bytes" -msgstr "" - -#: include/text.php:1390 include/text.php:1402 -msgid "Click to open/close" -msgstr "" - -#: include/text.php:1528 -msgid "View on separate page" -msgstr "" - -#: include/text.php:1529 -msgid "view on separate page" -msgstr "" - -#: include/text.php:1808 -msgid "activity" -msgstr "" - -#: include/text.php:1810 mod/content.php:623 object/Item.php:419 -#: object/Item.php:431 -msgid "comment" -msgid_plural "comments" -msgstr[0] "" -msgstr[1] "" - -#: include/text.php:1811 -msgid "post" -msgstr "" - -#: include/text.php:1979 -msgid "Item filed" -msgstr "" - -#: include/uimport.php:91 -msgid "Error decoding account file" -msgstr "" - -#: include/uimport.php:97 -msgid "Error! No version data in file! This is not a Friendica account file?" -msgstr "" - -#: include/uimport.php:113 include/uimport.php:124 -msgid "Error! Cannot check nickname" -msgstr "" - -#: include/uimport.php:117 include/uimport.php:128 -#, php-format -msgid "User '%s' already exists on this server!" -msgstr "" - -#: include/uimport.php:150 -msgid "User creation error" -msgstr "" - -#: include/uimport.php:170 -msgid "User profile creation error" -msgstr "" - -#: include/uimport.php:219 -#, php-format -msgid "%d contact not imported" -msgid_plural "%d contacts not imported" -msgstr[0] "" -msgstr[1] "" - -#: include/uimport.php:289 -msgid "Done. You can now login with your username and password" -msgstr "" - #: include/user.php:39 mod/settings.php:375 msgid "Passwords do not match. Password unchanged." msgstr "" @@ -3026,61 +2646,62 @@ msgstr "" msgid "Name too short." msgstr "" -#: include/user.php:113 +#: include/user.php:106 msgid "That doesn't appear to be your full (First Last) name." msgstr "" -#: include/user.php:118 +#: include/user.php:111 msgid "Your email domain is not among those allowed on this site." msgstr "" -#: include/user.php:121 +#: include/user.php:114 msgid "Not a valid email address." msgstr "" -#: include/user.php:134 +#: include/user.php:127 msgid "Cannot use that email." msgstr "" -#: include/user.php:140 +#: include/user.php:133 msgid "Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"." msgstr "" -#: include/user.php:147 include/user.php:245 +#: include/user.php:140 include/user.php:228 msgid "Nickname is already registered. Please choose another." msgstr "" -#: include/user.php:157 +#: include/user.php:150 msgid "" "Nickname was once registered here and may not be re-used. Please choose " "another." msgstr "" -#: include/user.php:173 +#: include/user.php:166 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "" -#: include/user.php:231 +#: include/user.php:214 msgid "An error occurred during registration. Please try again." msgstr "" -#: include/user.php:256 view/theme/duepuntozero/config.php:43 +#: include/user.php:239 view/theme/duepuntozero/config.php:43 msgid "default" msgstr "" -#: include/user.php:266 +#: include/user.php:249 msgid "An error occurred creating your default profile. Please try again." msgstr "" -#: include/user.php:326 include/user.php:334 include/user.php:342 -#: mod/photos.php:68 mod/photos.php:182 mod/photos.php:768 mod/photos.php:1231 -#: mod/photos.php:1252 mod/photos.php:1839 mod/profile_photo.php:74 -#: mod/profile_photo.php:82 mod/profile_photo.php:90 mod/profile_photo.php:215 -#: mod/profile_photo.php:310 mod/profile_photo.php:320 +#: include/user.php:309 include/user.php:317 include/user.php:325 +#: mod/profile_photo.php:74 mod/profile_photo.php:82 mod/profile_photo.php:90 +#: mod/profile_photo.php:215 mod/profile_photo.php:310 +#: mod/profile_photo.php:320 mod/photos.php:71 mod/photos.php:187 +#: mod/photos.php:774 mod/photos.php:1256 mod/photos.php:1277 +#: mod/photos.php:1863 msgid "Profile Photos" msgstr "" -#: include/user.php:417 +#: include/user.php:400 #, php-format msgid "" "\n" @@ -3090,12 +2711,12 @@ msgid "" "\t" msgstr "" -#: include/user.php:427 +#: include/user.php:410 #, php-format msgid "Registration at %s" msgstr "" -#: include/user.php:437 +#: include/user.php:420 #, php-format msgid "" "\n" @@ -3104,7 +2725,7 @@ msgid "" "\t" msgstr "" -#: include/user.php:441 +#: include/user.php:424 #, php-format msgid "" "\n" @@ -3139,1392 +2760,352 @@ msgid "" "\t\tThank you and welcome to %2$s." msgstr "" -#: include/user.php:473 mod/admin.php:1223 +#: include/user.php:456 mod/admin.php:1308 #, php-format msgid "Registration details for %s" msgstr "" -#: index.php:248 mod/apps.php:7 -msgid "You must be logged in to use addons. " +#: include/dbstructure.php:20 +msgid "There are no tables on MyISAM." msgstr "" -#: index.php:292 mod/fetch.php:12 mod/fetch.php:39 mod/fetch.php:48 -#: mod/help.php:53 mod/p.php:16 mod/p.php:43 mod/p.php:52 -msgid "Not Found" -msgstr "" - -#: index.php:295 mod/help.php:56 -msgid "Page not found." -msgstr "" - -#: index.php:406 mod/group.php:76 mod/profperm.php:20 -msgid "Permission denied" -msgstr "" - -#: index.php:457 -msgid "toggle mobile" -msgstr "" - -#: mod/admin.php:96 -msgid "Theme settings updated." -msgstr "" - -#: mod/admin.php:162 mod/admin.php:967 -msgid "Site" -msgstr "" - -#: mod/admin.php:163 mod/admin.php:901 mod/admin.php:1413 mod/admin.php:1429 -msgid "Users" -msgstr "" - -#: mod/admin.php:164 mod/admin.php:1531 mod/admin.php:1594 mod/settings.php:74 -msgid "Plugins" -msgstr "" - -#: mod/admin.php:165 mod/admin.php:1807 mod/admin.php:1857 -msgid "Themes" -msgstr "" - -#: mod/admin.php:166 mod/settings.php:52 -msgid "Additional features" -msgstr "" - -#: mod/admin.php:167 -msgid "DB updates" -msgstr "" - -#: mod/admin.php:168 mod/admin.php:416 -msgid "Inspect Queue" -msgstr "" - -#: mod/admin.php:169 mod/admin.php:382 -msgid "Federation Statistics" -msgstr "" - -#: mod/admin.php:183 mod/admin.php:194 mod/admin.php:1931 -msgid "Logs" -msgstr "" - -#: mod/admin.php:184 mod/admin.php:1999 -msgid "View Logs" -msgstr "" - -#: mod/admin.php:185 -msgid "probe address" -msgstr "" - -#: mod/admin.php:186 -msgid "check webfinger" -msgstr "" - -#: mod/admin.php:193 -msgid "Plugin Features" -msgstr "" - -#: mod/admin.php:195 -msgid "diagnostics" -msgstr "" - -#: mod/admin.php:196 -msgid "User registrations waiting for confirmation" -msgstr "" - -#: mod/admin.php:312 -msgid "unknown" -msgstr "" - -#: mod/admin.php:375 -msgid "" -"This page offers you some numbers to the known part of the federated social " -"network your Friendica node is part of. These numbers are not complete but " -"only reflect the part of the network your node is aware of." -msgstr "" - -#: mod/admin.php:376 -msgid "" -"The Auto Discovered Contact Directory feature is not enabled, it " -"will improve the data displayed here." -msgstr "" - -#: mod/admin.php:381 mod/admin.php:415 mod/admin.php:493 mod/admin.php:966 -#: mod/admin.php:1412 mod/admin.php:1530 mod/admin.php:1593 mod/admin.php:1806 -#: mod/admin.php:1856 mod/admin.php:1930 mod/admin.php:1998 -msgid "Administration" -msgstr "" - -#: mod/admin.php:388 -#, php-format -msgid "Currently this node is aware of %d nodes from the following platforms:" -msgstr "" - -#: mod/admin.php:418 -msgid "ID" -msgstr "" - -#: mod/admin.php:419 -msgid "Recipient Name" -msgstr "" - -#: mod/admin.php:420 -msgid "Recipient Profile" -msgstr "" - -#: mod/admin.php:422 -msgid "Created" -msgstr "" - -#: mod/admin.php:423 -msgid "Last Tried" -msgstr "" - -#: mod/admin.php:424 -msgid "" -"This page lists the content of the queue for outgoing postings. These are " -"postings the initial delivery failed for. They will be resend later and " -"eventually deleted if the delivery fails permanently." -msgstr "" - -#: mod/admin.php:449 -#, php-format -msgid "" -"Your DB still runs with MyISAM tables. You should change the engine type to " -"InnoDB. As Friendica will use InnoDB only features in the future, you should " -"change this! See here for a guide that may be helpful " -"converting the table engines. You may also use the convert_innodb.sql in the /util directory of your Friendica installation.
" -msgstr "" - -#: mod/admin.php:454 -msgid "" -"You are using a MySQL version which does not support all features that " -"Friendica uses. You should consider switching to MariaDB." -msgstr "" - -#: mod/admin.php:458 mod/admin.php:1362 -msgid "Normal Account" -msgstr "" - -#: mod/admin.php:459 mod/admin.php:1363 -msgid "Soapbox Account" -msgstr "" - -#: mod/admin.php:460 mod/admin.php:1364 -msgid "Community/Celebrity Account" -msgstr "" - -#: mod/admin.php:461 mod/admin.php:1365 -msgid "Automatic Friend Account" -msgstr "" - -#: mod/admin.php:462 -msgid "Blog Account" -msgstr "" - -#: mod/admin.php:463 -msgid "Private Forum" -msgstr "" - -#: mod/admin.php:488 -msgid "Message queues" -msgstr "" - -#: mod/admin.php:494 -msgid "Summary" -msgstr "" - -#: mod/admin.php:496 -msgid "Registered users" -msgstr "" - -#: mod/admin.php:498 -msgid "Pending registrations" -msgstr "" - -#: mod/admin.php:499 -msgid "Version" -msgstr "" - -#: mod/admin.php:504 -msgid "Active plugins" -msgstr "" - -#: mod/admin.php:529 -msgid "Can not parse base url. Must have at least ://" -msgstr "" - -#: mod/admin.php:819 -msgid "RINO2 needs mcrypt php extension to work." -msgstr "" - -#: mod/admin.php:827 -msgid "Site settings updated." -msgstr "" - -#: mod/admin.php:855 mod/settings.php:943 -msgid "No special theme for mobile devices" -msgstr "" - -#: mod/admin.php:884 -msgid "No community page" -msgstr "" - -#: mod/admin.php:885 -msgid "Public postings from users of this site" -msgstr "" - -#: mod/admin.php:886 -msgid "Global community page" -msgstr "" - -#: mod/admin.php:891 mod/contacts.php:538 -msgid "Never" -msgstr "" - -#: mod/admin.php:892 -msgid "At post arrival" -msgstr "" - -#: mod/admin.php:900 mod/contacts.php:565 -msgid "Disabled" -msgstr "" - -#: mod/admin.php:902 -msgid "Users, Global Contacts" -msgstr "" - -#: mod/admin.php:903 -msgid "Users, Global Contacts/fallback" -msgstr "" - -#: mod/admin.php:907 -msgid "One month" -msgstr "" - -#: mod/admin.php:908 -msgid "Three months" -msgstr "" - -#: mod/admin.php:909 -msgid "Half a year" -msgstr "" - -#: mod/admin.php:910 -msgid "One year" -msgstr "" - -#: mod/admin.php:915 -msgid "Multi user instance" -msgstr "" - -#: mod/admin.php:938 -msgid "Closed" -msgstr "" - -#: mod/admin.php:939 -msgid "Requires approval" -msgstr "" - -#: mod/admin.php:940 -msgid "Open" -msgstr "" - -#: mod/admin.php:944 -msgid "No SSL policy, links will track page SSL state" -msgstr "" - -#: mod/admin.php:945 -msgid "Force all links to use SSL" -msgstr "" - -#: mod/admin.php:946 -msgid "Self-signed certificate, use SSL for local links only (discouraged)" -msgstr "" - -#: mod/admin.php:968 mod/admin.php:1595 mod/admin.php:1858 mod/admin.php:1932 -#: mod/admin.php:2085 mod/settings.php:681 mod/settings.php:792 -#: mod/settings.php:841 mod/settings.php:908 mod/settings.php:1005 -#: mod/settings.php:1271 -msgid "Save Settings" -msgstr "" - -#: mod/admin.php:969 mod/register.php:272 -msgid "Registration" -msgstr "" - -#: mod/admin.php:970 -msgid "File upload" -msgstr "" - -#: mod/admin.php:971 -msgid "Policies" -msgstr "" - -#: mod/admin.php:973 -msgid "Auto Discovered Contact Directory" -msgstr "" - -#: mod/admin.php:974 -msgid "Performance" -msgstr "" - -#: mod/admin.php:975 -msgid "Worker" -msgstr "" - -#: mod/admin.php:976 -msgid "" -"Relocate - WARNING: advanced function. Could make this server unreachable." -msgstr "" - -#: mod/admin.php:979 -msgid "Site name" -msgstr "" - -#: mod/admin.php:980 -msgid "Host name" -msgstr "" - -#: mod/admin.php:981 -msgid "Sender Email" -msgstr "" - -#: mod/admin.php:981 -msgid "" -"The email address your server shall use to send notification emails from." -msgstr "" - -#: mod/admin.php:982 -msgid "Banner/Logo" -msgstr "" - -#: mod/admin.php:983 -msgid "Shortcut icon" -msgstr "" - -#: mod/admin.php:983 -msgid "Link to an icon that will be used for browsers." -msgstr "" - -#: mod/admin.php:984 -msgid "Touch icon" -msgstr "" - -#: mod/admin.php:984 -msgid "Link to an icon that will be used for tablets and mobiles." -msgstr "" - -#: mod/admin.php:985 -msgid "Additional Info" -msgstr "" - -#: mod/admin.php:985 -#, php-format -msgid "" -"For public servers: you can add additional information here that will be " -"listed at %s/siteinfo." -msgstr "" - -#: mod/admin.php:986 -msgid "System language" -msgstr "" - -#: mod/admin.php:987 -msgid "System theme" -msgstr "" - -#: mod/admin.php:987 -msgid "" -"Default system theme - may be over-ridden by user profiles - change theme settings" -msgstr "" - -#: mod/admin.php:988 -msgid "Mobile system theme" -msgstr "" - -#: mod/admin.php:988 -msgid "Theme for mobile devices" -msgstr "" - -#: mod/admin.php:989 -msgid "SSL link policy" -msgstr "" - -#: mod/admin.php:989 -msgid "Determines whether generated links should be forced to use SSL" -msgstr "" - -#: mod/admin.php:990 -msgid "Force SSL" -msgstr "" - -#: mod/admin.php:990 -msgid "" -"Force all Non-SSL requests to SSL - Attention: on some systems it could lead " -"to endless loops." -msgstr "" - -#: mod/admin.php:991 -msgid "Hide help entry from navigation menu" -msgstr "" - -#: mod/admin.php:991 -msgid "" -"Hides the menu entry for the Help pages from the navigation menu. You can " -"still access it calling /help directly." -msgstr "" - -#: mod/admin.php:992 -msgid "Single user instance" -msgstr "" - -#: mod/admin.php:992 -msgid "Make this instance multi-user or single-user for the named user" -msgstr "" - -#: mod/admin.php:993 -msgid "Maximum image size" -msgstr "" - -#: mod/admin.php:993 -msgid "" -"Maximum size in bytes of uploaded images. Default is 0, which means no " -"limits." -msgstr "" - -#: mod/admin.php:994 -msgid "Maximum image length" -msgstr "" - -#: mod/admin.php:994 -msgid "" -"Maximum length in pixels of the longest side of uploaded images. Default is " -"-1, which means no limits." -msgstr "" - -#: mod/admin.php:995 -msgid "JPEG image quality" -msgstr "" - -#: mod/admin.php:995 -msgid "" -"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is " -"100, which is full quality." -msgstr "" - -#: mod/admin.php:997 -msgid "Register policy" -msgstr "" - -#: mod/admin.php:998 -msgid "Maximum Daily Registrations" -msgstr "" - -#: mod/admin.php:998 -msgid "" -"If registration is permitted above, this sets the maximum number of new user " -"registrations to accept per day. If register is set to closed, this setting " -"has no effect." -msgstr "" - -#: mod/admin.php:999 -msgid "Register text" -msgstr "" - -#: mod/admin.php:999 -msgid "Will be displayed prominently on the registration page." -msgstr "" - -#: mod/admin.php:1000 -msgid "Accounts abandoned after x days" -msgstr "" - -#: mod/admin.php:1000 -msgid "" -"Will not waste system resources polling external sites for abandonded " -"accounts. Enter 0 for no time limit." -msgstr "" - -#: mod/admin.php:1001 -msgid "Allowed friend domains" -msgstr "" - -#: mod/admin.php:1001 -msgid "" -"Comma separated list of domains which are allowed to establish friendships " -"with this site. Wildcards are accepted. Empty to allow any domains" -msgstr "" - -#: mod/admin.php:1002 -msgid "Allowed email domains" -msgstr "" - -#: mod/admin.php:1002 -msgid "" -"Comma separated list of domains which are allowed in email addresses for " -"registrations to this site. Wildcards are accepted. Empty to allow any " -"domains" -msgstr "" - -#: mod/admin.php:1003 -msgid "Block public" -msgstr "" - -#: mod/admin.php:1003 -msgid "" -"Check to block public access to all otherwise public personal pages on this " -"site unless you are currently logged in." -msgstr "" - -#: mod/admin.php:1004 -msgid "Force publish" -msgstr "" - -#: mod/admin.php:1004 -msgid "" -"Check to force all profiles on this site to be listed in the site directory." -msgstr "" - -#: mod/admin.php:1005 -msgid "Global directory URL" -msgstr "" - -#: mod/admin.php:1005 -msgid "" -"URL to the global directory. If this is not set, the global directory is " -"completely unavailable to the application." -msgstr "" - -#: mod/admin.php:1006 -msgid "Allow threaded items" -msgstr "" - -#: mod/admin.php:1006 -msgid "Allow infinite level threading for items on this site." -msgstr "" - -#: mod/admin.php:1007 -msgid "Private posts by default for new users" -msgstr "" - -#: mod/admin.php:1007 -msgid "" -"Set default post permissions for all new members to the default privacy " -"group rather than public." -msgstr "" - -#: mod/admin.php:1008 -msgid "Don't include post content in email notifications" -msgstr "" - -#: mod/admin.php:1008 -msgid "" -"Don't include the content of a post/comment/private message/etc. in the " -"email notifications that are sent out from this site, as a privacy measure." -msgstr "" - -#: mod/admin.php:1009 -msgid "Disallow public access to addons listed in the apps menu." -msgstr "" - -#: mod/admin.php:1009 -msgid "" -"Checking this box will restrict addons listed in the apps menu to members " -"only." -msgstr "" - -#: mod/admin.php:1010 -msgid "Don't embed private images in posts" -msgstr "" - -#: mod/admin.php:1010 -msgid "" -"Don't replace locally-hosted private photos in posts with an embedded copy " -"of the image. This means that contacts who receive posts containing private " -"photos will have to authenticate and load each image, which may take a while." -msgstr "" - -#: mod/admin.php:1011 -msgid "Allow Users to set remote_self" -msgstr "" - -#: mod/admin.php:1011 -msgid "" -"With checking this, every user is allowed to mark every contact as a " -"remote_self in the repair contact dialog. Setting this flag on a contact " -"causes mirroring every posting of that contact in the users stream." -msgstr "" - -#: mod/admin.php:1012 -msgid "Block multiple registrations" -msgstr "" - -#: mod/admin.php:1012 -msgid "Disallow users to register additional accounts for use as pages." -msgstr "" - -#: mod/admin.php:1013 -msgid "OpenID support" -msgstr "" - -#: mod/admin.php:1013 -msgid "OpenID support for registration and logins." -msgstr "" - -#: mod/admin.php:1014 -msgid "Fullname check" -msgstr "" - -#: mod/admin.php:1014 -msgid "" -"Force users to register with a space between firstname and lastname in Full " -"name, as an antispam measure" -msgstr "" - -#: mod/admin.php:1015 -msgid "UTF-8 Regular expressions" -msgstr "" - -#: mod/admin.php:1015 -msgid "Use PHP UTF8 regular expressions" -msgstr "" - -#: mod/admin.php:1016 -msgid "Community Page Style" -msgstr "" - -#: mod/admin.php:1016 -msgid "" -"Type of community page to show. 'Global community' shows every public " -"posting from an open distributed network that arrived on this server." -msgstr "" - -#: mod/admin.php:1017 -msgid "Posts per user on community page" -msgstr "" - -#: mod/admin.php:1017 -msgid "" -"The maximum number of posts per user on the community page. (Not valid for " -"'Global Community')" -msgstr "" - -#: mod/admin.php:1018 -msgid "Enable OStatus support" -msgstr "" - -#: mod/admin.php:1018 -msgid "" -"Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " -"communications in OStatus are public, so privacy warnings will be " -"occasionally displayed." -msgstr "" - -#: mod/admin.php:1019 -msgid "OStatus conversation completion interval" -msgstr "" - -#: mod/admin.php:1019 -msgid "" -"How often shall the poller check for new entries in OStatus conversations? " -"This can be a very ressource task." -msgstr "" - -#: mod/admin.php:1020 -msgid "Only import OStatus threads from our contacts" -msgstr "" - -#: mod/admin.php:1020 -msgid "" -"Normally we import every content from our OStatus contacts. With this option " -"we only store threads that are started by a contact that is known on our " -"system." -msgstr "" - -#: mod/admin.php:1021 -msgid "OStatus support can only be enabled if threading is enabled." -msgstr "" - -#: mod/admin.php:1023 -msgid "" -"Diaspora support can't be enabled because Friendica was installed into a sub " -"directory." -msgstr "" - -#: mod/admin.php:1024 -msgid "Enable Diaspora support" -msgstr "" - -#: mod/admin.php:1024 -msgid "Provide built-in Diaspora network compatibility." -msgstr "" - -#: mod/admin.php:1025 -msgid "Only allow Friendica contacts" -msgstr "" - -#: mod/admin.php:1025 -msgid "" -"All contacts must use Friendica protocols. All other built-in communication " -"protocols disabled." -msgstr "" - -#: mod/admin.php:1026 -msgid "Verify SSL" -msgstr "" - -#: mod/admin.php:1026 -msgid "" -"If you wish, you can turn on strict certificate checking. This will mean you " -"cannot connect (at all) to self-signed SSL sites." -msgstr "" - -#: mod/admin.php:1027 -msgid "Proxy user" -msgstr "" - -#: mod/admin.php:1028 -msgid "Proxy URL" -msgstr "" - -#: mod/admin.php:1029 -msgid "Network timeout" -msgstr "" - -#: mod/admin.php:1029 -msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." -msgstr "" - -#: mod/admin.php:1030 -msgid "Maximum Load Average" -msgstr "" - -#: mod/admin.php:1030 -msgid "" -"Maximum system load before delivery and poll processes are deferred - " -"default 50." -msgstr "" - -#: mod/admin.php:1031 -msgid "Maximum Load Average (Frontend)" -msgstr "" - -#: mod/admin.php:1031 -msgid "Maximum system load before the frontend quits service - default 50." -msgstr "" - -#: mod/admin.php:1032 -msgid "Maximum table size for optimization" -msgstr "" - -#: mod/admin.php:1032 -msgid "" -"Maximum table size (in MB) for the automatic optimization - default 100 MB. " -"Enter -1 to disable it." -msgstr "" - -#: mod/admin.php:1033 -msgid "Minimum level of fragmentation" -msgstr "" - -#: mod/admin.php:1033 -msgid "" -"Minimum fragmenation level to start the automatic optimization - default " -"value is 30%." -msgstr "" - -#: mod/admin.php:1035 -msgid "Periodical check of global contacts" -msgstr "" - -#: mod/admin.php:1035 -msgid "" -"If enabled, the global contacts are checked periodically for missing or " -"outdated data and the vitality of the contacts and servers." -msgstr "" - -#: mod/admin.php:1036 -msgid "Days between requery" -msgstr "" - -#: mod/admin.php:1036 -msgid "Number of days after which a server is requeried for his contacts." -msgstr "" - -#: mod/admin.php:1037 -msgid "Discover contacts from other servers" -msgstr "" - -#: mod/admin.php:1037 -msgid "" -"Periodically query other servers for contacts. You can choose between " -"'users': the users on the remote system, 'Global Contacts': active contacts " -"that are known on the system. The fallback is meant for Redmatrix servers " -"and older friendica servers, where global contacts weren't available. The " -"fallback increases the server load, so the recommened setting is 'Users, " -"Global Contacts'." -msgstr "" - -#: mod/admin.php:1038 -msgid "Timeframe for fetching global contacts" -msgstr "" - -#: mod/admin.php:1038 -msgid "" -"When the discovery is activated, this value defines the timeframe for the " -"activity of the global contacts that are fetched from other servers." -msgstr "" - -#: mod/admin.php:1039 -msgid "Search the local directory" -msgstr "" - -#: mod/admin.php:1039 -msgid "" -"Search the local directory instead of the global directory. When searching " -"locally, every search will be executed on the global directory in the " -"background. This improves the search results when the search is repeated." -msgstr "" - -#: mod/admin.php:1041 -msgid "Publish server information" -msgstr "" - -#: mod/admin.php:1041 -msgid "" -"If enabled, general server and usage data will be published. The data " -"contains the name and version of the server, number of users with public " -"profiles, number of posts and the activated protocols and connectors. See the-federation.info for details." -msgstr "" - -#: mod/admin.php:1043 -msgid "Use MySQL full text engine" -msgstr "" - -#: mod/admin.php:1043 -msgid "" -"Activates the full text engine. Speeds up search - but can only search for " -"four and more characters." -msgstr "" - -#: mod/admin.php:1044 -msgid "Suppress Tags" -msgstr "" - -#: mod/admin.php:1044 -msgid "Suppress showing a list of hashtags at the end of the posting." -msgstr "" - -#: mod/admin.php:1045 -msgid "Path to item cache" -msgstr "" - -#: mod/admin.php:1045 -msgid "The item caches buffers generated bbcode and external images." -msgstr "" - -#: mod/admin.php:1046 -msgid "Cache duration in seconds" -msgstr "" - -#: mod/admin.php:1046 -msgid "" -"How long should the cache files be hold? Default value is 86400 seconds (One " -"day). To disable the item cache, set the value to -1." -msgstr "" - -#: mod/admin.php:1047 -msgid "Maximum numbers of comments per post" -msgstr "" - -#: mod/admin.php:1047 -msgid "How much comments should be shown for each post? Default value is 100." -msgstr "" - -#: mod/admin.php:1048 -msgid "Temp path" -msgstr "" - -#: mod/admin.php:1048 -msgid "" -"If you have a restricted system where the webserver can't access the system " -"temp path, enter another path here." -msgstr "" - -#: mod/admin.php:1049 -msgid "Base path to installation" -msgstr "" - -#: mod/admin.php:1049 -msgid "" -"If the system cannot detect the correct path to your installation, enter the " -"correct path here. This setting should only be set if you are using a " -"restricted system and symbolic links to your webroot." -msgstr "" - -#: mod/admin.php:1050 -msgid "Disable picture proxy" -msgstr "" - -#: mod/admin.php:1050 -msgid "" -"The picture proxy increases performance and privacy. It shouldn't be used on " -"systems with very low bandwith." -msgstr "" - -#: mod/admin.php:1051 -msgid "Only search in tags" -msgstr "" - -#: mod/admin.php:1051 -msgid "On large systems the text search can slow down the system extremely." -msgstr "" - -#: mod/admin.php:1053 -msgid "New base url" -msgstr "" - -#: mod/admin.php:1053 -msgid "" -"Change base url for this server. Sends relocate message to all DFRN contacts " -"of all users." -msgstr "" - -#: mod/admin.php:1055 -msgid "RINO Encryption" -msgstr "" - -#: mod/admin.php:1055 -msgid "Encryption layer between nodes." -msgstr "" - -#: mod/admin.php:1056 -msgid "Embedly API key" -msgstr "" - -#: mod/admin.php:1056 -msgid "" -"Embedly is used to fetch additional data for " -"web pages. This is an optional parameter." -msgstr "" - -#: mod/admin.php:1058 -msgid "Maximum number of parallel workers" -msgstr "" - -#: mod/admin.php:1058 -msgid "" -"On shared hosters set this to 2. On larger systems, values of 10 are great. " -"Default value is 4." -msgstr "" - -#: mod/admin.php:1059 -msgid "Don't use 'proc_open' with the worker" -msgstr "" - -#: mod/admin.php:1059 -msgid "" -"Enable this if your system doesn't allow the use of 'proc_open'. This can " -"happen on shared hosters. If this is enabled you should increase the " -"frequency of poller calls in your crontab." -msgstr "" - -#: mod/admin.php:1060 -msgid "Enable fastlane" -msgstr "" - -#: mod/admin.php:1060 -msgid "" -"When enabed, the fastlane mechanism starts an additional worker if processes " -"with higher priority are blocked by processes of lower priority." -msgstr "" - -#: mod/admin.php:1061 -msgid "Enable frontend worker" -msgstr "" - -#: mod/admin.php:1061 -msgid "" -"When enabled the Worker process is triggered when backend access is " -"performed (e.g. messages being delivered). On smaller sites you might want " -"to call yourdomain.tld/worker on a regular basis via an external cron job. " -"You should only enable this option if you cannot utilize cron/scheduled jobs " -"on your server. The worker background process needs to be activated for this." -msgstr "" - -#: mod/admin.php:1091 -msgid "Update has been marked successful" -msgstr "" - -#: mod/admin.php:1099 -#, php-format -msgid "Database structure update %s was successfully applied." -msgstr "" - -#: mod/admin.php:1102 -#, php-format -msgid "Executing of database structure update %s failed with error: %s" -msgstr "" - -#: mod/admin.php:1116 -#, php-format -msgid "Executing %s failed with error: %s" -msgstr "" - -#: mod/admin.php:1119 -#, php-format -msgid "Update %s was successfully applied." -msgstr "" - -#: mod/admin.php:1122 -#, php-format -msgid "Update %s did not return a status. Unknown if it succeeded." -msgstr "" - -#: mod/admin.php:1125 -#, php-format -msgid "There was no additional update function %s that needed to be called." -msgstr "" - -#: mod/admin.php:1145 -msgid "No failed updates." -msgstr "" - -#: mod/admin.php:1146 -msgid "Check database structure" -msgstr "" - -#: mod/admin.php:1151 -msgid "Failed Updates" -msgstr "" - -#: mod/admin.php:1152 -msgid "" -"This does not include updates prior to 1139, which did not return a status." -msgstr "" - -#: mod/admin.php:1153 -msgid "Mark success (if update was manually applied)" -msgstr "" - -#: mod/admin.php:1154 -msgid "Attempt to execute this update step automatically" -msgstr "" - -#: mod/admin.php:1188 +#: include/dbstructure.php:61 #, php-format msgid "" "\n" -"\t\t\tDear %1$s,\n" -"\t\t\t\tthe administrator of %2$s has set up an account for you." +"\t\t\tThe friendica developers released update %s recently,\n" +"\t\t\tbut when I tried to install it, something went terribly wrong.\n" +"\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n" +"\t\t\tfriendica developer if you can not help me on your own. My database " +"might be invalid." msgstr "" -#: mod/admin.php:1191 +#: include/dbstructure.php:66 +#, php-format +msgid "" +"The error message is\n" +"[pre]%s[/pre]" +msgstr "" + +#: include/dbstructure.php:190 #, php-format msgid "" "\n" -"\t\t\tThe login details are as follows:\n" -"\n" -"\t\t\tSite Location:\t%1$s\n" -"\t\t\tLogin Name:\t\t%2$s\n" -"\t\t\tPassword:\t\t%3$s\n" -"\n" -"\t\t\tYou may change your password from your account \"Settings\" page after " -"logging\n" -"\t\t\tin.\n" -"\n" -"\t\t\tPlease take a few moments to review the other account settings on that " -"page.\n" -"\n" -"\t\t\tYou may also wish to add some basic information to your default " -"profile\n" -"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n" -"\n" -"\t\t\tWe recommend setting your full name, adding a profile photo,\n" -"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - " -"and\n" -"\t\t\tperhaps what country you live in; if you do not wish to be more " -"specific\n" -"\t\t\tthan that.\n" -"\n" -"\t\t\tWe fully respect your right to privacy, and none of these items are " -"necessary.\n" -"\t\t\tIf you are new and do not know anybody here, they may help\n" -"\t\t\tyou to make some new and interesting friends.\n" -"\n" -"\t\t\tThank you and welcome to %4$s." +"Error %d occurred during database update:\n" +"%s\n" msgstr "" -#: mod/admin.php:1235 +#: include/dbstructure.php:193 +msgid "Errors encountered performing database changes: " +msgstr "" + +#: include/dbstructure.php:201 +msgid ": Database update" +msgstr "" + +#: include/dbstructure.php:425 #, php-format -msgid "%s user blocked/unblocked" -msgid_plural "%s users blocked/unblocked" +msgid "%s: updating %s table." +msgstr "" + +#: include/dfrn.php:1251 +#, php-format +msgid "%s\\'s birthday" +msgstr "" + +#: include/diaspora.php:2137 +msgid "Sharing notification from Diaspora network" +msgstr "" + +#: include/diaspora.php:3146 +msgid "Attachments:" +msgstr "" + +#: include/items.php:1738 mod/dfrn_confirm.php:736 mod/dfrn_request.php:759 +msgid "[Name Withheld]" +msgstr "" + +#: include/items.php:2123 mod/display.php:103 mod/display.php:279 +#: mod/display.php:484 mod/notice.php:15 mod/viewsrc.php:15 mod/admin.php:247 +#: mod/admin.php:1565 mod/admin.php:1816 +msgid "Item not found." +msgstr "" + +#: include/items.php:2162 +msgid "Do you really want to delete this item?" +msgstr "" + +#: include/items.php:2164 mod/api.php:105 mod/contacts.php:452 +#: mod/suggest.php:29 mod/dfrn_request.php:880 mod/follow.php:113 +#: mod/message.php:206 mod/profiles.php:640 mod/profiles.php:643 +#: mod/profiles.php:670 mod/register.php:245 mod/settings.php:1171 +#: mod/settings.php:1177 mod/settings.php:1184 mod/settings.php:1188 +#: mod/settings.php:1193 mod/settings.php:1198 mod/settings.php:1203 +#: mod/settings.php:1208 mod/settings.php:1234 mod/settings.php:1235 +#: mod/settings.php:1236 mod/settings.php:1237 mod/settings.php:1238 +msgid "Yes" +msgstr "" + +#: include/items.php:2327 mod/allfriends.php:12 mod/api.php:26 mod/api.php:31 +#: mod/attach.php:33 mod/common.php:18 mod/contacts.php:360 +#: mod/crepair.php:102 mod/delegate.php:12 mod/display.php:481 +#: mod/editpost.php:10 mod/fsuggest.php:79 mod/invite.php:15 +#: mod/invite.php:103 mod/mood.php:115 mod/nogroup.php:27 mod/notes.php:23 +#: mod/ostatus_subscribe.php:9 mod/poke.php:154 mod/profile_photo.php:19 +#: mod/profile_photo.php:180 mod/profile_photo.php:191 +#: mod/profile_photo.php:204 mod/regmod.php:113 mod/repair_ostatus.php:9 +#: mod/suggest.php:58 mod/uimport.php:24 mod/viewcontacts.php:46 +#: mod/wall_attach.php:67 mod/wall_attach.php:70 mod/wallmessage.php:9 +#: mod/wallmessage.php:33 mod/wallmessage.php:73 mod/wallmessage.php:97 +#: mod/cal.php:299 mod/dfrn_confirm.php:61 mod/dirfind.php:11 +#: mod/events.php:185 mod/follow.php:11 mod/follow.php:74 mod/follow.php:158 +#: mod/group.php:19 mod/manage.php:102 mod/message.php:46 mod/message.php:171 +#: mod/network.php:4 mod/photos.php:166 mod/photos.php:1109 +#: mod/profiles.php:168 mod/profiles.php:607 mod/register.php:42 +#: mod/settings.php:22 mod/settings.php:130 mod/settings.php:668 +#: mod/wall_upload.php:101 mod/wall_upload.php:104 mod/item.php:196 +#: mod/item.php:208 mod/notifications.php:71 index.php:407 +msgid "Permission denied." +msgstr "" + +#: include/items.php:2444 +msgid "Archives" +msgstr "" + +#: include/ostatus.php:1947 +#, php-format +msgid "%s is now following %s." +msgstr "" + +#: include/ostatus.php:1948 +msgid "following" +msgstr "" + +#: include/ostatus.php:1951 +#, php-format +msgid "%s stopped following %s." +msgstr "" + +#: include/ostatus.php:1952 +msgid "stopped following" +msgstr "" + +#: include/text.php:307 +msgid "newer" +msgstr "" + +#: include/text.php:308 +msgid "older" +msgstr "" + +#: include/text.php:313 +msgid "first" +msgstr "" + +#: include/text.php:314 +msgid "prev" +msgstr "" + +#: include/text.php:348 +msgid "next" +msgstr "" + +#: include/text.php:349 +msgid "last" +msgstr "" + +#: include/text.php:403 +msgid "Loading more entries..." +msgstr "" + +#: include/text.php:404 +msgid "The end" +msgstr "" + +#: include/text.php:955 +msgid "No contacts" +msgstr "" + +#: include/text.php:980 +#, php-format +msgid "%d Contact" +msgid_plural "%d Contacts" msgstr[0] "" msgstr[1] "" -#: mod/admin.php:1242 -#, php-format -msgid "%s user deleted" -msgid_plural "%s users deleted" +#: include/text.php:993 +msgid "View Contacts" +msgstr "" + +#: include/text.php:1081 mod/editpost.php:99 mod/filer.php:31 mod/notes.php:62 +msgid "Save" +msgstr "" + +#: include/text.php:1144 +msgid "poke" +msgstr "" + +#: include/text.php:1144 +msgid "poked" +msgstr "" + +#: include/text.php:1145 +msgid "ping" +msgstr "" + +#: include/text.php:1145 +msgid "pinged" +msgstr "" + +#: include/text.php:1146 +msgid "prod" +msgstr "" + +#: include/text.php:1146 +msgid "prodded" +msgstr "" + +#: include/text.php:1147 +msgid "slap" +msgstr "" + +#: include/text.php:1147 +msgid "slapped" +msgstr "" + +#: include/text.php:1148 +msgid "finger" +msgstr "" + +#: include/text.php:1148 +msgid "fingered" +msgstr "" + +#: include/text.php:1149 +msgid "rebuff" +msgstr "" + +#: include/text.php:1149 +msgid "rebuffed" +msgstr "" + +#: include/text.php:1163 +msgid "happy" +msgstr "" + +#: include/text.php:1164 +msgid "sad" +msgstr "" + +#: include/text.php:1165 +msgid "mellow" +msgstr "" + +#: include/text.php:1166 +msgid "tired" +msgstr "" + +#: include/text.php:1167 +msgid "perky" +msgstr "" + +#: include/text.php:1168 +msgid "angry" +msgstr "" + +#: include/text.php:1169 +msgid "stupified" +msgstr "" + +#: include/text.php:1170 +msgid "puzzled" +msgstr "" + +#: include/text.php:1171 +msgid "interested" +msgstr "" + +#: include/text.php:1172 +msgid "bitter" +msgstr "" + +#: include/text.php:1173 +msgid "cheerful" +msgstr "" + +#: include/text.php:1174 +msgid "alive" +msgstr "" + +#: include/text.php:1175 +msgid "annoyed" +msgstr "" + +#: include/text.php:1176 +msgid "anxious" +msgstr "" + +#: include/text.php:1177 +msgid "cranky" +msgstr "" + +#: include/text.php:1178 +msgid "disturbed" +msgstr "" + +#: include/text.php:1179 +msgid "frustrated" +msgstr "" + +#: include/text.php:1180 +msgid "motivated" +msgstr "" + +#: include/text.php:1181 +msgid "relaxed" +msgstr "" + +#: include/text.php:1182 +msgid "surprised" +msgstr "" + +#: include/text.php:1392 mod/videos.php:386 +msgid "View Video" +msgstr "" + +#: include/text.php:1424 +msgid "bytes" +msgstr "" + +#: include/text.php:1456 include/text.php:1468 +msgid "Click to open/close" +msgstr "" + +#: include/text.php:1594 +msgid "View on separate page" +msgstr "" + +#: include/text.php:1595 +msgid "view on separate page" +msgstr "" + +#: include/text.php:1874 +msgid "activity" +msgstr "" + +#: include/text.php:1876 mod/content.php:623 object/Item.php:419 +#: object/Item.php:431 +msgid "comment" +msgid_plural "comments" msgstr[0] "" msgstr[1] "" -#: mod/admin.php:1289 -#, php-format -msgid "User '%s' deleted" +#: include/text.php:1877 +msgid "post" msgstr "" -#: mod/admin.php:1297 -#, php-format -msgid "User '%s' unblocked" -msgstr "" - -#: mod/admin.php:1297 -#, php-format -msgid "User '%s' blocked" -msgstr "" - -#: mod/admin.php:1405 mod/admin.php:1418 mod/admin.php:1431 mod/admin.php:1447 -#: mod/crepair.php:167 mod/settings.php:683 mod/settings.php:709 -msgid "Name" -msgstr "" - -#: mod/admin.php:1405 mod/admin.php:1431 -msgid "Register date" -msgstr "" - -#: mod/admin.php:1405 mod/admin.php:1431 -msgid "Last login" -msgstr "" - -#: mod/admin.php:1405 mod/admin.php:1431 -msgid "Last item" -msgstr "" - -#: mod/admin.php:1405 mod/settings.php:43 -msgid "Account" -msgstr "" - -#: mod/admin.php:1414 -msgid "Add User" -msgstr "" - -#: mod/admin.php:1415 -msgid "select all" -msgstr "" - -#: mod/admin.php:1416 -msgid "User registrations waiting for confirm" -msgstr "" - -#: mod/admin.php:1417 -msgid "User waiting for permanent deletion" -msgstr "" - -#: mod/admin.php:1418 -msgid "Request date" -msgstr "" - -#: mod/admin.php:1419 -msgid "No registrations." -msgstr "" - -#: mod/admin.php:1420 -msgid "Note from the user" -msgstr "" - -#: mod/admin.php:1421 mod/notifications.php:176 mod/notifications.php:255 -msgid "Approve" -msgstr "" - -#: mod/admin.php:1422 -msgid "Deny" -msgstr "" - -#: mod/admin.php:1424 mod/contacts.php:613 mod/contacts.php:813 -#: mod/contacts.php:991 -msgid "Block" -msgstr "" - -#: mod/admin.php:1425 mod/contacts.php:613 mod/contacts.php:813 -#: mod/contacts.php:991 -msgid "Unblock" -msgstr "" - -#: mod/admin.php:1426 -msgid "Site admin" -msgstr "" - -#: mod/admin.php:1427 -msgid "Account expired" -msgstr "" - -#: mod/admin.php:1430 -msgid "New User" -msgstr "" - -#: mod/admin.php:1431 -msgid "Deleted since" -msgstr "" - -#: mod/admin.php:1436 -msgid "" -"Selected users will be deleted!\\n\\nEverything these users had posted on " -"this site will be permanently deleted!\\n\\nAre you sure?" -msgstr "" - -#: mod/admin.php:1437 -msgid "" -"The user {0} will be deleted!\\n\\nEverything this user has posted on this " -"site will be permanently deleted!\\n\\nAre you sure?" -msgstr "" - -#: mod/admin.php:1447 -msgid "Name of the new user." -msgstr "" - -#: mod/admin.php:1448 -msgid "Nickname" -msgstr "" - -#: mod/admin.php:1448 -msgid "Nickname of the new user." -msgstr "" - -#: mod/admin.php:1449 -msgid "Email address of the new user." -msgstr "" - -#: mod/admin.php:1492 -#, php-format -msgid "Plugin %s disabled." -msgstr "" - -#: mod/admin.php:1496 -#, php-format -msgid "Plugin %s enabled." -msgstr "" - -#: mod/admin.php:1507 mod/admin.php:1759 -msgid "Disable" -msgstr "" - -#: mod/admin.php:1509 mod/admin.php:1761 -msgid "Enable" -msgstr "" - -#: mod/admin.php:1532 mod/admin.php:1808 -msgid "Toggle" -msgstr "" - -#: mod/admin.php:1540 mod/admin.php:1817 -msgid "Author: " -msgstr "" - -#: mod/admin.php:1541 mod/admin.php:1818 -msgid "Maintainer: " -msgstr "" - -#: mod/admin.php:1596 -msgid "Reload active plugins" -msgstr "" - -#: mod/admin.php:1601 -#, php-format -msgid "" -"There are currently no plugins available on your node. You can find the " -"official plugin repository at %1$s and might find other interesting plugins " -"in the open plugin registry at %2$s" -msgstr "" - -#: mod/admin.php:1720 -msgid "No themes found." -msgstr "" - -#: mod/admin.php:1799 -msgid "Screenshot" -msgstr "" - -#: mod/admin.php:1859 -msgid "Reload active themes" -msgstr "" - -#: mod/admin.php:1864 -#, php-format -msgid "No themes found on the system. They should be paced in %1$s" -msgstr "" - -#: mod/admin.php:1865 -msgid "[Experimental]" -msgstr "" - -#: mod/admin.php:1866 -msgid "[Unsupported]" -msgstr "" - -#: mod/admin.php:1890 -msgid "Log settings updated." -msgstr "" - -#: mod/admin.php:1922 -msgid "PHP log currently enabled." -msgstr "" - -#: mod/admin.php:1924 -msgid "PHP log currently disabled." -msgstr "" - -#: mod/admin.php:1933 -msgid "Clear" -msgstr "" - -#: mod/admin.php:1938 -msgid "Enable Debugging" -msgstr "" - -#: mod/admin.php:1939 -msgid "Log file" -msgstr "" - -#: mod/admin.php:1939 -msgid "" -"Must be writable by web server. Relative to your Friendica top-level " -"directory." -msgstr "" - -#: mod/admin.php:1940 -msgid "Log level" -msgstr "" - -#: mod/admin.php:1943 -msgid "PHP logging" -msgstr "" - -#: mod/admin.php:1944 -msgid "" -"To enable logging of PHP errors and warnings you can add the following to " -"the .htconfig.php file of your installation. The filename set in the " -"'error_log' line is relative to the friendica top-level directory and must " -"be writeable by the web server. The option '1' for 'log_errors' and " -"'display_errors' is to enable these options, set to '0' to disable them." -msgstr "" - -#: mod/admin.php:2074 mod/admin.php:2075 mod/settings.php:782 -msgid "Off" -msgstr "" - -#: mod/admin.php:2074 mod/admin.php:2075 mod/settings.php:782 -msgid "On" -msgstr "" - -#: mod/admin.php:2075 -#, php-format -msgid "Lock feature %s" -msgstr "" - -#: mod/admin.php:2083 -msgid "Manage Additional Features" +#: include/text.php:2045 +msgid "Item filed" msgstr "" #: mod/allfriends.php:46 @@ -4549,8 +3130,8 @@ msgid "" "and/or create new posts for you?" msgstr "" -#: mod/api.php:106 mod/dfrn_request.php:875 mod/follow.php:113 -#: mod/profiles.php:640 mod/profiles.php:644 mod/profiles.php:669 +#: mod/api.php:106 mod/dfrn_request.php:880 mod/follow.php:113 +#: mod/profiles.php:640 mod/profiles.php:644 mod/profiles.php:670 #: mod/register.php:246 mod/settings.php:1171 mod/settings.php:1177 #: mod/settings.php:1184 mod/settings.php:1188 mod/settings.php:1193 #: mod/settings.php:1198 mod/settings.php:1203 mod/settings.php:1208 @@ -4559,6 +3140,10 @@ msgstr "" msgid "No" msgstr "" +#: mod/apps.php:7 index.php:254 +msgid "You must be logged in to use addons. " +msgstr "" + #: mod/apps.php:11 msgid "Applications" msgstr "" @@ -4575,94 +3160,10 @@ msgstr "" msgid "Item was not found." msgstr "" -#: mod/babel.php:17 -msgid "Source (bbcode) text:" -msgstr "" - -#: mod/babel.php:23 -msgid "Source (Diaspora) text to convert to BBcode:" -msgstr "" - -#: mod/babel.php:31 -msgid "Source input: " -msgstr "" - -#: mod/babel.php:35 -msgid "bb2html (raw HTML): " -msgstr "" - -#: mod/babel.php:39 -msgid "bb2html: " -msgstr "" - -#: mod/babel.php:43 -msgid "bb2html2bb: " -msgstr "" - -#: mod/babel.php:47 -msgid "bb2md: " -msgstr "" - -#: mod/babel.php:51 -msgid "bb2md2html: " -msgstr "" - -#: mod/babel.php:55 -msgid "bb2dia2bb: " -msgstr "" - -#: mod/babel.php:59 -msgid "bb2md2html2bb: " -msgstr "" - -#: mod/babel.php:69 -msgid "Source input (Diaspora format): " -msgstr "" - -#: mod/babel.php:74 -msgid "diaspora2bb: " -msgstr "" - #: mod/bookmarklet.php:41 msgid "The post was created" msgstr "" -#: mod/cal.php:143 mod/display.php:328 mod/profile.php:154 -msgid "Access to this profile has been restricted." -msgstr "" - -#: mod/cal.php:271 mod/events.php:387 -msgid "View" -msgstr "" - -#: mod/cal.php:272 mod/events.php:389 -msgid "Previous" -msgstr "" - -#: mod/cal.php:273 mod/events.php:390 mod/install.php:235 -msgid "Next" -msgstr "" - -#: mod/cal.php:282 mod/events.php:399 -msgid "list" -msgstr "" - -#: mod/cal.php:292 -msgid "User not found" -msgstr "" - -#: mod/cal.php:308 -msgid "This calendar format is not supported" -msgstr "" - -#: mod/cal.php:310 -msgid "No exportable data found" -msgstr "" - -#: mod/cal.php:325 -msgid "calendar" -msgstr "" - #: mod/common.php:91 msgid "No contacts in common." msgstr "" @@ -4671,20 +3172,6 @@ msgstr "" msgid "Common Friends" msgstr "" -#: mod/community.php:22 mod/dfrn_request.php:799 mod/directory.php:37 -#: mod/display.php:200 mod/photos.php:964 mod/search.php:93 mod/search.php:99 -#: mod/videos.php:198 mod/viewcontacts.php:36 -msgid "Public access denied." -msgstr "" - -#: mod/community.php:27 -msgid "Not available." -msgstr "" - -#: mod/community.php:54 mod/search.php:224 -msgid "No results." -msgstr "" - #: mod/contacts.php:134 #, php-format msgid "%d contact edited." @@ -4704,7 +3191,7 @@ msgstr "" msgid "Contact updated." msgstr "" -#: mod/contacts.php:218 mod/dfrn_request.php:588 +#: mod/contacts.php:218 mod/dfrn_request.php:593 msgid "Failed to update contact record." msgstr "" @@ -4763,6 +3250,10 @@ msgstr "" msgid "Private communications are not available for this contact." msgstr "" +#: mod/contacts.php:538 mod/admin.php:978 +msgid "Never" +msgstr "" + #: mod/contacts.php:542 msgid "(Update was successful)" msgstr "" @@ -4788,6 +3279,10 @@ msgstr "" msgid "Fetch further information for feeds" msgstr "" +#: mod/contacts.php:565 mod/admin.php:987 +msgid "Disabled" +msgstr "" + #: mod/contacts.php:565 msgid "Fetch information" msgstr "" @@ -4801,12 +3296,12 @@ msgid "Contact" msgstr "" #: mod/contacts.php:585 mod/content.php:728 mod/crepair.php:156 -#: mod/events.php:513 mod/fsuggest.php:108 mod/install.php:276 -#: mod/install.php:316 mod/invite.php:142 mod/localtime.php:45 -#: mod/manage.php:145 mod/message.php:338 mod/message.php:521 mod/mood.php:138 -#: mod/photos.php:1124 mod/photos.php:1246 mod/photos.php:1562 -#: mod/photos.php:1612 mod/photos.php:1660 mod/photos.php:1746 -#: mod/poke.php:203 mod/profiles.php:680 object/Item.php:705 +#: mod/fsuggest.php:108 mod/invite.php:142 mod/localtime.php:45 +#: mod/mood.php:138 mod/poke.php:203 mod/events.php:505 mod/manage.php:155 +#: mod/message.php:338 mod/message.php:521 mod/photos.php:1141 +#: mod/photos.php:1271 mod/photos.php:1597 mod/photos.php:1646 +#: mod/photos.php:1688 mod/photos.php:1768 mod/profiles.php:681 +#: mod/install.php:242 mod/install.php:282 object/Item.php:705 #: view/theme/duepuntozero/config.php:61 view/theme/frio/config.php:64 #: view/theme/quattro/config.php:67 view/theme/vier/config.php:112 msgid "Submit" @@ -4865,13 +3360,23 @@ msgstr "" msgid "Update now" msgstr "" +#: mod/contacts.php:613 mod/contacts.php:813 mod/contacts.php:991 +#: mod/admin.php:1510 +msgid "Unblock" +msgstr "" + +#: mod/contacts.php:613 mod/contacts.php:813 mod/contacts.php:991 +#: mod/admin.php:1509 +msgid "Block" +msgstr "" + #: mod/contacts.php:614 mod/contacts.php:814 mod/contacts.php:999 msgid "Unignore" msgstr "" #: mod/contacts.php:614 mod/contacts.php:814 mod/contacts.php:999 #: mod/notifications.php:60 mod/notifications.php:179 -#: mod/notifications.php:257 +#: mod/notifications.php:263 msgid "Ignore" msgstr "" @@ -4887,7 +3392,7 @@ msgstr "" msgid "Currently archived" msgstr "" -#: mod/contacts.php:621 mod/notifications.php:172 mod/notifications.php:245 +#: mod/contacts.php:621 mod/notifications.php:172 mod/notifications.php:251 msgid "Hide this contact from others" msgstr "" @@ -4914,7 +3419,7 @@ msgid "" "when \"Fetch information and keywords\" is selected" msgstr "" -#: mod/contacts.php:632 mod/follow.php:129 mod/notifications.php:249 +#: mod/contacts.php:632 mod/follow.php:129 mod/notifications.php:255 msgid "Profile URL" msgstr "" @@ -4934,7 +3439,7 @@ msgstr "" msgid "Suggest potential friends" msgstr "" -#: mod/contacts.php:700 mod/group.php:202 +#: mod/contacts.php:700 mod/group.php:212 msgid "All Contacts" msgstr "" @@ -4986,7 +3491,7 @@ msgstr "" msgid "Search your contacts" msgstr "" -#: mod/contacts.php:805 mod/network.php:145 mod/search.php:232 +#: mod/contacts.php:805 mod/network.php:151 mod/search.php:227 #, php-format msgid "Results for: %s" msgstr "" @@ -5051,15 +3556,15 @@ msgstr "" msgid "Delete contact" msgstr "" -#: mod/content.php:119 mod/network.php:468 +#: mod/content.php:119 mod/network.php:475 msgid "No such group" msgstr "" -#: mod/content.php:130 mod/group.php:203 mod/network.php:495 +#: mod/content.php:130 mod/group.php:213 mod/network.php:502 msgid "Group is empty" msgstr "" -#: mod/content.php:135 mod/network.php:499 +#: mod/content.php:135 mod/network.php:506 #, php-format msgid "Group: %s" msgstr "" @@ -5075,11 +3580,11 @@ msgid_plural "%d comments" msgstr[0] "" msgstr[1] "" -#: mod/content.php:638 mod/photos.php:1402 object/Item.php:117 +#: mod/content.php:638 mod/photos.php:1429 object/Item.php:117 msgid "Private Message" msgstr "" -#: mod/content.php:702 mod/photos.php:1590 object/Item.php:274 +#: mod/content.php:702 mod/photos.php:1625 object/Item.php:274 msgid "I like this (toggle)" msgstr "" @@ -5087,7 +3592,7 @@ msgstr "" msgid "like" msgstr "" -#: mod/content.php:703 mod/photos.php:1591 object/Item.php:275 +#: mod/content.php:703 mod/photos.php:1626 object/Item.php:275 msgid "I don't like this (toggle)" msgstr "" @@ -5103,13 +3608,13 @@ msgstr "" msgid "share" msgstr "" -#: mod/content.php:725 mod/photos.php:1609 mod/photos.php:1657 -#: mod/photos.php:1743 object/Item.php:702 +#: mod/content.php:725 mod/photos.php:1643 mod/photos.php:1685 +#: mod/photos.php:1765 object/Item.php:702 msgid "This is you" msgstr "" -#: mod/content.php:727 mod/content.php:950 mod/photos.php:1611 -#: mod/photos.php:1659 mod/photos.php:1745 object/Item.php:392 +#: mod/content.php:727 mod/content.php:950 mod/photos.php:1645 +#: mod/photos.php:1687 mod/photos.php:1767 object/Item.php:392 #: object/Item.php:704 msgid "Comment" msgstr "" @@ -5234,8 +3739,8 @@ msgstr "" msgid "Contact update failed." msgstr "" -#: mod/crepair.php:116 mod/dfrn_confirm.php:126 mod/fsuggest.php:21 -#: mod/fsuggest.php:93 +#: mod/crepair.php:116 mod/fsuggest.php:21 mod/fsuggest.php:93 +#: mod/dfrn_confirm.php:126 msgid "Contact not found." msgstr "" @@ -5285,6 +3790,11 @@ msgid "" "entries from this contact." msgstr "" +#: mod/crepair.php:167 mod/settings.php:683 mod/settings.php:709 +#: mod/admin.php:1490 mod/admin.php:1503 mod/admin.php:1516 mod/admin.php:1532 +msgid "Name" +msgstr "" + #: mod/crepair.php:168 msgid "Account Nickname" msgstr "" @@ -5352,258 +3862,19 @@ msgstr "" msgid "No entries." msgstr "" -#: mod/dfrn_confirm.php:70 mod/profiles.php:19 mod/profiles.php:134 -#: mod/profiles.php:180 mod/profiles.php:619 -msgid "Profile not found." -msgstr "" - -#: mod/dfrn_confirm.php:127 -msgid "" -"This may occasionally happen if contact was requested by both persons and it " -"has already been approved." -msgstr "" - -#: mod/dfrn_confirm.php:244 -msgid "Response from remote site was not understood." -msgstr "" - -#: mod/dfrn_confirm.php:253 mod/dfrn_confirm.php:258 -msgid "Unexpected response from remote site: " -msgstr "" - -#: mod/dfrn_confirm.php:267 -msgid "Confirmation completed successfully." -msgstr "" - -#: mod/dfrn_confirm.php:269 mod/dfrn_confirm.php:283 mod/dfrn_confirm.php:290 -msgid "Remote site reported: " -msgstr "" - -#: mod/dfrn_confirm.php:281 -msgid "Temporary failure. Please wait and try again." -msgstr "" - -#: mod/dfrn_confirm.php:288 -msgid "Introduction failed or was revoked." -msgstr "" - -#: mod/dfrn_confirm.php:418 -msgid "Unable to set contact photo." -msgstr "" - -#: mod/dfrn_confirm.php:559 -#, php-format -msgid "No user record found for '%s' " -msgstr "" - -#: mod/dfrn_confirm.php:569 -msgid "Our site encryption key is apparently messed up." -msgstr "" - -#: mod/dfrn_confirm.php:580 -msgid "Empty site URL was provided or URL could not be decrypted by us." -msgstr "" - -#: mod/dfrn_confirm.php:601 -msgid "Contact record was not found for you on our site." -msgstr "" - -#: mod/dfrn_confirm.php:615 -#, php-format -msgid "Site public key not available in contact record for URL %s." -msgstr "" - -#: mod/dfrn_confirm.php:635 -msgid "" -"The ID provided by your system is a duplicate on our system. It should work " -"if you try again." -msgstr "" - -#: mod/dfrn_confirm.php:646 -msgid "Unable to set your contact credentials on our system." -msgstr "" - -#: mod/dfrn_confirm.php:708 -msgid "Unable to update your contact profile details on our system" -msgstr "" - -#: mod/dfrn_confirm.php:780 -#, php-format -msgid "%1$s has joined %2$s" -msgstr "" - #: mod/dfrn_poll.php:104 mod/dfrn_poll.php:539 #, php-format msgid "%1$s welcomes %2$s" msgstr "" -#: mod/dfrn_request.php:101 -msgid "This introduction has already been accepted." +#: mod/directory.php:37 mod/display.php:200 mod/viewcontacts.php:36 +#: mod/community.php:18 mod/dfrn_request.php:804 mod/photos.php:979 +#: mod/probe.php:9 mod/search.php:93 mod/search.php:99 mod/videos.php:198 +#: mod/webfinger.php:8 +msgid "Public access denied." msgstr "" -#: mod/dfrn_request.php:124 mod/dfrn_request.php:523 -msgid "Profile location is not valid or does not contain profile information." -msgstr "" - -#: mod/dfrn_request.php:129 mod/dfrn_request.php:528 -msgid "Warning: profile location has no identifiable owner name." -msgstr "" - -#: mod/dfrn_request.php:132 mod/dfrn_request.php:531 -msgid "Warning: profile location has no profile photo." -msgstr "" - -#: mod/dfrn_request.php:136 mod/dfrn_request.php:535 -#, php-format -msgid "%d required parameter was not found at the given location" -msgid_plural "%d required parameters were not found at the given location" -msgstr[0] "" -msgstr[1] "" - -#: mod/dfrn_request.php:180 -msgid "Introduction complete." -msgstr "" - -#: mod/dfrn_request.php:225 -msgid "Unrecoverable protocol error." -msgstr "" - -#: mod/dfrn_request.php:253 -msgid "Profile unavailable." -msgstr "" - -#: mod/dfrn_request.php:280 -#, php-format -msgid "%s has received too many connection requests today." -msgstr "" - -#: mod/dfrn_request.php:281 -msgid "Spam protection measures have been invoked." -msgstr "" - -#: mod/dfrn_request.php:282 -msgid "Friends are advised to please try again in 24 hours." -msgstr "" - -#: mod/dfrn_request.php:344 -msgid "Invalid locator" -msgstr "" - -#: mod/dfrn_request.php:353 -msgid "Invalid email address." -msgstr "" - -#: mod/dfrn_request.php:378 -msgid "This account has not been configured for email. Request failed." -msgstr "" - -#: mod/dfrn_request.php:481 -msgid "You have already introduced yourself here." -msgstr "" - -#: mod/dfrn_request.php:485 -#, php-format -msgid "Apparently you are already friends with %s." -msgstr "" - -#: mod/dfrn_request.php:506 -msgid "Invalid profile URL." -msgstr "" - -#: mod/dfrn_request.php:609 -msgid "Your introduction has been sent." -msgstr "" - -#: mod/dfrn_request.php:651 -msgid "" -"Remote subscription can't be done for your network. Please subscribe " -"directly on your system." -msgstr "" - -#: mod/dfrn_request.php:672 -msgid "Please login to confirm introduction." -msgstr "" - -#: mod/dfrn_request.php:682 -msgid "" -"Incorrect identity currently logged in. Please login to this profile." -msgstr "" - -#: mod/dfrn_request.php:696 mod/dfrn_request.php:713 -msgid "Confirm" -msgstr "" - -#: mod/dfrn_request.php:708 -msgid "Hide this contact" -msgstr "" - -#: mod/dfrn_request.php:711 -#, php-format -msgid "Welcome home %s." -msgstr "" - -#: mod/dfrn_request.php:712 -#, php-format -msgid "Please confirm your introduction/connection request to %s." -msgstr "" - -#: mod/dfrn_request.php:843 -msgid "" -"Please enter your 'Identity Address' from one of the following supported " -"communications networks:" -msgstr "" - -#: mod/dfrn_request.php:867 -#, php-format -msgid "" -"If you are not yet a member of the free social web, follow this link to find a public Friendica site and join us today." -msgstr "" - -#: mod/dfrn_request.php:872 -msgid "Friend/Connection Request" -msgstr "" - -#: mod/dfrn_request.php:873 -msgid "" -"Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, " -"testuser@identi.ca" -msgstr "" - -#: mod/dfrn_request.php:874 mod/follow.php:112 -msgid "Please answer the following:" -msgstr "" - -#: mod/dfrn_request.php:875 mod/follow.php:113 -#, php-format -msgid "Does %s know you?" -msgstr "" - -#: mod/dfrn_request.php:879 mod/follow.php:114 -msgid "Add a personal note:" -msgstr "" - -#: mod/dfrn_request.php:882 -msgid "StatusNet/Federated Social Web" -msgstr "" - -#: mod/dfrn_request.php:884 -#, php-format -msgid "" -" - please do not use this form. Instead, enter %s into your Diaspora search " -"bar." -msgstr "" - -#: mod/dfrn_request.php:885 mod/follow.php:120 -msgid "Your Identity Address:" -msgstr "" - -#: mod/dfrn_request.php:888 mod/follow.php:19 -msgid "Submit Request" -msgstr "" - -#: mod/directory.php:199 view/theme/vier/theme.php:196 +#: mod/directory.php:199 view/theme/vier/theme.php:199 msgid "Global Directory" msgstr "" @@ -5623,18 +3894,8 @@ msgstr "" msgid "No entries (some entries may be hidden)." msgstr "" -#: mod/dirfind.php:37 -#, php-format -msgid "People Search - %s" -msgstr "" - -#: mod/dirfind.php:48 -#, php-format -msgid "Forum Search - %s" -msgstr "" - -#: mod/dirfind.php:245 mod/match.php:109 -msgid "No matches" +#: mod/display.php:328 mod/cal.php:143 mod/profile.php:155 +msgid "Access to this profile has been restricted." msgstr "" #: mod/display.php:479 @@ -5649,122 +3910,19 @@ msgstr "" msgid "Edit post" msgstr "" -#: mod/events.php:100 mod/events.php:102 -msgid "Event can not end before it has started." -msgstr "" - -#: mod/events.php:109 mod/events.php:111 -msgid "Event title and start time are required." -msgstr "" - -#: mod/events.php:388 -msgid "Create New Event" -msgstr "" - -#: mod/events.php:489 -msgid "Event details" -msgstr "" - -#: mod/events.php:490 -msgid "Starting date and Title are required." -msgstr "" - -#: mod/events.php:491 mod/events.php:492 -msgid "Event Starts:" -msgstr "" - -#: mod/events.php:491 mod/events.php:503 mod/profiles.php:708 -msgid "Required" -msgstr "" - -#: mod/events.php:493 mod/events.php:509 -msgid "Finish date/time is not known or not relevant" -msgstr "" - -#: mod/events.php:495 mod/events.php:496 -msgid "Event Finishes:" -msgstr "" - -#: mod/events.php:497 mod/events.php:510 -msgid "Adjust for viewer timezone" -msgstr "" - -#: mod/events.php:499 -msgid "Description:" -msgstr "" - -#: mod/events.php:503 mod/events.php:505 -msgid "Title:" -msgstr "" - -#: mod/events.php:506 mod/events.php:507 -msgid "Share this event" -msgstr "" - #: mod/fbrowser.php:132 msgid "Files" msgstr "" +#: mod/fetch.php:12 mod/fetch.php:39 mod/fetch.php:48 mod/help.php:53 +#: mod/p.php:16 mod/p.php:43 mod/p.php:52 index.php:298 +msgid "Not Found" +msgstr "" + #: mod/filer.php:30 msgid "- select -" msgstr "" -#: mod/follow.php:30 -msgid "You already added this contact." -msgstr "" - -#: mod/follow.php:39 -msgid "Diaspora support isn't enabled. Contact can't be added." -msgstr "" - -#: mod/follow.php:46 -msgid "OStatus support is disabled. Contact can't be added." -msgstr "" - -#: mod/follow.php:53 -msgid "The network type couldn't be detected. Contact can't be added." -msgstr "" - -#: mod/follow.php:186 -msgid "Contact added" -msgstr "" - -#: mod/friendica.php:72 -msgid "This is Friendica, version" -msgstr "" - -#: mod/friendica.php:73 -msgid "running at web location" -msgstr "" - -#: mod/friendica.php:75 -msgid "" -"Please visit Friendica.com to learn " -"more about the Friendica project." -msgstr "" - -#: mod/friendica.php:77 -msgid "Bug reports and issues: please visit" -msgstr "" - -#: mod/friendica.php:77 -msgid "the bugtracker at github" -msgstr "" - -#: mod/friendica.php:78 -msgid "" -"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - " -"dot com" -msgstr "" - -#: mod/friendica.php:92 -msgid "Installed plugins/addons/apps:" -msgstr "" - -#: mod/friendica.php:105 -msgid "No installed plugins/addons/apps" -msgstr "" - #: mod/fsuggest.php:64 msgid "Friend suggestion sent." msgstr "" @@ -5778,50 +3936,6 @@ msgstr "" msgid "Suggest a friend for %s" msgstr "" -#: mod/group.php:29 -msgid "Group created." -msgstr "" - -#: mod/group.php:35 -msgid "Could not create group." -msgstr "" - -#: mod/group.php:49 mod/group.php:150 -msgid "Group not found." -msgstr "" - -#: mod/group.php:63 -msgid "Group name changed." -msgstr "" - -#: mod/group.php:91 -msgid "Save Group" -msgstr "" - -#: mod/group.php:97 -msgid "Create a group of contacts/friends." -msgstr "" - -#: mod/group.php:122 -msgid "Group removed." -msgstr "" - -#: mod/group.php:124 -msgid "Unable to remove group." -msgstr "" - -#: mod/group.php:187 -msgid "Group Editor" -msgstr "" - -#: mod/group.php:200 -msgid "Members" -msgstr "" - -#: mod/group.php:233 mod/profperm.php:107 -msgid "Click on a contact to add or remove." -msgstr "" - #: mod/hcard.php:11 msgid "No profile" msgstr "" @@ -5830,371 +3944,15 @@ msgstr "" msgid "Help:" msgstr "" +#: mod/help.php:56 index.php:301 +msgid "Page not found." +msgstr "" + #: mod/home.php:39 #, php-format msgid "Welcome to %s" msgstr "" -#: mod/install.php:140 -msgid "Friendica Communications Server - Setup" -msgstr "" - -#: mod/install.php:146 -msgid "Could not connect to database." -msgstr "" - -#: mod/install.php:150 -msgid "Could not create table." -msgstr "" - -#: mod/install.php:156 -msgid "Your Friendica site database has been installed." -msgstr "" - -#: mod/install.php:161 -msgid "" -"You may need to import the file \"database.sql\" manually using phpmyadmin " -"or mysql." -msgstr "" - -#: mod/install.php:162 mod/install.php:234 mod/install.php:609 -msgid "Please see the file \"INSTALL.txt\"." -msgstr "" - -#: mod/install.php:174 -msgid "Database already in use." -msgstr "" - -#: mod/install.php:231 -msgid "System check" -msgstr "" - -#: mod/install.php:236 -msgid "Check again" -msgstr "" - -#: mod/install.php:255 -msgid "Database connection" -msgstr "" - -#: mod/install.php:256 -msgid "" -"In order to install Friendica we need to know how to connect to your " -"database." -msgstr "" - -#: mod/install.php:257 -msgid "" -"Please contact your hosting provider or site administrator if you have " -"questions about these settings." -msgstr "" - -#: mod/install.php:258 -msgid "" -"The database you specify below should already exist. If it does not, please " -"create it before continuing." -msgstr "" - -#: mod/install.php:262 -msgid "Database Server Name" -msgstr "" - -#: mod/install.php:263 -msgid "Database Login Name" -msgstr "" - -#: mod/install.php:264 -msgid "Database Login Password" -msgstr "" - -#: mod/install.php:264 -msgid "For security reasons the password must not be empty" -msgstr "" - -#: mod/install.php:265 -msgid "Database Name" -msgstr "" - -#: mod/install.php:266 mod/install.php:307 -msgid "Site administrator email address" -msgstr "" - -#: mod/install.php:266 mod/install.php:307 -msgid "" -"Your account email address must match this in order to use the web admin " -"panel." -msgstr "" - -#: mod/install.php:270 mod/install.php:310 -msgid "Please select a default timezone for your website" -msgstr "" - -#: mod/install.php:297 -msgid "Site settings" -msgstr "" - -#: mod/install.php:311 -msgid "System Language:" -msgstr "" - -#: mod/install.php:311 -msgid "" -"Set the default language for your Friendica installation interface and to " -"send emails." -msgstr "" - -#: mod/install.php:351 -msgid "Could not find a command line version of PHP in the web server PATH." -msgstr "" - -#: mod/install.php:352 -msgid "" -"If you don't have a command line version of PHP installed on server, you " -"will not be able to run background polling via cron. See 'Setup the poller'" -msgstr "" - -#: mod/install.php:356 -msgid "PHP executable path" -msgstr "" - -#: mod/install.php:356 -msgid "" -"Enter full path to php executable. You can leave this blank to continue the " -"installation." -msgstr "" - -#: mod/install.php:361 -msgid "Command line PHP" -msgstr "" - -#: mod/install.php:370 -msgid "PHP executable is not the php cli binary (could be cgi-fgci version)" -msgstr "" - -#: mod/install.php:371 -msgid "Found PHP version: " -msgstr "" - -#: mod/install.php:373 -msgid "PHP cli binary" -msgstr "" - -#: mod/install.php:384 -msgid "" -"The command line version of PHP on your system does not have " -"\"register_argc_argv\" enabled." -msgstr "" - -#: mod/install.php:385 -msgid "This is required for message delivery to work." -msgstr "" - -#: mod/install.php:387 -msgid "PHP register_argc_argv" -msgstr "" - -#: mod/install.php:410 -msgid "" -"Error: the \"openssl_pkey_new\" function on this system is not able to " -"generate encryption keys" -msgstr "" - -#: mod/install.php:411 -msgid "" -"If running under Windows, please see \"http://www.php.net/manual/en/openssl." -"installation.php\"." -msgstr "" - -#: mod/install.php:413 -msgid "Generate encryption keys" -msgstr "" - -#: mod/install.php:420 -msgid "libCurl PHP module" -msgstr "" - -#: mod/install.php:421 -msgid "GD graphics PHP module" -msgstr "" - -#: mod/install.php:422 -msgid "OpenSSL PHP module" -msgstr "" - -#: mod/install.php:423 -msgid "mysqli PHP module" -msgstr "" - -#: mod/install.php:424 -msgid "mb_string PHP module" -msgstr "" - -#: mod/install.php:425 -msgid "mcrypt PHP module" -msgstr "" - -#: mod/install.php:426 -msgid "XML PHP module" -msgstr "" - -#: mod/install.php:427 -msgid "iconv module" -msgstr "" - -#: mod/install.php:431 mod/install.php:433 -msgid "Apache mod_rewrite module" -msgstr "" - -#: mod/install.php:431 -msgid "" -"Error: Apache webserver mod-rewrite module is required but not installed." -msgstr "" - -#: mod/install.php:439 -msgid "Error: libCURL PHP module required but not installed." -msgstr "" - -#: mod/install.php:443 -msgid "" -"Error: GD graphics PHP module with JPEG support required but not installed." -msgstr "" - -#: mod/install.php:447 -msgid "Error: openssl PHP module required but not installed." -msgstr "" - -#: mod/install.php:451 -msgid "Error: mysqli PHP module required but not installed." -msgstr "" - -#: mod/install.php:455 -msgid "Error: mb_string PHP module required but not installed." -msgstr "" - -#: mod/install.php:459 -msgid "Error: mcrypt PHP module required but not installed." -msgstr "" - -#: mod/install.php:463 -msgid "Error: iconv PHP module required but not installed." -msgstr "" - -#: mod/install.php:472 -msgid "" -"If you are using php_cli, please make sure that mcrypt module is enabled in " -"its config file" -msgstr "" - -#: mod/install.php:475 -msgid "" -"Function mcrypt_create_iv() is not defined. This is needed to enable RINO2 " -"encryption layer." -msgstr "" - -#: mod/install.php:477 -msgid "mcrypt_create_iv() function" -msgstr "" - -#: mod/install.php:485 -msgid "Error, XML PHP module required but not installed." -msgstr "" - -#: mod/install.php:500 -msgid "" -"The web installer needs to be able to create a file called \".htconfig.php\" " -"in the top folder of your web server and it is unable to do so." -msgstr "" - -#: mod/install.php:501 -msgid "" -"This is most often a permission setting, as the web server may not be able " -"to write files in your folder - even if you can." -msgstr "" - -#: mod/install.php:502 -msgid "" -"At the end of this procedure, we will give you a text to save in a file " -"named .htconfig.php in your Friendica top folder." -msgstr "" - -#: mod/install.php:503 -msgid "" -"You can alternatively skip this procedure and perform a manual installation. " -"Please see the file \"INSTALL.txt\" for instructions." -msgstr "" - -#: mod/install.php:506 -msgid ".htconfig.php is writable" -msgstr "" - -#: mod/install.php:516 -msgid "" -"Friendica uses the Smarty3 template engine to render its web views. Smarty3 " -"compiles templates to PHP to speed up rendering." -msgstr "" - -#: mod/install.php:517 -msgid "" -"In order to store these compiled templates, the web server needs to have " -"write access to the directory view/smarty3/ under the Friendica top level " -"folder." -msgstr "" - -#: mod/install.php:518 -msgid "" -"Please ensure that the user that your web server runs as (e.g. www-data) has " -"write access to this folder." -msgstr "" - -#: mod/install.php:519 -msgid "" -"Note: as a security measure, you should give the web server write access to " -"view/smarty3/ only--not the template files (.tpl) that it contains." -msgstr "" - -#: mod/install.php:522 -msgid "view/smarty3 is writable" -msgstr "" - -#: mod/install.php:538 -msgid "" -"Url rewrite in .htaccess is not working. Check your server configuration." -msgstr "" - -#: mod/install.php:540 -msgid "Url rewrite is working" -msgstr "" - -#: mod/install.php:559 -msgid "ImageMagick PHP extension is not installed" -msgstr "" - -#: mod/install.php:561 -msgid "ImageMagick PHP extension is installed" -msgstr "" - -#: mod/install.php:563 -msgid "ImageMagick supports GIF" -msgstr "" - -#: mod/install.php:570 -msgid "" -"The database configuration file \".htconfig.php\" could not be written. " -"Please use the enclosed text to create a configuration file in your web " -"server root." -msgstr "" - -#: mod/install.php:607 -msgid "

What next

" -msgstr "" - -#: mod/install.php:608 -msgid "" -"IMPORTANT: You will need to [manually] setup a scheduled task for the poller." -msgstr "" - #: mod/invite.php:28 msgid "Total invitation limit exceeded." msgstr "" @@ -6266,8 +4024,8 @@ msgstr "" msgid "Enter email addresses, one per line:" msgstr "" -#: mod/invite.php:136 mod/message.php:332 mod/message.php:515 -#: mod/wallmessage.php:135 +#: mod/invite.php:136 mod/wallmessage.php:135 mod/message.php:332 +#: mod/message.php:515 msgid "Your message:" msgstr "" @@ -6292,40 +4050,6 @@ msgid "" "important, please visit http://friendica.com" msgstr "" -#: mod/item.php:118 -msgid "Unable to locate original post." -msgstr "" - -#: mod/item.php:336 -msgid "Empty post discarded." -msgstr "" - -#: mod/item.php:889 -msgid "System error. Post not saved." -msgstr "" - -#: mod/item.php:979 -#, php-format -msgid "" -"This message was sent to you by %s, a member of the Friendica social network." -msgstr "" - -#: mod/item.php:981 -#, php-format -msgid "You may visit them online at %s" -msgstr "" - -#: mod/item.php:982 -msgid "" -"Please contact the sender by replying to this post if you do not wish to " -"receive these messages." -msgstr "" - -#: mod/item.php:986 -#, php-format -msgid "%s posted an update." -msgstr "" - #: mod/localtime.php:24 msgid "Time Conversion" msgstr "" @@ -6417,6 +4141,10 @@ msgid "" "Password reset failed." msgstr "" +#: mod/lostpass.php:110 boot.php:1882 +msgid "Password Reset" +msgstr "" + #: mod/lostpass.php:111 msgid "Your password has been reset as requested." msgstr "" @@ -6481,6 +4209,10 @@ msgid "" "your email for further instructions." msgstr "" +#: mod/lostpass.php:161 boot.php:1870 +msgid "Nickname or Email: " +msgstr "" + #: mod/lostpass.php:162 msgid "Reset" msgstr "" @@ -6489,20 +4221,6 @@ msgstr "" msgid "System down for maintenance" msgstr "" -#: mod/manage.php:141 -msgid "Manage Identities and/or Pages" -msgstr "" - -#: mod/manage.php:142 -msgid "" -"Toggle between different identities or community/group pages which share " -"your account details or which you have been granted \"manage\" permissions" -msgstr "" - -#: mod/manage.php:143 -msgid "Select an identity to manage: " -msgstr "" - #: mod/match.php:35 msgid "No keywords to match. Please add keywords to your default profile." msgstr "" @@ -6515,102 +4233,10 @@ msgstr "" msgid "Profile Match" msgstr "" -#: mod/message.php:60 mod/wallmessage.php:50 -msgid "No recipient selected." +#: mod/match.php:109 mod/dirfind.php:245 +msgid "No matches" msgstr "" -#: mod/message.php:64 -msgid "Unable to locate contact information." -msgstr "" - -#: mod/message.php:67 mod/wallmessage.php:56 -msgid "Message could not be sent." -msgstr "" - -#: mod/message.php:70 mod/wallmessage.php:59 -msgid "Message collection failure." -msgstr "" - -#: mod/message.php:73 mod/wallmessage.php:62 -msgid "Message sent." -msgstr "" - -#: mod/message.php:204 -msgid "Do you really want to delete this message?" -msgstr "" - -#: mod/message.php:224 -msgid "Message deleted." -msgstr "" - -#: mod/message.php:255 -msgid "Conversation removed." -msgstr "" - -#: mod/message.php:322 mod/wallmessage.php:126 -msgid "Send Private Message" -msgstr "" - -#: mod/message.php:323 mod/message.php:510 mod/wallmessage.php:128 -msgid "To:" -msgstr "" - -#: mod/message.php:328 mod/message.php:512 mod/wallmessage.php:129 -msgid "Subject:" -msgstr "" - -#: mod/message.php:364 -msgid "No messages." -msgstr "" - -#: mod/message.php:403 -msgid "Message not available." -msgstr "" - -#: mod/message.php:477 -msgid "Delete message" -msgstr "" - -#: mod/message.php:503 mod/message.php:583 -msgid "Delete conversation" -msgstr "" - -#: mod/message.php:505 -msgid "" -"No secure communications available. You may be able to " -"respond from the sender's profile page." -msgstr "" - -#: mod/message.php:509 -msgid "Send Reply" -msgstr "" - -#: mod/message.php:553 -#, php-format -msgid "Unknown sender - %s" -msgstr "" - -#: mod/message.php:555 -#, php-format -msgid "You and %s" -msgstr "" - -#: mod/message.php:557 -#, php-format -msgid "%s and You" -msgstr "" - -#: mod/message.php:586 -msgid "D, d M Y - g:i A" -msgstr "" - -#: mod/message.php:589 -#, php-format -msgid "%d message" -msgid_plural "%d messages" -msgstr[0] "" -msgstr[1] "" - #: mod/mood.php:134 msgid "Mood" msgstr "" @@ -6619,77 +4245,6 @@ msgstr "" msgid "Set your current mood and tell your friends" msgstr "" -#: mod/network.php:190 mod/search.php:25 -msgid "Remove term" -msgstr "" - -#: mod/network.php:397 -#, php-format -msgid "" -"Warning: This group contains %s member from a network that doesn't allow non " -"public messages." -msgid_plural "" -"Warning: This group contains %s members from a network that doesn't allow " -"non public messages." -msgstr[0] "" -msgstr[1] "" - -#: mod/network.php:400 -msgid "Messages in this group won't be send to these receivers." -msgstr "" - -#: mod/network.php:528 -msgid "Private messages to this person are at risk of public disclosure." -msgstr "" - -#: mod/network.php:533 -msgid "Invalid contact." -msgstr "" - -#: mod/network.php:810 -msgid "Commented Order" -msgstr "" - -#: mod/network.php:813 -msgid "Sort by Comment Date" -msgstr "" - -#: mod/network.php:818 -msgid "Posted Order" -msgstr "" - -#: mod/network.php:821 -msgid "Sort by Post Date" -msgstr "" - -#: mod/network.php:832 -msgid "Posts that mention or involve you" -msgstr "" - -#: mod/network.php:840 -msgid "New" -msgstr "" - -#: mod/network.php:843 -msgid "Activity Stream - by date" -msgstr "" - -#: mod/network.php:851 -msgid "Shared Links" -msgstr "" - -#: mod/network.php:854 -msgid "Interesting Links" -msgstr "" - -#: mod/network.php:862 -msgid "Starred" -msgstr "" - -#: mod/network.php:865 -msgid "Favourite Posts" -msgstr "" - #: mod/newmember.php:6 msgid "Welcome to Friendica" msgstr "" @@ -6740,7 +4295,7 @@ msgid "" "potential friends know exactly how to find you." msgstr "" -#: mod/newmember.php:36 mod/profile_photo.php:256 mod/profiles.php:699 +#: mod/newmember.php:36 mod/profile_photo.php:256 mod/profiles.php:700 msgid "Upload Profile Photo" msgstr "" @@ -6863,139 +4418,18 @@ msgstr "" msgid "Contacts who are not members of a group" msgstr "" -#: mod/notifications.php:35 -msgid "Invalid request identifier." -msgstr "" - -#: mod/notifications.php:44 mod/notifications.php:180 -#: mod/notifications.php:258 -msgid "Discard" -msgstr "" - -#: mod/notifications.php:105 -msgid "Network Notifications" -msgstr "" - -#: mod/notifications.php:111 mod/notify.php:69 -msgid "System Notifications" -msgstr "" - -#: mod/notifications.php:117 -msgid "Personal Notifications" -msgstr "" - -#: mod/notifications.php:123 -msgid "Home Notifications" -msgstr "" - -#: mod/notifications.php:152 -msgid "Show Ignored Requests" -msgstr "" - -#: mod/notifications.php:152 -msgid "Hide Ignored Requests" -msgstr "" - -#: mod/notifications.php:164 mod/notifications.php:228 -msgid "Notification type: " -msgstr "" - -#: mod/notifications.php:167 -#, php-format -msgid "suggested by %s" -msgstr "" - -#: mod/notifications.php:173 mod/notifications.php:246 -msgid "Post a new friend activity" -msgstr "" - -#: mod/notifications.php:173 mod/notifications.php:246 -msgid "if applicable" -msgstr "" - -#: mod/notifications.php:195 -msgid "Claims to be known to you: " -msgstr "" - -#: mod/notifications.php:196 -msgid "yes" -msgstr "" - -#: mod/notifications.php:196 -msgid "no" -msgstr "" - -#: mod/notifications.php:197 mod/notifications.php:202 -msgid "Shall your connection be bidirectional or not?" -msgstr "" - -#: mod/notifications.php:198 mod/notifications.php:203 -#, php-format -msgid "" -"Accepting %s as a friend allows %s to subscribe to your posts, and you will " -"also receive updates from them in your news feed." -msgstr "" - -#: mod/notifications.php:199 -#, php-format -msgid "" -"Accepting %s as a subscriber allows them to subscribe to your posts, but you " -"will not receive updates from them in your news feed." -msgstr "" - -#: mod/notifications.php:204 -#, php-format -msgid "" -"Accepting %s as a sharer allows them to subscribe to your posts, but you " -"will not receive updates from them in your news feed." -msgstr "" - -#: mod/notifications.php:215 -msgid "Friend" -msgstr "" - -#: mod/notifications.php:216 -msgid "Sharer" -msgstr "" - -#: mod/notifications.php:216 -msgid "Subscriber" -msgstr "" - -#: mod/notifications.php:266 -msgid "No introductions." -msgstr "" - -#: mod/notifications.php:307 -msgid "Show unread" -msgstr "" - -#: mod/notifications.php:307 -msgid "Show all" -msgstr "" - -#: mod/notifications.php:313 -#, php-format -msgid "No more %s notifications." -msgstr "" - #: mod/notify.php:65 msgid "No more system notifications." msgstr "" +#: mod/notify.php:69 mod/notifications.php:111 +msgid "System Notifications" +msgstr "" + #: mod/oexchange.php:21 msgid "Post successful." msgstr "" -#: mod/openid.php:24 -msgid "OpenID protocol error. No ID returned." -msgstr "" - -#: mod/openid.php:60 -msgid "" -"Account not found and OpenID registration is not permitted on this site." -msgstr "" - #: mod/ostatus_subscribe.php:14 msgid "Subscribing to OStatus contacts" msgstr "" @@ -7032,217 +4466,6 @@ msgstr "" msgid "Not Extended" msgstr "" -#: mod/photos.php:90 mod/photos.php:1876 -msgid "Recent Photos" -msgstr "" - -#: mod/photos.php:93 mod/photos.php:1303 mod/photos.php:1878 -msgid "Upload New Photos" -msgstr "" - -#: mod/photos.php:107 mod/settings.php:36 -msgid "everybody" -msgstr "" - -#: mod/photos.php:171 -msgid "Contact information unavailable" -msgstr "" - -#: mod/photos.php:192 -msgid "Album not found." -msgstr "" - -#: mod/photos.php:225 mod/photos.php:237 mod/photos.php:1247 -msgid "Delete Album" -msgstr "" - -#: mod/photos.php:235 -msgid "Do you really want to delete this photo album and all its photos?" -msgstr "" - -#: mod/photos.php:317 mod/photos.php:328 mod/photos.php:1563 -msgid "Delete Photo" -msgstr "" - -#: mod/photos.php:326 -msgid "Do you really want to delete this photo?" -msgstr "" - -#: mod/photos.php:705 -#, php-format -msgid "%1$s was tagged in %2$s by %3$s" -msgstr "" - -#: mod/photos.php:705 -msgid "a photo" -msgstr "" - -#: mod/photos.php:803 mod/profile_photo.php:156 mod/wall_upload.php:151 -#, php-format -msgid "Image exceeds size limit of %s" -msgstr "" - -#: mod/photos.php:811 -msgid "Image file is empty." -msgstr "" - -#: mod/photos.php:844 mod/profile_photo.php:165 mod/wall_upload.php:186 -msgid "Unable to process image." -msgstr "" - -#: mod/photos.php:871 mod/profile_photo.php:315 mod/wall_upload.php:219 -msgid "Image upload failed." -msgstr "" - -#: mod/photos.php:974 -msgid "No photos selected" -msgstr "" - -#: mod/photos.php:1074 mod/videos.php:309 -msgid "Access to this item is restricted." -msgstr "" - -#: mod/photos.php:1134 -#, php-format -msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage." -msgstr "" - -#: mod/photos.php:1168 -msgid "Upload Photos" -msgstr "" - -#: mod/photos.php:1172 mod/photos.php:1242 -msgid "New album name: " -msgstr "" - -#: mod/photos.php:1173 -msgid "or existing album name: " -msgstr "" - -#: mod/photos.php:1174 -msgid "Do not show a status post for this upload" -msgstr "" - -#: mod/photos.php:1185 mod/photos.php:1567 mod/settings.php:1307 -msgid "Show to Groups" -msgstr "" - -#: mod/photos.php:1186 mod/photos.php:1568 mod/settings.php:1308 -msgid "Show to Contacts" -msgstr "" - -#: mod/photos.php:1187 -msgid "Private Photo" -msgstr "" - -#: mod/photos.php:1188 -msgid "Public Photo" -msgstr "" - -#: mod/photos.php:1254 -msgid "Edit Album" -msgstr "" - -#: mod/photos.php:1260 -msgid "Show Newest First" -msgstr "" - -#: mod/photos.php:1262 -msgid "Show Oldest First" -msgstr "" - -#: mod/photos.php:1289 mod/photos.php:1861 -msgid "View Photo" -msgstr "" - -#: mod/photos.php:1335 -msgid "Permission denied. Access to this item may be restricted." -msgstr "" - -#: mod/photos.php:1337 -msgid "Photo not available" -msgstr "" - -#: mod/photos.php:1395 -msgid "View photo" -msgstr "" - -#: mod/photos.php:1395 -msgid "Edit photo" -msgstr "" - -#: mod/photos.php:1396 -msgid "Use as profile photo" -msgstr "" - -#: mod/photos.php:1421 -msgid "View Full Size" -msgstr "" - -#: mod/photos.php:1507 -msgid "Tags: " -msgstr "" - -#: mod/photos.php:1510 -msgid "[Remove any tag]" -msgstr "" - -#: mod/photos.php:1549 -msgid "New album name" -msgstr "" - -#: mod/photos.php:1550 -msgid "Caption" -msgstr "" - -#: mod/photos.php:1551 -msgid "Add a Tag" -msgstr "" - -#: mod/photos.php:1551 -msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" -msgstr "" - -#: mod/photos.php:1552 -msgid "Do not rotate" -msgstr "" - -#: mod/photos.php:1553 -msgid "Rotate CW (right)" -msgstr "" - -#: mod/photos.php:1554 -msgid "Rotate CCW (left)" -msgstr "" - -#: mod/photos.php:1569 -msgid "Private photo" -msgstr "" - -#: mod/photos.php:1570 -msgid "Public photo" -msgstr "" - -#: mod/photos.php:1792 -msgid "Map" -msgstr "" - -#: mod/photos.php:1867 mod/videos.php:391 -msgid "View Album" -msgstr "" - -#: mod/ping.php:270 -msgid "{0} wants to be your friend" -msgstr "" - -#: mod/ping.php:285 -msgid "{0} sent you a message" -msgstr "" - -#: mod/ping.php:300 -msgid "{0} requested registration" -msgstr "" - #: mod/poke.php:196 msgid "Poke/Prod" msgstr "" @@ -7263,10 +4486,6 @@ msgstr "" msgid "Make this post private" msgstr "" -#: mod/profile.php:174 -msgid "Tips for New Members" -msgstr "" - #: mod/profile_photo.php:44 msgid "Image uploaded but image cropping failed." msgstr "" @@ -7287,6 +4506,15 @@ msgstr "" msgid "Unable to process image" msgstr "" +#: mod/profile_photo.php:156 mod/photos.php:813 mod/wall_upload.php:181 +#, php-format +msgid "Image exceeds size limit of %s" +msgstr "" + +#: mod/profile_photo.php:165 mod/photos.php:854 mod/wall_upload.php:218 +msgid "Unable to process image." +msgstr "" + #: mod/profile_photo.php:254 msgid "Upload File:" msgstr "" @@ -7327,15 +4555,1114 @@ msgstr "" msgid "Image uploaded successfully." msgstr "" +#: mod/profile_photo.php:315 mod/photos.php:883 mod/wall_upload.php:257 +msgid "Image upload failed." +msgstr "" + +#: mod/profperm.php:20 mod/group.php:76 index.php:406 +msgid "Permission denied" +msgstr "" + +#: mod/profperm.php:26 mod/profperm.php:57 +msgid "Invalid profile identifier." +msgstr "" + +#: mod/profperm.php:103 +msgid "Profile Visibility Editor" +msgstr "" + +#: mod/profperm.php:107 mod/group.php:262 +msgid "Click on a contact to add or remove." +msgstr "" + +#: mod/profperm.php:116 +msgid "Visible To" +msgstr "" + +#: mod/profperm.php:132 +msgid "All Contacts (with secure profile access)" +msgstr "" + +#: mod/regmod.php:58 +msgid "Account approved." +msgstr "" + +#: mod/regmod.php:95 +#, php-format +msgid "Registration revoked for %s" +msgstr "" + +#: mod/regmod.php:107 +msgid "Please login." +msgstr "" + +#: mod/removeme.php:52 mod/removeme.php:55 +msgid "Remove My Account" +msgstr "" + +#: mod/removeme.php:53 +msgid "" +"This will completely remove your account. Once this has been done it is not " +"recoverable." +msgstr "" + +#: mod/removeme.php:54 +msgid "Please enter your password for verification:" +msgstr "" + +#: mod/repair_ostatus.php:14 +msgid "Resubscribing to OStatus contacts" +msgstr "" + +#: mod/repair_ostatus.php:30 +msgid "Error" +msgstr "" + +#: mod/subthread.php:104 +#, php-format +msgid "%1$s is following %2$s's %3$s" +msgstr "" + +#: mod/suggest.php:27 +msgid "Do you really want to delete this suggestion?" +msgstr "" + +#: mod/suggest.php:71 +msgid "" +"No suggestions available. If this is a new site, please try again in 24 " +"hours." +msgstr "" + +#: mod/suggest.php:84 mod/suggest.php:104 +msgid "Ignore/Hide" +msgstr "" + +#: mod/tagrm.php:43 +msgid "Tag removed" +msgstr "" + +#: mod/tagrm.php:82 +msgid "Remove Item Tag" +msgstr "" + +#: mod/tagrm.php:84 +msgid "Select a tag to remove: " +msgstr "" + +#: mod/uimport.php:51 mod/register.php:198 +msgid "" +"This site has exceeded the number of allowed daily account registrations. " +"Please try again tomorrow." +msgstr "" + +#: mod/uimport.php:66 mod/register.php:295 +msgid "Import" +msgstr "" + +#: mod/uimport.php:68 +msgid "Move account" +msgstr "" + +#: mod/uimport.php:69 +msgid "You can import an account from another Friendica server." +msgstr "" + +#: mod/uimport.php:70 +msgid "" +"You need to export your account from the old server and upload it here. We " +"will recreate your old account here with all your contacts. We will try also " +"to inform your friends that you moved here." +msgstr "" + +#: mod/uimport.php:71 +msgid "" +"This feature is experimental. We can't import contacts from the OStatus " +"network (GNU Social/Statusnet) or from Diaspora" +msgstr "" + +#: mod/uimport.php:72 +msgid "Account file" +msgstr "" + +#: mod/uimport.php:72 +msgid "" +"To export your account, go to \"Settings->Export your personal data\" and " +"select \"Export account\"" +msgstr "" + +#: mod/update_community.php:19 mod/update_display.php:23 +#: mod/update_network.php:27 mod/update_notes.php:36 mod/update_profile.php:35 +msgid "[Embedded content - reload page to view]" +msgstr "" + +#: mod/viewcontacts.php:75 +msgid "No contacts." +msgstr "" + +#: mod/viewsrc.php:7 +msgid "Access denied." +msgstr "" + +#: mod/wall_attach.php:17 mod/wall_attach.php:25 mod/wall_attach.php:76 +#: mod/wall_upload.php:36 mod/wall_upload.php:52 mod/wall_upload.php:110 +#: mod/wall_upload.php:150 mod/wall_upload.php:153 +msgid "Invalid request." +msgstr "" + +#: mod/wall_attach.php:94 +msgid "Sorry, maybe your upload is bigger than the PHP configuration allows" +msgstr "" + +#: mod/wall_attach.php:94 +msgid "Or - did you try to upload an empty file?" +msgstr "" + +#: mod/wall_attach.php:105 +#, php-format +msgid "File exceeds size limit of %s" +msgstr "" + +#: mod/wall_attach.php:158 mod/wall_attach.php:174 +msgid "File upload failed." +msgstr "" + +#: mod/wallmessage.php:42 mod/wallmessage.php:106 +#, php-format +msgid "Number of daily wall messages for %s exceeded. Message failed." +msgstr "" + +#: mod/wallmessage.php:50 mod/message.php:60 +msgid "No recipient selected." +msgstr "" + +#: mod/wallmessage.php:53 +msgid "Unable to check your home location." +msgstr "" + +#: mod/wallmessage.php:56 mod/message.php:67 +msgid "Message could not be sent." +msgstr "" + +#: mod/wallmessage.php:59 mod/message.php:70 +msgid "Message collection failure." +msgstr "" + +#: mod/wallmessage.php:62 mod/message.php:73 +msgid "Message sent." +msgstr "" + +#: mod/wallmessage.php:80 mod/wallmessage.php:89 +msgid "No recipient." +msgstr "" + +#: mod/wallmessage.php:126 mod/message.php:322 +msgid "Send Private Message" +msgstr "" + +#: mod/wallmessage.php:127 +#, php-format +msgid "" +"If you wish for %s to respond, please check that the privacy settings on " +"your site allow private mail from unknown senders." +msgstr "" + +#: mod/wallmessage.php:128 mod/message.php:323 mod/message.php:510 +msgid "To:" +msgstr "" + +#: mod/wallmessage.php:129 mod/message.php:328 mod/message.php:512 +msgid "Subject:" +msgstr "" + +#: mod/babel.php:16 +msgid "Source (bbcode) text:" +msgstr "" + +#: mod/babel.php:23 +msgid "Source (Diaspora) text to convert to BBcode:" +msgstr "" + +#: mod/babel.php:31 +msgid "Source input: " +msgstr "" + +#: mod/babel.php:35 +msgid "bb2html (raw HTML): " +msgstr "" + +#: mod/babel.php:39 +msgid "bb2html: " +msgstr "" + +#: mod/babel.php:43 +msgid "bb2html2bb: " +msgstr "" + +#: mod/babel.php:47 +msgid "bb2md: " +msgstr "" + +#: mod/babel.php:51 +msgid "bb2md2html: " +msgstr "" + +#: mod/babel.php:55 +msgid "bb2dia2bb: " +msgstr "" + +#: mod/babel.php:59 +msgid "bb2md2html2bb: " +msgstr "" + +#: mod/babel.php:65 +msgid "Source input (Diaspora format): " +msgstr "" + +#: mod/babel.php:69 +msgid "diaspora2bb: " +msgstr "" + +#: mod/cal.php:271 mod/events.php:375 +msgid "View" +msgstr "" + +#: mod/cal.php:272 mod/events.php:377 +msgid "Previous" +msgstr "" + +#: mod/cal.php:273 mod/events.php:378 mod/install.php:201 +msgid "Next" +msgstr "" + +#: mod/cal.php:282 mod/events.php:387 +msgid "list" +msgstr "" + +#: mod/cal.php:292 +msgid "User not found" +msgstr "" + +#: mod/cal.php:308 +msgid "This calendar format is not supported" +msgstr "" + +#: mod/cal.php:310 +msgid "No exportable data found" +msgstr "" + +#: mod/cal.php:325 +msgid "calendar" +msgstr "" + +#: mod/community.php:23 +msgid "Not available." +msgstr "" + +#: mod/community.php:50 mod/search.php:219 +msgid "No results." +msgstr "" + +#: mod/dfrn_confirm.php:70 mod/profiles.php:19 mod/profiles.php:135 +#: mod/profiles.php:182 mod/profiles.php:619 +msgid "Profile not found." +msgstr "" + +#: mod/dfrn_confirm.php:127 +msgid "" +"This may occasionally happen if contact was requested by both persons and it " +"has already been approved." +msgstr "" + +#: mod/dfrn_confirm.php:244 +msgid "Response from remote site was not understood." +msgstr "" + +#: mod/dfrn_confirm.php:253 mod/dfrn_confirm.php:258 +msgid "Unexpected response from remote site: " +msgstr "" + +#: mod/dfrn_confirm.php:267 +msgid "Confirmation completed successfully." +msgstr "" + +#: mod/dfrn_confirm.php:269 mod/dfrn_confirm.php:283 mod/dfrn_confirm.php:290 +msgid "Remote site reported: " +msgstr "" + +#: mod/dfrn_confirm.php:281 +msgid "Temporary failure. Please wait and try again." +msgstr "" + +#: mod/dfrn_confirm.php:288 +msgid "Introduction failed or was revoked." +msgstr "" + +#: mod/dfrn_confirm.php:418 +msgid "Unable to set contact photo." +msgstr "" + +#: mod/dfrn_confirm.php:559 +#, php-format +msgid "No user record found for '%s' " +msgstr "" + +#: mod/dfrn_confirm.php:569 +msgid "Our site encryption key is apparently messed up." +msgstr "" + +#: mod/dfrn_confirm.php:580 +msgid "Empty site URL was provided or URL could not be decrypted by us." +msgstr "" + +#: mod/dfrn_confirm.php:602 +msgid "Contact record was not found for you on our site." +msgstr "" + +#: mod/dfrn_confirm.php:616 +#, php-format +msgid "Site public key not available in contact record for URL %s." +msgstr "" + +#: mod/dfrn_confirm.php:636 +msgid "" +"The ID provided by your system is a duplicate on our system. It should work " +"if you try again." +msgstr "" + +#: mod/dfrn_confirm.php:647 +msgid "Unable to set your contact credentials on our system." +msgstr "" + +#: mod/dfrn_confirm.php:709 +msgid "Unable to update your contact profile details on our system" +msgstr "" + +#: mod/dfrn_confirm.php:781 +#, php-format +msgid "%1$s has joined %2$s" +msgstr "" + +#: mod/dfrn_request.php:101 +msgid "This introduction has already been accepted." +msgstr "" + +#: mod/dfrn_request.php:124 mod/dfrn_request.php:528 +msgid "Profile location is not valid or does not contain profile information." +msgstr "" + +#: mod/dfrn_request.php:129 mod/dfrn_request.php:533 +msgid "Warning: profile location has no identifiable owner name." +msgstr "" + +#: mod/dfrn_request.php:132 mod/dfrn_request.php:536 +msgid "Warning: profile location has no profile photo." +msgstr "" + +#: mod/dfrn_request.php:136 mod/dfrn_request.php:540 +#, php-format +msgid "%d required parameter was not found at the given location" +msgid_plural "%d required parameters were not found at the given location" +msgstr[0] "" +msgstr[1] "" + +#: mod/dfrn_request.php:180 +msgid "Introduction complete." +msgstr "" + +#: mod/dfrn_request.php:225 +msgid "Unrecoverable protocol error." +msgstr "" + +#: mod/dfrn_request.php:253 +msgid "Profile unavailable." +msgstr "" + +#: mod/dfrn_request.php:280 +#, php-format +msgid "%s has received too many connection requests today." +msgstr "" + +#: mod/dfrn_request.php:281 +msgid "Spam protection measures have been invoked." +msgstr "" + +#: mod/dfrn_request.php:282 +msgid "Friends are advised to please try again in 24 hours." +msgstr "" + +#: mod/dfrn_request.php:344 +msgid "Invalid locator" +msgstr "" + +#: mod/dfrn_request.php:353 +msgid "Invalid email address." +msgstr "" + +#: mod/dfrn_request.php:378 +msgid "This account has not been configured for email. Request failed." +msgstr "" + +#: mod/dfrn_request.php:481 +msgid "You have already introduced yourself here." +msgstr "" + +#: mod/dfrn_request.php:485 +#, php-format +msgid "Apparently you are already friends with %s." +msgstr "" + +#: mod/dfrn_request.php:506 +msgid "Invalid profile URL." +msgstr "" + +#: mod/dfrn_request.php:614 +msgid "Your introduction has been sent." +msgstr "" + +#: mod/dfrn_request.php:656 +msgid "" +"Remote subscription can't be done for your network. Please subscribe " +"directly on your system." +msgstr "" + +#: mod/dfrn_request.php:677 +msgid "Please login to confirm introduction." +msgstr "" + +#: mod/dfrn_request.php:687 +msgid "" +"Incorrect identity currently logged in. Please login to this profile." +msgstr "" + +#: mod/dfrn_request.php:701 mod/dfrn_request.php:718 +msgid "Confirm" +msgstr "" + +#: mod/dfrn_request.php:713 +msgid "Hide this contact" +msgstr "" + +#: mod/dfrn_request.php:716 +#, php-format +msgid "Welcome home %s." +msgstr "" + +#: mod/dfrn_request.php:717 +#, php-format +msgid "Please confirm your introduction/connection request to %s." +msgstr "" + +#: mod/dfrn_request.php:848 +msgid "" +"Please enter your 'Identity Address' from one of the following supported " +"communications networks:" +msgstr "" + +#: mod/dfrn_request.php:872 +#, php-format +msgid "" +"If you are not yet a member of the free social web, follow this link to find a public Friendica site and join us today." +msgstr "" + +#: mod/dfrn_request.php:877 +msgid "Friend/Connection Request" +msgstr "" + +#: mod/dfrn_request.php:878 +msgid "" +"Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, " +"testuser@identi.ca" +msgstr "" + +#: mod/dfrn_request.php:879 mod/follow.php:112 +msgid "Please answer the following:" +msgstr "" + +#: mod/dfrn_request.php:880 mod/follow.php:113 +#, php-format +msgid "Does %s know you?" +msgstr "" + +#: mod/dfrn_request.php:884 mod/follow.php:114 +msgid "Add a personal note:" +msgstr "" + +#: mod/dfrn_request.php:887 +msgid "StatusNet/Federated Social Web" +msgstr "" + +#: mod/dfrn_request.php:889 +#, php-format +msgid "" +" - please do not use this form. Instead, enter %s into your Diaspora search " +"bar." +msgstr "" + +#: mod/dfrn_request.php:890 mod/follow.php:120 +msgid "Your Identity Address:" +msgstr "" + +#: mod/dfrn_request.php:893 mod/follow.php:19 +msgid "Submit Request" +msgstr "" + +#: mod/dirfind.php:37 +#, php-format +msgid "People Search - %s" +msgstr "" + +#: mod/dirfind.php:48 +#, php-format +msgid "Forum Search - %s" +msgstr "" + +#: mod/events.php:93 mod/events.php:95 +msgid "Event can not end before it has started." +msgstr "" + +#: mod/events.php:102 mod/events.php:104 +msgid "Event title and start time are required." +msgstr "" + +#: mod/events.php:376 +msgid "Create New Event" +msgstr "" + +#: mod/events.php:481 +msgid "Event details" +msgstr "" + +#: mod/events.php:482 +msgid "Starting date and Title are required." +msgstr "" + +#: mod/events.php:483 mod/events.php:484 +msgid "Event Starts:" +msgstr "" + +#: mod/events.php:483 mod/events.php:495 mod/profiles.php:709 +msgid "Required" +msgstr "" + +#: mod/events.php:485 mod/events.php:501 +msgid "Finish date/time is not known or not relevant" +msgstr "" + +#: mod/events.php:487 mod/events.php:488 +msgid "Event Finishes:" +msgstr "" + +#: mod/events.php:489 mod/events.php:502 +msgid "Adjust for viewer timezone" +msgstr "" + +#: mod/events.php:491 +msgid "Description:" +msgstr "" + +#: mod/events.php:495 mod/events.php:497 +msgid "Title:" +msgstr "" + +#: mod/events.php:498 mod/events.php:499 +msgid "Share this event" +msgstr "" + +#: mod/events.php:528 +msgid "Failed to remove event" +msgstr "" + +#: mod/events.php:530 +msgid "Event removed" +msgstr "" + +#: mod/follow.php:30 +msgid "You already added this contact." +msgstr "" + +#: mod/follow.php:39 +msgid "Diaspora support isn't enabled. Contact can't be added." +msgstr "" + +#: mod/follow.php:46 +msgid "OStatus support is disabled. Contact can't be added." +msgstr "" + +#: mod/follow.php:53 +msgid "The network type couldn't be detected. Contact can't be added." +msgstr "" + +#: mod/follow.php:186 +msgid "Contact added" +msgstr "" + +#: mod/friendica.php:68 +msgid "This is Friendica, version" +msgstr "" + +#: mod/friendica.php:69 +msgid "running at web location" +msgstr "" + +#: mod/friendica.php:73 +msgid "" +"Please visit Friendica.com to learn " +"more about the Friendica project." +msgstr "" + +#: mod/friendica.php:77 +msgid "Bug reports and issues: please visit" +msgstr "" + +#: mod/friendica.php:77 +msgid "the bugtracker at github" +msgstr "" + +#: mod/friendica.php:80 +msgid "" +"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - " +"dot com" +msgstr "" + +#: mod/friendica.php:94 +msgid "Installed plugins/addons/apps:" +msgstr "" + +#: mod/friendica.php:108 +msgid "No installed plugins/addons/apps" +msgstr "" + +#: mod/friendica.php:113 +msgid "On this server the following remote servers are blocked." +msgstr "" + +#: mod/friendica.php:114 mod/admin.php:280 mod/admin.php:298 +msgid "Reason for the block" +msgstr "" + +#: mod/group.php:29 +msgid "Group created." +msgstr "" + +#: mod/group.php:35 +msgid "Could not create group." +msgstr "" + +#: mod/group.php:49 mod/group.php:154 +msgid "Group not found." +msgstr "" + +#: mod/group.php:63 +msgid "Group name changed." +msgstr "" + +#: mod/group.php:93 +msgid "Save Group" +msgstr "" + +#: mod/group.php:98 +msgid "Create a group of contacts/friends." +msgstr "" + +#: mod/group.php:123 +msgid "Group removed." +msgstr "" + +#: mod/group.php:125 +msgid "Unable to remove group." +msgstr "" + +#: mod/group.php:189 +msgid "Delete Group" +msgstr "" + +#: mod/group.php:195 +msgid "Group Editor" +msgstr "" + +#: mod/group.php:200 +msgid "Edit Group Name" +msgstr "" + +#: mod/group.php:210 +msgid "Members" +msgstr "" + +#: mod/group.php:226 +msgid "Remove Contact" +msgstr "" + +#: mod/group.php:250 +msgid "Add Contact" +msgstr "" + +#: mod/manage.php:151 +msgid "Manage Identities and/or Pages" +msgstr "" + +#: mod/manage.php:152 +msgid "" +"Toggle between different identities or community/group pages which share " +"your account details or which you have been granted \"manage\" permissions" +msgstr "" + +#: mod/manage.php:153 +msgid "Select an identity to manage: " +msgstr "" + +#: mod/message.php:64 +msgid "Unable to locate contact information." +msgstr "" + +#: mod/message.php:204 +msgid "Do you really want to delete this message?" +msgstr "" + +#: mod/message.php:224 +msgid "Message deleted." +msgstr "" + +#: mod/message.php:255 +msgid "Conversation removed." +msgstr "" + +#: mod/message.php:364 +msgid "No messages." +msgstr "" + +#: mod/message.php:403 +msgid "Message not available." +msgstr "" + +#: mod/message.php:477 +msgid "Delete message" +msgstr "" + +#: mod/message.php:503 mod/message.php:591 +msgid "Delete conversation" +msgstr "" + +#: mod/message.php:505 +msgid "" +"No secure communications available. You may be able to " +"respond from the sender's profile page." +msgstr "" + +#: mod/message.php:509 +msgid "Send Reply" +msgstr "" + +#: mod/message.php:561 +#, php-format +msgid "Unknown sender - %s" +msgstr "" + +#: mod/message.php:563 +#, php-format +msgid "You and %s" +msgstr "" + +#: mod/message.php:565 +#, php-format +msgid "%s and You" +msgstr "" + +#: mod/message.php:594 +msgid "D, d M Y - g:i A" +msgstr "" + +#: mod/message.php:597 +#, php-format +msgid "%d message" +msgid_plural "%d messages" +msgstr[0] "" +msgstr[1] "" + +#: mod/network.php:197 mod/search.php:25 +msgid "Remove term" +msgstr "" + +#: mod/network.php:404 +#, php-format +msgid "" +"Warning: This group contains %s member from a network that doesn't allow non " +"public messages." +msgid_plural "" +"Warning: This group contains %s members from a network that doesn't allow " +"non public messages." +msgstr[0] "" +msgstr[1] "" + +#: mod/network.php:407 +msgid "Messages in this group won't be send to these receivers." +msgstr "" + +#: mod/network.php:535 +msgid "Private messages to this person are at risk of public disclosure." +msgstr "" + +#: mod/network.php:540 +msgid "Invalid contact." +msgstr "" + +#: mod/network.php:813 +msgid "Commented Order" +msgstr "" + +#: mod/network.php:816 +msgid "Sort by Comment Date" +msgstr "" + +#: mod/network.php:821 +msgid "Posted Order" +msgstr "" + +#: mod/network.php:824 +msgid "Sort by Post Date" +msgstr "" + +#: mod/network.php:835 +msgid "Posts that mention or involve you" +msgstr "" + +#: mod/network.php:843 +msgid "New" +msgstr "" + +#: mod/network.php:846 +msgid "Activity Stream - by date" +msgstr "" + +#: mod/network.php:854 +msgid "Shared Links" +msgstr "" + +#: mod/network.php:857 +msgid "Interesting Links" +msgstr "" + +#: mod/network.php:865 +msgid "Starred" +msgstr "" + +#: mod/network.php:868 +msgid "Favourite Posts" +msgstr "" + +#: mod/openid.php:24 +msgid "OpenID protocol error. No ID returned." +msgstr "" + +#: mod/openid.php:60 +msgid "" +"Account not found and OpenID registration is not permitted on this site." +msgstr "" + +#: mod/photos.php:94 mod/photos.php:1900 +msgid "Recent Photos" +msgstr "" + +#: mod/photos.php:97 mod/photos.php:1328 mod/photos.php:1902 +msgid "Upload New Photos" +msgstr "" + +#: mod/photos.php:112 mod/settings.php:36 +msgid "everybody" +msgstr "" + +#: mod/photos.php:176 +msgid "Contact information unavailable" +msgstr "" + +#: mod/photos.php:197 +msgid "Album not found." +msgstr "" + +#: mod/photos.php:230 mod/photos.php:242 mod/photos.php:1272 +msgid "Delete Album" +msgstr "" + +#: mod/photos.php:240 +msgid "Do you really want to delete this photo album and all its photos?" +msgstr "" + +#: mod/photos.php:323 mod/photos.php:334 mod/photos.php:1598 +msgid "Delete Photo" +msgstr "" + +#: mod/photos.php:332 +msgid "Do you really want to delete this photo?" +msgstr "" + +#: mod/photos.php:713 +#, php-format +msgid "%1$s was tagged in %2$s by %3$s" +msgstr "" + +#: mod/photos.php:713 +msgid "a photo" +msgstr "" + +#: mod/photos.php:821 +msgid "Image file is empty." +msgstr "" + +#: mod/photos.php:988 +msgid "No photos selected" +msgstr "" + +#: mod/photos.php:1091 mod/videos.php:309 +msgid "Access to this item is restricted." +msgstr "" + +#: mod/photos.php:1151 +#, php-format +msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage." +msgstr "" + +#: mod/photos.php:1188 +msgid "Upload Photos" +msgstr "" + +#: mod/photos.php:1192 mod/photos.php:1267 +msgid "New album name: " +msgstr "" + +#: mod/photos.php:1193 +msgid "or existing album name: " +msgstr "" + +#: mod/photos.php:1194 +msgid "Do not show a status post for this upload" +msgstr "" + +#: mod/photos.php:1205 mod/photos.php:1602 mod/settings.php:1307 +msgid "Show to Groups" +msgstr "" + +#: mod/photos.php:1206 mod/photos.php:1603 mod/settings.php:1308 +msgid "Show to Contacts" +msgstr "" + +#: mod/photos.php:1207 +msgid "Private Photo" +msgstr "" + +#: mod/photos.php:1208 +msgid "Public Photo" +msgstr "" + +#: mod/photos.php:1278 +msgid "Edit Album" +msgstr "" + +#: mod/photos.php:1283 +msgid "Show Newest First" +msgstr "" + +#: mod/photos.php:1285 +msgid "Show Oldest First" +msgstr "" + +#: mod/photos.php:1314 mod/photos.php:1885 +msgid "View Photo" +msgstr "" + +#: mod/photos.php:1359 +msgid "Permission denied. Access to this item may be restricted." +msgstr "" + +#: mod/photos.php:1361 +msgid "Photo not available" +msgstr "" + +#: mod/photos.php:1422 +msgid "View photo" +msgstr "" + +#: mod/photos.php:1422 +msgid "Edit photo" +msgstr "" + +#: mod/photos.php:1423 +msgid "Use as profile photo" +msgstr "" + +#: mod/photos.php:1448 +msgid "View Full Size" +msgstr "" + +#: mod/photos.php:1538 +msgid "Tags: " +msgstr "" + +#: mod/photos.php:1541 +msgid "[Remove any tag]" +msgstr "" + +#: mod/photos.php:1584 +msgid "New album name" +msgstr "" + +#: mod/photos.php:1585 +msgid "Caption" +msgstr "" + +#: mod/photos.php:1586 +msgid "Add a Tag" +msgstr "" + +#: mod/photos.php:1586 +msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" +msgstr "" + +#: mod/photos.php:1587 +msgid "Do not rotate" +msgstr "" + +#: mod/photos.php:1588 +msgid "Rotate CW (right)" +msgstr "" + +#: mod/photos.php:1589 +msgid "Rotate CCW (left)" +msgstr "" + +#: mod/photos.php:1604 +msgid "Private photo" +msgstr "" + +#: mod/photos.php:1605 +msgid "Public photo" +msgstr "" + +#: mod/photos.php:1814 +msgid "Map" +msgstr "" + +#: mod/photos.php:1891 mod/videos.php:393 +msgid "View Album" +msgstr "" + +#: mod/probe.php:10 mod/webfinger.php:9 +msgid "Only logged in users are permitted to perform a probing." +msgstr "" + +#: mod/profile.php:175 +msgid "Tips for New Members" +msgstr "" + #: mod/profiles.php:38 msgid "Profile deleted." msgstr "" -#: mod/profiles.php:56 mod/profiles.php:90 +#: mod/profiles.php:54 mod/profiles.php:90 msgid "Profile-" msgstr "" -#: mod/profiles.php:75 mod/profiles.php:118 +#: mod/profiles.php:73 mod/profiles.php:118 msgid "New profile created." msgstr "" @@ -7343,63 +5670,63 @@ msgstr "" msgid "Profile unavailable to clone." msgstr "" -#: mod/profiles.php:190 +#: mod/profiles.php:192 msgid "Profile Name is required." msgstr "" -#: mod/profiles.php:338 +#: mod/profiles.php:332 msgid "Marital Status" msgstr "" -#: mod/profiles.php:342 +#: mod/profiles.php:336 msgid "Romantic Partner" msgstr "" -#: mod/profiles.php:354 +#: mod/profiles.php:348 msgid "Work/Employment" msgstr "" -#: mod/profiles.php:357 +#: mod/profiles.php:351 msgid "Religion" msgstr "" -#: mod/profiles.php:361 +#: mod/profiles.php:355 msgid "Political Views" msgstr "" -#: mod/profiles.php:365 +#: mod/profiles.php:359 msgid "Gender" msgstr "" -#: mod/profiles.php:369 +#: mod/profiles.php:363 msgid "Sexual Preference" msgstr "" -#: mod/profiles.php:373 +#: mod/profiles.php:367 msgid "XMPP" msgstr "" -#: mod/profiles.php:377 +#: mod/profiles.php:371 msgid "Homepage" msgstr "" -#: mod/profiles.php:381 mod/profiles.php:694 +#: mod/profiles.php:375 mod/profiles.php:695 msgid "Interests" msgstr "" -#: mod/profiles.php:385 +#: mod/profiles.php:379 msgid "Address" msgstr "" -#: mod/profiles.php:392 mod/profiles.php:690 +#: mod/profiles.php:386 mod/profiles.php:691 msgid "Location" msgstr "" -#: mod/profiles.php:477 +#: mod/profiles.php:471 msgid "Profile updated." msgstr "" -#: mod/profiles.php:565 +#: mod/profiles.php:564 msgid " and " msgstr "" @@ -7417,7 +5744,7 @@ msgstr "" msgid " - Visit %1$s's %2$s" msgstr "" -#: mod/profiles.php:580 +#: mod/profiles.php:579 #, php-format msgid "%1$s has an updated %2$s, changing %3$s." msgstr "" @@ -7430,218 +5757,202 @@ msgstr "" msgid "Hide your contact/friend list from viewers of this profile?" msgstr "" -#: mod/profiles.php:666 +#: mod/profiles.php:667 msgid "Show more profile fields:" msgstr "" -#: mod/profiles.php:678 +#: mod/profiles.php:679 msgid "Profile Actions" msgstr "" -#: mod/profiles.php:679 +#: mod/profiles.php:680 msgid "Edit Profile Details" msgstr "" -#: mod/profiles.php:681 +#: mod/profiles.php:682 msgid "Change Profile Photo" msgstr "" -#: mod/profiles.php:682 +#: mod/profiles.php:683 msgid "View this profile" msgstr "" -#: mod/profiles.php:684 +#: mod/profiles.php:685 msgid "Create a new profile using these settings" msgstr "" -#: mod/profiles.php:685 +#: mod/profiles.php:686 msgid "Clone this profile" msgstr "" -#: mod/profiles.php:686 +#: mod/profiles.php:687 msgid "Delete this profile" msgstr "" -#: mod/profiles.php:688 +#: mod/profiles.php:689 msgid "Basic information" msgstr "" -#: mod/profiles.php:689 +#: mod/profiles.php:690 msgid "Profile picture" msgstr "" -#: mod/profiles.php:691 +#: mod/profiles.php:692 msgid "Preferences" msgstr "" -#: mod/profiles.php:692 +#: mod/profiles.php:693 msgid "Status information" msgstr "" -#: mod/profiles.php:693 +#: mod/profiles.php:694 msgid "Additional information" msgstr "" -#: mod/profiles.php:696 +#: mod/profiles.php:697 msgid "Relation" msgstr "" -#: mod/profiles.php:700 +#: mod/profiles.php:701 msgid "Your Gender:" msgstr "" -#: mod/profiles.php:701 +#: mod/profiles.php:702 msgid " Marital Status:" msgstr "" -#: mod/profiles.php:703 +#: mod/profiles.php:704 msgid "Example: fishing photography software" msgstr "" -#: mod/profiles.php:708 +#: mod/profiles.php:709 msgid "Profile Name:" msgstr "" -#: mod/profiles.php:710 +#: mod/profiles.php:711 msgid "" "This is your public profile.
It may " "be visible to anybody using the internet." msgstr "" -#: mod/profiles.php:711 +#: mod/profiles.php:712 msgid "Your Full Name:" msgstr "" -#: mod/profiles.php:712 +#: mod/profiles.php:713 msgid "Title/Description:" msgstr "" -#: mod/profiles.php:715 +#: mod/profiles.php:716 msgid "Street Address:" msgstr "" -#: mod/profiles.php:716 +#: mod/profiles.php:717 msgid "Locality/City:" msgstr "" -#: mod/profiles.php:717 +#: mod/profiles.php:718 msgid "Region/State:" msgstr "" -#: mod/profiles.php:718 +#: mod/profiles.php:719 msgid "Postal/Zip Code:" msgstr "" -#: mod/profiles.php:719 +#: mod/profiles.php:720 msgid "Country:" msgstr "" -#: mod/profiles.php:723 +#: mod/profiles.php:724 msgid "Who: (if applicable)" msgstr "" -#: mod/profiles.php:723 +#: mod/profiles.php:724 msgid "Examples: cathy123, Cathy Williams, cathy@example.com" msgstr "" -#: mod/profiles.php:724 +#: mod/profiles.php:725 msgid "Since [date]:" msgstr "" -#: mod/profiles.php:726 +#: mod/profiles.php:727 msgid "Tell us about yourself..." msgstr "" -#: mod/profiles.php:727 +#: mod/profiles.php:728 msgid "XMPP (Jabber) address:" msgstr "" -#: mod/profiles.php:727 +#: mod/profiles.php:728 msgid "" "The XMPP address will be propagated to your contacts so that they can follow " "you." msgstr "" -#: mod/profiles.php:728 +#: mod/profiles.php:729 msgid "Homepage URL:" msgstr "" -#: mod/profiles.php:731 +#: mod/profiles.php:732 msgid "Religious Views:" msgstr "" -#: mod/profiles.php:732 +#: mod/profiles.php:733 msgid "Public Keywords:" msgstr "" -#: mod/profiles.php:732 +#: mod/profiles.php:733 msgid "(Used for suggesting potential friends, can be seen by others)" msgstr "" -#: mod/profiles.php:733 +#: mod/profiles.php:734 msgid "Private Keywords:" msgstr "" -#: mod/profiles.php:733 +#: mod/profiles.php:734 msgid "(Used for searching profiles, never shown to others)" msgstr "" -#: mod/profiles.php:736 +#: mod/profiles.php:737 msgid "Musical interests" msgstr "" -#: mod/profiles.php:737 +#: mod/profiles.php:738 msgid "Books, literature" msgstr "" -#: mod/profiles.php:738 +#: mod/profiles.php:739 msgid "Television" msgstr "" -#: mod/profiles.php:739 +#: mod/profiles.php:740 msgid "Film/dance/culture/entertainment" msgstr "" -#: mod/profiles.php:740 +#: mod/profiles.php:741 msgid "Hobbies/Interests" msgstr "" -#: mod/profiles.php:741 +#: mod/profiles.php:742 msgid "Love/romance" msgstr "" -#: mod/profiles.php:742 +#: mod/profiles.php:743 msgid "Work/employment" msgstr "" -#: mod/profiles.php:743 +#: mod/profiles.php:744 msgid "School/education" msgstr "" -#: mod/profiles.php:744 +#: mod/profiles.php:745 msgid "Contact information and Social Networks" msgstr "" -#: mod/profiles.php:788 +#: mod/profiles.php:786 msgid "Edit/Manage Profiles" msgstr "" -#: mod/profperm.php:26 mod/profperm.php:57 -msgid "Invalid profile identifier." -msgstr "" - -#: mod/profperm.php:103 -msgid "Profile Visibility Editor" -msgstr "" - -#: mod/profperm.php:116 -msgid "Visible To" -msgstr "" - -#: mod/profperm.php:132 -msgid "All Contacts (with secure profile access)" -msgstr "" - #: mod/register.php:93 msgid "" "Registration successful. Please check your email for further instructions." @@ -7666,12 +5977,6 @@ msgstr "" msgid "Your registration is pending approval by the site owner." msgstr "" -#: mod/register.php:198 mod/uimport.php:51 -msgid "" -"This site has exceeded the number of allowed daily account registrations. " -"Please try again tomorrow." -msgstr "" - #: mod/register.php:226 msgid "" "You may (optionally) fill in this form via OpenID by supplying your OpenID " @@ -7708,6 +6013,10 @@ msgstr "" msgid "Your invitation ID: " msgstr "" +#: mod/register.php:272 mod/admin.php:1056 +msgid "Registration" +msgstr "" + #: mod/register.php:280 msgid "Your Full Name (e.g. Joe Smith, real or real-looking): " msgstr "" @@ -7739,49 +6048,10 @@ msgstr "" msgid "Choose a nickname: " msgstr "" -#: mod/register.php:295 mod/uimport.php:66 -msgid "Import" -msgstr "" - #: mod/register.php:296 msgid "Import your profile to this friendica instance" msgstr "" -#: mod/regmod.php:58 -msgid "Account approved." -msgstr "" - -#: mod/regmod.php:95 -#, php-format -msgid "Registration revoked for %s" -msgstr "" - -#: mod/regmod.php:107 -msgid "Please login." -msgstr "" - -#: mod/removeme.php:52 mod/removeme.php:55 -msgid "Remove My Account" -msgstr "" - -#: mod/removeme.php:53 -msgid "" -"This will completely remove your account. Once this has been done it is not " -"recoverable." -msgstr "" - -#: mod/removeme.php:54 -msgid "Please enter your password for verification:" -msgstr "" - -#: mod/repair_ostatus.php:14 -msgid "Resubscribing to OStatus contacts" -msgstr "" - -#: mod/repair_ostatus.php:30 -msgid "Error" -msgstr "" - #: mod/search.php:100 msgid "Only logged in users are permitted to perform a search." msgstr "" @@ -7794,11 +6064,19 @@ msgstr "" msgid "Only one search per minute is permitted for not logged in users." msgstr "" -#: mod/search.php:230 +#: mod/search.php:225 #, php-format msgid "Items tagged with: %s" msgstr "" +#: mod/settings.php:43 mod/admin.php:1490 +msgid "Account" +msgstr "" + +#: mod/settings.php:52 mod/admin.php:169 +msgid "Additional features" +msgstr "" + #: mod/settings.php:60 msgid "Display" msgstr "" @@ -7807,6 +6085,10 @@ msgstr "" msgid "Social Networks" msgstr "" +#: mod/settings.php:74 mod/admin.php:167 mod/admin.php:1616 mod/admin.php:1679 +msgid "Plugins" +msgstr "" + #: mod/settings.php:88 msgid "Connected apps" msgstr "" @@ -7891,6 +6173,13 @@ msgstr "" msgid "Add application" msgstr "" +#: mod/settings.php:681 mod/settings.php:792 mod/settings.php:841 +#: mod/settings.php:908 mod/settings.php:1005 mod/settings.php:1271 +#: mod/admin.php:1055 mod/admin.php:1680 mod/admin.php:1943 mod/admin.php:2017 +#: mod/admin.php:2170 +msgid "Save Settings" +msgstr "" + #: mod/settings.php:684 mod/settings.php:710 msgid "Consumer Key" msgstr "" @@ -7935,6 +6224,14 @@ msgstr "" msgid "Plugin Settings" msgstr "" +#: mod/settings.php:782 mod/admin.php:2159 mod/admin.php:2160 +msgid "Off" +msgstr "" + +#: mod/settings.php:782 mod/admin.php:2159 mod/admin.php:2160 +msgid "On" +msgstr "" + #: mod/settings.php:790 msgid "Additional Features" msgstr "" @@ -8063,6 +6360,10 @@ msgstr "" msgid "Move to folder:" msgstr "" +#: mod/settings.php:943 mod/admin.php:942 +msgid "No special theme for mobile devices" +msgstr "" + #: mod/settings.php:1003 msgid "Display Settings" msgstr "" @@ -8254,6 +6555,10 @@ msgstr "" msgid "Publish your default profile in your local site directory?" msgstr "" +#: mod/settings.php:1171 +msgid "Your profile may be visible in public." +msgstr "" + #: mod/settings.php:1177 msgid "Publish your default profile in the global social directory?" msgstr "" @@ -8513,37 +6818,6 @@ msgstr "" msgid "Resend relocate message to contacts" msgstr "" -#: mod/subthread.php:104 -#, php-format -msgid "%1$s is following %2$s's %3$s" -msgstr "" - -#: mod/suggest.php:27 -msgid "Do you really want to delete this suggestion?" -msgstr "" - -#: mod/suggest.php:71 -msgid "" -"No suggestions available. If this is a new site, please try again in 24 " -"hours." -msgstr "" - -#: mod/suggest.php:84 mod/suggest.php:104 -msgid "Ignore/Hide" -msgstr "" - -#: mod/tagrm.php:43 -msgid "Tag removed" -msgstr "" - -#: mod/tagrm.php:82 -msgid "Remove Item Tag" -msgstr "" - -#: mod/tagrm.php:84 -msgid "Select a tag to remove: " -msgstr "" - #: mod/uexport.php:37 msgid "Export account" msgstr "" @@ -8565,42 +6839,6 @@ msgid "" "of your account (photos are not exported)" msgstr "" -#: mod/uimport.php:68 -msgid "Move account" -msgstr "" - -#: mod/uimport.php:69 -msgid "You can import an account from another Friendica server." -msgstr "" - -#: mod/uimport.php:70 -msgid "" -"You need to export your account from the old server and upload it here. We " -"will recreate your old account here with all your contacts. We will try also " -"to inform your friends that you moved here." -msgstr "" - -#: mod/uimport.php:71 -msgid "" -"This feature is experimental. We can't import contacts from the OStatus " -"network (GNU Social/Statusnet) or from Diaspora" -msgstr "" - -#: mod/uimport.php:72 -msgid "Account file" -msgstr "" - -#: mod/uimport.php:72 -msgid "" -"To export your account, go to \"Settings->Export your personal data\" and " -"select \"Export account\"" -msgstr "" - -#: mod/update_community.php:19 mod/update_display.php:23 -#: mod/update_network.php:27 mod/update_notes.php:36 mod/update_profile.php:35 -msgid "[Embedded content - reload page to view]" -msgstr "" - #: mod/videos.php:124 msgid "Do you really want to delete this video?" msgstr "" @@ -8613,63 +6851,1873 @@ msgstr "" msgid "No videos selected" msgstr "" -#: mod/videos.php:400 +#: mod/videos.php:402 msgid "Recent Videos" msgstr "" -#: mod/videos.php:402 +#: mod/videos.php:404 msgid "Upload New Videos" msgstr "" -#: mod/viewcontacts.php:75 -msgid "No contacts." +#: mod/install.php:106 +msgid "Friendica Communications Server - Setup" msgstr "" -#: mod/viewsrc.php:7 -msgid "Access denied." +#: mod/install.php:112 +msgid "Could not connect to database." msgstr "" -#: mod/wall_attach.php:17 mod/wall_attach.php:25 mod/wall_attach.php:76 -#: mod/wall_upload.php:20 mod/wall_upload.php:33 mod/wall_upload.php:86 -#: mod/wall_upload.php:122 mod/wall_upload.php:125 -msgid "Invalid request." +#: mod/install.php:116 +msgid "Could not create table." msgstr "" -#: mod/wall_attach.php:94 -msgid "Sorry, maybe your upload is bigger than the PHP configuration allows" +#: mod/install.php:122 +msgid "Your Friendica site database has been installed." msgstr "" -#: mod/wall_attach.php:94 -msgid "Or - did you try to upload an empty file?" +#: mod/install.php:127 +msgid "" +"You may need to import the file \"database.sql\" manually using phpmyadmin " +"or mysql." msgstr "" -#: mod/wall_attach.php:105 -#, php-format -msgid "File exceeds size limit of %s" +#: mod/install.php:128 mod/install.php:200 mod/install.php:547 +msgid "Please see the file \"INSTALL.txt\"." msgstr "" -#: mod/wall_attach.php:158 mod/wall_attach.php:174 -msgid "File upload failed." +#: mod/install.php:140 +msgid "Database already in use." msgstr "" -#: mod/wallmessage.php:42 mod/wallmessage.php:106 -#, php-format -msgid "Number of daily wall messages for %s exceeded. Message failed." +#: mod/install.php:197 +msgid "System check" msgstr "" -#: mod/wallmessage.php:53 -msgid "Unable to check your home location." +#: mod/install.php:202 +msgid "Check again" msgstr "" -#: mod/wallmessage.php:80 mod/wallmessage.php:89 -msgid "No recipient." +#: mod/install.php:221 +msgid "Database connection" msgstr "" -#: mod/wallmessage.php:127 +#: mod/install.php:222 +msgid "" +"In order to install Friendica we need to know how to connect to your " +"database." +msgstr "" + +#: mod/install.php:223 +msgid "" +"Please contact your hosting provider or site administrator if you have " +"questions about these settings." +msgstr "" + +#: mod/install.php:224 +msgid "" +"The database you specify below should already exist. If it does not, please " +"create it before continuing." +msgstr "" + +#: mod/install.php:228 +msgid "Database Server Name" +msgstr "" + +#: mod/install.php:229 +msgid "Database Login Name" +msgstr "" + +#: mod/install.php:230 +msgid "Database Login Password" +msgstr "" + +#: mod/install.php:230 +msgid "For security reasons the password must not be empty" +msgstr "" + +#: mod/install.php:231 +msgid "Database Name" +msgstr "" + +#: mod/install.php:232 mod/install.php:273 +msgid "Site administrator email address" +msgstr "" + +#: mod/install.php:232 mod/install.php:273 +msgid "" +"Your account email address must match this in order to use the web admin " +"panel." +msgstr "" + +#: mod/install.php:236 mod/install.php:276 +msgid "Please select a default timezone for your website" +msgstr "" + +#: mod/install.php:263 +msgid "Site settings" +msgstr "" + +#: mod/install.php:277 +msgid "System Language:" +msgstr "" + +#: mod/install.php:277 +msgid "" +"Set the default language for your Friendica installation interface and to " +"send emails." +msgstr "" + +#: mod/install.php:317 +msgid "Could not find a command line version of PHP in the web server PATH." +msgstr "" + +#: mod/install.php:318 +msgid "" +"If you don't have a command line version of PHP installed on server, you " +"will not be able to run the background processing. See 'Setup the poller'" +msgstr "" + +#: mod/install.php:322 +msgid "PHP executable path" +msgstr "" + +#: mod/install.php:322 +msgid "" +"Enter full path to php executable. You can leave this blank to continue the " +"installation." +msgstr "" + +#: mod/install.php:327 +msgid "Command line PHP" +msgstr "" + +#: mod/install.php:336 +msgid "PHP executable is not the php cli binary (could be cgi-fgci version)" +msgstr "" + +#: mod/install.php:337 +msgid "Found PHP version: " +msgstr "" + +#: mod/install.php:339 +msgid "PHP cli binary" +msgstr "" + +#: mod/install.php:350 +msgid "" +"The command line version of PHP on your system does not have " +"\"register_argc_argv\" enabled." +msgstr "" + +#: mod/install.php:351 +msgid "This is required for message delivery to work." +msgstr "" + +#: mod/install.php:353 +msgid "PHP register_argc_argv" +msgstr "" + +#: mod/install.php:376 +msgid "" +"Error: the \"openssl_pkey_new\" function on this system is not able to " +"generate encryption keys" +msgstr "" + +#: mod/install.php:377 +msgid "" +"If running under Windows, please see \"http://www.php.net/manual/en/openssl." +"installation.php\"." +msgstr "" + +#: mod/install.php:379 +msgid "Generate encryption keys" +msgstr "" + +#: mod/install.php:386 +msgid "libCurl PHP module" +msgstr "" + +#: mod/install.php:387 +msgid "GD graphics PHP module" +msgstr "" + +#: mod/install.php:388 +msgid "OpenSSL PHP module" +msgstr "" + +#: mod/install.php:389 +msgid "PDO or MySQLi PHP module" +msgstr "" + +#: mod/install.php:390 +msgid "mb_string PHP module" +msgstr "" + +#: mod/install.php:391 +msgid "XML PHP module" +msgstr "" + +#: mod/install.php:392 +msgid "iconv module" +msgstr "" + +#: mod/install.php:396 mod/install.php:398 +msgid "Apache mod_rewrite module" +msgstr "" + +#: mod/install.php:396 +msgid "" +"Error: Apache webserver mod-rewrite module is required but not installed." +msgstr "" + +#: mod/install.php:404 +msgid "Error: libCURL PHP module required but not installed." +msgstr "" + +#: mod/install.php:408 +msgid "" +"Error: GD graphics PHP module with JPEG support required but not installed." +msgstr "" + +#: mod/install.php:412 +msgid "Error: openssl PHP module required but not installed." +msgstr "" + +#: mod/install.php:416 +msgid "Error: PDO or MySQLi PHP module required but not installed." +msgstr "" + +#: mod/install.php:420 +msgid "Error: The MySQL driver for PDO is not installed." +msgstr "" + +#: mod/install.php:424 +msgid "Error: mb_string PHP module required but not installed." +msgstr "" + +#: mod/install.php:428 +msgid "Error: iconv PHP module required but not installed." +msgstr "" + +#: mod/install.php:438 +msgid "Error, XML PHP module required but not installed." +msgstr "" + +#: mod/install.php:450 +msgid "" +"The web installer needs to be able to create a file called \".htconfig.php\" " +"in the top folder of your web server and it is unable to do so." +msgstr "" + +#: mod/install.php:451 +msgid "" +"This is most often a permission setting, as the web server may not be able " +"to write files in your folder - even if you can." +msgstr "" + +#: mod/install.php:452 +msgid "" +"At the end of this procedure, we will give you a text to save in a file " +"named .htconfig.php in your Friendica top folder." +msgstr "" + +#: mod/install.php:453 +msgid "" +"You can alternatively skip this procedure and perform a manual installation. " +"Please see the file \"INSTALL.txt\" for instructions." +msgstr "" + +#: mod/install.php:456 +msgid ".htconfig.php is writable" +msgstr "" + +#: mod/install.php:466 +msgid "" +"Friendica uses the Smarty3 template engine to render its web views. Smarty3 " +"compiles templates to PHP to speed up rendering." +msgstr "" + +#: mod/install.php:467 +msgid "" +"In order to store these compiled templates, the web server needs to have " +"write access to the directory view/smarty3/ under the Friendica top level " +"folder." +msgstr "" + +#: mod/install.php:468 +msgid "" +"Please ensure that the user that your web server runs as (e.g. www-data) has " +"write access to this folder." +msgstr "" + +#: mod/install.php:469 +msgid "" +"Note: as a security measure, you should give the web server write access to " +"view/smarty3/ only--not the template files (.tpl) that it contains." +msgstr "" + +#: mod/install.php:472 +msgid "view/smarty3 is writable" +msgstr "" + +#: mod/install.php:488 +msgid "" +"Url rewrite in .htaccess is not working. Check your server configuration." +msgstr "" + +#: mod/install.php:490 +msgid "Url rewrite is working" +msgstr "" + +#: mod/install.php:509 +msgid "ImageMagick PHP extension is not installed" +msgstr "" + +#: mod/install.php:511 +msgid "ImageMagick PHP extension is installed" +msgstr "" + +#: mod/install.php:513 +msgid "ImageMagick supports GIF" +msgstr "" + +#: mod/install.php:520 +msgid "" +"The database configuration file \".htconfig.php\" could not be written. " +"Please use the enclosed text to create a configuration file in your web " +"server root." +msgstr "" + +#: mod/install.php:545 +msgid "

What next

" +msgstr "" + +#: mod/install.php:546 +msgid "" +"IMPORTANT: You will need to [manually] setup a scheduled task for the poller." +msgstr "" + +#: mod/item.php:116 +msgid "Unable to locate original post." +msgstr "" + +#: mod/item.php:344 +msgid "Empty post discarded." +msgstr "" + +#: mod/item.php:904 +msgid "System error. Post not saved." +msgstr "" + +#: mod/item.php:995 #, php-format msgid "" -"If you wish for %s to respond, please check that the privacy settings on " -"your site allow private mail from unknown senders." +"This message was sent to you by %s, a member of the Friendica social network." +msgstr "" + +#: mod/item.php:997 +#, php-format +msgid "You may visit them online at %s" +msgstr "" + +#: mod/item.php:998 +msgid "" +"Please contact the sender by replying to this post if you do not wish to " +"receive these messages." +msgstr "" + +#: mod/item.php:1002 +#, php-format +msgid "%s posted an update." +msgstr "" + +#: mod/notifications.php:35 +msgid "Invalid request identifier." +msgstr "" + +#: mod/notifications.php:44 mod/notifications.php:180 +#: mod/notifications.php:227 +msgid "Discard" +msgstr "" + +#: mod/notifications.php:105 +msgid "Network Notifications" +msgstr "" + +#: mod/notifications.php:117 +msgid "Personal Notifications" +msgstr "" + +#: mod/notifications.php:123 +msgid "Home Notifications" +msgstr "" + +#: mod/notifications.php:152 +msgid "Show Ignored Requests" +msgstr "" + +#: mod/notifications.php:152 +msgid "Hide Ignored Requests" +msgstr "" + +#: mod/notifications.php:164 mod/notifications.php:234 +msgid "Notification type: " +msgstr "" + +#: mod/notifications.php:167 +#, php-format +msgid "suggested by %s" +msgstr "" + +#: mod/notifications.php:173 mod/notifications.php:252 +msgid "Post a new friend activity" +msgstr "" + +#: mod/notifications.php:173 mod/notifications.php:252 +msgid "if applicable" +msgstr "" + +#: mod/notifications.php:176 mod/notifications.php:261 mod/admin.php:1506 +msgid "Approve" +msgstr "" + +#: mod/notifications.php:195 +msgid "Claims to be known to you: " +msgstr "" + +#: mod/notifications.php:196 +msgid "yes" +msgstr "" + +#: mod/notifications.php:196 +msgid "no" +msgstr "" + +#: mod/notifications.php:197 mod/notifications.php:202 +msgid "Shall your connection be bidirectional or not?" +msgstr "" + +#: mod/notifications.php:198 mod/notifications.php:203 +#, php-format +msgid "" +"Accepting %s as a friend allows %s to subscribe to your posts, and you will " +"also receive updates from them in your news feed." +msgstr "" + +#: mod/notifications.php:199 +#, php-format +msgid "" +"Accepting %s as a subscriber allows them to subscribe to your posts, but you " +"will not receive updates from them in your news feed." +msgstr "" + +#: mod/notifications.php:204 +#, php-format +msgid "" +"Accepting %s as a sharer allows them to subscribe to your posts, but you " +"will not receive updates from them in your news feed." +msgstr "" + +#: mod/notifications.php:215 +msgid "Friend" +msgstr "" + +#: mod/notifications.php:216 +msgid "Sharer" +msgstr "" + +#: mod/notifications.php:216 +msgid "Subscriber" +msgstr "" + +#: mod/notifications.php:272 +msgid "No introductions." +msgstr "" + +#: mod/notifications.php:313 +msgid "Show unread" +msgstr "" + +#: mod/notifications.php:313 +msgid "Show all" +msgstr "" + +#: mod/notifications.php:319 +#, php-format +msgid "No more %s notifications." +msgstr "" + +#: mod/ping.php:270 +msgid "{0} wants to be your friend" +msgstr "" + +#: mod/ping.php:285 +msgid "{0} sent you a message" +msgstr "" + +#: mod/ping.php:300 +msgid "{0} requested registration" +msgstr "" + +#: mod/admin.php:96 +msgid "Theme settings updated." +msgstr "" + +#: mod/admin.php:165 mod/admin.php:1054 +msgid "Site" +msgstr "" + +#: mod/admin.php:166 mod/admin.php:988 mod/admin.php:1498 mod/admin.php:1514 +msgid "Users" +msgstr "" + +#: mod/admin.php:168 mod/admin.php:1892 mod/admin.php:1942 +msgid "Themes" +msgstr "" + +#: mod/admin.php:170 +msgid "DB updates" +msgstr "" + +#: mod/admin.php:171 mod/admin.php:512 +msgid "Inspect Queue" +msgstr "" + +#: mod/admin.php:172 mod/admin.php:288 +msgid "Server Blocklist" +msgstr "" + +#: mod/admin.php:173 mod/admin.php:478 +msgid "Federation Statistics" +msgstr "" + +#: mod/admin.php:187 mod/admin.php:198 mod/admin.php:2016 +msgid "Logs" +msgstr "" + +#: mod/admin.php:188 mod/admin.php:2084 +msgid "View Logs" +msgstr "" + +#: mod/admin.php:189 +msgid "probe address" +msgstr "" + +#: mod/admin.php:190 +msgid "check webfinger" +msgstr "" + +#: mod/admin.php:197 +msgid "Plugin Features" +msgstr "" + +#: mod/admin.php:199 +msgid "diagnostics" +msgstr "" + +#: mod/admin.php:200 +msgid "User registrations waiting for confirmation" +msgstr "" + +#: mod/admin.php:279 +msgid "The blocked domain" +msgstr "" + +#: mod/admin.php:280 mod/admin.php:293 +msgid "The reason why you blocked this domain." +msgstr "" + +#: mod/admin.php:281 +msgid "Delete domain" +msgstr "" + +#: mod/admin.php:281 +msgid "Check to delete this entry from the blocklist" +msgstr "" + +#: mod/admin.php:287 mod/admin.php:477 mod/admin.php:511 mod/admin.php:586 +#: mod/admin.php:1053 mod/admin.php:1497 mod/admin.php:1615 mod/admin.php:1678 +#: mod/admin.php:1891 mod/admin.php:1941 mod/admin.php:2015 mod/admin.php:2083 +msgid "Administration" +msgstr "" + +#: mod/admin.php:289 +msgid "" +"This page can be used to define a black list of servers from the federated " +"network that are not allowed to interact with your node. For all entered " +"domains you should also give a reason why you have blocked the remote server." +msgstr "" + +#: mod/admin.php:290 +msgid "" +"The list of blocked servers will be made publically available on the /" +"friendica page so that your users and people investigating communication " +"problems can find the reason easily." +msgstr "" + +#: mod/admin.php:291 +msgid "Add new entry to block list" +msgstr "" + +#: mod/admin.php:292 +msgid "Server Domain" +msgstr "" + +#: mod/admin.php:292 +msgid "" +"The domain of the new server to add to the block list. Do not include the " +"protocol." +msgstr "" + +#: mod/admin.php:293 +msgid "Block reason" +msgstr "" + +#: mod/admin.php:294 +msgid "Add Entry" +msgstr "" + +#: mod/admin.php:295 +msgid "Save changes to the blocklist" +msgstr "" + +#: mod/admin.php:296 +msgid "Current Entries in the Blocklist" +msgstr "" + +#: mod/admin.php:299 +msgid "Delete entry from blocklist" +msgstr "" + +#: mod/admin.php:302 +msgid "Delete entry from blocklist?" +msgstr "" + +#: mod/admin.php:327 +msgid "Server added to blocklist." +msgstr "" + +#: mod/admin.php:343 +msgid "Site blocklist updated." +msgstr "" + +#: mod/admin.php:408 +msgid "unknown" +msgstr "" + +#: mod/admin.php:471 +msgid "" +"This page offers you some numbers to the known part of the federated social " +"network your Friendica node is part of. These numbers are not complete but " +"only reflect the part of the network your node is aware of." +msgstr "" + +#: mod/admin.php:472 +msgid "" +"The Auto Discovered Contact Directory feature is not enabled, it " +"will improve the data displayed here." +msgstr "" + +#: mod/admin.php:484 +#, php-format +msgid "Currently this node is aware of %d nodes from the following platforms:" +msgstr "" + +#: mod/admin.php:514 +msgid "ID" +msgstr "" + +#: mod/admin.php:515 +msgid "Recipient Name" +msgstr "" + +#: mod/admin.php:516 +msgid "Recipient Profile" +msgstr "" + +#: mod/admin.php:518 +msgid "Created" +msgstr "" + +#: mod/admin.php:519 +msgid "Last Tried" +msgstr "" + +#: mod/admin.php:520 +msgid "" +"This page lists the content of the queue for outgoing postings. These are " +"postings the initial delivery failed for. They will be resend later and " +"eventually deleted if the delivery fails permanently." +msgstr "" + +#: mod/admin.php:545 +#, php-format +msgid "" +"Your DB still runs with MyISAM tables. You should change the engine type to " +"InnoDB. As Friendica will use InnoDB only features in the future, you should " +"change this! See here for a guide that may be helpful " +"converting the table engines. You may also use the command php include/" +"dbstructure.php toinnodb of your Friendica installation for an " +"automatic conversion.
" +msgstr "" + +#: mod/admin.php:550 +msgid "" +"You are using a MySQL version which does not support all features that " +"Friendica uses. You should consider switching to MariaDB." +msgstr "" + +#: mod/admin.php:554 mod/admin.php:1447 +msgid "Normal Account" +msgstr "" + +#: mod/admin.php:555 mod/admin.php:1448 +msgid "Soapbox Account" +msgstr "" + +#: mod/admin.php:556 mod/admin.php:1449 +msgid "Community/Celebrity Account" +msgstr "" + +#: mod/admin.php:557 mod/admin.php:1450 +msgid "Automatic Friend Account" +msgstr "" + +#: mod/admin.php:558 +msgid "Blog Account" +msgstr "" + +#: mod/admin.php:559 +msgid "Private Forum" +msgstr "" + +#: mod/admin.php:581 +msgid "Message queues" +msgstr "" + +#: mod/admin.php:587 +msgid "Summary" +msgstr "" + +#: mod/admin.php:589 +msgid "Registered users" +msgstr "" + +#: mod/admin.php:591 +msgid "Pending registrations" +msgstr "" + +#: mod/admin.php:592 +msgid "Version" +msgstr "" + +#: mod/admin.php:597 +msgid "Active plugins" +msgstr "" + +#: mod/admin.php:622 +msgid "Can not parse base url. Must have at least ://" +msgstr "" + +#: mod/admin.php:914 +msgid "Site settings updated." +msgstr "" + +#: mod/admin.php:971 +msgid "No community page" +msgstr "" + +#: mod/admin.php:972 +msgid "Public postings from users of this site" +msgstr "" + +#: mod/admin.php:973 +msgid "Global community page" +msgstr "" + +#: mod/admin.php:979 +msgid "At post arrival" +msgstr "" + +#: mod/admin.php:989 +msgid "Users, Global Contacts" +msgstr "" + +#: mod/admin.php:990 +msgid "Users, Global Contacts/fallback" +msgstr "" + +#: mod/admin.php:994 +msgid "One month" +msgstr "" + +#: mod/admin.php:995 +msgid "Three months" +msgstr "" + +#: mod/admin.php:996 +msgid "Half a year" +msgstr "" + +#: mod/admin.php:997 +msgid "One year" +msgstr "" + +#: mod/admin.php:1002 +msgid "Multi user instance" +msgstr "" + +#: mod/admin.php:1025 +msgid "Closed" +msgstr "" + +#: mod/admin.php:1026 +msgid "Requires approval" +msgstr "" + +#: mod/admin.php:1027 +msgid "Open" +msgstr "" + +#: mod/admin.php:1031 +msgid "No SSL policy, links will track page SSL state" +msgstr "" + +#: mod/admin.php:1032 +msgid "Force all links to use SSL" +msgstr "" + +#: mod/admin.php:1033 +msgid "Self-signed certificate, use SSL for local links only (discouraged)" +msgstr "" + +#: mod/admin.php:1057 +msgid "File upload" +msgstr "" + +#: mod/admin.php:1058 +msgid "Policies" +msgstr "" + +#: mod/admin.php:1060 +msgid "Auto Discovered Contact Directory" +msgstr "" + +#: mod/admin.php:1061 +msgid "Performance" +msgstr "" + +#: mod/admin.php:1062 +msgid "Worker" +msgstr "" + +#: mod/admin.php:1063 +msgid "" +"Relocate - WARNING: advanced function. Could make this server unreachable." +msgstr "" + +#: mod/admin.php:1066 +msgid "Site name" +msgstr "" + +#: mod/admin.php:1067 +msgid "Host name" +msgstr "" + +#: mod/admin.php:1068 +msgid "Sender Email" +msgstr "" + +#: mod/admin.php:1068 +msgid "" +"The email address your server shall use to send notification emails from." +msgstr "" + +#: mod/admin.php:1069 +msgid "Banner/Logo" +msgstr "" + +#: mod/admin.php:1070 +msgid "Shortcut icon" +msgstr "" + +#: mod/admin.php:1070 +msgid "Link to an icon that will be used for browsers." +msgstr "" + +#: mod/admin.php:1071 +msgid "Touch icon" +msgstr "" + +#: mod/admin.php:1071 +msgid "Link to an icon that will be used for tablets and mobiles." +msgstr "" + +#: mod/admin.php:1072 +msgid "Additional Info" +msgstr "" + +#: mod/admin.php:1072 +#, php-format +msgid "" +"For public servers: you can add additional information here that will be " +"listed at %s/siteinfo." +msgstr "" + +#: mod/admin.php:1073 +msgid "System language" +msgstr "" + +#: mod/admin.php:1074 +msgid "System theme" +msgstr "" + +#: mod/admin.php:1074 +msgid "" +"Default system theme - may be over-ridden by user profiles - change theme settings" +msgstr "" + +#: mod/admin.php:1075 +msgid "Mobile system theme" +msgstr "" + +#: mod/admin.php:1075 +msgid "Theme for mobile devices" +msgstr "" + +#: mod/admin.php:1076 +msgid "SSL link policy" +msgstr "" + +#: mod/admin.php:1076 +msgid "Determines whether generated links should be forced to use SSL" +msgstr "" + +#: mod/admin.php:1077 +msgid "Force SSL" +msgstr "" + +#: mod/admin.php:1077 +msgid "" +"Force all Non-SSL requests to SSL - Attention: on some systems it could lead " +"to endless loops." +msgstr "" + +#: mod/admin.php:1078 +msgid "Hide help entry from navigation menu" +msgstr "" + +#: mod/admin.php:1078 +msgid "" +"Hides the menu entry for the Help pages from the navigation menu. You can " +"still access it calling /help directly." +msgstr "" + +#: mod/admin.php:1079 +msgid "Single user instance" +msgstr "" + +#: mod/admin.php:1079 +msgid "Make this instance multi-user or single-user for the named user" +msgstr "" + +#: mod/admin.php:1080 +msgid "Maximum image size" +msgstr "" + +#: mod/admin.php:1080 +msgid "" +"Maximum size in bytes of uploaded images. Default is 0, which means no " +"limits." +msgstr "" + +#: mod/admin.php:1081 +msgid "Maximum image length" +msgstr "" + +#: mod/admin.php:1081 +msgid "" +"Maximum length in pixels of the longest side of uploaded images. Default is " +"-1, which means no limits." +msgstr "" + +#: mod/admin.php:1082 +msgid "JPEG image quality" +msgstr "" + +#: mod/admin.php:1082 +msgid "" +"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is " +"100, which is full quality." +msgstr "" + +#: mod/admin.php:1084 +msgid "Register policy" +msgstr "" + +#: mod/admin.php:1085 +msgid "Maximum Daily Registrations" +msgstr "" + +#: mod/admin.php:1085 +msgid "" +"If registration is permitted above, this sets the maximum number of new user " +"registrations to accept per day. If register is set to closed, this setting " +"has no effect." +msgstr "" + +#: mod/admin.php:1086 +msgid "Register text" +msgstr "" + +#: mod/admin.php:1086 +msgid "Will be displayed prominently on the registration page." +msgstr "" + +#: mod/admin.php:1087 +msgid "Accounts abandoned after x days" +msgstr "" + +#: mod/admin.php:1087 +msgid "" +"Will not waste system resources polling external sites for abandonded " +"accounts. Enter 0 for no time limit." +msgstr "" + +#: mod/admin.php:1088 +msgid "Allowed friend domains" +msgstr "" + +#: mod/admin.php:1088 +msgid "" +"Comma separated list of domains which are allowed to establish friendships " +"with this site. Wildcards are accepted. Empty to allow any domains" +msgstr "" + +#: mod/admin.php:1089 +msgid "Allowed email domains" +msgstr "" + +#: mod/admin.php:1089 +msgid "" +"Comma separated list of domains which are allowed in email addresses for " +"registrations to this site. Wildcards are accepted. Empty to allow any " +"domains" +msgstr "" + +#: mod/admin.php:1090 +msgid "Block public" +msgstr "" + +#: mod/admin.php:1090 +msgid "" +"Check to block public access to all otherwise public personal pages on this " +"site unless you are currently logged in." +msgstr "" + +#: mod/admin.php:1091 +msgid "Force publish" +msgstr "" + +#: mod/admin.php:1091 +msgid "" +"Check to force all profiles on this site to be listed in the site directory." +msgstr "" + +#: mod/admin.php:1092 +msgid "Global directory URL" +msgstr "" + +#: mod/admin.php:1092 +msgid "" +"URL to the global directory. If this is not set, the global directory is " +"completely unavailable to the application." +msgstr "" + +#: mod/admin.php:1093 +msgid "Allow threaded items" +msgstr "" + +#: mod/admin.php:1093 +msgid "Allow infinite level threading for items on this site." +msgstr "" + +#: mod/admin.php:1094 +msgid "Private posts by default for new users" +msgstr "" + +#: mod/admin.php:1094 +msgid "" +"Set default post permissions for all new members to the default privacy " +"group rather than public." +msgstr "" + +#: mod/admin.php:1095 +msgid "Don't include post content in email notifications" +msgstr "" + +#: mod/admin.php:1095 +msgid "" +"Don't include the content of a post/comment/private message/etc. in the " +"email notifications that are sent out from this site, as a privacy measure." +msgstr "" + +#: mod/admin.php:1096 +msgid "Disallow public access to addons listed in the apps menu." +msgstr "" + +#: mod/admin.php:1096 +msgid "" +"Checking this box will restrict addons listed in the apps menu to members " +"only." +msgstr "" + +#: mod/admin.php:1097 +msgid "Don't embed private images in posts" +msgstr "" + +#: mod/admin.php:1097 +msgid "" +"Don't replace locally-hosted private photos in posts with an embedded copy " +"of the image. This means that contacts who receive posts containing private " +"photos will have to authenticate and load each image, which may take a while." +msgstr "" + +#: mod/admin.php:1098 +msgid "Allow Users to set remote_self" +msgstr "" + +#: mod/admin.php:1098 +msgid "" +"With checking this, every user is allowed to mark every contact as a " +"remote_self in the repair contact dialog. Setting this flag on a contact " +"causes mirroring every posting of that contact in the users stream." +msgstr "" + +#: mod/admin.php:1099 +msgid "Block multiple registrations" +msgstr "" + +#: mod/admin.php:1099 +msgid "Disallow users to register additional accounts for use as pages." +msgstr "" + +#: mod/admin.php:1100 +msgid "OpenID support" +msgstr "" + +#: mod/admin.php:1100 +msgid "OpenID support for registration and logins." +msgstr "" + +#: mod/admin.php:1101 +msgid "Fullname check" +msgstr "" + +#: mod/admin.php:1101 +msgid "" +"Force users to register with a space between firstname and lastname in Full " +"name, as an antispam measure" +msgstr "" + +#: mod/admin.php:1102 +msgid "Community Page Style" +msgstr "" + +#: mod/admin.php:1102 +msgid "" +"Type of community page to show. 'Global community' shows every public " +"posting from an open distributed network that arrived on this server." +msgstr "" + +#: mod/admin.php:1103 +msgid "Posts per user on community page" +msgstr "" + +#: mod/admin.php:1103 +msgid "" +"The maximum number of posts per user on the community page. (Not valid for " +"'Global Community')" +msgstr "" + +#: mod/admin.php:1104 +msgid "Enable OStatus support" +msgstr "" + +#: mod/admin.php:1104 +msgid "" +"Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " +"communications in OStatus are public, so privacy warnings will be " +"occasionally displayed." +msgstr "" + +#: mod/admin.php:1105 +msgid "OStatus conversation completion interval" +msgstr "" + +#: mod/admin.php:1105 +msgid "" +"How often shall the poller check for new entries in OStatus conversations? " +"This can be a very ressource task." +msgstr "" + +#: mod/admin.php:1106 +msgid "Only import OStatus threads from our contacts" +msgstr "" + +#: mod/admin.php:1106 +msgid "" +"Normally we import every content from our OStatus contacts. With this option " +"we only store threads that are started by a contact that is known on our " +"system." +msgstr "" + +#: mod/admin.php:1107 +msgid "OStatus support can only be enabled if threading is enabled." +msgstr "" + +#: mod/admin.php:1109 +msgid "" +"Diaspora support can't be enabled because Friendica was installed into a sub " +"directory." +msgstr "" + +#: mod/admin.php:1110 +msgid "Enable Diaspora support" +msgstr "" + +#: mod/admin.php:1110 +msgid "Provide built-in Diaspora network compatibility." +msgstr "" + +#: mod/admin.php:1111 +msgid "Only allow Friendica contacts" +msgstr "" + +#: mod/admin.php:1111 +msgid "" +"All contacts must use Friendica protocols. All other built-in communication " +"protocols disabled." +msgstr "" + +#: mod/admin.php:1112 +msgid "Verify SSL" +msgstr "" + +#: mod/admin.php:1112 +msgid "" +"If you wish, you can turn on strict certificate checking. This will mean you " +"cannot connect (at all) to self-signed SSL sites." +msgstr "" + +#: mod/admin.php:1113 +msgid "Proxy user" +msgstr "" + +#: mod/admin.php:1114 +msgid "Proxy URL" +msgstr "" + +#: mod/admin.php:1115 +msgid "Network timeout" +msgstr "" + +#: mod/admin.php:1115 +msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." +msgstr "" + +#: mod/admin.php:1116 +msgid "Maximum Load Average" +msgstr "" + +#: mod/admin.php:1116 +msgid "" +"Maximum system load before delivery and poll processes are deferred - " +"default 50." +msgstr "" + +#: mod/admin.php:1117 +msgid "Maximum Load Average (Frontend)" +msgstr "" + +#: mod/admin.php:1117 +msgid "Maximum system load before the frontend quits service - default 50." +msgstr "" + +#: mod/admin.php:1118 +msgid "Minimal Memory" +msgstr "" + +#: mod/admin.php:1118 +msgid "" +"Minimal free memory in MB for the poller. Needs access to /proc/meminfo - " +"default 0 (deactivated)." +msgstr "" + +#: mod/admin.php:1119 +msgid "Maximum table size for optimization" +msgstr "" + +#: mod/admin.php:1119 +msgid "" +"Maximum table size (in MB) for the automatic optimization - default 100 MB. " +"Enter -1 to disable it." +msgstr "" + +#: mod/admin.php:1120 +msgid "Minimum level of fragmentation" +msgstr "" + +#: mod/admin.php:1120 +msgid "" +"Minimum fragmenation level to start the automatic optimization - default " +"value is 30%." +msgstr "" + +#: mod/admin.php:1122 +msgid "Periodical check of global contacts" +msgstr "" + +#: mod/admin.php:1122 +msgid "" +"If enabled, the global contacts are checked periodically for missing or " +"outdated data and the vitality of the contacts and servers." +msgstr "" + +#: mod/admin.php:1123 +msgid "Days between requery" +msgstr "" + +#: mod/admin.php:1123 +msgid "Number of days after which a server is requeried for his contacts." +msgstr "" + +#: mod/admin.php:1124 +msgid "Discover contacts from other servers" +msgstr "" + +#: mod/admin.php:1124 +msgid "" +"Periodically query other servers for contacts. You can choose between " +"'users': the users on the remote system, 'Global Contacts': active contacts " +"that are known on the system. The fallback is meant for Redmatrix servers " +"and older friendica servers, where global contacts weren't available. The " +"fallback increases the server load, so the recommened setting is 'Users, " +"Global Contacts'." +msgstr "" + +#: mod/admin.php:1125 +msgid "Timeframe for fetching global contacts" +msgstr "" + +#: mod/admin.php:1125 +msgid "" +"When the discovery is activated, this value defines the timeframe for the " +"activity of the global contacts that are fetched from other servers." +msgstr "" + +#: mod/admin.php:1126 +msgid "Search the local directory" +msgstr "" + +#: mod/admin.php:1126 +msgid "" +"Search the local directory instead of the global directory. When searching " +"locally, every search will be executed on the global directory in the " +"background. This improves the search results when the search is repeated." +msgstr "" + +#: mod/admin.php:1128 +msgid "Publish server information" +msgstr "" + +#: mod/admin.php:1128 +msgid "" +"If enabled, general server and usage data will be published. The data " +"contains the name and version of the server, number of users with public " +"profiles, number of posts and the activated protocols and connectors. See the-federation.info for details." +msgstr "" + +#: mod/admin.php:1130 +msgid "Suppress Tags" +msgstr "" + +#: mod/admin.php:1130 +msgid "Suppress showing a list of hashtags at the end of the posting." +msgstr "" + +#: mod/admin.php:1131 +msgid "Path to item cache" +msgstr "" + +#: mod/admin.php:1131 +msgid "The item caches buffers generated bbcode and external images." +msgstr "" + +#: mod/admin.php:1132 +msgid "Cache duration in seconds" +msgstr "" + +#: mod/admin.php:1132 +msgid "" +"How long should the cache files be hold? Default value is 86400 seconds (One " +"day). To disable the item cache, set the value to -1." +msgstr "" + +#: mod/admin.php:1133 +msgid "Maximum numbers of comments per post" +msgstr "" + +#: mod/admin.php:1133 +msgid "How much comments should be shown for each post? Default value is 100." +msgstr "" + +#: mod/admin.php:1134 +msgid "Temp path" +msgstr "" + +#: mod/admin.php:1134 +msgid "" +"If you have a restricted system where the webserver can't access the system " +"temp path, enter another path here." +msgstr "" + +#: mod/admin.php:1135 +msgid "Base path to installation" +msgstr "" + +#: mod/admin.php:1135 +msgid "" +"If the system cannot detect the correct path to your installation, enter the " +"correct path here. This setting should only be set if you are using a " +"restricted system and symbolic links to your webroot." +msgstr "" + +#: mod/admin.php:1136 +msgid "Disable picture proxy" +msgstr "" + +#: mod/admin.php:1136 +msgid "" +"The picture proxy increases performance and privacy. It shouldn't be used on " +"systems with very low bandwith." +msgstr "" + +#: mod/admin.php:1137 +msgid "Only search in tags" +msgstr "" + +#: mod/admin.php:1137 +msgid "On large systems the text search can slow down the system extremely." +msgstr "" + +#: mod/admin.php:1139 +msgid "New base url" +msgstr "" + +#: mod/admin.php:1139 +msgid "" +"Change base url for this server. Sends relocate message to all DFRN contacts " +"of all users." +msgstr "" + +#: mod/admin.php:1141 +msgid "RINO Encryption" +msgstr "" + +#: mod/admin.php:1141 +msgid "Encryption layer between nodes." +msgstr "" + +#: mod/admin.php:1143 +msgid "Maximum number of parallel workers" +msgstr "" + +#: mod/admin.php:1143 +msgid "" +"On shared hosters set this to 2. On larger systems, values of 10 are great. " +"Default value is 4." +msgstr "" + +#: mod/admin.php:1144 +msgid "Don't use 'proc_open' with the worker" +msgstr "" + +#: mod/admin.php:1144 +msgid "" +"Enable this if your system doesn't allow the use of 'proc_open'. This can " +"happen on shared hosters. If this is enabled you should increase the " +"frequency of poller calls in your crontab." +msgstr "" + +#: mod/admin.php:1145 +msgid "Enable fastlane" +msgstr "" + +#: mod/admin.php:1145 +msgid "" +"When enabed, the fastlane mechanism starts an additional worker if processes " +"with higher priority are blocked by processes of lower priority." +msgstr "" + +#: mod/admin.php:1146 +msgid "Enable frontend worker" +msgstr "" + +#: mod/admin.php:1146 +msgid "" +"When enabled the Worker process is triggered when backend access is " +"performed (e.g. messages being delivered). On smaller sites you might want " +"to call yourdomain.tld/worker on a regular basis via an external cron job. " +"You should only enable this option if you cannot utilize cron/scheduled jobs " +"on your server. The worker background process needs to be activated for this." +msgstr "" + +#: mod/admin.php:1176 +msgid "Update has been marked successful" +msgstr "" + +#: mod/admin.php:1184 +#, php-format +msgid "Database structure update %s was successfully applied." +msgstr "" + +#: mod/admin.php:1187 +#, php-format +msgid "Executing of database structure update %s failed with error: %s" +msgstr "" + +#: mod/admin.php:1201 +#, php-format +msgid "Executing %s failed with error: %s" +msgstr "" + +#: mod/admin.php:1204 +#, php-format +msgid "Update %s was successfully applied." +msgstr "" + +#: mod/admin.php:1207 +#, php-format +msgid "Update %s did not return a status. Unknown if it succeeded." +msgstr "" + +#: mod/admin.php:1210 +#, php-format +msgid "There was no additional update function %s that needed to be called." +msgstr "" + +#: mod/admin.php:1230 +msgid "No failed updates." +msgstr "" + +#: mod/admin.php:1231 +msgid "Check database structure" +msgstr "" + +#: mod/admin.php:1236 +msgid "Failed Updates" +msgstr "" + +#: mod/admin.php:1237 +msgid "" +"This does not include updates prior to 1139, which did not return a status." +msgstr "" + +#: mod/admin.php:1238 +msgid "Mark success (if update was manually applied)" +msgstr "" + +#: mod/admin.php:1239 +msgid "Attempt to execute this update step automatically" +msgstr "" + +#: mod/admin.php:1273 +#, php-format +msgid "" +"\n" +"\t\t\tDear %1$s,\n" +"\t\t\t\tthe administrator of %2$s has set up an account for you." +msgstr "" + +#: mod/admin.php:1276 +#, php-format +msgid "" +"\n" +"\t\t\tThe login details are as follows:\n" +"\n" +"\t\t\tSite Location:\t%1$s\n" +"\t\t\tLogin Name:\t\t%2$s\n" +"\t\t\tPassword:\t\t%3$s\n" +"\n" +"\t\t\tYou may change your password from your account \"Settings\" page after " +"logging\n" +"\t\t\tin.\n" +"\n" +"\t\t\tPlease take a few moments to review the other account settings on that " +"page.\n" +"\n" +"\t\t\tYou may also wish to add some basic information to your default " +"profile\n" +"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n" +"\n" +"\t\t\tWe recommend setting your full name, adding a profile photo,\n" +"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - " +"and\n" +"\t\t\tperhaps what country you live in; if you do not wish to be more " +"specific\n" +"\t\t\tthan that.\n" +"\n" +"\t\t\tWe fully respect your right to privacy, and none of these items are " +"necessary.\n" +"\t\t\tIf you are new and do not know anybody here, they may help\n" +"\t\t\tyou to make some new and interesting friends.\n" +"\n" +"\t\t\tThank you and welcome to %4$s." +msgstr "" + +#: mod/admin.php:1320 +#, php-format +msgid "%s user blocked/unblocked" +msgid_plural "%s users blocked/unblocked" +msgstr[0] "" +msgstr[1] "" + +#: mod/admin.php:1327 +#, php-format +msgid "%s user deleted" +msgid_plural "%s users deleted" +msgstr[0] "" +msgstr[1] "" + +#: mod/admin.php:1374 +#, php-format +msgid "User '%s' deleted" +msgstr "" + +#: mod/admin.php:1382 +#, php-format +msgid "User '%s' unblocked" +msgstr "" + +#: mod/admin.php:1382 +#, php-format +msgid "User '%s' blocked" +msgstr "" + +#: mod/admin.php:1490 mod/admin.php:1516 +msgid "Register date" +msgstr "" + +#: mod/admin.php:1490 mod/admin.php:1516 +msgid "Last login" +msgstr "" + +#: mod/admin.php:1490 mod/admin.php:1516 +msgid "Last item" +msgstr "" + +#: mod/admin.php:1499 +msgid "Add User" +msgstr "" + +#: mod/admin.php:1500 +msgid "select all" +msgstr "" + +#: mod/admin.php:1501 +msgid "User registrations waiting for confirm" +msgstr "" + +#: mod/admin.php:1502 +msgid "User waiting for permanent deletion" +msgstr "" + +#: mod/admin.php:1503 +msgid "Request date" +msgstr "" + +#: mod/admin.php:1504 +msgid "No registrations." +msgstr "" + +#: mod/admin.php:1505 +msgid "Note from the user" +msgstr "" + +#: mod/admin.php:1507 +msgid "Deny" +msgstr "" + +#: mod/admin.php:1511 +msgid "Site admin" +msgstr "" + +#: mod/admin.php:1512 +msgid "Account expired" +msgstr "" + +#: mod/admin.php:1515 +msgid "New User" +msgstr "" + +#: mod/admin.php:1516 +msgid "Deleted since" +msgstr "" + +#: mod/admin.php:1521 +msgid "" +"Selected users will be deleted!\\n\\nEverything these users had posted on " +"this site will be permanently deleted!\\n\\nAre you sure?" +msgstr "" + +#: mod/admin.php:1522 +msgid "" +"The user {0} will be deleted!\\n\\nEverything this user has posted on this " +"site will be permanently deleted!\\n\\nAre you sure?" +msgstr "" + +#: mod/admin.php:1532 +msgid "Name of the new user." +msgstr "" + +#: mod/admin.php:1533 +msgid "Nickname" +msgstr "" + +#: mod/admin.php:1533 +msgid "Nickname of the new user." +msgstr "" + +#: mod/admin.php:1534 +msgid "Email address of the new user." +msgstr "" + +#: mod/admin.php:1577 +#, php-format +msgid "Plugin %s disabled." +msgstr "" + +#: mod/admin.php:1581 +#, php-format +msgid "Plugin %s enabled." +msgstr "" + +#: mod/admin.php:1592 mod/admin.php:1844 +msgid "Disable" +msgstr "" + +#: mod/admin.php:1594 mod/admin.php:1846 +msgid "Enable" +msgstr "" + +#: mod/admin.php:1617 mod/admin.php:1893 +msgid "Toggle" +msgstr "" + +#: mod/admin.php:1625 mod/admin.php:1902 +msgid "Author: " +msgstr "" + +#: mod/admin.php:1626 mod/admin.php:1903 +msgid "Maintainer: " +msgstr "" + +#: mod/admin.php:1681 +msgid "Reload active plugins" +msgstr "" + +#: mod/admin.php:1686 +#, php-format +msgid "" +"There are currently no plugins available on your node. You can find the " +"official plugin repository at %1$s and might find other interesting plugins " +"in the open plugin registry at %2$s" +msgstr "" + +#: mod/admin.php:1805 +msgid "No themes found." +msgstr "" + +#: mod/admin.php:1884 +msgid "Screenshot" +msgstr "" + +#: mod/admin.php:1944 +msgid "Reload active themes" +msgstr "" + +#: mod/admin.php:1949 +#, php-format +msgid "No themes found on the system. They should be paced in %1$s" +msgstr "" + +#: mod/admin.php:1950 +msgid "[Experimental]" +msgstr "" + +#: mod/admin.php:1951 +msgid "[Unsupported]" +msgstr "" + +#: mod/admin.php:1975 +msgid "Log settings updated." +msgstr "" + +#: mod/admin.php:2007 +msgid "PHP log currently enabled." +msgstr "" + +#: mod/admin.php:2009 +msgid "PHP log currently disabled." +msgstr "" + +#: mod/admin.php:2018 +msgid "Clear" +msgstr "" + +#: mod/admin.php:2023 +msgid "Enable Debugging" +msgstr "" + +#: mod/admin.php:2024 +msgid "Log file" +msgstr "" + +#: mod/admin.php:2024 +msgid "" +"Must be writable by web server. Relative to your Friendica top-level " +"directory." +msgstr "" + +#: mod/admin.php:2025 +msgid "Log level" +msgstr "" + +#: mod/admin.php:2028 +msgid "PHP logging" +msgstr "" + +#: mod/admin.php:2029 +msgid "" +"To enable logging of PHP errors and warnings you can add the following to " +"the .htconfig.php file of your installation. The filename set in the " +"'error_log' line is relative to the friendica top-level directory and must " +"be writeable by the web server. The option '1' for 'log_errors' and " +"'display_errors' is to enable these options, set to '0' to disable them." +msgstr "" + +#: mod/admin.php:2160 +#, php-format +msgid "Lock feature %s" +msgstr "" + +#: mod/admin.php:2168 +msgid "Manage Additional Features" msgstr "" #: object/Item.php:359 @@ -8820,7 +8868,7 @@ msgstr "" msgid "Community Pages" msgstr "" -#: view/theme/vier/config.php:117 view/theme/vier/theme.php:146 +#: view/theme/vier/config.php:117 view/theme/vier/theme.php:149 msgid "Community Profiles" msgstr "" @@ -8828,22 +8876,75 @@ msgstr "" msgid "Help or @NewHere ?" msgstr "" -#: view/theme/vier/config.php:119 view/theme/vier/theme.php:385 +#: view/theme/vier/config.php:119 view/theme/vier/theme.php:390 msgid "Connect Services" msgstr "" -#: view/theme/vier/config.php:120 view/theme/vier/theme.php:194 +#: view/theme/vier/config.php:120 view/theme/vier/theme.php:197 msgid "Find Friends" msgstr "" -#: view/theme/vier/config.php:121 view/theme/vier/theme.php:176 +#: view/theme/vier/config.php:121 view/theme/vier/theme.php:179 msgid "Last users" msgstr "" -#: view/theme/vier/theme.php:195 +#: view/theme/vier/theme.php:198 msgid "Local Directory" msgstr "" -#: view/theme/vier/theme.php:286 +#: view/theme/vier/theme.php:290 msgid "Quick Start" msgstr "" + +#: index.php:433 +msgid "toggle mobile" +msgstr "" + +#: boot.php:999 +msgid "Delete this item?" +msgstr "" + +#: boot.php:1001 +msgid "show fewer" +msgstr "" + +#: boot.php:1729 +#, php-format +msgid "Update %s failed. See error logs." +msgstr "" + +#: boot.php:1843 +msgid "Create a New Account" +msgstr "" + +#: boot.php:1871 +msgid "Password: " +msgstr "" + +#: boot.php:1872 +msgid "Remember me" +msgstr "" + +#: boot.php:1875 +msgid "Or login using OpenID: " +msgstr "" + +#: boot.php:1881 +msgid "Forgot your password?" +msgstr "" + +#: boot.php:1884 +msgid "Website Terms of Service" +msgstr "" + +#: boot.php:1885 +msgid "terms of service" +msgstr "" + +#: boot.php:1887 +msgid "Website Privacy Policy" +msgstr "" + +#: boot.php:1888 +msgid "privacy policy" +msgstr "" diff --git a/util/php2po.php b/util/php2po.php index 2e888008c2..e07f718004 100644 --- a/util/php2po.php +++ b/util/php2po.php @@ -1,204 +1,204 @@ - * - * Output to - */ - - DEFINE("NORM_REGEXP", "|[\\\]|"); - - - if(! class_exists('App')) { - class TmpA { - public $strings = Array(); +/** + * Read strings.php file and create messages.po + * + * php utils/php2po.php + * + * Output to + */ + +use Friendica\App; + +DEFINE("NORM_REGEXP", "|[\\\]|"); + +if(! class_exists('App')) { + class TmpA { + public $strings = Array(); + } + $a = new TmpA(); +} + +if ($argc<2 || in_array('-h', $argv) || in_array('--h', $argv)) { + print "Usage: ".$argv[0]." [-p ] \n\n"; + print "Options:\n"; + print "p\tNumber of plural forms. Default: 2\n"; + print "\n"; + return; +} + +$phpfile = $argv[1]; +$pofile = dirname($phpfile)."/messages.po"; + +if (!file_exists($phpfile)){ + print "Unable to find '$phpfile'\n"; + return; +} + +// utility functions +function startsWith($haystack, $needle) { + // search backwards starting from haystack length characters from the end + return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== FALSE; +} + + +// start ! +include_once($phpfile); + +$out = ''; +$out .= "# FRIENDICA Distributed Social Network\n"; +$out .= "# Copyright (C) 2010, 2011, 2012, 2013 the Friendica Project\n"; +$out .= "# This file is distributed under the same license as the Friendica package.\n"; +$out .= "# \n"; +$out .= 'msgid ""' ."\n"; +$out .= 'msgstr ""' ."\n"; +$out .= '"Project-Id-Version: friendica\n"' ."\n"; +$out .= '"Report-Msgid-Bugs-To: \n"' ."\n"; +$out .= '"POT-Creation-Date: '. date("Y-m-d H:i:sO").'\n"' ."\n"; +$out .= '"MIME-Version: 1.0\n"' ."\n"; +$out .= '"Content-Type: text/plain; charset=UTF-8\n"' ."\n"; +$out .= '"Content-Transfer-Encoding: 8bit\n"' ."\n"; + +// search for plural info +$lang = ""; +$lang_logic = ""; +$lang_pnum = 2; + +$_idx = array_search('-p', $argv); +if ($_idx !== false) { + $lang_pnum = $argv[$_idx+1]; +} + +$infile = file($phpfile); +foreach($infile as $l) { + $l = trim($l); + if (startsWith($l, 'function string_plural_select_')) { + $lang = str_replace( 'function string_plural_select_' , '', str_replace( '($n){','', $l) ); + } + if (startsWith($l, 'return')) { + $lang_logic = str_replace( '$', '', trim( str_replace( 'return ' , '', $l) , ';') ); + break; + } +} + +echo "Language: $lang\n"; +echo "Plural forms: $lang_pnum\n"; +echo "Plural logic: $lang_logic;\n"; + +$out .= sprintf('"Language: %s\n"', $lang) ."\n"; +$out .= sprintf('"Plural-Forms: nplurals=%s; plural=%s;\n"', $lang_pnum, $lang_logic) ."\n"; +$out .= "\n"; + +print "\nLoading base message.po..."; + +// load base messages.po and extract msgids +$base_msgids = array(); +$norm_base_msgids = array(); +$base_f = file("util/messages.po") or die("No base messages.po\n"); +$_f = 0; $_mid = ""; $_mids = array(); +foreach( $base_f as $l) { + $l = trim($l); + //~ print $l."\n"; + + if (startsWith($l, 'msgstr')) { + if ($_mid != '""') { + $base_msgids[$_mid] = $_mids; + $norm_base_msgids[preg_replace(NORM_REGEXP, "", $_mid)] = $_mid; + //~ print "\t\t\t".$_mid. print_r($base_msgids[$_mid], true); } - $a = new TmpA(); + + $_f = 0; + $_mid = ""; + $_mids = array(); + } - if ($argc<2 || in_array('-h', $argv) || in_array('--h', $argv)) { - print "Usage: ".$argv[0]." [-p ] \n\n"; - print "Options:\n"; - print "p\tNumber of plural forms. Default: 2\n"; - print "\n"; - return; + if (startsWith($l, '"') && $_f==2) { + $_mids[count($_mids)-1] .= "\n".$l; + //~ print "\t\t+mids: ".print_t($_mids, true); + } + if (startsWith($l, 'msgid_plural ')) { + $_f = 2; + $_mids[] = str_replace('msgid_plural ', '' , $l); + //~ print "\t\t mids: ".print_r($_mids, true); } - $phpfile = $argv[1]; - $pofile = dirname($phpfile)."/messages.po"; - - if (!file_exists($phpfile)){ - print "Unable to find '$phpfile'\n"; - return; + if (startsWith($l, '"') && $_f==1) { + $_mid .= "\n".$l; + $_mids[count($_mids)-1] .= "\n".$l; + //~ print "\t+mid: $_mid \n"; } - - // utility functions - function startsWith($haystack, $needle) { - // search backwards starting from haystack length characters from the end - return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== FALSE; + if (startsWith($l, 'msgid ')) { + $_f = 1; + $_mid = str_replace('msgid ', '' , $l); + $_mids = array($_mid); + //~ print "\t mid: $_mid \n"; } + //~ print "\t\t\t\t$_f\n\n"; +} +print " done\n"; +print "Creating '$pofile'..."; +// create msgid and msgstr - // start ! - include_once($phpfile); +/** + * Get a string and retun a message.po ready text + * - replace " with \" + * - replace tab char with \t + * - manage multiline strings + */ +function massage_string($str) { + $str = str_replace('\\','\\\\',$str); + $str = str_replace('"','\"',$str); + $str = str_replace("\t",'\t',$str); + $str = str_replace("\n",'\n"'."\n".'"',$str); + if (strpos($str, "\n")!==false && $str[0]!=='"') $str = '"'."\n".$str; + $str = preg_replace("|\n([^\"])|", "\n\"$1", $str); + return sprintf('"%s"', $str); +} - $out = ''; - $out .= "# FRIENDICA Distributed Social Network\n"; - $out .= "# Copyright (C) 2010, 2011, 2012, 2013 the Friendica Project\n"; - $out .= "# This file is distributed under the same license as the Friendica package.\n"; - $out .= "# \n"; - $out .= 'msgid ""' ."\n"; - $out .= 'msgstr ""' ."\n"; - $out .= '"Project-Id-Version: friendica\n"' ."\n"; - $out .= '"Report-Msgid-Bugs-To: \n"' ."\n"; - $out .= '"POT-Creation-Date: '. date("Y-m-d H:i:sO").'\n"' ."\n"; - $out .= '"MIME-Version: 1.0\n"' ."\n"; - $out .= '"Content-Type: text/plain; charset=UTF-8\n"' ."\n"; - $out .= '"Content-Transfer-Encoding: 8bit\n"' ."\n"; - - // search for plural info - $lang = ""; - $lang_logic = ""; - $lang_pnum = 2; - - $_idx = array_search('-p', $argv); - if ($_idx !== false) { - $lang_pnum = $argv[$_idx+1]; +function find_original_msgid($str) { + global $norm_base_msgids; + $norm_str = preg_replace(NORM_REGEXP, "", $str); + if (array_key_exists($norm_str, $norm_base_msgids)) { + return $norm_base_msgids[$norm_str]; } - - $infile = file($phpfile); - foreach($infile as $l) { - $l = trim($l); - if (startsWith($l, 'function string_plural_select_')) { - $lang = str_replace( 'function string_plural_select_' , '', str_replace( '($n){','', $l) ); + return $str; +} + +$warnings = ""; +foreach($a->strings as $key=>$str) { + $msgid = massage_string($key); + + if (preg_match("|%[sd0-9](\$[sn])*|", $msgid)) { + $out .= "#, php-format\n"; + } + $msgid = find_original_msgid($msgid); + $out .= 'msgid '. $msgid . "\n"; + + if (is_array($str)) { + if (array_key_exists($msgid, $base_msgids) && isset($base_msgids[$msgid][1])) { + $out .= 'msgid_plural '. $base_msgids[$msgid][1] . "\n"; + } else { + $out .= 'msgid_plural '. $msgid . "\n"; + $warnings .= "[W] No source plural form for msgid:\n". str_replace("\n","\n\t", $msgid) . "\n\n"; } - if (startsWith($l, 'return')) { - $lang_logic = str_replace( '$', '', trim( str_replace( 'return ' , '', $l) , ';') ); - break; + foreach ( $str as $n => $msgstr) { + $out .= 'msgstr['.$n.'] '. massage_string($msgstr) . "\n"; } + } else { + $out .= 'msgstr '. massage_string($str) . "\n"; } - - echo "Language: $lang\n"; - echo "Plural forms: $lang_pnum\n"; - echo "Plural logic: $lang_logic;\n"; - - $out .= sprintf('"Language: %s\n"', $lang) ."\n"; - $out .= sprintf('"Plural-Forms: nplurals=%s; plural=%s;\n"', $lang_pnum, $lang_logic) ."\n"; + $out .= "\n"; - print "\nLoading base message.po..."; - - // load base messages.po and extract msgids - $base_msgids = array(); - $norm_base_msgids = array(); - $base_f = file("util/messages.po") or die("No base messages.po\n"); - $_f = 0; $_mid = ""; $_mids = array(); - foreach( $base_f as $l) { - $l = trim($l); - //~ print $l."\n"; - - if (startsWith($l, 'msgstr')) { - if ($_mid != '""') { - $base_msgids[$_mid] = $_mids; - $norm_base_msgids[preg_replace(NORM_REGEXP, "", $_mid)] = $_mid; - //~ print "\t\t\t".$_mid. print_r($base_msgids[$_mid], true); - } - - $_f = 0; - $_mid = ""; - $_mids = array(); - - } - - if (startsWith($l, '"') && $_f==2) { - $_mids[count($_mids)-1] .= "\n".$l; - //~ print "\t\t+mids: ".print_t($_mids, true); - } - if (startsWith($l, 'msgid_plural ')) { - $_f = 2; - $_mids[] = str_replace('msgid_plural ', '' , $l); - //~ print "\t\t mids: ".print_r($_mids, true); - } - - if (startsWith($l, '"') && $_f==1) { - $_mid .= "\n".$l; - $_mids[count($_mids)-1] .= "\n".$l; - //~ print "\t+mid: $_mid \n"; - } - if (startsWith($l, 'msgid ')) { - $_f = 1; - $_mid = str_replace('msgid ', '' , $l); - $_mids = array($_mid); - //~ print "\t mid: $_mid \n"; - } - //~ print "\t\t\t\t$_f\n\n"; - } - - print " done\n"; - print "Creating '$pofile'..."; - // create msgid and msgstr - - /** - * Get a string and retun a message.po ready text - * - replace " with \" - * - replace tab char with \t - * - manage multiline strings - */ - function massage_string($str) { - $str = str_replace('\\','\\\\',$str); - $str = str_replace('"','\"',$str); - $str = str_replace("\t",'\t',$str); - $str = str_replace("\n",'\n"'."\n".'"',$str); - if (strpos($str, "\n")!==false && $str[0]!=='"') $str = '"'."\n".$str; - $str = preg_replace("|\n([^\"])|", "\n\"$1", $str); - return sprintf('"%s"', $str); - } - - function find_original_msgid($str) { - global $norm_base_msgids; - $norm_str = preg_replace(NORM_REGEXP, "", $str); - if (array_key_exists($norm_str, $norm_base_msgids)) { - return $norm_base_msgids[$norm_str]; - } - return $str; - } - - $warnings = ""; - foreach($a->strings as $key=>$str) { - $msgid = massage_string($key); - - if (preg_match("|%[sd0-9](\$[sn])*|", $msgid)) { - $out .= "#, php-format\n"; - } - $msgid = find_original_msgid($msgid); - $out .= 'msgid '. $msgid . "\n"; - - if (is_array($str)) { - if (array_key_exists($msgid, $base_msgids) && isset($base_msgids[$msgid][1])) { - $out .= 'msgid_plural '. $base_msgids[$msgid][1] . "\n"; - } else { - $out .= 'msgid_plural '. $msgid . "\n"; - $warnings .= "[W] No source plural form for msgid:\n". str_replace("\n","\n\t", $msgid) . "\n\n"; - } - foreach ( $str as $n => $msgstr) { - $out .= 'msgstr['.$n.'] '. massage_string($msgstr) . "\n"; - } - } else { - $out .= 'msgstr '. massage_string($str) . "\n"; - } - - $out .= "\n"; - - } +} - file_put_contents($pofile, $out); - - print " done\n"; - - if ($warnings=="") { - print "No warnings.\n"; - } else { - print $warnings; - } - +file_put_contents($pofile, $out); + +print " done\n"; + +if ($warnings=="") { + print "No warnings.\n"; +} else { + print $warnings; +} diff --git a/util/typo.php b/util/typo.php old mode 100644 new mode 100755 index d68ac2ac9b..1b84181db3 --- a/util/typo.php +++ b/util/typo.php @@ -1,59 +1,77 @@ +#!/usr/bin/env php config,'php_path')) - $phpath = $a->config['php_path']; - else - $phpath = 'php'; +$a = new App(dirname(__DIR__)); +if (x($a->config, 'php_path')) { + $phpath = $a->config['php_path']; +} else { + $phpath = 'php'; +} - echo "Directory: mod\n"; - $files = glob('mod/*.php'); - foreach($files as $file) { - passthru("$phpath -l $file", $ret); $ret===0 or die(); +echo 'Directory: src' . PHP_EOL; +$Iterator = new RecursiveDirectoryIterator('src'); + +foreach (new RecursiveIteratorIterator($Iterator) as $file) { + if (substr($file, -4) === '.php') { + passthru("$phpath -l $file", $ret); + $ret === 0 or die(); } +} - echo "Directory: include\n"; - $files = glob('include/*.php'); - foreach($files as $file) { - passthru("$phpath -l $file", $ret); $ret===0 or die(); +echo "Directory: mod\n"; +$files = glob('mod/*.php'); +foreach ($files as $file) { + passthru("$phpath -l $file", $ret); + $ret === 0 or die(); +} + +echo "Directory: include\n"; +$files = glob('include/*.php'); +foreach ($files as $file) { + passthru("$phpath -l $file", $ret); + $ret === 0 or die(); +} + +echo "Directory: object\n"; +$files = glob('object/*.php'); +foreach ($files as $file) { + passthru("$phpath -l $file", $ret); + $ret === 0 or die(); +} + +echo "Directory: addon\n"; +$dirs = glob('addon/*'); + +foreach ($dirs as $dir) { + $addon = basename($dir); + $files = glob($dir . '/' . $addon . '.php'); + foreach ($files as $file) { + passthru("$phpath -l $file", $ret); + $ret === 0 or die(); } +} - echo "Directory: object\n"; - $files = glob('object/*.php'); - foreach($files as $file) { - passthru("$phpath -l $file", $ret); $ret===0 or die(); - } +echo "String files\n"; - echo "Directory: addon\n"; - $dirs = glob('addon/*'); +echo 'util/strings.php' . "\n"; +passthru("$phpath -l util/strings.php", $ret); +$ret === 0 or die(); - foreach($dirs as $dir) { - $addon = basename($dir); - $files = glob($dir . '/' . $addon . '.php'); - foreach($files as $file) { - passthru("$phpath -l $file", $ret); $ret===0 or die(); - } - } - - - echo "String files\n"; - - echo 'util/strings.php' . "\n"; - passthru("$phpath -l util/strings.php", $ret); $ret===0 or die(); - - $files = glob('view/lang/*/strings.php'); - foreach($files as $file) { - passthru("$phpath -l $file", $ret); $ret===0 or die(); - } +$files = glob('view/lang/*/strings.php'); +foreach ($files as $file) { + passthru("$phpath -l $file", $ret); + $ret === 0 or die(); +} diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 4553da2e24..a3f90a0f7f 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -9,8 +9,10 @@ return array( 'Archive_Tar' => $vendorDir . '/pear-pear.php.net/Archive_Tar/Archive/Tar.php', 'Console_Getopt' => $vendorDir . '/pear-pear.php.net/Console_Getopt/Console/Getopt.php', 'Detection\\MobileDetect' => $vendorDir . '/mobiledetect/mobiledetectlib/namespaced/Detection/MobileDetect.php', + 'Friendica\\App' => $baseDir . '/src/App.php', 'Friendica\\Core\\Config' => $baseDir . '/src/Core/Config.php', 'Friendica\\Core\\PConfig' => $baseDir . '/src/Core/PConfig.php', + 'Friendica\\Network\\Probe' => $baseDir . '/src/Network/Probe.php', 'Friendica\\ParseUrl' => $baseDir . '/src/ParseUrl.php', 'HTMLPurifier' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.php', 'HTMLPurifier_Arborize' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Arborize.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 37d3c878b4..2b6416c2ee 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -53,8 +53,10 @@ class ComposerStaticInitFriendica 'Archive_Tar' => __DIR__ . '/..' . '/pear-pear.php.net/Archive_Tar/Archive/Tar.php', 'Console_Getopt' => __DIR__ . '/..' . '/pear-pear.php.net/Console_Getopt/Console/Getopt.php', 'Detection\\MobileDetect' => __DIR__ . '/..' . '/mobiledetect/mobiledetectlib/namespaced/Detection/MobileDetect.php', + 'Friendica\\App' => __DIR__ . '/../..' . '/src/App.php', 'Friendica\\Core\\Config' => __DIR__ . '/../..' . '/src/Core/Config.php', 'Friendica\\Core\\PConfig' => __DIR__ . '/../..' . '/src/Core/PConfig.php', + 'Friendica\\Network\\Probe' => __DIR__ . '/../..' . '/src/Network/Probe.php', 'Friendica\\ParseUrl' => __DIR__ . '/../..' . '/src/ParseUrl.php', 'HTMLPurifier' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.php', 'HTMLPurifier_Arborize' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Arborize.php', diff --git a/vendor/composer/include_paths.php b/vendor/composer/include_paths.php index e10abddcd0..1d4a52943a 100644 --- a/vendor/composer/include_paths.php +++ b/vendor/composer/include_paths.php @@ -11,6 +11,6 @@ return array( $vendorDir . '/pear-pear.php.net/Structures_Graph', $vendorDir . '/pear-pear.php.net/XML_Util', $vendorDir . '/pear-pear.php.net/XML_Parser', - $vendorDir . '/pear-pear.php.net/PEAR', $vendorDir . '/pear-pear.php.net/Text_Highlighter', + $vendorDir . '/pear-pear.php.net/PEAR', ); diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 45038987b7..d6cca604f9 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -256,47 +256,6 @@ ], "description": "This is an XML parser based on PHPs built-in xml extension.\nIt supports two basic modes of operation: \"func\" and \"event\". In \"func\" mode, it will look for a function named after each element (xmltag_ELEMENT for start tags and xmltag_ELEMENT_ for end tags), and in \"event\" mode it uses a set of generic callbacks.\n\nSince version 1.2.0 there's a new XML_Parser_Simple class that makes parsing of most XML documents easier, by automatically providing a stack for the elements.\nFurthermore its now possible to split the parser from the handler object, so you do not have to extend XML_Parser anymore in order to parse a document with it." }, - { - "name": "pear-pear.php.net/PEAR", - "version": "1.10.3", - "version_normalized": "1.10.3.0", - "dist": { - "type": "file", - "url": "https://pear.php.net/get/PEAR-1.10.3.tgz", - "reference": null, - "shasum": null - }, - "require": { - "ext-pcre": "*", - "ext-xml": "*", - "pear-pear.php.net/archive_tar": ">=1.4.0.0", - "pear-pear.php.net/console_getopt": ">=1.4.1.0", - "pear-pear.php.net/structures_graph": ">=1.1.0.0", - "pear-pear.php.net/xml_util": ">=1.3.0.0", - "php": ">=5.4.0.0" - }, - "conflict": { - "pear-pear.php.net/pear_frontend_gtk": "<0.4.0.0", - "pear-pear.php.net/pear_frontend_web": "<=0.4.0.0" - }, - "replace": { - "pear-pear/pear": "== 1.10.3.0" - }, - "type": "pear-library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "" - ] - }, - "include-path": [ - "/" - ], - "license": [ - "New BSD License" - ], - "description": "The PEAR package contains:\n * the PEAR installer, for creating, distributing\n and installing packages\n * the PEAR_Exception PHP5 error handling mechanism\n * the PEAR_ErrorStack advanced error handling mechanism\n * the PEAR_Error error handling mechanism\n * the OS_Guess class for retrieving info about the OS\n where PHP is running on\n * the System class for quick handling of common operations\n with files and directories\n * the PEAR base class\n Features in a nutshell:\n * full support for channels\n * pre-download dependency validation\n * new package.xml 2.0 format allows tremendous flexibility while maintaining BC\n * support for optional dependency groups and limited support for sub-packaging\n * robust dependency support\n * full dependency validation on uninstall\n * remote install for hosts with only ftp access - no more problems with\n restricted host installation\n * full support for mirroring\n * support for bundling several packages into a single tarball\n * support for static dependencies on a url-based package\n * support for custom file roles and installation tasks" - }, { "name": "pear-pear.php.net/Text_Highlighter", "version": "0.8.0", @@ -396,5 +355,46 @@ "html", "markdown" ] + }, + { + "name": "pear-pear.php.net/PEAR", + "version": "1.10.4", + "version_normalized": "1.10.4.0", + "dist": { + "type": "file", + "url": "https://pear.php.net/get/PEAR-1.10.4.tgz", + "reference": null, + "shasum": null + }, + "require": { + "ext-pcre": "*", + "ext-xml": "*", + "pear-pear.php.net/archive_tar": ">=1.4.0.0", + "pear-pear.php.net/console_getopt": ">=1.4.1.0", + "pear-pear.php.net/structures_graph": ">=1.1.0.0", + "pear-pear.php.net/xml_util": ">=1.3.0.0", + "php": ">=5.4.0.0" + }, + "conflict": { + "pear-pear.php.net/pear_frontend_gtk": "<0.4.0.0", + "pear-pear.php.net/pear_frontend_web": "<=0.4.0.0" + }, + "replace": { + "pear-pear/pear": "== 1.10.4.0" + }, + "type": "pear-library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "" + ] + }, + "include-path": [ + "/" + ], + "license": [ + "New BSD License" + ], + "description": "The PEAR package contains:\n * the PEAR installer, for creating, distributing\n and installing packages\n * the PEAR_Exception PHP5 error handling mechanism\n * the PEAR_ErrorStack advanced error handling mechanism\n * the PEAR_Error error handling mechanism\n * the OS_Guess class for retrieving info about the OS\n where PHP is running on\n * the System class for quick handling of common operations\n with files and directories\n * the PEAR base class\n Features in a nutshell:\n * full support for channels\n * pre-download dependency validation\n * new package.xml 2.0 format allows tremendous flexibility while maintaining BC\n * support for optional dependency groups and limited support for sub-packaging\n * robust dependency support\n * full dependency validation on uninstall\n * remote install for hosts with only ftp access - no more problems with\n restricted host installation\n * full support for mirroring\n * support for bundling several packages into a single tarball\n * support for static dependencies on a url-based package\n * support for custom file roles and installation tasks" } ] diff --git a/vendor/pear-pear.php.net/PEAR/OS/Guess.php b/vendor/pear-pear.php.net/PEAR/OS/Guess.php index 7e8e8d3f8c..ffa15355cf 100644 --- a/vendor/pear-pear.php.net/PEAR/OS/Guess.php +++ b/vendor/pear-pear.php.net/PEAR/OS/Guess.php @@ -86,7 +86,7 @@ * @author Gregory Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR.php b/vendor/pear-pear.php.net/PEAR/PEAR.php index 7aa3c4ce56..5737f71b15 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR.php @@ -75,7 +75,7 @@ $GLOBALS['_PEAR_error_handler_stack'] = array(); * @author Greg Beaver * @copyright 1997-2006 The PHP Group * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @see PEAR_Error * @since Class available since PHP 4.0.2 @@ -170,7 +170,7 @@ class PEAR $destructor = "_$classname"; if (method_exists($this, $destructor)) { global $_PEAR_destructor_object_list; - $_PEAR_destructor_object_list[] = &$this; + $_PEAR_destructor_object_list[] = $this; if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { register_shutdown_function("_PEAR_call_destructors"); $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; @@ -598,11 +598,11 @@ class PEAR protected static function _throwError($object, $message = null, $code = null, $userinfo = null) { if ($object !== null) { - $a = &$object->raiseError($message, $code, null, null, $userinfo); + $a = $object->raiseError($message, $code, null, null, $userinfo); return $a; } - $a = &PEAR::raiseError($message, $code, null, null, $userinfo); + $a = PEAR::raiseError($message, $code, null, null, $userinfo); return $a; } @@ -823,7 +823,7 @@ function _PEAR_call_destructors() * @author Gregory Beaver * @copyright 1997-2006 The PHP Group * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/manual/en/core.pear.pear-error.php * @see PEAR::raiseError(), PEAR::throwError() * @since Class available since PHP 4.0.2 diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Builder.php b/vendor/pear-pear.php.net/PEAR/PEAR/Builder.php index 9df3b9eac9..d69bc14f1c 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Builder.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Builder.php @@ -33,7 +33,7 @@ require_once 'System.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since PHP 4.0.2 * @see http://pear.php.net/manual/en/core.ppm.pear-builder.php @@ -385,7 +385,7 @@ class PEAR_Builder extends PEAR_Common if (!file_exists($build_dir) || !is_dir($build_dir) || !chdir($build_dir)) { return $this->raiseError("could not chdir to $build_dir"); } - putenv('PHP_PEAR_VERSION=1.10.3'); + putenv('PHP_PEAR_VERSION=1.10.4'); foreach ($to_run as $cmd) { $err = $this->_runCommand($cmd, $callback); if (PEAR::isError($err)) { diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/ChannelFile.php b/vendor/pear-pear.php.net/PEAR/PEAR/ChannelFile.php index 9e990d1348..d81deb43a1 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/ChannelFile.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/ChannelFile.php @@ -145,7 +145,7 @@ $GLOBALS['_PEAR_CHANNELS_MIRROR_TYPES'] = array('server'); * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/ChannelFile/Parser.php b/vendor/pear-pear.php.net/PEAR/PEAR/ChannelFile/Parser.php index 56376add64..01bb7f3fbe 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/ChannelFile/Parser.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/ChannelFile/Parser.php @@ -25,7 +25,7 @@ require_once 'PEAR/ChannelFile.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Command.php b/vendor/pear-pear.php.net/PEAR/PEAR/Command.php index 39823c674b..411f7a49b2 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Command.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Command.php @@ -93,7 +93,7 @@ $GLOBALS['_PEAR_Command_objects'] = array(); * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Auth.php b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Auth.php index fa2b22bf52..fecfd875ef 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Auth.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Auth.php @@ -29,7 +29,7 @@ require_once 'PEAR/Command/Channels.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 * @deprecated since 1.8.0alpha1 diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Build.php b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Build.php index 3bb99454d7..aecc90d8b2 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Build.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Build.php @@ -30,7 +30,7 @@ require_once 'PEAR/Command/Common.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Channels.php b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Channels.php index b9286370ab..fa190d39c2 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Channels.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Channels.php @@ -31,7 +31,7 @@ define('PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS', -500); * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Common.php b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Common.php index 41384ef0b3..8d972b6f1b 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Common.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Common.php @@ -28,7 +28,7 @@ require_once 'PEAR.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Config.php b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Config.php index 63efb07be3..18dd61451a 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Config.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Config.php @@ -28,7 +28,7 @@ require_once 'PEAR/Command/Common.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Install.php b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Install.php index a1d3a7023f..42c1f55867 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Install.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Install.php @@ -29,7 +29,7 @@ require_once 'PEAR/Command/Common.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 */ @@ -717,8 +717,7 @@ Run post-installation scripts in package , if any exist. $pkg = &$param->getPackageFile(); if ($info->getCode() != PEAR_INSTALLER_NOBINARY) { if (!($info = $pkg->installBinary($this->installer))) { - $this->ui->outputData('ERROR: ' .$oldinfo->getMessage()); - continue; + return $this->raiseError('ERROR: ' .$oldinfo->getMessage()); } // we just installed a different package than requested, diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Mirror.php b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Mirror.php index 473c628675..616417cb3a 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Mirror.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Mirror.php @@ -26,7 +26,7 @@ require_once 'PEAR/Command/Common.php'; * @author Alexander Merz * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.2.0 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Package.php b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Package.php index 25125fd982..8847112e60 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Package.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Package.php @@ -31,7 +31,7 @@ require_once 'PEAR/Command/Common.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Pickle.php b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Pickle.php index 8ac3fcb6b1..7a7bd81c0b 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Pickle.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Pickle.php @@ -26,7 +26,7 @@ require_once 'PEAR/Command/Common.php'; * @author Greg Beaver * @copyright 2005-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Registry.php b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Registry.php index 3a78b03302..b5423c762e 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Registry.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Registry.php @@ -28,7 +28,7 @@ require_once 'PEAR/Command/Common.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Remote.php b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Remote.php index c0a8e92a8e..817b733285 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Remote.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Remote.php @@ -30,7 +30,7 @@ require_once 'PEAR/REST.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Test.php b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Test.php index 69c72c4aa3..0f6c8dc24e 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Command/Test.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Command/Test.php @@ -30,7 +30,7 @@ require_once 'PEAR/Command/Common.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Common.php b/vendor/pear-pear.php.net/PEAR/PEAR/Common.php index 1c4f79ceb1..0b00b00bc5 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Common.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Common.php @@ -117,7 +117,7 @@ $GLOBALS['_PEAR_Common_script_phases'] = array('pre-install', 'post-install', 'p * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 * @deprecated This class will disappear, and its components will be spread diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Config.php b/vendor/pear-pear.php.net/PEAR/PEAR/Config.php index d9b4d273ce..e86c501341 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Config.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Config.php @@ -264,7 +264,7 @@ if (getenv('PHP_PEAR_SIG_KEYDIR')) { * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Dependency2.php b/vendor/pear-pear.php.net/PEAR/PEAR/Dependency2.php index 77646f1f95..b142883b32 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Dependency2.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Dependency2.php @@ -30,7 +30,7 @@ require_once 'PEAR/Validate.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ @@ -540,7 +540,7 @@ class PEAR_Dependency2 */ function getPEARVersion() { - return '1.10.3'; + return '1.10.4'; } function validatePearinstallerDependency($dep) diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/DependencyDB.php b/vendor/pear-pear.php.net/PEAR/PEAR/DependencyDB.php index 5421929a2b..0d48613acd 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/DependencyDB.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/DependencyDB.php @@ -29,7 +29,7 @@ $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'] = array(); * @author Tomas V.V.Cox * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Downloader.php b/vendor/pear-pear.php.net/PEAR/PEAR/Downloader.php index 15f26bceff..a498f134b9 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Downloader.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Downloader.php @@ -39,7 +39,7 @@ define('PEAR_INSTALLER_ERROR_NO_PREF_STATE', 2); * @author Martin Jansen * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.3.0 */ @@ -1635,7 +1635,7 @@ class PEAR_Downloader extends PEAR_Common } $request .= $ifmodifiedsince . - "User-Agent: PEAR/1.10.3/PHP/" . PHP_VERSION . "\r\n"; + "User-Agent: PEAR/1.10.4/PHP/" . PHP_VERSION . "\r\n"; if ($object !== null) { // only pass in authentication for non-static calls $username = $config->get('username', null, $channel); diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Downloader/Package.php b/vendor/pear-pear.php.net/PEAR/PEAR/Downloader/Package.php index 925c0ecd56..42b35b5b68 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Downloader/Package.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Downloader/Package.php @@ -49,7 +49,7 @@ define('PEAR_DOWNLOADER_PACKAGE_PHPVERSION', -1004); * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/ErrorStack.php b/vendor/pear-pear.php.net/PEAR/PEAR/ErrorStack.php index b4412744a1..53eda7c3df 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/ErrorStack.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/ErrorStack.php @@ -131,7 +131,7 @@ define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2); * $local_stack = new PEAR_ErrorStack('MyPackage'); * * @author Greg Beaver - * @version 1.10.3 + * @version 1.10.4 * @package PEAR_ErrorStack * @category Debugging * @copyright 2004-2008 Greg Beaver diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Exception.php b/vendor/pear-pear.php.net/PEAR/PEAR/Exception.php index d83950b13a..d0e84dc1fa 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Exception.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Exception.php @@ -88,7 +88,7 @@ * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.3.3 * diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Frontend.php b/vendor/pear-pear.php.net/PEAR/PEAR/Frontend.php index bd002c374b..a9d9b73cc3 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Frontend.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Frontend.php @@ -38,7 +38,7 @@ $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = null; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Frontend/CLI.php b/vendor/pear-pear.php.net/PEAR/PEAR/Frontend/CLI.php index 4e68c065af..5e83216edb 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Frontend/CLI.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Frontend/CLI.php @@ -26,7 +26,7 @@ require_once 'PEAR/Frontend.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Installer.php b/vendor/pear-pear.php.net/PEAR/PEAR/Installer.php index acaaa7fd00..b96b8e011a 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Installer.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Installer.php @@ -35,7 +35,7 @@ define('PEAR_INSTALLER_NOBINARY', -240); * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role.php b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role.php index 58b661bbf4..0ca3bac637 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role.php @@ -24,7 +24,7 @@ require_once 'PEAR/XMLParser.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Cfg.php b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Cfg.php index 5b75c44ccd..eb126b62df 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Cfg.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Cfg.php @@ -19,7 +19,7 @@ * @author Greg Beaver * @copyright 2007-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.7.0 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Common.php b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Common.php index 3e15d87789..1bd8f78cc7 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Common.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Common.php @@ -23,7 +23,7 @@ * @author Greg Beaver * @copyright 1997-2006 The PHP Group * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Data.php b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Data.php index 75acfef80e..ad29577809 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Data.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Data.php @@ -19,7 +19,7 @@ * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Doc.php b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Doc.php index 9374990c4c..31c069fed6 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Doc.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Doc.php @@ -19,7 +19,7 @@ * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Ext.php b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Ext.php index 6cd4d2b0a1..71d07d4224 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Ext.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Ext.php @@ -19,7 +19,7 @@ * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Man.php b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Man.php index 68b79366a6..91a586b3a8 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Man.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Man.php @@ -20,7 +20,7 @@ * @author Hannes Magnusson * @copyright 2011 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.10.0 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Php.php b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Php.php index 6a7a937dec..e07743ab8f 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Php.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Php.php @@ -19,7 +19,7 @@ * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Script.php b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Script.php index 387fdb3f53..907b101145 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Script.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Script.php @@ -19,7 +19,7 @@ * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Src.php b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Src.php index c92f2cf0b4..aaa9622e51 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Src.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Src.php @@ -19,7 +19,7 @@ * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Test.php b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Test.php index 87133af46c..b21450fe53 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Test.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Test.php @@ -19,7 +19,7 @@ * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Www.php b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Www.php index e211c1e8f7..043cd360a3 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Www.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Www.php @@ -19,7 +19,7 @@ * @author Greg Beaver * @copyright 2007-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.7.0 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile.php b/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile.php index 21d26b6df4..d73671dd50 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile.php @@ -34,7 +34,7 @@ define('PEAR_PACKAGEFILE_ERROR_INVALID_PACKAGEVERSION', 2); * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v1.php b/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v1.php index 707781c30d..5e379f85b7 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v1.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v1.php @@ -28,7 +28,7 @@ require_once 'PEAR/PackageFile/v2.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ @@ -45,7 +45,7 @@ class PEAR_PackageFile_Generator_v1 function getPackagerVersion() { - return '1.10.3'; + return '1.10.4'; } /** @@ -196,7 +196,7 @@ class PEAR_PackageFile_Generator_v1 ); $ret = "\n"; $ret .= "\n"; - $ret .= "\n" . + $ret .= "\n" . " $pkginfo[package]"; if (isset($pkginfo['extends'])) { $ret .= "\n$pkginfo[extends]"; diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v2.php b/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v2.php index 1c97296b73..a44a9c5a5b 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v2.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v2.php @@ -30,7 +30,7 @@ require_once 'XML/Util.php'; * @author Stephan Schmidt (original XML_Serializer code) * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ @@ -112,7 +112,7 @@ http://pear.php.net/dtd/package-2.0.xsd', */ function getPackagerVersion() { - return '1.10.3'; + return '1.10.4'; } /** @@ -397,7 +397,7 @@ http://pear.php.net/dtd/package-2.0.xsd', $this->options['beautifyFilelist'] = true; } - $arr['attribs']['packagerversion'] = '1.10.3'; + $arr['attribs']['packagerversion'] = '1.10.4'; if ($this->serialize($arr, $options)) { return $this->_serializedData . "\n"; } diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v1.php b/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v1.php index 6bb3276eeb..d9d19f6549 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v1.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v1.php @@ -274,7 +274,7 @@ define('PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME', 52); * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2.php b/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2.php index 248997a6ab..ab2f539b42 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2.php @@ -22,7 +22,7 @@ require_once 'PEAR/ErrorStack.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ @@ -1668,7 +1668,7 @@ class PEAR_PackageFile_v2 if ($dtype == 'pearinstaller' && $nopearinstaller) { continue; } - if (!isset($deps[0])) { + if ((is_array($deps) && !isset($deps[0])) || !is_array($deps)) { $deps = array($deps); } foreach ($deps as $dep) { diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/Validator.php b/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/Validator.php index f7c8921e1d..a6b01d57b8 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/Validator.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/Validator.php @@ -20,7 +20,7 @@ * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a8 * @access private @@ -111,8 +111,8 @@ class PEAR_PackageFile_v2_Validator isset($test['dependencies']['required']) && isset($test['dependencies']['required']['pearinstaller']) && isset($test['dependencies']['required']['pearinstaller']['min']) && - '1.10.3' != '@package' . '_version@' && - version_compare('1.10.3', + '1.10.4' != '@package' . '_version@' && + version_compare('1.10.4', $test['dependencies']['required']['pearinstaller']['min'], '<') ) { $this->_pearVersionTooLow($test['dependencies']['required']['pearinstaller']['min']); @@ -1350,7 +1350,7 @@ class PEAR_PackageFile_v2_Validator $this->_stack->push(__FUNCTION__, 'error', array('version' => $version), 'This package.xml requires PEAR version %version% to parse properly, we are ' . - 'version 1.10.3'); + 'version 1.10.4'); } function _invalidTagOrder($oktags, $actual, $root) diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/rw.php b/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/rw.php index c52ff4f3ca..3346639b8b 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/rw.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/rw.php @@ -22,7 +22,7 @@ require_once 'PEAR/PackageFile/v2.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a8 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Packager.php b/vendor/pear-pear.php.net/PEAR/PEAR/Packager.php index 713bc708cc..f92565bd5f 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Packager.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Packager.php @@ -30,7 +30,7 @@ require_once 'System.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/REST.php b/vendor/pear-pear.php.net/PEAR/PEAR/REST.php index aec7cf2340..419b7fbfa9 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/REST.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/REST.php @@ -28,7 +28,7 @@ require_once 'PEAR/Proxy.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ @@ -384,7 +384,7 @@ class PEAR_REST } $request .= $ifmodifiedsince . - "User-Agent: PEAR/1.10.3/PHP/" . PHP_VERSION . "\r\n"; + "User-Agent: PEAR/1.10.4/PHP/" . PHP_VERSION . "\r\n"; $username = $this->config->get('username', null, $channel); $password = $this->config->get('password', null, $channel); diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/REST/10.php b/vendor/pear-pear.php.net/PEAR/PEAR/REST/10.php index ac0aeab3ab..040371cdba 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/REST/10.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/REST/10.php @@ -26,7 +26,7 @@ require_once 'PEAR/REST.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a12 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/REST/11.php b/vendor/pear-pear.php.net/PEAR/PEAR/REST/11.php index a7e713ac4e..e2d3875fd0 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/REST/11.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/REST/11.php @@ -26,7 +26,7 @@ require_once 'PEAR/REST.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.3 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/REST/13.php b/vendor/pear-pear.php.net/PEAR/PEAR/REST/13.php index 6469fd30dd..0509897b8d 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/REST/13.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/REST/13.php @@ -27,7 +27,7 @@ require_once 'PEAR/REST/10.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a12 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Registry.php b/vendor/pear-pear.php.net/PEAR/PEAR/Registry.php index c599c61ee5..5588f23f4d 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Registry.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Registry.php @@ -36,7 +36,7 @@ define('PEAR_REGISTRY_ERROR_CHANNEL_FILE', -6); * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/RunTest.php b/vendor/pear-pear.php.net/PEAR/PEAR/RunTest.php index 271ef86bd5..95797665e6 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/RunTest.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/RunTest.php @@ -37,7 +37,7 @@ putenv("PHP_PEAR_RUNTESTS=1"); * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.3.3 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Common.php b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Common.php index e433c3e267..3ae59159bd 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Common.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Common.php @@ -47,7 +47,7 @@ define('PEAR_TASK_PACKAGEANDINSTALL', 3); * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 * @abstract diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript.php b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript.php index 457ac28f6e..154952f4f0 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript.php @@ -27,7 +27,7 @@ require_once 'PEAR/Task/Common.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript/rw.php b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript/rw.php index 10f5e7b26e..7aa699bb30 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript/rw.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript/rw.php @@ -23,7 +23,7 @@ require_once 'PEAR/Task/Postinstallscript.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a10 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Replace.php b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Replace.php index 1ea71bfe53..a5fc779ef1 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Replace.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Replace.php @@ -23,7 +23,7 @@ require_once 'PEAR/Task/Common.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Replace/rw.php b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Replace/rw.php index a2ffc24b1d..6080146463 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Replace/rw.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Replace/rw.php @@ -23,7 +23,7 @@ require_once 'PEAR/Task/Replace.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a10 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Unixeol.php b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Unixeol.php index 3b1d84c9a3..5bf2ac0518 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Unixeol.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Unixeol.php @@ -23,7 +23,7 @@ require_once 'PEAR/Task/Common.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Unixeol/rw.php b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Unixeol/rw.php index 7e98f21845..7316ba05fb 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Unixeol/rw.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Unixeol/rw.php @@ -23,7 +23,7 @@ require_once 'PEAR/Task/Unixeol.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a10 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Windowseol.php b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Windowseol.php index e0f2f26d8c..190f21381c 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Windowseol.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Windowseol.php @@ -24,7 +24,7 @@ require_once 'PEAR/Task/Common.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Windowseol/rw.php b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Windowseol/rw.php index 2f10c5eb23..4ef537b7ca 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Task/Windowseol/rw.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Task/Windowseol/rw.php @@ -24,7 +24,7 @@ require_once 'PEAR/Task/Windowseol.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a10 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Validate.php b/vendor/pear-pear.php.net/PEAR/PEAR/Validate.php index 0dc7433c1c..4b98b3ad52 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Validate.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Validate.php @@ -31,7 +31,7 @@ require_once 'PEAR/Validator/PECL.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/Validator/PECL.php b/vendor/pear-pear.php.net/PEAR/PEAR/Validator/PECL.php index 157cda3271..44bfb4f48b 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/Validator/PECL.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/Validator/PECL.php @@ -23,7 +23,7 @@ require_once 'PEAR/Validate.php'; * @author Greg Beaver * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a5 */ diff --git a/vendor/pear-pear.php.net/PEAR/PEAR/XMLParser.php b/vendor/pear-pear.php.net/PEAR/PEAR/XMLParser.php index 85b10a72a6..f0fa553d3c 100644 --- a/vendor/pear-pear.php.net/PEAR/PEAR/XMLParser.php +++ b/vendor/pear-pear.php.net/PEAR/PEAR/XMLParser.php @@ -22,7 +22,7 @@ * @author Stephan Schmidt (original XML_Unserializer code) * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license New BSD License - * @version Release: 1.10.3 + * @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.4.0a1 */ diff --git a/vendor/pear-pear.php.net/PEAR/System.php b/vendor/pear-pear.php.net/PEAR/System.php index 3184f46948..146346b57a 100644 --- a/vendor/pear-pear.php.net/PEAR/System.php +++ b/vendor/pear-pear.php.net/PEAR/System.php @@ -50,7 +50,7 @@ $GLOBALS['_System_temp_files'] = array(); * @author Tomas V.V. Cox * @copyright 1997-2006 The PHP Group * @license http://opensource.org/licenses/bsd-license.php New BSD License -* @version Release: 1.10.3 +* @version Release: 1.10.4 * @link http://pear.php.net/package/PEAR * @since Class available since Release 0.1 * @static diff --git a/vendor/pear-pear.php.net/PEAR/pearcmd.php b/vendor/pear-pear.php.net/PEAR/pearcmd.php index e089c818e7..60cb9769bf 100644 --- a/vendor/pear-pear.php.net/PEAR/pearcmd.php +++ b/vendor/pear-pear.php.net/PEAR/pearcmd.php @@ -41,7 +41,7 @@ ob_implicit_flush(true); $_PEAR_PHPDIR = '#$%^&*'; set_error_handler('error_handler'); -$pear_package_version = "1.10.3"; +$pear_package_version = "1.10.4"; require_once 'PEAR.php'; require_once 'PEAR/Frontend.php'; diff --git a/view/lang/de/messages.po b/view/lang/de/messages.po index 7d89df233b..2cd3d1d5ef 100644 --- a/view/lang/de/messages.po +++ b/view/lang/de/messages.po @@ -4,7 +4,7 @@ # # Translators: # Andreas H., 2015 -# Andreas H., 2015-2016 +# Andreas H., 2015-2017 # Tobias Diekershoff , 2011 # David Rabel , 2016 # Erkan Yilmaz , 2011 @@ -35,8 +35,8 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-03-03 10:29+0100\n" -"PO-Revision-Date: 2017-03-05 11:30+0000\n" +"POT-Creation-Date: 2017-05-03 07:08+0200\n" +"PO-Revision-Date: 2017-05-05 05:43+0000\n" "Last-Translator: Tobias Diekershoff \n" "Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" @@ -45,6 +45,440 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: include/ForumManager.php:114 include/nav.php:131 include/text.php:1093 +#: view/theme/vier/theme.php:254 +msgid "Forums" +msgstr "Foren" + +#: include/ForumManager.php:116 view/theme/vier/theme.php:256 +msgid "External link to forum" +msgstr "Externer Link zum Forum" + +#: include/ForumManager.php:119 include/contact_widgets.php:269 +#: include/items.php:2450 mod/content.php:624 object/Item.php:420 +#: view/theme/vier/theme.php:259 boot.php:1000 +msgid "show more" +msgstr "mehr anzeigen" + +#: include/NotificationsManager.php:153 +msgid "System" +msgstr "System" + +#: include/NotificationsManager.php:160 include/nav.php:158 mod/admin.php:517 +#: view/theme/frio/theme.php:253 +msgid "Network" +msgstr "Netzwerk" + +#: include/NotificationsManager.php:167 mod/network.php:832 +#: mod/profiles.php:696 +msgid "Personal" +msgstr "Persönlich" + +#: include/NotificationsManager.php:174 include/nav.php:105 +#: include/nav.php:161 +msgid "Home" +msgstr "Pinnwand" + +#: include/NotificationsManager.php:181 include/nav.php:166 +msgid "Introductions" +msgstr "Kontaktanfragen" + +#: include/NotificationsManager.php:239 include/NotificationsManager.php:251 +#, php-format +msgid "%s commented on %s's post" +msgstr "%s hat %ss Beitrag kommentiert" + +#: include/NotificationsManager.php:250 +#, php-format +msgid "%s created a new post" +msgstr "%s hat einen neuen Beitrag erstellt" + +#: include/NotificationsManager.php:265 +#, php-format +msgid "%s liked %s's post" +msgstr "%s mag %ss Beitrag" + +#: include/NotificationsManager.php:278 +#, php-format +msgid "%s disliked %s's post" +msgstr "%s mag %ss Beitrag nicht" + +#: include/NotificationsManager.php:291 +#, php-format +msgid "%s is attending %s's event" +msgstr "%s nimmt an %s's Event teil" + +#: include/NotificationsManager.php:304 +#, php-format +msgid "%s is not attending %s's event" +msgstr "%s nimmt nicht an %s's Event teil" + +#: include/NotificationsManager.php:317 +#, php-format +msgid "%s may attend %s's event" +msgstr "%s nimmt eventuell an %s's Event teil" + +#: include/NotificationsManager.php:334 +#, php-format +msgid "%s is now friends with %s" +msgstr "%s ist jetzt mit %s befreundet" + +#: include/NotificationsManager.php:770 +msgid "Friend Suggestion" +msgstr "Kontaktvorschlag" + +#: include/NotificationsManager.php:803 +msgid "Friend/Connect Request" +msgstr "Kontakt-/Freundschaftsanfrage" + +#: include/NotificationsManager.php:803 +msgid "New Follower" +msgstr "Neuer Bewunderer" + +#: include/Photo.php:1038 include/Photo.php:1054 include/Photo.php:1062 +#: include/Photo.php:1087 include/message.php:146 mod/wall_upload.php:249 +#: mod/item.php:467 +msgid "Wall Photos" +msgstr "Pinnwand-Bilder" + +#: include/delivery.php:427 +msgid "(no subject)" +msgstr "(kein Betreff)" + +#: include/delivery.php:439 include/enotify.php:43 +msgid "noreply" +msgstr "noreply" + +#: include/like.php:27 include/conversation.php:153 include/diaspora.php:1576 +#, php-format +msgid "%1$s likes %2$s's %3$s" +msgstr "%1$s mag %2$ss %3$s" + +#: include/like.php:31 include/like.php:36 include/conversation.php:156 +#, php-format +msgid "%1$s doesn't like %2$s's %3$s" +msgstr "%1$s mag %2$ss %3$s nicht" + +#: include/like.php:41 +#, php-format +msgid "%1$s is attending %2$s's %3$s" +msgstr "%1$s nimmt an %2$ss %3$s teil." + +#: include/like.php:46 +#, php-format +msgid "%1$s is not attending %2$s's %3$s" +msgstr "%1$s nimmt nicht an %2$ss %3$s teil." + +#: include/like.php:51 +#, php-format +msgid "%1$s may attend %2$s's %3$s" +msgstr "%1$s nimmt eventuell an %2$ss %3$s teil." + +#: include/like.php:178 include/conversation.php:141 +#: include/conversation.php:293 include/text.php:1872 mod/subthread.php:88 +#: mod/tagger.php:62 +msgid "photo" +msgstr "Foto" + +#: include/like.php:178 include/conversation.php:136 +#: include/conversation.php:146 include/conversation.php:288 +#: include/conversation.php:297 include/diaspora.php:1580 mod/subthread.php:88 +#: mod/tagger.php:62 +msgid "status" +msgstr "Status" + +#: include/like.php:180 include/conversation.php:133 +#: include/conversation.php:285 include/text.php:1870 +msgid "event" +msgstr "Event" + +#: include/message.php:15 include/message.php:169 +msgid "[no subject]" +msgstr "[kein Betreff]" + +#: include/nav.php:35 mod/navigation.php:19 +msgid "Nothing new here" +msgstr "Keine Neuigkeiten" + +#: include/nav.php:39 mod/navigation.php:23 +msgid "Clear notifications" +msgstr "Bereinige Benachrichtigungen" + +#: include/nav.php:40 include/text.php:1083 +msgid "@name, !forum, #tags, content" +msgstr "@name, !forum, #tags, content" + +#: include/nav.php:78 view/theme/frio/theme.php:243 boot.php:1867 +msgid "Logout" +msgstr "Abmelden" + +#: include/nav.php:78 view/theme/frio/theme.php:243 +msgid "End this session" +msgstr "Diese Sitzung beenden" + +#: include/nav.php:81 include/identity.php:769 mod/contacts.php:645 +#: mod/contacts.php:841 view/theme/frio/theme.php:246 +msgid "Status" +msgstr "Status" + +#: include/nav.php:81 include/nav.php:161 view/theme/frio/theme.php:246 +msgid "Your posts and conversations" +msgstr "Deine Beiträge und Unterhaltungen" + +#: include/nav.php:82 include/identity.php:622 include/identity.php:744 +#: include/identity.php:777 mod/contacts.php:647 mod/contacts.php:849 +#: mod/newmember.php:32 mod/profperm.php:105 view/theme/frio/theme.php:247 +msgid "Profile" +msgstr "Profil" + +#: include/nav.php:82 view/theme/frio/theme.php:247 +msgid "Your profile page" +msgstr "Deine Profilseite" + +#: include/nav.php:83 include/identity.php:785 mod/fbrowser.php:31 +#: view/theme/frio/theme.php:248 +msgid "Photos" +msgstr "Bilder" + +#: include/nav.php:83 view/theme/frio/theme.php:248 +msgid "Your photos" +msgstr "Deine Fotos" + +#: include/nav.php:84 include/identity.php:793 include/identity.php:796 +#: view/theme/frio/theme.php:249 +msgid "Videos" +msgstr "Videos" + +#: include/nav.php:84 view/theme/frio/theme.php:249 +msgid "Your videos" +msgstr "Deine Videos" + +#: include/nav.php:85 include/nav.php:149 include/identity.php:805 +#: include/identity.php:816 mod/cal.php:270 mod/events.php:374 +#: view/theme/frio/theme.php:250 view/theme/frio/theme.php:254 +msgid "Events" +msgstr "Veranstaltungen" + +#: include/nav.php:85 view/theme/frio/theme.php:250 +msgid "Your events" +msgstr "Deine Ereignisse" + +#: include/nav.php:86 +msgid "Personal notes" +msgstr "Persönliche Notizen" + +#: include/nav.php:86 +msgid "Your personal notes" +msgstr "Deine persönlichen Notizen" + +#: include/nav.php:95 mod/bookmarklet.php:12 boot.php:1868 +msgid "Login" +msgstr "Anmeldung" + +#: include/nav.php:95 +msgid "Sign in" +msgstr "Anmelden" + +#: include/nav.php:105 +msgid "Home Page" +msgstr "Homepage" + +#: include/nav.php:109 mod/register.php:289 boot.php:1844 +msgid "Register" +msgstr "Registrieren" + +#: include/nav.php:109 +msgid "Create an account" +msgstr "Nutzerkonto erstellen" + +#: include/nav.php:115 mod/help.php:47 view/theme/vier/theme.php:297 +msgid "Help" +msgstr "Hilfe" + +#: include/nav.php:115 +msgid "Help and documentation" +msgstr "Hilfe und Dokumentation" + +#: include/nav.php:119 +msgid "Apps" +msgstr "Apps" + +#: include/nav.php:119 +msgid "Addon applications, utilities, games" +msgstr "Addon Anwendungen, Dienstprogramme, Spiele" + +#: include/nav.php:123 include/text.php:1080 mod/search.php:149 +msgid "Search" +msgstr "Suche" + +#: include/nav.php:123 +msgid "Search site content" +msgstr "Inhalt der Seite durchsuchen" + +#: include/nav.php:126 include/text.php:1088 +msgid "Full Text" +msgstr "Volltext" + +#: include/nav.php:127 include/text.php:1089 +msgid "Tags" +msgstr "Tags" + +#: include/nav.php:128 include/nav.php:192 include/identity.php:838 +#: include/identity.php:841 include/text.php:1090 mod/contacts.php:800 +#: mod/contacts.php:861 mod/viewcontacts.php:121 view/theme/frio/theme.php:257 +msgid "Contacts" +msgstr "Kontakte" + +#: include/nav.php:143 include/nav.php:145 mod/community.php:32 +msgid "Community" +msgstr "Gemeinschaft" + +#: include/nav.php:143 +msgid "Conversations on this site" +msgstr "Unterhaltungen auf dieser Seite" + +#: include/nav.php:145 +msgid "Conversations on the network" +msgstr "Unterhaltungen im Netzwerk" + +#: include/nav.php:149 include/identity.php:808 include/identity.php:819 +#: view/theme/frio/theme.php:254 +msgid "Events and Calendar" +msgstr "Ereignisse und Kalender" + +#: include/nav.php:152 +msgid "Directory" +msgstr "Verzeichnis" + +#: include/nav.php:152 +msgid "People directory" +msgstr "Nutzerverzeichnis" + +#: include/nav.php:154 +msgid "Information" +msgstr "Information" + +#: include/nav.php:154 +msgid "Information about this friendica instance" +msgstr "Informationen zu dieser Friendica Instanz" + +#: include/nav.php:158 view/theme/frio/theme.php:253 +msgid "Conversations from your friends" +msgstr "Unterhaltungen Deiner Kontakte" + +#: include/nav.php:159 +msgid "Network Reset" +msgstr "Netzwerk zurücksetzen" + +#: include/nav.php:159 +msgid "Load Network page with no filters" +msgstr "Netzwerk-Seite ohne Filter laden" + +#: include/nav.php:166 +msgid "Friend Requests" +msgstr "Kontaktanfragen" + +#: include/nav.php:169 mod/notifications.php:96 +msgid "Notifications" +msgstr "Benachrichtigungen" + +#: include/nav.php:170 +msgid "See all notifications" +msgstr "Alle Benachrichtigungen anzeigen" + +#: include/nav.php:171 mod/settings.php:906 +msgid "Mark as seen" +msgstr "Als gelesen markieren" + +#: include/nav.php:171 +msgid "Mark all system notifications seen" +msgstr "Markiere alle Systembenachrichtigungen als gelesen" + +#: include/nav.php:175 mod/message.php:179 view/theme/frio/theme.php:255 +msgid "Messages" +msgstr "Nachrichten" + +#: include/nav.php:175 view/theme/frio/theme.php:255 +msgid "Private mail" +msgstr "Private E-Mail" + +#: include/nav.php:176 +msgid "Inbox" +msgstr "Eingang" + +#: include/nav.php:177 +msgid "Outbox" +msgstr "Ausgang" + +#: include/nav.php:178 mod/message.php:16 +msgid "New Message" +msgstr "Neue Nachricht" + +#: include/nav.php:181 +msgid "Manage" +msgstr "Verwalten" + +#: include/nav.php:181 +msgid "Manage other pages" +msgstr "Andere Seiten verwalten" + +#: include/nav.php:184 mod/settings.php:81 +msgid "Delegations" +msgstr "Delegationen" + +#: include/nav.php:184 mod/delegate.php:130 +msgid "Delegate Page Management" +msgstr "Delegiere das Management für die Seite" + +#: include/nav.php:186 mod/newmember.php:22 mod/settings.php:111 +#: mod/admin.php:1618 mod/admin.php:1894 view/theme/frio/theme.php:256 +msgid "Settings" +msgstr "Einstellungen" + +#: include/nav.php:186 view/theme/frio/theme.php:256 +msgid "Account settings" +msgstr "Kontoeinstellungen" + +#: include/nav.php:189 include/identity.php:290 +msgid "Profiles" +msgstr "Profile" + +#: include/nav.php:189 +msgid "Manage/Edit Profiles" +msgstr "Profile Verwalten/Editieren" + +#: include/nav.php:192 view/theme/frio/theme.php:257 +msgid "Manage/edit friends and contacts" +msgstr " Kontakte verwalten/editieren" + +#: include/nav.php:197 mod/admin.php:196 +msgid "Admin" +msgstr "Administration" + +#: include/nav.php:197 +msgid "Site setup and configuration" +msgstr "Einstellungen der Seite und Konfiguration" + +#: include/nav.php:200 +msgid "Navigation" +msgstr "Navigation" + +#: include/nav.php:200 +msgid "Site map" +msgstr "Sitemap" + +#: include/plugin.php:530 include/plugin.php:532 +msgid "Click here to upgrade." +msgstr "Zum Upgraden hier klicken." + +#: include/plugin.php:538 +msgid "This action exceeds the limits set by your subscription plan." +msgstr "Diese Aktion überschreitet die Obergrenze Deines Abonnements." + +#: include/plugin.php:543 +msgid "This action is not available under your subscription plan." +msgstr "Diese Aktion ist in Deinem Abonnement nicht verfügbar." + #: include/profile_selectors.php:6 msgid "Male" msgstr "Männlich" @@ -97,7 +531,7 @@ msgstr "Nicht spezifiziert" msgid "Other" msgstr "Andere" -#: include/profile_selectors.php:6 include/conversation.php:1478 +#: include/profile_selectors.php:6 include/conversation.php:1547 msgid "Undecided" msgid_plural "Undecided" msgstr[0] "Unentschieden" @@ -191,7 +625,7 @@ msgstr "Untreu" msgid "Sex Addict" msgstr "Sexbesessen" -#: include/profile_selectors.php:42 include/user.php:280 include/user.php:284 +#: include/profile_selectors.php:42 include/user.php:263 include/user.php:267 msgid "Friends" msgstr "Kontakte" @@ -279,146 +713,916 @@ msgstr "Ist mir nicht wichtig" msgid "Ask me" msgstr "Frag mich" -#: include/ForumManager.php:114 include/nav.php:131 include/text.php:1027 -#: view/theme/vier/theme.php:250 -msgid "Forums" -msgstr "Foren" +#: include/security.php:61 +msgid "Welcome " +msgstr "Willkommen " -#: include/ForumManager.php:116 view/theme/vier/theme.php:252 -msgid "External link to forum" -msgstr "Externer Link zum Forum" +#: include/security.php:62 +msgid "Please upload a profile photo." +msgstr "Bitte lade ein Profilbild hoch." -#: include/ForumManager.php:119 include/contact_widgets.php:253 -#: include/items.php:2254 mod/content.php:624 object/Item.php:447 -#: view/theme/vier/theme.php:255 boot.php:971 -msgid "show more" -msgstr "mehr anzeigen" +#: include/security.php:65 +msgid "Welcome back " +msgstr "Willkommen zurück " -#: include/NotificationsManager.php:153 -msgid "System" -msgstr "System" +#: include/security.php:429 +msgid "" +"The form security token was not correct. This probably happened because the " +"form has been opened for too long (>3 hours) before submitting it." +msgstr "Das Sicherheitsmerkmal war nicht korrekt. Das passiert meistens wenn das Formular vor dem Absenden zu lange geöffnet war (länger als 3 Stunden)." -#: include/NotificationsManager.php:160 include/nav.php:158 mod/admin.php:412 -#: view/theme/frio/theme.php:253 -msgid "Network" -msgstr "Netzwerk" +#: include/uimport.php:91 +msgid "Error decoding account file" +msgstr "Fehler beim Verarbeiten der Account Datei" -#: include/NotificationsManager.php:167 mod/profiles.php:695 -#: mod/network.php:846 -msgid "Personal" -msgstr "Persönlich" +#: include/uimport.php:97 +msgid "Error! No version data in file! This is not a Friendica account file?" +msgstr "Fehler! Keine Versionsdaten in der Datei! Ist das wirklich eine Friendica Account Datei?" -#: include/NotificationsManager.php:174 include/nav.php:105 -#: include/nav.php:161 -msgid "Home" -msgstr "Pinnwand" +#: include/uimport.php:113 include/uimport.php:124 +msgid "Error! Cannot check nickname" +msgstr "Fehler! Konnte den Nickname nicht überprüfen." -#: include/NotificationsManager.php:181 include/nav.php:166 -msgid "Introductions" -msgstr "Kontaktanfragen" - -#: include/NotificationsManager.php:239 include/NotificationsManager.php:251 +#: include/uimport.php:117 include/uimport.php:128 #, php-format -msgid "%s commented on %s's post" -msgstr "%s hat %ss Beitrag kommentiert" +msgid "User '%s' already exists on this server!" +msgstr "Nutzer '%s' existiert bereits auf diesem Server!" -#: include/NotificationsManager.php:250 +#: include/uimport.php:150 +msgid "User creation error" +msgstr "Fehler beim Anlegen des Nutzeraccounts aufgetreten" + +#: include/uimport.php:170 +msgid "User profile creation error" +msgstr "Fehler beim Anlegen des Nutzerkontos" + +#: include/uimport.php:219 #, php-format -msgid "%s created a new post" -msgstr "%s hat einen neuen Beitrag erstellt" +msgid "%d contact not imported" +msgid_plural "%d contacts not imported" +msgstr[0] "%d Kontakt nicht importiert" +msgstr[1] "%d Kontakte nicht importiert" -#: include/NotificationsManager.php:265 +#: include/uimport.php:289 +msgid "Done. You can now login with your username and password" +msgstr "Erledigt. Du kannst Dich jetzt mit Deinem Nutzernamen und Passwort anmelden" + +#: include/Contact.php:395 include/Contact.php:408 include/Contact.php:453 +#: include/conversation.php:1004 include/conversation.php:1020 +#: mod/allfriends.php:68 mod/directory.php:157 mod/match.php:73 +#: mod/suggest.php:82 mod/dirfind.php:209 +msgid "View Profile" +msgstr "Profil anschauen" + +#: include/Contact.php:409 include/contact_widgets.php:32 +#: include/conversation.php:1017 mod/allfriends.php:69 mod/contacts.php:610 +#: mod/match.php:74 mod/suggest.php:83 mod/dirfind.php:210 mod/follow.php:106 +msgid "Connect/Follow" +msgstr "Verbinden/Folgen" + +#: include/Contact.php:452 include/conversation.php:1003 +msgid "View Status" +msgstr "Pinnwand anschauen" + +#: include/Contact.php:454 include/conversation.php:1005 +msgid "View Photos" +msgstr "Bilder anschauen" + +#: include/Contact.php:455 include/conversation.php:1006 +msgid "Network Posts" +msgstr "Netzwerkbeiträge" + +#: include/Contact.php:456 include/conversation.php:1007 +msgid "View Contact" +msgstr "Kontakt anzeigen" + +#: include/Contact.php:457 +msgid "Drop Contact" +msgstr "Kontakt löschen" + +#: include/Contact.php:458 include/conversation.php:1008 +msgid "Send PM" +msgstr "Private Nachricht senden" + +#: include/Contact.php:459 include/conversation.php:1012 +msgid "Poke" +msgstr "Anstupsen" + +#: include/Contact.php:840 +msgid "Organisation" +msgstr "Organisation" + +#: include/Contact.php:843 +msgid "News" +msgstr "Nachrichten" + +#: include/Contact.php:846 +msgid "Forum" +msgstr "Forum" + +#: include/acl_selectors.php:353 +msgid "Post to Email" +msgstr "An E-Mail senden" + +#: include/acl_selectors.php:358 #, php-format -msgid "%s liked %s's post" -msgstr "%s mag %ss Beitrag" +msgid "Connectors disabled, since \"%s\" is enabled." +msgstr "Konnektoren sind nicht verfügbar, da \"%s\" aktiv ist." -#: include/NotificationsManager.php:278 +#: include/acl_selectors.php:359 mod/settings.php:1188 +msgid "Hide your profile details from unknown viewers?" +msgstr "Profil-Details vor unbekannten Betrachtern verbergen?" + +#: include/acl_selectors.php:365 +msgid "Visible to everybody" +msgstr "Für jeden sichtbar" + +#: include/acl_selectors.php:366 view/theme/vier/config.php:108 +msgid "show" +msgstr "zeigen" + +#: include/acl_selectors.php:367 view/theme/vier/config.php:108 +msgid "don't show" +msgstr "nicht zeigen" + +#: include/acl_selectors.php:373 mod/editpost.php:123 +msgid "CC: email addresses" +msgstr "Cc: E-Mail-Addressen" + +#: include/acl_selectors.php:374 mod/editpost.php:130 +msgid "Example: bob@example.com, mary@example.com" +msgstr "Z.B.: bob@example.com, mary@example.com" + +#: include/acl_selectors.php:376 mod/events.php:508 mod/photos.php:1196 +#: mod/photos.php:1593 +msgid "Permissions" +msgstr "Berechtigungen" + +#: include/acl_selectors.php:377 +msgid "Close" +msgstr "Schließen" + +#: include/api.php:1089 #, php-format -msgid "%s disliked %s's post" -msgstr "%s mag %ss Beitrag nicht" +msgid "Daily posting limit of %d posts reached. The post was rejected." +msgstr "Das tägliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen." -#: include/NotificationsManager.php:291 +#: include/api.php:1110 #, php-format -msgid "%s is attending %s's event" -msgstr "%s nimmt an %s's Event teil" +msgid "Weekly posting limit of %d posts reached. The post was rejected." +msgstr "Das wöchentliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen." -#: include/NotificationsManager.php:304 +#: include/api.php:1131 #, php-format -msgid "%s is not attending %s's event" -msgstr "%s nimmt nicht an %s's Event teil" +msgid "Monthly posting limit of %d posts reached. The post was rejected." +msgstr "Das monatliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen." -#: include/NotificationsManager.php:317 -#, php-format -msgid "%s may attend %s's event" -msgstr "%s nimmt eventuell an %s's Event teil" - -#: include/NotificationsManager.php:334 -#, php-format -msgid "%s is now friends with %s" -msgstr "%s ist jetzt mit %s befreundet" - -#: include/NotificationsManager.php:770 -msgid "Friend Suggestion" -msgstr "Kontaktvorschlag" - -#: include/NotificationsManager.php:803 -msgid "Friend/Connect Request" -msgstr "Kontakt-/Freundschaftsanfrage" - -#: include/NotificationsManager.php:803 -msgid "New Follower" -msgstr "Neuer Bewunderer" - -#: include/Photo.php:1038 include/Photo.php:1054 include/Photo.php:1062 -#: include/Photo.php:1087 include/message.php:146 mod/item.php:462 -#: mod/wall_upload.php:216 mod/wall_upload.php:230 mod/wall_upload.php:237 -msgid "Wall Photos" -msgstr "Pinnwand-Bilder" - -#: include/auth.php:45 +#: include/auth.php:51 msgid "Logged out." msgstr "Abgemeldet." -#: include/auth.php:116 include/auth.php:177 mod/openid.php:110 +#: include/auth.php:122 include/auth.php:184 mod/openid.php:110 msgid "Login failed." msgstr "Anmeldung fehlgeschlagen." -#: include/auth.php:131 include/user.php:75 +#: include/auth.php:138 include/user.php:75 msgid "" "We encountered a problem while logging in with the OpenID you provided. " "Please check the correct spelling of the ID." msgstr "Beim Versuch Dich mit der von Dir angegebenen OpenID anzumelden trat ein Problem auf. Bitte überprüfe, dass Du die OpenID richtig geschrieben hast." -#: include/auth.php:131 include/user.php:75 +#: include/auth.php:138 include/user.php:75 msgid "The error message was:" msgstr "Die Fehlermeldung lautete:" -#: include/bbcode.php:350 include/bbcode.php:1055 include/bbcode.php:1056 +#: include/bb2diaspora.php:230 include/event.php:17 mod/localtime.php:12 +msgid "l F d, Y \\@ g:i A" +msgstr "l, d. F Y\\, H:i" + +#: include/bb2diaspora.php:236 include/event.php:34 include/event.php:54 +#: include/event.php:525 +msgid "Starts:" +msgstr "Beginnt:" + +#: include/bb2diaspora.php:244 include/event.php:37 include/event.php:60 +#: include/event.php:526 +msgid "Finishes:" +msgstr "Endet:" + +#: include/bb2diaspora.php:253 include/event.php:41 include/event.php:67 +#: include/event.php:527 include/identity.php:336 mod/contacts.php:636 +#: mod/directory.php:139 mod/events.php:493 mod/notifications.php:244 +msgid "Location:" +msgstr "Ort:" + +#: include/bbcode.php:380 include/bbcode.php:1132 include/bbcode.php:1133 msgid "Image/photo" msgstr "Bild/Foto" -#: include/bbcode.php:467 +#: include/bbcode.php:497 #, php-format msgid "%2$s %3$s" msgstr "%2$s %3$s" -#: include/bbcode.php:1015 include/bbcode.php:1035 +#: include/bbcode.php:1089 include/bbcode.php:1111 msgid "$1 wrote:" msgstr "$1 hat geschrieben:" -#: include/bbcode.php:1064 include/bbcode.php:1065 +#: include/bbcode.php:1141 include/bbcode.php:1142 msgid "Encrypted content" msgstr "Verschlüsselter Inhalt" -#: include/bbcode.php:1167 +#: include/bbcode.php:1257 msgid "Invalid source protocol" msgstr "Ungültiges Quell-Protokoll" -#: include/bbcode.php:1177 +#: include/bbcode.php:1267 msgid "Invalid link protocol" msgstr "Ungültiges Link-Protokoll" -#: include/dba_pdo.php:72 include/dba.php:56 +#: include/contact_selectors.php:32 +msgid "Unknown | Not categorised" +msgstr "Unbekannt | Nicht kategorisiert" + +#: include/contact_selectors.php:33 +msgid "Block immediately" +msgstr "Sofort blockieren" + +#: include/contact_selectors.php:34 +msgid "Shady, spammer, self-marketer" +msgstr "Zwielichtig, Spammer, Selbstdarsteller" + +#: include/contact_selectors.php:35 +msgid "Known to me, but no opinion" +msgstr "Ist mir bekannt, hab aber keine Meinung" + +#: include/contact_selectors.php:36 +msgid "OK, probably harmless" +msgstr "OK, wahrscheinlich harmlos" + +#: include/contact_selectors.php:37 +msgid "Reputable, has my trust" +msgstr "Seriös, hat mein Vertrauen" + +#: include/contact_selectors.php:56 mod/admin.php:980 +msgid "Frequently" +msgstr "immer wieder" + +#: include/contact_selectors.php:57 mod/admin.php:981 +msgid "Hourly" +msgstr "Stündlich" + +#: include/contact_selectors.php:58 mod/admin.php:982 +msgid "Twice daily" +msgstr "Zweimal täglich" + +#: include/contact_selectors.php:59 mod/admin.php:983 +msgid "Daily" +msgstr "Täglich" + +#: include/contact_selectors.php:60 +msgid "Weekly" +msgstr "Wöchentlich" + +#: include/contact_selectors.php:61 +msgid "Monthly" +msgstr "Monatlich" + +#: include/contact_selectors.php:76 mod/dfrn_request.php:886 +msgid "Friendica" +msgstr "Friendica" + +#: include/contact_selectors.php:77 +msgid "OStatus" +msgstr "OStatus" + +#: include/contact_selectors.php:78 +msgid "RSS/Atom" +msgstr "RSS/Atom" + +#: include/contact_selectors.php:79 include/contact_selectors.php:86 +#: mod/admin.php:1490 mod/admin.php:1503 mod/admin.php:1516 mod/admin.php:1534 +msgid "Email" +msgstr "E-Mail" + +#: include/contact_selectors.php:80 mod/dfrn_request.php:888 +#: mod/settings.php:848 +msgid "Diaspora" +msgstr "Diaspora" + +#: include/contact_selectors.php:81 +msgid "Facebook" +msgstr "Facebook" + +#: include/contact_selectors.php:82 +msgid "Zot!" +msgstr "Zott" + +#: include/contact_selectors.php:83 +msgid "LinkedIn" +msgstr "LinkedIn" + +#: include/contact_selectors.php:84 +msgid "XMPP/IM" +msgstr "XMPP/Chat" + +#: include/contact_selectors.php:85 +msgid "MySpace" +msgstr "MySpace" + +#: include/contact_selectors.php:87 +msgid "Google+" +msgstr "Google+" + +#: include/contact_selectors.php:88 +msgid "pump.io" +msgstr "pump.io" + +#: include/contact_selectors.php:89 +msgid "Twitter" +msgstr "Twitter" + +#: include/contact_selectors.php:90 +msgid "Diaspora Connector" +msgstr "Diaspora" + +#: include/contact_selectors.php:91 +msgid "GNU Social Connector" +msgstr "GNU social Connector" + +#: include/contact_selectors.php:92 +msgid "pnut" +msgstr "pnut" + +#: include/contact_selectors.php:93 +msgid "App.net" +msgstr "App.net" + +#: include/contact_widgets.php:6 +msgid "Add New Contact" +msgstr "Neuen Kontakt hinzufügen" + +#: include/contact_widgets.php:7 +msgid "Enter address or web location" +msgstr "Adresse oder Web-Link eingeben" + +#: include/contact_widgets.php:8 +msgid "Example: bob@example.com, http://example.com/barbara" +msgstr "Beispiel: bob@example.com, http://example.com/barbara" + +#: include/contact_widgets.php:10 include/identity.php:224 +#: mod/allfriends.php:85 mod/match.php:89 mod/suggest.php:101 +#: mod/dirfind.php:207 +msgid "Connect" +msgstr "Verbinden" + +#: include/contact_widgets.php:24 +#, php-format +msgid "%d invitation available" +msgid_plural "%d invitations available" +msgstr[0] "%d Einladung verfügbar" +msgstr[1] "%d Einladungen verfügbar" + +#: include/contact_widgets.php:30 +msgid "Find People" +msgstr "Leute finden" + +#: include/contact_widgets.php:31 +msgid "Enter name or interest" +msgstr "Name oder Interessen eingeben" + +#: include/contact_widgets.php:33 +msgid "Examples: Robert Morgenstein, Fishing" +msgstr "Beispiel: Robert Morgenstein, Angeln" + +#: include/contact_widgets.php:34 mod/contacts.php:806 mod/directory.php:206 +msgid "Find" +msgstr "Finde" + +#: include/contact_widgets.php:35 mod/suggest.php:114 +#: view/theme/vier/theme.php:201 +msgid "Friend Suggestions" +msgstr "Kontaktvorschläge" + +#: include/contact_widgets.php:36 view/theme/vier/theme.php:200 +msgid "Similar Interests" +msgstr "Ähnliche Interessen" + +#: include/contact_widgets.php:37 +msgid "Random Profile" +msgstr "Zufälliges Profil" + +#: include/contact_widgets.php:38 view/theme/vier/theme.php:202 +msgid "Invite Friends" +msgstr "Freunde einladen" + +#: include/contact_widgets.php:125 +msgid "Networks" +msgstr "Netzwerke" + +#: include/contact_widgets.php:128 +msgid "All Networks" +msgstr "Alle Netzwerke" + +#: include/contact_widgets.php:160 include/features.php:104 +msgid "Saved Folders" +msgstr "Gespeicherte Ordner" + +#: include/contact_widgets.php:163 include/contact_widgets.php:198 +msgid "Everything" +msgstr "Alles" + +#: include/contact_widgets.php:195 +msgid "Categories" +msgstr "Kategorien" + +#: include/contact_widgets.php:264 +#, php-format +msgid "%d contact in common" +msgid_plural "%d contacts in common" +msgstr[0] "%d gemeinsamer Kontakt" +msgstr[1] "%d gemeinsame Kontakte" + +#: include/conversation.php:159 +#, php-format +msgid "%1$s attends %2$s's %3$s" +msgstr "%1$s nimmt an %2$ss %3$s teil." + +#: include/conversation.php:162 +#, php-format +msgid "%1$s doesn't attend %2$s's %3$s" +msgstr "%1$s nimmt nicht an %2$ss %3$s teil." + +#: include/conversation.php:165 +#, php-format +msgid "%1$s attends maybe %2$s's %3$s" +msgstr "%1$s nimmt eventuell an %2$ss %3$s teil." + +#: include/conversation.php:198 mod/dfrn_confirm.php:478 +#, php-format +msgid "%1$s is now friends with %2$s" +msgstr "%1$s ist nun mit %2$s befreundet" + +#: include/conversation.php:239 +#, php-format +msgid "%1$s poked %2$s" +msgstr "%1$s stupste %2$s" + +#: include/conversation.php:260 mod/mood.php:63 +#, php-format +msgid "%1$s is currently %2$s" +msgstr "%1$s ist momentan %2$s" + +#: include/conversation.php:307 mod/tagger.php:95 +#, php-format +msgid "%1$s tagged %2$s's %3$s with %4$s" +msgstr "%1$s hat %2$ss %3$s mit %4$s getaggt" + +#: include/conversation.php:334 +msgid "post/item" +msgstr "Nachricht/Beitrag" + +#: include/conversation.php:335 +#, php-format +msgid "%1$s marked %2$s's %3$s as favorite" +msgstr "%1$s hat %2$s\\s %3$s als Favorit markiert" + +#: include/conversation.php:614 mod/content.php:372 mod/photos.php:1662 +#: mod/profiles.php:340 +msgid "Likes" +msgstr "Likes" + +#: include/conversation.php:614 mod/content.php:372 mod/photos.php:1662 +#: mod/profiles.php:344 +msgid "Dislikes" +msgstr "Dislikes" + +#: include/conversation.php:615 include/conversation.php:1541 +#: mod/content.php:373 mod/photos.php:1663 +msgid "Attending" +msgid_plural "Attending" +msgstr[0] "Teilnehmend" +msgstr[1] "Teilnehmend" + +#: include/conversation.php:615 mod/content.php:373 mod/photos.php:1663 +msgid "Not attending" +msgstr "Nicht teilnehmend" + +#: include/conversation.php:615 mod/content.php:373 mod/photos.php:1663 +msgid "Might attend" +msgstr "Eventuell teilnehmend" + +#: include/conversation.php:747 mod/content.php:453 mod/content.php:759 +#: mod/photos.php:1728 object/Item.php:137 +msgid "Select" +msgstr "Auswählen" + +#: include/conversation.php:748 mod/contacts.php:816 mod/contacts.php:1015 +#: mod/content.php:454 mod/content.php:760 mod/photos.php:1729 +#: mod/settings.php:744 mod/admin.php:1508 object/Item.php:138 +msgid "Delete" +msgstr "Löschen" + +#: include/conversation.php:791 mod/content.php:487 mod/content.php:915 +#: mod/content.php:916 object/Item.php:356 object/Item.php:357 +#, php-format +msgid "View %s's profile @ %s" +msgstr "Das Profil von %s auf %s betrachten." + +#: include/conversation.php:803 object/Item.php:344 +msgid "Categories:" +msgstr "Kategorien:" + +#: include/conversation.php:804 object/Item.php:345 +msgid "Filed under:" +msgstr "Abgelegt unter:" + +#: include/conversation.php:811 mod/content.php:497 mod/content.php:928 +#: object/Item.php:370 +#, php-format +msgid "%s from %s" +msgstr "%s von %s" + +#: include/conversation.php:827 mod/content.php:513 +msgid "View in context" +msgstr "Im Zusammenhang betrachten" + +#: include/conversation.php:829 include/conversation.php:1298 +#: mod/content.php:515 mod/content.php:953 mod/editpost.php:114 +#: mod/wallmessage.php:140 mod/message.php:337 mod/message.php:522 +#: mod/photos.php:1627 object/Item.php:395 +msgid "Please wait" +msgstr "Bitte warten" + +#: include/conversation.php:906 +msgid "remove" +msgstr "löschen" + +#: include/conversation.php:910 +msgid "Delete Selected Items" +msgstr "Lösche die markierten Beiträge" + +#: include/conversation.php:1002 +msgid "Follow Thread" +msgstr "Folge der Unterhaltung" + +#: include/conversation.php:1139 +#, php-format +msgid "%s likes this." +msgstr "%s mag das." + +#: include/conversation.php:1142 +#, php-format +msgid "%s doesn't like this." +msgstr "%s mag das nicht." + +#: include/conversation.php:1145 +#, php-format +msgid "%s attends." +msgstr "%s nimmt teil." + +#: include/conversation.php:1148 +#, php-format +msgid "%s doesn't attend." +msgstr "%s nimmt nicht teil." + +#: include/conversation.php:1151 +#, php-format +msgid "%s attends maybe." +msgstr "%s nimmt eventuell teil." + +#: include/conversation.php:1162 +msgid "and" +msgstr "und" + +#: include/conversation.php:1168 +#, php-format +msgid ", and %d other people" +msgstr " und %d andere" + +#: include/conversation.php:1177 +#, php-format +msgid "%2$d people like this" +msgstr "%2$d Personen mögen das" + +#: include/conversation.php:1178 +#, php-format +msgid "%s like this." +msgstr "%s mögen das." + +#: include/conversation.php:1181 +#, php-format +msgid "%2$d people don't like this" +msgstr "%2$d Personen mögen das nicht" + +#: include/conversation.php:1182 +#, php-format +msgid "%s don't like this." +msgstr "%s mögen dies nicht." + +#: include/conversation.php:1185 +#, php-format +msgid "%2$d people attend" +msgstr "%2$d Personen nehmen teil" + +#: include/conversation.php:1186 +#, php-format +msgid "%s attend." +msgstr "%s nehmen teil." + +#: include/conversation.php:1189 +#, php-format +msgid "%2$d people don't attend" +msgstr "%2$d Personen nehmen nicht teil" + +#: include/conversation.php:1190 +#, php-format +msgid "%s don't attend." +msgstr "%s nehmen nicht teil." + +#: include/conversation.php:1193 +#, php-format +msgid "%2$d people attend maybe" +msgstr "%2$d Personen nehmen eventuell teil" + +#: include/conversation.php:1194 +#, php-format +msgid "%s anttend maybe." +msgstr "%s nehmen vielleicht teil." + +#: include/conversation.php:1223 include/conversation.php:1239 +msgid "Visible to everybody" +msgstr "Für jedermann sichtbar" + +#: include/conversation.php:1224 include/conversation.php:1240 +#: mod/wallmessage.php:114 mod/wallmessage.php:121 mod/message.php:271 +#: mod/message.php:278 mod/message.php:418 mod/message.php:425 +msgid "Please enter a link URL:" +msgstr "Bitte gib die URL des Links ein:" + +#: include/conversation.php:1225 include/conversation.php:1241 +msgid "Please enter a video link/URL:" +msgstr "Bitte Link/URL zum Video einfügen:" + +#: include/conversation.php:1226 include/conversation.php:1242 +msgid "Please enter an audio link/URL:" +msgstr "Bitte Link/URL zum Audio einfügen:" + +#: include/conversation.php:1227 include/conversation.php:1243 +msgid "Tag term:" +msgstr "Tag:" + +#: include/conversation.php:1228 include/conversation.php:1244 +#: mod/filer.php:30 +msgid "Save to Folder:" +msgstr "In diesem Ordner speichern:" + +#: include/conversation.php:1229 include/conversation.php:1245 +msgid "Where are you right now?" +msgstr "Wo hältst Du Dich jetzt gerade auf?" + +#: include/conversation.php:1230 +msgid "Delete item(s)?" +msgstr "Einträge löschen?" + +#: include/conversation.php:1279 +msgid "Share" +msgstr "Teilen" + +#: include/conversation.php:1280 mod/editpost.php:100 mod/wallmessage.php:138 +#: mod/message.php:335 mod/message.php:519 +msgid "Upload photo" +msgstr "Foto hochladen" + +#: include/conversation.php:1281 mod/editpost.php:101 +msgid "upload photo" +msgstr "Bild hochladen" + +#: include/conversation.php:1282 mod/editpost.php:102 +msgid "Attach file" +msgstr "Datei anhängen" + +#: include/conversation.php:1283 mod/editpost.php:103 +msgid "attach file" +msgstr "Datei anhängen" + +#: include/conversation.php:1284 mod/editpost.php:104 mod/wallmessage.php:139 +#: mod/message.php:336 mod/message.php:520 +msgid "Insert web link" +msgstr "Einen Link einfügen" + +#: include/conversation.php:1285 mod/editpost.php:105 +msgid "web link" +msgstr "Weblink" + +#: include/conversation.php:1286 mod/editpost.php:106 +msgid "Insert video link" +msgstr "Video-Adresse einfügen" + +#: include/conversation.php:1287 mod/editpost.php:107 +msgid "video link" +msgstr "Video-Link" + +#: include/conversation.php:1288 mod/editpost.php:108 +msgid "Insert audio link" +msgstr "Audio-Adresse einfügen" + +#: include/conversation.php:1289 mod/editpost.php:109 +msgid "audio link" +msgstr "Audio-Link" + +#: include/conversation.php:1290 mod/editpost.php:110 +msgid "Set your location" +msgstr "Deinen Standort festlegen" + +#: include/conversation.php:1291 mod/editpost.php:111 +msgid "set location" +msgstr "Ort setzen" + +#: include/conversation.php:1292 mod/editpost.php:112 +msgid "Clear browser location" +msgstr "Browser-Standort leeren" + +#: include/conversation.php:1293 mod/editpost.php:113 +msgid "clear location" +msgstr "Ort löschen" + +#: include/conversation.php:1295 mod/editpost.php:127 +msgid "Set title" +msgstr "Titel setzen" + +#: include/conversation.php:1297 mod/editpost.php:129 +msgid "Categories (comma-separated list)" +msgstr "Kategorien (kommasepariert)" + +#: include/conversation.php:1299 mod/editpost.php:115 +msgid "Permission settings" +msgstr "Berechtigungseinstellungen" + +#: include/conversation.php:1300 mod/editpost.php:144 +msgid "permissions" +msgstr "Zugriffsrechte" + +#: include/conversation.php:1308 mod/editpost.php:124 +msgid "Public post" +msgstr "Öffentlicher Beitrag" + +#: include/conversation.php:1313 mod/content.php:737 mod/editpost.php:135 +#: mod/events.php:503 mod/photos.php:1647 mod/photos.php:1689 +#: mod/photos.php:1769 object/Item.php:714 +msgid "Preview" +msgstr "Vorschau" + +#: include/conversation.php:1317 include/items.php:2167 mod/contacts.php:455 +#: mod/editpost.php:138 mod/fbrowser.php:100 mod/fbrowser.php:135 +#: mod/suggest.php:32 mod/tagrm.php:11 mod/tagrm.php:96 +#: mod/dfrn_request.php:894 mod/follow.php:124 mod/message.php:209 +#: mod/photos.php:245 mod/photos.php:337 mod/settings.php:682 +#: mod/settings.php:708 mod/videos.php:132 +msgid "Cancel" +msgstr "Abbrechen" + +#: include/conversation.php:1323 +msgid "Post to Groups" +msgstr "Poste an Gruppe" + +#: include/conversation.php:1324 +msgid "Post to Contacts" +msgstr "Poste an Kontakte" + +#: include/conversation.php:1325 +msgid "Private post" +msgstr "Privater Beitrag" + +#: include/conversation.php:1330 include/identity.php:264 mod/editpost.php:142 +msgid "Message" +msgstr "Nachricht" + +#: include/conversation.php:1331 mod/editpost.php:143 +msgid "Browser" +msgstr "Browser" + +#: include/conversation.php:1513 +msgid "View all" +msgstr "Zeige alle" + +#: include/conversation.php:1535 +msgid "Like" +msgid_plural "Likes" +msgstr[0] "mag ich" +msgstr[1] "Mag ich" + +#: include/conversation.php:1538 +msgid "Dislike" +msgid_plural "Dislikes" +msgstr[0] "mag ich nicht" +msgstr[1] "Mag ich nicht" + +#: include/conversation.php:1544 +msgid "Not Attending" +msgid_plural "Not Attending" +msgstr[0] "Nicht teilnehmend " +msgstr[1] "Nicht teilnehmend" + +#: include/datetime.php:66 include/datetime.php:68 mod/profiles.php:698 +msgid "Miscellaneous" +msgstr "Verschiedenes" + +#: include/datetime.php:196 include/identity.php:644 +msgid "Birthday:" +msgstr "Geburtstag:" + +#: include/datetime.php:198 mod/profiles.php:721 +msgid "Age: " +msgstr "Alter: " + +#: include/datetime.php:200 +msgid "YYYY-MM-DD or MM-DD" +msgstr "YYYY-MM-DD oder MM-DD" + +#: include/datetime.php:370 +msgid "never" +msgstr "nie" + +#: include/datetime.php:376 +msgid "less than a second ago" +msgstr "vor weniger als einer Sekunde" + +#: include/datetime.php:379 +msgid "year" +msgstr "Jahr" + +#: include/datetime.php:379 +msgid "years" +msgstr "Jahre" + +#: include/datetime.php:380 include/event.php:519 mod/cal.php:279 +#: mod/events.php:384 +msgid "month" +msgstr "Monat" + +#: include/datetime.php:380 +msgid "months" +msgstr "Monate" + +#: include/datetime.php:381 include/event.php:520 mod/cal.php:280 +#: mod/events.php:385 +msgid "week" +msgstr "Woche" + +#: include/datetime.php:381 +msgid "weeks" +msgstr "Wochen" + +#: include/datetime.php:382 include/event.php:521 mod/cal.php:281 +#: mod/events.php:386 +msgid "day" +msgstr "Tag" + +#: include/datetime.php:382 +msgid "days" +msgstr "Tage" + +#: include/datetime.php:383 +msgid "hour" +msgstr "Stunde" + +#: include/datetime.php:383 +msgid "hours" +msgstr "Stunden" + +#: include/datetime.php:384 +msgid "minute" +msgstr "Minute" + +#: include/datetime.php:384 +msgid "minutes" +msgstr "Minuten" + +#: include/datetime.php:385 +msgid "second" +msgstr "Sekunde" + +#: include/datetime.php:385 +msgid "seconds" +msgstr "Sekunden" + +#: include/datetime.php:394 +#, php-format +msgid "%1$d %2$s ago" +msgstr "%1$d %2$s her" + +#: include/datetime.php:620 +#, php-format +msgid "%s's birthday" +msgstr "%ss Geburtstag" + +#: include/datetime.php:621 include/dfrn.php:1252 +#, php-format +msgid "Happy Birthday %s" +msgstr "Herzlichen Glückwunsch %s" + +#: include/dba_pdo.php:72 include/dba.php:47 #, php-format msgid "Cannot locate DNS info for database server '%s'" msgstr "Kann die DNS Informationen für den Datenbankserver '%s' nicht ermitteln." @@ -441,10 +1645,6 @@ msgstr "der Administrator von %s" msgid "%1$s, %2$s Administrator" msgstr "%1$s, %2$s Administrator" -#: include/enotify.php:43 include/delivery.php:482 -msgid "noreply" -msgstr "noreply" - #: include/enotify.php:70 #, php-format msgid "%s " @@ -720,1124 +1920,193 @@ msgstr "Kompletter Name:\t%1$s\\nURL der Seite:\t%2$s\\nLogin Name:\t%3$s (%4$s) msgid "Please visit %s to approve or reject the request." msgstr "Bitte besuche %s um die Anfrage zu bearbeiten." -#: include/follow.php:81 mod/dfrn_request.php:512 -msgid "Disallowed profile URL." -msgstr "Nicht erlaubte Profil-URL." +#: include/event.php:474 +msgid "all-day" +msgstr "ganztägig" -#: include/follow.php:86 -msgid "Connect URL missing." -msgstr "Connect-URL fehlt" +#: include/event.php:476 +msgid "Sun" +msgstr "So" -#: include/follow.php:114 -msgid "" -"This site is not configured to allow communications with other networks." -msgstr "Diese Seite ist so konfiguriert, dass keine Kommunikation mit anderen Netzwerken erfolgen kann." +#: include/event.php:477 +msgid "Mon" +msgstr "Mo" -#: include/follow.php:115 include/follow.php:129 -msgid "No compatible communication protocols or feeds were discovered." -msgstr "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden." +#: include/event.php:478 +msgid "Tue" +msgstr "Di" -#: include/follow.php:127 -msgid "The profile address specified does not provide adequate information." -msgstr "Die angegebene Profiladresse liefert unzureichende Informationen." +#: include/event.php:479 +msgid "Wed" +msgstr "Mi" -#: include/follow.php:132 -msgid "An author or name was not found." -msgstr "Es wurde kein Autor oder Name gefunden." +#: include/event.php:480 +msgid "Thu" +msgstr "Do" -#: include/follow.php:135 -msgid "No browser URL could be matched to this address." -msgstr "Zu dieser Adresse konnte keine passende Browser URL gefunden werden." +#: include/event.php:481 +msgid "Fri" +msgstr "Fr" -#: include/follow.php:138 -msgid "" -"Unable to match @-style Identity Address with a known protocol or email " -"contact." -msgstr "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen." +#: include/event.php:482 +msgid "Sat" +msgstr "Sa" -#: include/follow.php:139 -msgid "Use mailto: in front of address to force email check." -msgstr "Verwende mailto: vor der Email Adresse, um eine Überprüfung der E-Mail-Adresse zu erzwingen." +#: include/event.php:484 include/text.php:1198 mod/settings.php:981 +msgid "Sunday" +msgstr "Sonntag" -#: include/follow.php:145 -msgid "" -"The profile address specified belongs to a network which has been disabled " -"on this site." -msgstr "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde." +#: include/event.php:485 include/text.php:1198 mod/settings.php:981 +msgid "Monday" +msgstr "Montag" -#: include/follow.php:150 -msgid "" -"Limited profile. This person will be unable to receive direct/personal " -"notifications from you." -msgstr "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von Dir erhalten können." +#: include/event.php:486 include/text.php:1198 +msgid "Tuesday" +msgstr "Dienstag" -#: include/follow.php:251 -msgid "Unable to retrieve contact information." -msgstr "Konnte die Kontaktinformationen nicht empfangen." +#: include/event.php:487 include/text.php:1198 +msgid "Wednesday" +msgstr "Mittwoch" -#: include/group.php:25 -msgid "" -"A deleted group with this name was revived. Existing item permissions " -"may apply to this group and any future members. If this is " -"not what you intended, please create another group with a different name." -msgstr "Eine gelöschte Gruppe mit diesem Namen wurde wiederbelebt. Bestehende Berechtigungseinstellungen könnten auf diese Gruppe oder zukünftige Mitglieder angewandt werden. Falls Du dies nicht möchtest, erstelle bitte eine andere Gruppe mit einem anderen Namen." +#: include/event.php:488 include/text.php:1198 +msgid "Thursday" +msgstr "Donnerstag" -#: include/group.php:210 -msgid "Default privacy group for new contacts" -msgstr "Voreingestellte Gruppe für neue Kontakte" +#: include/event.php:489 include/text.php:1198 +msgid "Friday" +msgstr "Freitag" -#: include/group.php:243 -msgid "Everybody" -msgstr "Alle Kontakte" +#: include/event.php:490 include/text.php:1198 +msgid "Saturday" +msgstr "Samstag" -#: include/group.php:266 -msgid "edit" -msgstr "bearbeiten" +#: include/event.php:492 +msgid "Jan" +msgstr "Jan" -#: include/group.php:287 mod/newmember.php:61 -msgid "Groups" -msgstr "Gruppen" +#: include/event.php:493 +msgid "Feb" +msgstr "Feb" -#: include/group.php:289 -msgid "Edit groups" -msgstr "Gruppen bearbeiten" +#: include/event.php:494 +msgid "Mar" +msgstr "März" -#: include/group.php:291 -msgid "Edit group" -msgstr "Gruppe bearbeiten" +#: include/event.php:495 +msgid "Apr" +msgstr "Apr" -#: include/group.php:292 -msgid "Create a new group" -msgstr "Neue Gruppe erstellen" +#: include/event.php:496 include/event.php:509 include/text.php:1202 +msgid "May" +msgstr "Mai" -#: include/group.php:293 mod/group.php:98 mod/group.php:188 -msgid "Group Name: " -msgstr "Gruppenname:" +#: include/event.php:497 +msgid "Jun" +msgstr "Jun" -#: include/group.php:295 -msgid "Contacts not in any group" -msgstr "Kontakte in keiner Gruppe" +#: include/event.php:498 +msgid "Jul" +msgstr "Juli" -#: include/group.php:297 mod/network.php:200 -msgid "add" -msgstr "hinzufügen" +#: include/event.php:499 +msgid "Aug" +msgstr "Aug" -#: include/like.php:164 include/conversation.php:130 -#: include/conversation.php:266 include/text.php:1806 mod/subthread.php:88 -#: mod/tagger.php:62 -msgid "photo" -msgstr "Foto" +#: include/event.php:500 +msgid "Sept" +msgstr "Sep" -#: include/like.php:164 include/conversation.php:125 -#: include/conversation.php:134 include/conversation.php:261 -#: include/conversation.php:270 include/diaspora.php:1530 mod/subthread.php:88 -#: mod/tagger.php:62 -msgid "status" -msgstr "Status" +#: include/event.php:501 +msgid "Oct" +msgstr "Okt" -#: include/like.php:166 include/conversation.php:122 -#: include/conversation.php:258 include/text.php:1804 -msgid "event" -msgstr "Event" +#: include/event.php:502 +msgid "Nov" +msgstr "Nov" -#: include/like.php:184 include/conversation.php:141 include/diaspora.php:1526 -#, php-format -msgid "%1$s likes %2$s's %3$s" -msgstr "%1$s mag %2$ss %3$s" +#: include/event.php:503 +msgid "Dec" +msgstr "Dez" -#: include/like.php:187 include/conversation.php:144 -#, php-format -msgid "%1$s doesn't like %2$s's %3$s" -msgstr "%1$s mag %2$ss %3$s nicht" +#: include/event.php:505 include/text.php:1202 +msgid "January" +msgstr "Januar" -#: include/like.php:190 -#, php-format -msgid "%1$s is attending %2$s's %3$s" -msgstr "%1$s nimmt an %2$ss %3$s teil." +#: include/event.php:506 include/text.php:1202 +msgid "February" +msgstr "Februar" -#: include/like.php:193 -#, php-format -msgid "%1$s is not attending %2$s's %3$s" -msgstr "%1$s nimmt nicht an %2$ss %3$s teil." +#: include/event.php:507 include/text.php:1202 +msgid "March" +msgstr "März" -#: include/like.php:196 -#, php-format -msgid "%1$s may attend %2$s's %3$s" -msgstr "%1$s nimmt eventuell an %2$ss %3$s teil." +#: include/event.php:508 include/text.php:1202 +msgid "April" +msgstr "April" -#: include/message.php:15 include/message.php:169 -msgid "[no subject]" -msgstr "[kein Betreff]" +#: include/event.php:510 include/text.php:1202 +msgid "June" +msgstr "Juni" -#: include/nav.php:35 mod/navigation.php:19 -msgid "Nothing new here" -msgstr "Keine Neuigkeiten" +#: include/event.php:511 include/text.php:1202 +msgid "July" +msgstr "Juli" -#: include/nav.php:39 mod/navigation.php:23 -msgid "Clear notifications" -msgstr "Bereinige Benachrichtigungen" +#: include/event.php:512 include/text.php:1202 +msgid "August" +msgstr "August" -#: include/nav.php:40 include/text.php:1017 -msgid "@name, !forum, #tags, content" -msgstr "@name, !forum, #tags, content" +#: include/event.php:513 include/text.php:1202 +msgid "September" +msgstr "September" -#: include/nav.php:78 view/theme/frio/theme.php:243 boot.php:1833 -msgid "Logout" -msgstr "Abmelden" +#: include/event.php:514 include/text.php:1202 +msgid "October" +msgstr "Oktober" -#: include/nav.php:78 view/theme/frio/theme.php:243 -msgid "End this session" -msgstr "Diese Sitzung beenden" +#: include/event.php:515 include/text.php:1202 +msgid "November" +msgstr "November" -#: include/nav.php:81 include/identity.php:766 mod/contacts.php:645 -#: mod/contacts.php:841 view/theme/frio/theme.php:246 -msgid "Status" -msgstr "Status" +#: include/event.php:516 include/text.php:1202 +msgid "December" +msgstr "Dezember" -#: include/nav.php:81 include/nav.php:161 view/theme/frio/theme.php:246 -msgid "Your posts and conversations" -msgstr "Deine Beiträge und Unterhaltungen" +#: include/event.php:518 mod/cal.php:278 mod/events.php:383 +msgid "today" +msgstr "Heute" -#: include/nav.php:82 include/identity.php:617 include/identity.php:741 -#: include/identity.php:774 mod/newmember.php:32 mod/profperm.php:105 -#: mod/contacts.php:647 mod/contacts.php:849 view/theme/frio/theme.php:247 -msgid "Profile" -msgstr "Profil" +#: include/event.php:523 +msgid "No events to display" +msgstr "Keine Veranstaltung zum Anzeigen" -#: include/nav.php:82 view/theme/frio/theme.php:247 -msgid "Your profile page" -msgstr "Deine Profilseite" +#: include/event.php:636 +msgid "l, F j" +msgstr "l, F j" -#: include/nav.php:83 include/identity.php:782 mod/fbrowser.php:31 -#: view/theme/frio/theme.php:248 -msgid "Photos" -msgstr "Bilder" +#: include/event.php:658 +msgid "Edit event" +msgstr "Veranstaltung bearbeiten" -#: include/nav.php:83 view/theme/frio/theme.php:248 -msgid "Your photos" -msgstr "Deine Fotos" +#: include/event.php:659 +msgid "Delete event" +msgstr "Veranstaltung löschen" -#: include/nav.php:84 include/identity.php:790 include/identity.php:793 -#: view/theme/frio/theme.php:249 -msgid "Videos" -msgstr "Videos" +#: include/event.php:685 include/text.php:1600 include/text.php:1607 +msgid "link to source" +msgstr "Link zum Originalbeitrag" -#: include/nav.php:84 view/theme/frio/theme.php:249 -msgid "Your videos" -msgstr "Deine Videos" +#: include/event.php:939 +msgid "Export" +msgstr "Exportieren" -#: include/nav.php:85 include/nav.php:149 include/identity.php:802 -#: include/identity.php:813 mod/cal.php:270 mod/events.php:386 -#: view/theme/frio/theme.php:250 view/theme/frio/theme.php:254 -msgid "Events" -msgstr "Veranstaltungen" +#: include/event.php:940 +msgid "Export calendar as ical" +msgstr "Kalender als ical exportieren" -#: include/nav.php:85 view/theme/frio/theme.php:250 -msgid "Your events" -msgstr "Deine Ereignisse" - -#: include/nav.php:86 -msgid "Personal notes" -msgstr "Persönliche Notizen" - -#: include/nav.php:86 -msgid "Your personal notes" -msgstr "Deine persönlichen Notizen" - -#: include/nav.php:95 mod/bookmarklet.php:12 boot.php:1834 -msgid "Login" -msgstr "Anmeldung" - -#: include/nav.php:95 -msgid "Sign in" -msgstr "Anmelden" - -#: include/nav.php:105 -msgid "Home Page" -msgstr "Homepage" - -#: include/nav.php:109 mod/register.php:289 boot.php:1809 -msgid "Register" -msgstr "Registrieren" - -#: include/nav.php:109 -msgid "Create an account" -msgstr "Nutzerkonto erstellen" - -#: include/nav.php:115 mod/help.php:47 view/theme/vier/theme.php:293 -msgid "Help" -msgstr "Hilfe" - -#: include/nav.php:115 -msgid "Help and documentation" -msgstr "Hilfe und Dokumentation" - -#: include/nav.php:119 -msgid "Apps" -msgstr "Apps" - -#: include/nav.php:119 -msgid "Addon applications, utilities, games" -msgstr "Addon Anwendungen, Dienstprogramme, Spiele" - -#: include/nav.php:123 include/text.php:1014 mod/search.php:149 -msgid "Search" -msgstr "Suche" - -#: include/nav.php:123 -msgid "Search site content" -msgstr "Inhalt der Seite durchsuchen" - -#: include/nav.php:126 include/text.php:1022 -msgid "Full Text" -msgstr "Volltext" - -#: include/nav.php:127 include/text.php:1023 -msgid "Tags" -msgstr "Tags" - -#: include/nav.php:128 include/nav.php:192 include/identity.php:835 -#: include/identity.php:838 include/text.php:1024 mod/contacts.php:800 -#: mod/contacts.php:861 mod/viewcontacts.php:121 view/theme/frio/theme.php:257 -msgid "Contacts" -msgstr "Kontakte" - -#: include/nav.php:143 include/nav.php:145 mod/community.php:36 -msgid "Community" -msgstr "Gemeinschaft" - -#: include/nav.php:143 -msgid "Conversations on this site" -msgstr "Unterhaltungen auf dieser Seite" - -#: include/nav.php:145 -msgid "Conversations on the network" -msgstr "Unterhaltungen im Netzwerk" - -#: include/nav.php:149 include/identity.php:805 include/identity.php:816 -#: view/theme/frio/theme.php:254 -msgid "Events and Calendar" -msgstr "Ereignisse und Kalender" - -#: include/nav.php:152 -msgid "Directory" -msgstr "Verzeichnis" - -#: include/nav.php:152 -msgid "People directory" -msgstr "Nutzerverzeichnis" - -#: include/nav.php:154 -msgid "Information" -msgstr "Information" - -#: include/nav.php:154 -msgid "Information about this friendica instance" -msgstr "Informationen zu dieser Friendica Instanz" - -#: include/nav.php:158 view/theme/frio/theme.php:253 -msgid "Conversations from your friends" -msgstr "Unterhaltungen Deiner Kontakte" - -#: include/nav.php:159 -msgid "Network Reset" -msgstr "Netzwerk zurücksetzen" - -#: include/nav.php:159 -msgid "Load Network page with no filters" -msgstr "Netzwerk-Seite ohne Filter laden" - -#: include/nav.php:166 -msgid "Friend Requests" -msgstr "Kontaktanfragen" - -#: include/nav.php:169 mod/notifications.php:96 -msgid "Notifications" -msgstr "Benachrichtigungen" - -#: include/nav.php:170 -msgid "See all notifications" -msgstr "Alle Benachrichtigungen anzeigen" - -#: include/nav.php:171 mod/settings.php:906 -msgid "Mark as seen" -msgstr "Als gelesen markieren" - -#: include/nav.php:171 -msgid "Mark all system notifications seen" -msgstr "Markiere alle Systembenachrichtigungen als gelesen" - -#: include/nav.php:175 mod/message.php:179 view/theme/frio/theme.php:255 -msgid "Messages" -msgstr "Nachrichten" - -#: include/nav.php:175 view/theme/frio/theme.php:255 -msgid "Private mail" -msgstr "Private E-Mail" - -#: include/nav.php:176 -msgid "Inbox" -msgstr "Eingang" - -#: include/nav.php:177 -msgid "Outbox" -msgstr "Ausgang" - -#: include/nav.php:178 mod/message.php:16 -msgid "New Message" -msgstr "Neue Nachricht" - -#: include/nav.php:181 -msgid "Manage" -msgstr "Verwalten" - -#: include/nav.php:181 -msgid "Manage other pages" -msgstr "Andere Seiten verwalten" - -#: include/nav.php:184 mod/settings.php:81 -msgid "Delegations" -msgstr "Delegationen" - -#: include/nav.php:184 mod/delegate.php:130 -msgid "Delegate Page Management" -msgstr "Delegiere das Management für die Seite" - -#: include/nav.php:186 mod/newmember.php:22 mod/settings.php:111 -#: mod/admin.php:1545 mod/admin.php:1815 view/theme/frio/theme.php:256 -msgid "Settings" -msgstr "Einstellungen" - -#: include/nav.php:186 view/theme/frio/theme.php:256 -msgid "Account settings" -msgstr "Kontoeinstellungen" - -#: include/nav.php:189 include/identity.php:285 -msgid "Profiles" -msgstr "Profile" - -#: include/nav.php:189 -msgid "Manage/Edit Profiles" -msgstr "Profile Verwalten/Editieren" - -#: include/nav.php:192 view/theme/frio/theme.php:257 -msgid "Manage/edit friends and contacts" -msgstr " Kontakte verwalten/editieren" - -#: include/nav.php:197 mod/admin.php:187 -msgid "Admin" -msgstr "Administration" - -#: include/nav.php:197 -msgid "Site setup and configuration" -msgstr "Einstellungen der Seite und Konfiguration" - -#: include/nav.php:200 -msgid "Navigation" -msgstr "Navigation" - -#: include/nav.php:200 -msgid "Site map" -msgstr "Sitemap" - -#: include/oembed.php:266 -msgid "Embedded content" -msgstr "Eingebetteter Inhalt" - -#: include/oembed.php:274 -msgid "Embedding disabled" -msgstr "Einbettungen deaktiviert" - -#: include/ostatus.php:1832 -#, php-format -msgid "%s is now following %s." -msgstr "%s folgt nun %s" - -#: include/ostatus.php:1833 -msgid "following" -msgstr "folgen" - -#: include/ostatus.php:1836 -#, php-format -msgid "%s stopped following %s." -msgstr "%s hat aufgehört %s zu folgen" - -#: include/ostatus.php:1837 -msgid "stopped following" -msgstr "wird nicht mehr gefolgt" - -#: include/plugin.php:530 include/plugin.php:532 -msgid "Click here to upgrade." -msgstr "Zum Upgraden hier klicken." - -#: include/plugin.php:538 -msgid "This action exceeds the limits set by your subscription plan." -msgstr "Diese Aktion überschreitet die Obergrenze Deines Abonnements." - -#: include/plugin.php:543 -msgid "This action is not available under your subscription plan." -msgstr "Diese Aktion ist in Deinem Abonnement nicht verfügbar." - -#: include/security.php:22 -msgid "Welcome " -msgstr "Willkommen " - -#: include/security.php:23 -msgid "Please upload a profile photo." -msgstr "Bitte lade ein Profilbild hoch." - -#: include/security.php:26 -msgid "Welcome back " -msgstr "Willkommen zurück " - -#: include/security.php:375 -msgid "" -"The form security token was not correct. This probably happened because the " -"form has been opened for too long (>3 hours) before submitting it." -msgstr "Das Sicherheitsmerkmal war nicht korrekt. Das passiert meistens wenn das Formular vor dem Absenden zu lange geöffnet war (länger als 3 Stunden)." - -#: include/uimport.php:94 -msgid "Error decoding account file" -msgstr "Fehler beim Verarbeiten der Account Datei" - -#: include/uimport.php:100 -msgid "Error! No version data in file! This is not a Friendica account file?" -msgstr "Fehler! Keine Versionsdaten in der Datei! Ist das wirklich eine Friendica Account Datei?" - -#: include/uimport.php:116 include/uimport.php:127 -msgid "Error! Cannot check nickname" -msgstr "Fehler! Konnte den Nickname nicht überprüfen." - -#: include/uimport.php:120 include/uimport.php:131 -#, php-format -msgid "User '%s' already exists on this server!" -msgstr "Nutzer '%s' existiert bereits auf diesem Server!" - -#: include/uimport.php:153 -msgid "User creation error" -msgstr "Fehler beim Anlegen des Nutzeraccounts aufgetreten" - -#: include/uimport.php:173 -msgid "User profile creation error" -msgstr "Fehler beim Anlegen des Nutzerkontos" - -#: include/uimport.php:222 -#, php-format -msgid "%d contact not imported" -msgid_plural "%d contacts not imported" -msgstr[0] "%d Kontakt nicht importiert" -msgstr[1] "%d Kontakte nicht importiert" - -#: include/uimport.php:292 -msgid "Done. You can now login with your username and password" -msgstr "Erledigt. Du kannst Dich jetzt mit Deinem Nutzernamen und Passwort anmelden" - -#: include/user.php:39 mod/settings.php:375 -msgid "Passwords do not match. Password unchanged." -msgstr "Die Passwörter stimmen nicht überein. Das Passwort bleibt unverändert." - -#: include/user.php:48 -msgid "An invitation is required." -msgstr "Du benötigst eine Einladung." - -#: include/user.php:53 -msgid "Invitation could not be verified." -msgstr "Die Einladung konnte nicht überprüft werden." - -#: include/user.php:61 -msgid "Invalid OpenID url" -msgstr "Ungültige OpenID URL" - -#: include/user.php:82 -msgid "Please enter the required information." -msgstr "Bitte trage die erforderlichen Informationen ein." - -#: include/user.php:96 -msgid "Please use a shorter name." -msgstr "Bitte verwende einen kürzeren Namen." - -#: include/user.php:98 -msgid "Name too short." -msgstr "Der Name ist zu kurz." - -#: include/user.php:113 -msgid "That doesn't appear to be your full (First Last) name." -msgstr "Das scheint nicht Dein kompletter Name (Vor- und Nachname) zu sein." - -#: include/user.php:118 -msgid "Your email domain is not among those allowed on this site." -msgstr "Die Domain Deiner E-Mail Adresse ist auf dieser Seite nicht erlaubt." - -#: include/user.php:121 -msgid "Not a valid email address." -msgstr "Keine gültige E-Mail-Adresse." - -#: include/user.php:134 -msgid "Cannot use that email." -msgstr "Konnte diese E-Mail-Adresse nicht verwenden." - -#: include/user.php:140 -msgid "Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"." -msgstr "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\" und \"_\") bestehen." - -#: include/user.php:147 include/user.php:245 -msgid "Nickname is already registered. Please choose another." -msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen." - -#: include/user.php:157 -msgid "" -"Nickname was once registered here and may not be re-used. Please choose " -"another." -msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen." - -#: include/user.php:173 -msgid "SERIOUS ERROR: Generation of security keys failed." -msgstr "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden." - -#: include/user.php:231 -msgid "An error occurred during registration. Please try again." -msgstr "Während der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal." - -#: include/user.php:256 view/theme/duepuntozero/config.php:43 -#: view/theme/clean/config.php:60 -msgid "default" -msgstr "Standard" - -#: include/user.php:266 -msgid "An error occurred creating your default profile. Please try again." -msgstr "Bei der Erstellung des Standardprofils ist ein Fehler aufgetreten. Bitte versuche es noch einmal." - -#: include/user.php:326 include/user.php:334 include/user.php:342 -#: mod/profile_photo.php:74 mod/profile_photo.php:82 mod/profile_photo.php:90 -#: mod/profile_photo.php:215 mod/profile_photo.php:310 -#: mod/profile_photo.php:320 mod/photos.php:68 mod/photos.php:182 -#: mod/photos.php:768 mod/photos.php:1231 mod/photos.php:1252 -#: mod/photos.php:1839 -msgid "Profile Photos" -msgstr "Profilbilder" - -#: include/user.php:417 -#, php-format -msgid "" -"\n" -"\t\tDear %1$s,\n" -"\t\t\tThank you for registering at %2$s. Your account is pending for approval by the administrator.\n" -"\t" -msgstr "\nHallo %1$s,\n\ndanke für Deine Registrierung auf %2$s. Dein Account wurde muss noch vom Admin des Knotens geprüft werden." - -#: include/user.php:427 -#, php-format -msgid "Registration at %s" -msgstr "Registrierung als %s" - -#: include/user.php:437 -#, php-format -msgid "" -"\n" -"\t\tDear %1$s,\n" -"\t\t\tThank you for registering at %2$s. Your account has been created.\n" -"\t" -msgstr "\nHallo %1$s,\n\ndanke für Deine Registrierung auf %2$s. Dein Account wurde eingerichtet." - -#: include/user.php:441 -#, php-format -msgid "" -"\n" -"\t\tThe login details are as follows:\n" -"\t\t\tSite Location:\t%3$s\n" -"\t\t\tLogin Name:\t%1$s\n" -"\t\t\tPassword:\t%5$s\n" -"\n" -"\t\tYou may change your password from your account \"Settings\" page after logging\n" -"\t\tin.\n" -"\n" -"\t\tPlease take a few moments to review the other account settings on that page.\n" -"\n" -"\t\tYou may also wish to add some basic information to your default profile\n" -"\t\t(on the \"Profiles\" page) so that other people can easily find you.\n" -"\n" -"\t\tWe recommend setting your full name, adding a profile photo,\n" -"\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n" -"\t\tperhaps what country you live in; if you do not wish to be more specific\n" -"\t\tthan that.\n" -"\n" -"\t\tWe fully respect your right to privacy, and none of these items are necessary.\n" -"\t\tIf you are new and do not know anybody here, they may help\n" -"\t\tyou to make some new and interesting friends.\n" -"\n" -"\n" -"\t\tThank you and welcome to %2$s." -msgstr "\nDie Anmelde-Details sind die folgenden:\n\tAdresse der Seite:\t%3$s\n\tBenutzernamename:\t%1$s\n\tPasswort:\t%5$s\n\nDu kannst Dein Passwort unter \"Einstellungen\" ändern, sobald Du Dich\nangemeldet hast.\n\nBitte nimm Dir ein paar Minuten um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst Du ja auch einige Informationen über Dich in Deinem\nProfil veröffentlichen, damit andere Leute Dich einfacher finden können.\nBearbeite hierfür einfach Dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen Dir, Deinen kompletten Namen anzugeben und ein zu Dir\npassendes Profilbild zu wählen, damit Dich alte Bekannte wieder finden.\nAußerdem ist es nützlich, wenn Du auf Deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die Deine Interessen teilen.\n\nWir respektieren Deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn Du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nDanke für Deine Aufmerksamkeit und willkommen auf %2$s." - -#: include/user.php:473 mod/admin.php:1234 -#, php-format -msgid "Registration details for %s" -msgstr "Details der Registration von %s" - -#: include/acl_selectors.php:341 -msgid "Post to Email" -msgstr "An E-Mail senden" - -#: include/acl_selectors.php:346 -#, php-format -msgid "Connectors disabled, since \"%s\" is enabled." -msgstr "Konnektoren sind nicht verfügbar, da \"%s\" aktiv ist." - -#: include/acl_selectors.php:347 mod/settings.php:1188 -msgid "Hide your profile details from unknown viewers?" -msgstr "Profil-Details vor unbekannten Betrachtern verbergen?" - -#: include/acl_selectors.php:352 -msgid "Visible to everybody" -msgstr "Für jeden sichtbar" - -#: include/acl_selectors.php:353 view/theme/vier/config.php:108 -msgid "show" -msgstr "zeigen" - -#: include/acl_selectors.php:354 view/theme/vier/config.php:108 -msgid "don't show" -msgstr "nicht zeigen" - -#: include/acl_selectors.php:360 mod/editpost.php:123 -msgid "CC: email addresses" -msgstr "Cc: E-Mail-Addressen" - -#: include/acl_selectors.php:361 mod/editpost.php:130 -msgid "Example: bob@example.com, mary@example.com" -msgstr "Z.B.: bob@example.com, mary@example.com" - -#: include/acl_selectors.php:363 mod/events.php:516 mod/photos.php:1176 -#: mod/photos.php:1558 -msgid "Permissions" -msgstr "Berechtigungen" - -#: include/acl_selectors.php:364 -msgid "Close" -msgstr "Schließen" - -#: include/conversation.php:147 -#, php-format -msgid "%1$s attends %2$s's %3$s" -msgstr "%1$s nimmt an %2$ss %3$s teil." - -#: include/conversation.php:150 -#, php-format -msgid "%1$s doesn't attend %2$s's %3$s" -msgstr "%1$s nimmt nicht an %2$ss %3$s teil." - -#: include/conversation.php:153 -#, php-format -msgid "%1$s attends maybe %2$s's %3$s" -msgstr "%1$s nimmt eventuell an %2$ss %3$s teil." - -#: include/conversation.php:185 mod/dfrn_confirm.php:478 -#, php-format -msgid "%1$s is now friends with %2$s" -msgstr "%1$s ist nun mit %2$s befreundet" - -#: include/conversation.php:219 -#, php-format -msgid "%1$s poked %2$s" -msgstr "%1$s stupste %2$s" - -#: include/conversation.php:239 mod/mood.php:63 -#, php-format -msgid "%1$s is currently %2$s" -msgstr "%1$s ist momentan %2$s" - -#: include/conversation.php:278 mod/tagger.php:95 -#, php-format -msgid "%1$s tagged %2$s's %3$s with %4$s" -msgstr "%1$s hat %2$ss %3$s mit %4$s getaggt" - -#: include/conversation.php:303 -msgid "post/item" -msgstr "Nachricht/Beitrag" - -#: include/conversation.php:304 -#, php-format -msgid "%1$s marked %2$s's %3$s as favorite" -msgstr "%1$s hat %2$s\\s %3$s als Favorit markiert" - -#: include/conversation.php:587 mod/content.php:372 mod/photos.php:1629 -#: mod/profiles.php:346 -msgid "Likes" -msgstr "Likes" - -#: include/conversation.php:587 mod/content.php:372 mod/photos.php:1629 -#: mod/profiles.php:350 -msgid "Dislikes" -msgstr "Dislikes" - -#: include/conversation.php:588 include/conversation.php:1472 -#: mod/content.php:373 mod/photos.php:1630 -msgid "Attending" -msgid_plural "Attending" -msgstr[0] "Teilnehmend" -msgstr[1] "Teilnehmend" - -#: include/conversation.php:588 mod/content.php:373 mod/photos.php:1630 -msgid "Not attending" -msgstr "Nicht teilnehmend" - -#: include/conversation.php:588 mod/content.php:373 mod/photos.php:1630 -msgid "Might attend" -msgstr "Eventuell teilnehmend" - -#: include/conversation.php:710 mod/content.php:453 mod/content.php:759 -#: mod/photos.php:1703 object/Item.php:137 -msgid "Select" -msgstr "Auswählen" - -#: include/conversation.php:711 mod/content.php:454 mod/content.php:760 -#: mod/group.php:181 mod/settings.php:744 mod/contacts.php:816 -#: mod/contacts.php:1015 mod/photos.php:1704 mod/admin.php:1435 -#: object/Item.php:138 -msgid "Delete" -msgstr "Löschen" - -#: include/conversation.php:755 mod/content.php:487 mod/content.php:915 -#: mod/content.php:916 object/Item.php:382 object/Item.php:383 -#, php-format -msgid "View %s's profile @ %s" -msgstr "Das Profil von %s auf %s betrachten." - -#: include/conversation.php:767 object/Item.php:370 -msgid "Categories:" -msgstr "Kategorien:" - -#: include/conversation.php:768 object/Item.php:371 -msgid "Filed under:" -msgstr "Abgelegt unter:" - -#: include/conversation.php:775 mod/content.php:497 mod/content.php:928 -#: object/Item.php:396 -#, php-format -msgid "%s from %s" -msgstr "%s von %s" - -#: include/conversation.php:791 mod/content.php:513 -msgid "View in context" -msgstr "Im Zusammenhang betrachten" - -#: include/conversation.php:793 include/conversation.php:1255 -#: mod/content.php:515 mod/content.php:953 mod/editpost.php:114 -#: mod/message.php:337 mod/message.php:522 mod/wallmessage.php:140 -#: mod/photos.php:1592 object/Item.php:421 -msgid "Please wait" -msgstr "Bitte warten" - -#: include/conversation.php:872 -msgid "remove" -msgstr "löschen" - -#: include/conversation.php:876 -msgid "Delete Selected Items" -msgstr "Lösche die markierten Beiträge" - -#: include/conversation.php:968 -msgid "Follow Thread" -msgstr "Folge der Unterhaltung" - -#: include/conversation.php:969 include/Contact.php:445 -msgid "View Status" -msgstr "Pinnwand anschauen" - -#: include/conversation.php:970 include/conversation.php:986 -#: include/Contact.php:388 include/Contact.php:401 include/Contact.php:446 -#: mod/allfriends.php:68 mod/directory.php:157 mod/dirfind.php:209 -#: mod/match.php:73 mod/suggest.php:82 -msgid "View Profile" -msgstr "Profil anschauen" - -#: include/conversation.php:971 include/Contact.php:447 -msgid "View Photos" -msgstr "Bilder anschauen" - -#: include/conversation.php:972 include/Contact.php:448 -msgid "Network Posts" -msgstr "Netzwerkbeiträge" - -#: include/conversation.php:973 include/Contact.php:449 -msgid "View Contact" -msgstr "Kontakt anzeigen" - -#: include/conversation.php:974 include/Contact.php:451 -msgid "Send PM" -msgstr "Private Nachricht senden" - -#: include/conversation.php:978 include/Contact.php:452 -msgid "Poke" -msgstr "Anstupsen" - -#: include/conversation.php:983 include/contact_widgets.php:32 -#: include/Contact.php:402 mod/allfriends.php:69 mod/dirfind.php:210 -#: mod/follow.php:106 mod/match.php:74 mod/suggest.php:83 mod/contacts.php:610 -msgid "Connect/Follow" -msgstr "Verbinden/Folgen" - -#: include/conversation.php:1099 -#, php-format -msgid "%s likes this." -msgstr "%s mag das." - -#: include/conversation.php:1102 -#, php-format -msgid "%s doesn't like this." -msgstr "%s mag das nicht." - -#: include/conversation.php:1105 -#, php-format -msgid "%s attends." -msgstr "%s nimmt teil." - -#: include/conversation.php:1108 -#, php-format -msgid "%s doesn't attend." -msgstr "%s nimmt nicht teil." - -#: include/conversation.php:1111 -#, php-format -msgid "%s attends maybe." -msgstr "%s nimmt eventuell teil." - -#: include/conversation.php:1121 -msgid "and" -msgstr "und" - -#: include/conversation.php:1127 -#, php-format -msgid ", and %d other people" -msgstr " und %d andere" - -#: include/conversation.php:1136 -#, php-format -msgid "%2$d people like this" -msgstr "%2$d Personen mögen das" - -#: include/conversation.php:1137 -#, php-format -msgid "%s like this." -msgstr "%s mögen das." - -#: include/conversation.php:1140 -#, php-format -msgid "%2$d people don't like this" -msgstr "%2$d Personen mögen das nicht" - -#: include/conversation.php:1141 -#, php-format -msgid "%s don't like this." -msgstr "%s mögen dies nicht." - -#: include/conversation.php:1144 -#, php-format -msgid "%2$d people attend" -msgstr "%2$d Personen nehmen teil" - -#: include/conversation.php:1145 -#, php-format -msgid "%s attend." -msgstr "%s nehmen teil." - -#: include/conversation.php:1148 -#, php-format -msgid "%2$d people don't attend" -msgstr "%2$d Personen nehmen nicht teil" - -#: include/conversation.php:1149 -#, php-format -msgid "%s don't attend." -msgstr "%s nehmen nicht teil." - -#: include/conversation.php:1152 -#, php-format -msgid "%2$d people attend maybe" -msgstr "%2$d Personen nehmen eventuell teil" - -#: include/conversation.php:1153 -#, php-format -msgid "%s anttend maybe." -msgstr "%s nehmen vielleicht teil." - -#: include/conversation.php:1183 include/conversation.php:1199 -msgid "Visible to everybody" -msgstr "Für jedermann sichtbar" - -#: include/conversation.php:1184 include/conversation.php:1200 -#: mod/message.php:271 mod/message.php:278 mod/message.php:418 -#: mod/message.php:425 mod/wallmessage.php:114 mod/wallmessage.php:121 -msgid "Please enter a link URL:" -msgstr "Bitte gib die URL des Links ein:" - -#: include/conversation.php:1185 include/conversation.php:1201 -msgid "Please enter a video link/URL:" -msgstr "Bitte Link/URL zum Video einfügen:" - -#: include/conversation.php:1186 include/conversation.php:1202 -msgid "Please enter an audio link/URL:" -msgstr "Bitte Link/URL zum Audio einfügen:" - -#: include/conversation.php:1187 include/conversation.php:1203 -msgid "Tag term:" -msgstr "Tag:" - -#: include/conversation.php:1188 include/conversation.php:1204 -#: mod/filer.php:30 -msgid "Save to Folder:" -msgstr "In diesem Ordner speichern:" - -#: include/conversation.php:1189 include/conversation.php:1205 -msgid "Where are you right now?" -msgstr "Wo hältst Du Dich jetzt gerade auf?" - -#: include/conversation.php:1190 -msgid "Delete item(s)?" -msgstr "Einträge löschen?" - -#: include/conversation.php:1236 -msgid "Share" -msgstr "Teilen" - -#: include/conversation.php:1237 mod/editpost.php:100 mod/message.php:335 -#: mod/message.php:519 mod/wallmessage.php:138 -msgid "Upload photo" -msgstr "Foto hochladen" - -#: include/conversation.php:1238 mod/editpost.php:101 -msgid "upload photo" -msgstr "Bild hochladen" - -#: include/conversation.php:1239 mod/editpost.php:102 -msgid "Attach file" -msgstr "Datei anhängen" - -#: include/conversation.php:1240 mod/editpost.php:103 -msgid "attach file" -msgstr "Datei anhängen" - -#: include/conversation.php:1241 mod/editpost.php:104 mod/message.php:336 -#: mod/message.php:520 mod/wallmessage.php:139 -msgid "Insert web link" -msgstr "Einen Link einfügen" - -#: include/conversation.php:1242 mod/editpost.php:105 -msgid "web link" -msgstr "Weblink" - -#: include/conversation.php:1243 mod/editpost.php:106 -msgid "Insert video link" -msgstr "Video-Adresse einfügen" - -#: include/conversation.php:1244 mod/editpost.php:107 -msgid "video link" -msgstr "Video-Link" - -#: include/conversation.php:1245 mod/editpost.php:108 -msgid "Insert audio link" -msgstr "Audio-Adresse einfügen" - -#: include/conversation.php:1246 mod/editpost.php:109 -msgid "audio link" -msgstr "Audio-Link" - -#: include/conversation.php:1247 mod/editpost.php:110 -msgid "Set your location" -msgstr "Deinen Standort festlegen" - -#: include/conversation.php:1248 mod/editpost.php:111 -msgid "set location" -msgstr "Ort setzen" - -#: include/conversation.php:1249 mod/editpost.php:112 -msgid "Clear browser location" -msgstr "Browser-Standort leeren" - -#: include/conversation.php:1250 mod/editpost.php:113 -msgid "clear location" -msgstr "Ort löschen" - -#: include/conversation.php:1252 mod/editpost.php:127 -msgid "Set title" -msgstr "Titel setzen" - -#: include/conversation.php:1254 mod/editpost.php:129 -msgid "Categories (comma-separated list)" -msgstr "Kategorien (kommasepariert)" - -#: include/conversation.php:1256 mod/editpost.php:115 -msgid "Permission settings" -msgstr "Berechtigungseinstellungen" - -#: include/conversation.php:1257 mod/editpost.php:144 -msgid "permissions" -msgstr "Zugriffsrechte" - -#: include/conversation.php:1265 mod/editpost.php:124 -msgid "Public post" -msgstr "Öffentlicher Beitrag" - -#: include/conversation.php:1270 mod/content.php:737 mod/editpost.php:135 -#: mod/events.php:511 mod/photos.php:1613 mod/photos.php:1661 -#: mod/photos.php:1747 object/Item.php:741 -msgid "Preview" -msgstr "Vorschau" - -#: include/conversation.php:1274 include/items.php:1983 mod/follow.php:124 -#: mod/settings.php:682 mod/settings.php:708 mod/suggest.php:32 -#: mod/tagrm.php:11 mod/tagrm.php:96 mod/videos.php:132 mod/contacts.php:455 -#: mod/editpost.php:138 mod/fbrowser.php:100 mod/fbrowser.php:135 -#: mod/message.php:209 mod/photos.php:240 mod/photos.php:331 -#: mod/dfrn_request.php:889 -msgid "Cancel" -msgstr "Abbrechen" - -#: include/conversation.php:1280 -msgid "Post to Groups" -msgstr "Poste an Gruppe" - -#: include/conversation.php:1281 -msgid "Post to Contacts" -msgstr "Poste an Kontakte" - -#: include/conversation.php:1282 -msgid "Private post" -msgstr "Privater Beitrag" - -#: include/conversation.php:1287 include/identity.php:259 mod/editpost.php:142 -msgid "Message" -msgstr "Nachricht" - -#: include/conversation.php:1288 mod/editpost.php:143 -msgid "Browser" -msgstr "Browser" - -#: include/conversation.php:1444 -msgid "View all" -msgstr "Zeige alle" - -#: include/conversation.php:1466 -msgid "Like" -msgid_plural "Likes" -msgstr[0] "mag ich" -msgstr[1] "Mag ich" - -#: include/conversation.php:1469 -msgid "Dislike" -msgid_plural "Dislikes" -msgstr[0] "mag ich nicht" -msgstr[1] "Mag ich nicht" - -#: include/conversation.php:1475 -msgid "Not Attending" -msgid_plural "Not Attending" -msgstr[0] "Nicht teilnehmend " -msgstr[1] "Nicht teilnehmend" - -#: include/delivery.php:470 -msgid "(no subject)" -msgstr "(kein Betreff)" +#: include/event.php:941 +msgid "Export calendar as csv" +msgstr "Kalender als csv exportieren" #: include/features.php:65 msgid "General Features" @@ -1926,7 +2195,7 @@ msgstr "Netzwerk Filter" msgid "Enable widget to display Network posts only from selected network" msgstr "Widget zum filtern der Beiträge in Abhängigkeit des Netzwerks aus dem der Ersteller sendet aktivieren." -#: include/features.php:86 mod/network.php:199 mod/search.php:34 +#: include/features.php:86 mod/network.php:206 mod/search.php:34 msgid "Saved Searches" msgstr "Gespeicherte Suchen" @@ -1998,10 +2267,6 @@ msgstr "Beitragskategorien" msgid "Add categories to your posts" msgstr "Eigene Beiträge mit Kategorien versehen" -#: include/features.php:104 include/contact_widgets.php:150 -msgid "Saved Folders" -msgstr "Gespeicherte Ordner" - #: include/features.php:104 msgid "Ability to file posts under folders" msgstr "Beiträge in Ordnern speichern aktivieren" @@ -2038,545 +2303,112 @@ msgstr "Erweiterte Profil-Einstellungen" msgid "Show visitors public community forums at the Advanced Profile Page" msgstr "Zeige Besuchern öffentliche Gemeinschafts-Foren auf der Erweiterten Profil-Seite" -#: include/photos.php:57 include/photos.php:67 mod/fbrowser.php:40 -#: mod/fbrowser.php:61 mod/photos.php:182 mod/photos.php:1106 -#: mod/photos.php:1231 mod/photos.php:1252 mod/photos.php:1817 -#: mod/photos.php:1829 -msgid "Contact Photos" -msgstr "Kontaktbilder" - -#: include/datetime.php:58 include/datetime.php:60 mod/profiles.php:697 -msgid "Miscellaneous" -msgstr "Verschiedenes" - -#: include/datetime.php:184 include/identity.php:641 -msgid "Birthday:" -msgstr "Geburtstag:" - -#: include/datetime.php:186 mod/profiles.php:720 -msgid "Age: " -msgstr "Alter: " - -#: include/datetime.php:188 -msgid "YYYY-MM-DD or MM-DD" -msgstr "YYYY-MM-DD oder MM-DD" - -#: include/datetime.php:343 -msgid "never" -msgstr "nie" - -#: include/datetime.php:349 -msgid "less than a second ago" -msgstr "vor weniger als einer Sekunde" - -#: include/datetime.php:352 -msgid "year" -msgstr "Jahr" - -#: include/datetime.php:352 -msgid "years" -msgstr "Jahre" - -#: include/datetime.php:353 include/event.php:481 mod/cal.php:279 -#: mod/events.php:396 -msgid "month" -msgstr "Monat" - -#: include/datetime.php:353 -msgid "months" -msgstr "Monate" - -#: include/datetime.php:354 include/event.php:482 mod/cal.php:280 -#: mod/events.php:397 -msgid "week" -msgstr "Woche" - -#: include/datetime.php:354 -msgid "weeks" -msgstr "Wochen" - -#: include/datetime.php:355 include/event.php:483 mod/cal.php:281 -#: mod/events.php:398 -msgid "day" -msgstr "Tag" - -#: include/datetime.php:355 -msgid "days" -msgstr "Tage" - -#: include/datetime.php:356 -msgid "hour" -msgstr "Stunde" - -#: include/datetime.php:356 -msgid "hours" -msgstr "Stunden" - -#: include/datetime.php:357 -msgid "minute" -msgstr "Minute" - -#: include/datetime.php:357 -msgid "minutes" -msgstr "Minuten" - -#: include/datetime.php:358 -msgid "second" -msgstr "Sekunde" - -#: include/datetime.php:358 -msgid "seconds" -msgstr "Sekunden" - -#: include/datetime.php:367 -#, php-format -msgid "%1$d %2$s ago" -msgstr "%1$d %2$s her" - -#: include/datetime.php:585 -#, php-format -msgid "%s's birthday" -msgstr "%ss Geburtstag" - -#: include/datetime.php:586 include/dfrn.php:1122 -#, php-format -msgid "Happy Birthday %s" -msgstr "Herzlichen Glückwunsch %s" - -#: include/event.php:16 include/bb2diaspora.php:199 mod/localtime.php:12 -msgid "l F d, Y \\@ g:i A" -msgstr "l, d. F Y\\, H:i" - -#: include/event.php:33 include/event.php:51 include/event.php:488 -#: include/bb2diaspora.php:205 -msgid "Starts:" -msgstr "Beginnt:" - -#: include/event.php:36 include/event.php:57 include/event.php:489 -#: include/bb2diaspora.php:213 -msgid "Finishes:" -msgstr "Endet:" - -#: include/event.php:39 include/event.php:63 include/event.php:490 -#: include/bb2diaspora.php:221 include/identity.php:331 mod/directory.php:139 -#: mod/contacts.php:636 mod/events.php:501 mod/notifications.php:238 -msgid "Location:" -msgstr "Ort:" - -#: include/event.php:442 -msgid "Sun" -msgstr "So" - -#: include/event.php:443 -msgid "Mon" -msgstr "Mo" - -#: include/event.php:444 -msgid "Tue" -msgstr "Di" - -#: include/event.php:445 -msgid "Wed" -msgstr "Mi" - -#: include/event.php:446 -msgid "Thu" -msgstr "Do" - -#: include/event.php:447 -msgid "Fri" -msgstr "Fr" - -#: include/event.php:448 -msgid "Sat" -msgstr "Sa" - -#: include/event.php:449 include/text.php:1132 mod/settings.php:981 -msgid "Sunday" -msgstr "Sonntag" - -#: include/event.php:450 include/text.php:1132 mod/settings.php:981 -msgid "Monday" -msgstr "Montag" - -#: include/event.php:451 include/text.php:1132 -msgid "Tuesday" -msgstr "Dienstag" - -#: include/event.php:452 include/text.php:1132 -msgid "Wednesday" -msgstr "Mittwoch" - -#: include/event.php:453 include/text.php:1132 -msgid "Thursday" -msgstr "Donnerstag" - -#: include/event.php:454 include/text.php:1132 -msgid "Friday" -msgstr "Freitag" - -#: include/event.php:455 include/text.php:1132 -msgid "Saturday" -msgstr "Samstag" - -#: include/event.php:456 -msgid "Jan" -msgstr "Jan" - -#: include/event.php:457 -msgid "Feb" -msgstr "Feb" - -#: include/event.php:458 -msgid "Mar" -msgstr "März" - -#: include/event.php:459 -msgid "Apr" -msgstr "Apr" - -#: include/event.php:460 include/event.php:472 include/text.php:1136 -msgid "May" -msgstr "Mai" - -#: include/event.php:461 -msgid "Jun" -msgstr "Jun" - -#: include/event.php:462 -msgid "Jul" -msgstr "Juli" - -#: include/event.php:463 -msgid "Aug" -msgstr "Aug" - -#: include/event.php:464 -msgid "Sept" -msgstr "Sep" - -#: include/event.php:465 -msgid "Oct" -msgstr "Okt" - -#: include/event.php:466 -msgid "Nov" -msgstr "Nov" - -#: include/event.php:467 -msgid "Dec" -msgstr "Dez" - -#: include/event.php:468 include/text.php:1136 -msgid "January" -msgstr "Januar" - -#: include/event.php:469 include/text.php:1136 -msgid "February" -msgstr "Februar" - -#: include/event.php:470 include/text.php:1136 -msgid "March" -msgstr "März" - -#: include/event.php:471 include/text.php:1136 -msgid "April" -msgstr "April" - -#: include/event.php:473 include/text.php:1136 -msgid "June" -msgstr "Juni" - -#: include/event.php:474 include/text.php:1136 -msgid "July" -msgstr "Juli" - -#: include/event.php:475 include/text.php:1136 -msgid "August" -msgstr "August" - -#: include/event.php:476 include/text.php:1136 -msgid "September" -msgstr "September" - -#: include/event.php:477 include/text.php:1136 -msgid "October" -msgstr "Oktober" - -#: include/event.php:478 include/text.php:1136 -msgid "November" -msgstr "November" - -#: include/event.php:479 include/text.php:1136 -msgid "December" -msgstr "Dezember" - -#: include/event.php:480 mod/cal.php:278 mod/events.php:395 -msgid "today" -msgstr "Heute" - -#: include/event.php:484 -msgid "all-day" -msgstr "ganztägig" - -#: include/event.php:486 -msgid "No events to display" -msgstr "Keine Veranstaltung zum Anzeigen" - -#: include/event.php:596 -msgid "l, F j" -msgstr "l, F j" - -#: include/event.php:615 -msgid "Edit event" -msgstr "Veranstaltung bearbeiten" - -#: include/event.php:637 include/text.php:1534 include/text.php:1541 -msgid "link to source" -msgstr "Link zum Originalbeitrag" - -#: include/event.php:872 -msgid "Export" -msgstr "Exportieren" - -#: include/event.php:873 -msgid "Export calendar as ical" -msgstr "Kalender als ical exportieren" - -#: include/event.php:874 -msgid "Export calendar as csv" -msgstr "Kalender als csv exportieren" - -#: include/dfrn.php:1121 -#, php-format -msgid "%s\\'s birthday" -msgstr "%ss Geburtstag" - -#: include/contact_selectors.php:32 -msgid "Unknown | Not categorised" -msgstr "Unbekannt | Nicht kategorisiert" - -#: include/contact_selectors.php:33 -msgid "Block immediately" -msgstr "Sofort blockieren" - -#: include/contact_selectors.php:34 -msgid "Shady, spammer, self-marketer" -msgstr "Zwielichtig, Spammer, Selbstdarsteller" - -#: include/contact_selectors.php:35 -msgid "Known to me, but no opinion" -msgstr "Ist mir bekannt, hab aber keine Meinung" - -#: include/contact_selectors.php:36 -msgid "OK, probably harmless" -msgstr "OK, wahrscheinlich harmlos" - -#: include/contact_selectors.php:37 -msgid "Reputable, has my trust" -msgstr "Seriös, hat mein Vertrauen" - -#: include/contact_selectors.php:56 mod/admin.php:901 -msgid "Frequently" -msgstr "immer wieder" - -#: include/contact_selectors.php:57 mod/admin.php:902 -msgid "Hourly" -msgstr "Stündlich" - -#: include/contact_selectors.php:58 mod/admin.php:903 -msgid "Twice daily" -msgstr "Zweimal täglich" - -#: include/contact_selectors.php:59 mod/admin.php:904 -msgid "Daily" -msgstr "Täglich" - -#: include/contact_selectors.php:60 -msgid "Weekly" -msgstr "Wöchentlich" - -#: include/contact_selectors.php:61 -msgid "Monthly" -msgstr "Monatlich" - -#: include/contact_selectors.php:76 mod/dfrn_request.php:881 -msgid "Friendica" -msgstr "Friendica" - -#: include/contact_selectors.php:77 -msgid "OStatus" -msgstr "OStatus" - -#: include/contact_selectors.php:78 -msgid "RSS/Atom" -msgstr "RSS/Atom" - -#: include/contact_selectors.php:79 include/contact_selectors.php:86 -#: mod/admin.php:1417 mod/admin.php:1430 mod/admin.php:1443 mod/admin.php:1461 -msgid "Email" -msgstr "E-Mail" - -#: include/contact_selectors.php:80 mod/settings.php:848 -#: mod/dfrn_request.php:883 -msgid "Diaspora" -msgstr "Diaspora" - -#: include/contact_selectors.php:81 -msgid "Facebook" -msgstr "Facebook" - -#: include/contact_selectors.php:82 -msgid "Zot!" -msgstr "Zott" - -#: include/contact_selectors.php:83 -msgid "LinkedIn" -msgstr "LinkedIn" - -#: include/contact_selectors.php:84 -msgid "XMPP/IM" -msgstr "XMPP/Chat" - -#: include/contact_selectors.php:85 -msgid "MySpace" -msgstr "MySpace" - -#: include/contact_selectors.php:87 -msgid "Google+" -msgstr "Google+" - -#: include/contact_selectors.php:88 -msgid "pump.io" -msgstr "pump.io" - -#: include/contact_selectors.php:89 -msgid "Twitter" -msgstr "Twitter" - -#: include/contact_selectors.php:90 -msgid "Diaspora Connector" -msgstr "Diaspora" - -#: include/contact_selectors.php:91 -msgid "GNU Social" -msgstr "GNU Social" - -#: include/contact_selectors.php:92 -msgid "pnut" -msgstr "pnut" - -#: include/contact_selectors.php:93 -msgid "App.net" -msgstr "App.net" - -#: include/contact_selectors.php:104 -msgid "Hubzilla/Redmatrix" -msgstr "Hubzilla/Redmatrix" - -#: include/contact_widgets.php:6 -msgid "Add New Contact" -msgstr "Neuen Kontakt hinzufügen" - -#: include/contact_widgets.php:7 -msgid "Enter address or web location" -msgstr "Adresse oder Web-Link eingeben" - -#: include/contact_widgets.php:8 -msgid "Example: bob@example.com, http://example.com/barbara" -msgstr "Beispiel: bob@example.com, http://example.com/barbara" - -#: include/contact_widgets.php:10 include/identity.php:219 -#: mod/allfriends.php:85 mod/dirfind.php:207 mod/match.php:89 -#: mod/suggest.php:101 -msgid "Connect" -msgstr "Verbinden" - -#: include/contact_widgets.php:24 -#, php-format -msgid "%d invitation available" -msgid_plural "%d invitations available" -msgstr[0] "%d Einladung verfügbar" -msgstr[1] "%d Einladungen verfügbar" - -#: include/contact_widgets.php:30 -msgid "Find People" -msgstr "Leute finden" - -#: include/contact_widgets.php:31 -msgid "Enter name or interest" -msgstr "Name oder Interessen eingeben" - -#: include/contact_widgets.php:33 -msgid "Examples: Robert Morgenstein, Fishing" -msgstr "Beispiel: Robert Morgenstein, Angeln" - -#: include/contact_widgets.php:34 mod/directory.php:206 mod/contacts.php:806 -msgid "Find" -msgstr "Finde" - -#: include/contact_widgets.php:35 mod/suggest.php:114 -#: view/theme/vier/theme.php:198 -msgid "Friend Suggestions" -msgstr "Kontaktvorschläge" - -#: include/contact_widgets.php:36 view/theme/vier/theme.php:197 -msgid "Similar Interests" -msgstr "Ähnliche Interessen" - -#: include/contact_widgets.php:37 -msgid "Random Profile" -msgstr "Zufälliges Profil" - -#: include/contact_widgets.php:38 view/theme/vier/theme.php:199 -msgid "Invite Friends" -msgstr "Freunde einladen" - -#: include/contact_widgets.php:115 -msgid "Networks" -msgstr "Netzwerke" - -#: include/contact_widgets.php:118 -msgid "All Networks" -msgstr "Alle Netzwerke" - -#: include/contact_widgets.php:153 include/contact_widgets.php:187 -msgid "Everything" -msgstr "Alles" - -#: include/contact_widgets.php:184 -msgid "Categories" -msgstr "Kategorien" - -#: include/contact_widgets.php:248 -#, php-format -msgid "%d contact in common" -msgid_plural "%d contacts in common" -msgstr[0] "%d gemeinsamer Kontakt" -msgstr[1] "%d gemeinsame Kontakte" - -#: include/api.php:1021 -#, php-format -msgid "Daily posting limit of %d posts reached. The post was rejected." -msgstr "Das tägliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen." - -#: include/api.php:1041 -#, php-format -msgid "Weekly posting limit of %d posts reached. The post was rejected." -msgstr "Das wöchentliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen." - -#: include/api.php:1062 -#, php-format -msgid "Monthly posting limit of %d posts reached. The post was rejected." -msgstr "Das monatliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen." - -#: include/diaspora.php:2087 -msgid "Sharing notification from Diaspora network" -msgstr "Freigabe-Benachrichtigung von Diaspora" - -#: include/diaspora.php:3096 -msgid "Attachments:" -msgstr "Anhänge:" +#: include/follow.php:81 mod/dfrn_request.php:512 +msgid "Disallowed profile URL." +msgstr "Nicht erlaubte Profil-URL." + +#: include/follow.php:86 mod/dfrn_request.php:518 mod/friendica.php:114 +#: mod/admin.php:279 mod/admin.php:297 +msgid "Blocked domain" +msgstr "Blockierte Daimain" + +#: include/follow.php:91 +msgid "Connect URL missing." +msgstr "Connect-URL fehlt" + +#: include/follow.php:119 +msgid "" +"This site is not configured to allow communications with other networks." +msgstr "Diese Seite ist so konfiguriert, dass keine Kommunikation mit anderen Netzwerken erfolgen kann." + +#: include/follow.php:120 include/follow.php:134 +msgid "No compatible communication protocols or feeds were discovered." +msgstr "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden." + +#: include/follow.php:132 +msgid "The profile address specified does not provide adequate information." +msgstr "Die angegebene Profiladresse liefert unzureichende Informationen." + +#: include/follow.php:137 +msgid "An author or name was not found." +msgstr "Es wurde kein Autor oder Name gefunden." + +#: include/follow.php:140 +msgid "No browser URL could be matched to this address." +msgstr "Zu dieser Adresse konnte keine passende Browser URL gefunden werden." + +#: include/follow.php:143 +msgid "" +"Unable to match @-style Identity Address with a known protocol or email " +"contact." +msgstr "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen." + +#: include/follow.php:144 +msgid "Use mailto: in front of address to force email check." +msgstr "Verwende mailto: vor der Email Adresse, um eine Überprüfung der E-Mail-Adresse zu erzwingen." + +#: include/follow.php:150 +msgid "" +"The profile address specified belongs to a network which has been disabled " +"on this site." +msgstr "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde." + +#: include/follow.php:155 +msgid "" +"Limited profile. This person will be unable to receive direct/personal " +"notifications from you." +msgstr "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von Dir erhalten können." + +#: include/follow.php:256 +msgid "Unable to retrieve contact information." +msgstr "Konnte die Kontaktinformationen nicht empfangen." + +#: include/group.php:25 +msgid "" +"A deleted group with this name was revived. Existing item permissions " +"may apply to this group and any future members. If this is " +"not what you intended, please create another group with a different name." +msgstr "Eine gelöschte Gruppe mit diesem Namen wurde wiederbelebt. Bestehende Berechtigungseinstellungen könnten auf diese Gruppe oder zukünftige Mitglieder angewandt werden. Falls Du dies nicht möchtest, erstelle bitte eine andere Gruppe mit einem anderen Namen." + +#: include/group.php:210 +msgid "Default privacy group for new contacts" +msgstr "Voreingestellte Gruppe für neue Kontakte" + +#: include/group.php:243 +msgid "Everybody" +msgstr "Alle Kontakte" + +#: include/group.php:266 +msgid "edit" +msgstr "bearbeiten" + +#: include/group.php:287 mod/newmember.php:61 +msgid "Groups" +msgstr "Gruppen" + +#: include/group.php:289 +msgid "Edit groups" +msgstr "Gruppen bearbeiten" + +#: include/group.php:291 +msgid "Edit group" +msgstr "Gruppe bearbeiten" + +#: include/group.php:292 +msgid "Create a new group" +msgstr "Neue Gruppe erstellen" + +#: include/group.php:293 mod/group.php:99 mod/group.php:196 +msgid "Group Name: " +msgstr "Gruppenname:" + +#: include/group.php:295 +msgid "Contacts not in any group" +msgstr "Kontakte in keiner Gruppe" + +#: include/group.php:297 mod/network.php:207 +msgid "add" +msgstr "hinzufügen" #: include/identity.php:43 msgid "Requested account is not available." @@ -2586,501 +2418,380 @@ msgstr "Das angefragte Profil ist nicht vorhanden." msgid "Requested profile is not available." msgstr "Das angefragte Profil ist nicht vorhanden." -#: include/identity.php:96 include/identity.php:314 include/identity.php:737 +#: include/identity.php:96 include/identity.php:319 include/identity.php:740 msgid "Edit profile" msgstr "Profil bearbeiten" -#: include/identity.php:254 +#: include/identity.php:259 msgid "Atom feed" msgstr "Atom-Feed" -#: include/identity.php:285 +#: include/identity.php:290 msgid "Manage/edit profiles" msgstr "Profile verwalten/editieren" -#: include/identity.php:290 include/identity.php:316 mod/profiles.php:789 +#: include/identity.php:295 include/identity.php:321 mod/profiles.php:787 msgid "Change profile photo" msgstr "Profilbild ändern" -#: include/identity.php:291 mod/profiles.php:790 +#: include/identity.php:296 mod/profiles.php:788 msgid "Create New Profile" msgstr "Neues Profil anlegen" -#: include/identity.php:301 mod/profiles.php:779 +#: include/identity.php:306 mod/profiles.php:777 msgid "Profile Image" msgstr "Profilbild" -#: include/identity.php:304 mod/profiles.php:781 +#: include/identity.php:309 mod/profiles.php:779 msgid "visible to everybody" msgstr "sichtbar für jeden" -#: include/identity.php:305 mod/profiles.php:683 mod/profiles.php:782 +#: include/identity.php:310 mod/profiles.php:684 mod/profiles.php:780 msgid "Edit visibility" msgstr "Sichtbarkeit bearbeiten" -#: include/identity.php:333 include/identity.php:628 mod/directory.php:141 -#: mod/notifications.php:244 +#: include/identity.php:338 include/identity.php:633 mod/directory.php:141 +#: mod/notifications.php:250 msgid "Gender:" msgstr "Geschlecht:" -#: include/identity.php:336 include/identity.php:648 mod/directory.php:143 +#: include/identity.php:341 include/identity.php:651 mod/directory.php:143 msgid "Status:" msgstr "Status:" -#: include/identity.php:338 include/identity.php:664 mod/directory.php:145 +#: include/identity.php:343 include/identity.php:667 mod/directory.php:145 msgid "Homepage:" msgstr "Homepage:" -#: include/identity.php:340 include/identity.php:684 mod/directory.php:147 -#: mod/contacts.php:640 mod/notifications.php:240 +#: include/identity.php:345 include/identity.php:687 mod/contacts.php:640 +#: mod/directory.php:147 mod/notifications.php:246 msgid "About:" msgstr "Über:" -#: include/identity.php:342 mod/contacts.php:638 +#: include/identity.php:347 mod/contacts.php:638 msgid "XMPP:" msgstr "XMPP:" -#: include/identity.php:428 mod/contacts.php:55 mod/notifications.php:252 +#: include/identity.php:433 mod/contacts.php:55 mod/notifications.php:258 msgid "Network:" msgstr "Netzwerk:" -#: include/identity.php:457 include/identity.php:547 +#: include/identity.php:462 include/identity.php:552 msgid "g A l F d" msgstr "l, d. F G \\U\\h\\r" -#: include/identity.php:458 include/identity.php:548 +#: include/identity.php:463 include/identity.php:553 msgid "F d" msgstr "d. F" -#: include/identity.php:509 include/identity.php:594 +#: include/identity.php:514 include/identity.php:599 msgid "[today]" msgstr "[heute]" -#: include/identity.php:521 +#: include/identity.php:526 msgid "Birthday Reminders" msgstr "Geburtstagserinnerungen" -#: include/identity.php:522 +#: include/identity.php:527 msgid "Birthdays this week:" msgstr "Geburtstage diese Woche:" -#: include/identity.php:581 +#: include/identity.php:586 msgid "[No description]" msgstr "[keine Beschreibung]" -#: include/identity.php:605 +#: include/identity.php:610 msgid "Event Reminders" msgstr "Veranstaltungserinnerungen" -#: include/identity.php:606 +#: include/identity.php:611 msgid "Events this week:" msgstr "Veranstaltungen diese Woche" -#: include/identity.php:626 mod/settings.php:1286 +#: include/identity.php:631 mod/settings.php:1286 msgid "Full Name:" msgstr "Kompletter Name:" -#: include/identity.php:633 +#: include/identity.php:636 msgid "j F, Y" msgstr "j F, Y" -#: include/identity.php:634 +#: include/identity.php:637 msgid "j F" msgstr "j F" -#: include/identity.php:645 +#: include/identity.php:648 msgid "Age:" msgstr "Alter:" -#: include/identity.php:656 +#: include/identity.php:659 #, php-format msgid "for %1$d %2$s" msgstr "für %1$d %2$s" -#: include/identity.php:660 mod/profiles.php:702 +#: include/identity.php:663 mod/profiles.php:703 msgid "Sexual Preference:" msgstr "Sexuelle Vorlieben:" -#: include/identity.php:668 mod/profiles.php:729 +#: include/identity.php:671 mod/profiles.php:730 msgid "Hometown:" msgstr "Heimatort:" -#: include/identity.php:672 mod/follow.php:137 mod/contacts.php:642 -#: mod/notifications.php:242 +#: include/identity.php:675 mod/contacts.php:642 mod/follow.php:137 +#: mod/notifications.php:248 msgid "Tags:" msgstr "Tags:" -#: include/identity.php:676 mod/profiles.php:730 +#: include/identity.php:679 mod/profiles.php:731 msgid "Political Views:" msgstr "Politische Ansichten:" -#: include/identity.php:680 +#: include/identity.php:683 msgid "Religion:" msgstr "Religion:" -#: include/identity.php:688 +#: include/identity.php:691 msgid "Hobbies/Interests:" msgstr "Hobbies/Interessen:" -#: include/identity.php:692 mod/profiles.php:734 +#: include/identity.php:695 mod/profiles.php:735 msgid "Likes:" msgstr "Likes:" -#: include/identity.php:696 mod/profiles.php:735 +#: include/identity.php:699 mod/profiles.php:736 msgid "Dislikes:" msgstr "Dislikes:" -#: include/identity.php:700 +#: include/identity.php:703 msgid "Contact information and Social Networks:" msgstr "Kontaktinformationen und Soziale Netzwerke:" -#: include/identity.php:704 +#: include/identity.php:707 msgid "Musical interests:" msgstr "Musikalische Interessen:" -#: include/identity.php:708 +#: include/identity.php:711 msgid "Books, literature:" msgstr "Literatur/Bücher:" -#: include/identity.php:712 +#: include/identity.php:715 msgid "Television:" msgstr "Fernsehen:" -#: include/identity.php:716 +#: include/identity.php:719 msgid "Film/dance/culture/entertainment:" msgstr "Filme/Tänze/Kultur/Unterhaltung:" -#: include/identity.php:720 +#: include/identity.php:723 msgid "Love/Romance:" msgstr "Liebesleben:" -#: include/identity.php:724 +#: include/identity.php:727 msgid "Work/employment:" msgstr "Arbeit/Beschäftigung:" -#: include/identity.php:728 +#: include/identity.php:731 msgid "School/education:" msgstr "Schule/Ausbildung:" -#: include/identity.php:733 +#: include/identity.php:736 msgid "Forums:" msgstr "Foren:" -#: include/identity.php:742 mod/events.php:514 +#: include/identity.php:745 mod/events.php:506 msgid "Basic" msgstr "Allgemein" -#: include/identity.php:743 mod/contacts.php:878 mod/events.php:515 -#: mod/admin.php:980 +#: include/identity.php:746 mod/contacts.php:878 mod/events.php:507 +#: mod/admin.php:1059 msgid "Advanced" msgstr "Erweitert" -#: include/identity.php:769 mod/follow.php:145 mod/contacts.php:844 +#: include/identity.php:772 mod/contacts.php:844 mod/follow.php:145 msgid "Status Messages and Posts" msgstr "Statusnachrichten und Beiträge" -#: include/identity.php:777 mod/contacts.php:852 +#: include/identity.php:780 mod/contacts.php:852 msgid "Profile Details" msgstr "Profildetails" -#: include/identity.php:785 mod/photos.php:89 +#: include/identity.php:788 mod/photos.php:93 msgid "Photo Albums" msgstr "Fotoalben" -#: include/identity.php:824 mod/notes.php:47 +#: include/identity.php:827 mod/notes.php:47 msgid "Personal Notes" msgstr "Persönliche Notizen" -#: include/identity.php:827 +#: include/identity.php:830 msgid "Only You Can See This" msgstr "Nur Du kannst das sehen" -#: include/text.php:304 -msgid "newer" -msgstr "neuer" +#: include/network.php:687 +msgid "view full size" +msgstr "Volle Größe anzeigen" -#: include/text.php:306 -msgid "older" -msgstr "älter" +#: include/oembed.php:255 +msgid "Embedded content" +msgstr "Eingebetteter Inhalt" -#: include/text.php:311 -msgid "prev" -msgstr "vorige" +#: include/oembed.php:263 +msgid "Embedding disabled" +msgstr "Einbettungen deaktiviert" -#: include/text.php:313 -msgid "first" -msgstr "erste" +#: include/photos.php:57 include/photos.php:66 mod/fbrowser.php:40 +#: mod/fbrowser.php:61 mod/photos.php:187 mod/photos.php:1123 +#: mod/photos.php:1256 mod/photos.php:1277 mod/photos.php:1839 +#: mod/photos.php:1853 +msgid "Contact Photos" +msgstr "Kontaktbilder" -#: include/text.php:345 -msgid "last" -msgstr "letzte" +#: include/user.php:39 mod/settings.php:375 +msgid "Passwords do not match. Password unchanged." +msgstr "Die Passwörter stimmen nicht überein. Das Passwort bleibt unverändert." -#: include/text.php:348 -msgid "next" -msgstr "nächste" +#: include/user.php:48 +msgid "An invitation is required." +msgstr "Du benötigst eine Einladung." -#: include/text.php:403 -msgid "Loading more entries..." -msgstr "lade weitere Einträge..." +#: include/user.php:53 +msgid "Invitation could not be verified." +msgstr "Die Einladung konnte nicht überprüft werden." -#: include/text.php:404 -msgid "The end" -msgstr "Das Ende" +#: include/user.php:61 +msgid "Invalid OpenID url" +msgstr "Ungültige OpenID URL" -#: include/text.php:889 -msgid "No contacts" -msgstr "Keine Kontakte" +#: include/user.php:82 +msgid "Please enter the required information." +msgstr "Bitte trage die erforderlichen Informationen ein." -#: include/text.php:914 +#: include/user.php:96 +msgid "Please use a shorter name." +msgstr "Bitte verwende einen kürzeren Namen." + +#: include/user.php:98 +msgid "Name too short." +msgstr "Der Name ist zu kurz." + +#: include/user.php:106 +msgid "That doesn't appear to be your full (First Last) name." +msgstr "Das scheint nicht Dein kompletter Name (Vor- und Nachname) zu sein." + +#: include/user.php:111 +msgid "Your email domain is not among those allowed on this site." +msgstr "Die Domain Deiner E-Mail Adresse ist auf dieser Seite nicht erlaubt." + +#: include/user.php:114 +msgid "Not a valid email address." +msgstr "Keine gültige E-Mail-Adresse." + +#: include/user.php:127 +msgid "Cannot use that email." +msgstr "Konnte diese E-Mail-Adresse nicht verwenden." + +#: include/user.php:133 +msgid "Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"." +msgstr "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\" und \"_\") bestehen." + +#: include/user.php:140 include/user.php:228 +msgid "Nickname is already registered. Please choose another." +msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen." + +#: include/user.php:150 +msgid "" +"Nickname was once registered here and may not be re-used. Please choose " +"another." +msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen." + +#: include/user.php:166 +msgid "SERIOUS ERROR: Generation of security keys failed." +msgstr "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden." + +#: include/user.php:214 +msgid "An error occurred during registration. Please try again." +msgstr "Während der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal." + +#: include/user.php:239 view/theme/duepuntozero/config.php:43 +msgid "default" +msgstr "Standard" + +#: include/user.php:249 +msgid "An error occurred creating your default profile. Please try again." +msgstr "Bei der Erstellung des Standardprofils ist ein Fehler aufgetreten. Bitte versuche es noch einmal." + +#: include/user.php:309 include/user.php:317 include/user.php:325 +#: mod/profile_photo.php:74 mod/profile_photo.php:82 mod/profile_photo.php:90 +#: mod/profile_photo.php:215 mod/profile_photo.php:310 +#: mod/profile_photo.php:320 mod/photos.php:71 mod/photos.php:187 +#: mod/photos.php:774 mod/photos.php:1256 mod/photos.php:1277 +#: mod/photos.php:1863 +msgid "Profile Photos" +msgstr "Profilbilder" + +#: include/user.php:400 #, php-format -msgid "%d Contact" -msgid_plural "%d Contacts" -msgstr[0] "%d Kontakt" -msgstr[1] "%d Kontakte" +msgid "" +"\n" +"\t\tDear %1$s,\n" +"\t\t\tThank you for registering at %2$s. Your account is pending for approval by the administrator.\n" +"\t" +msgstr "\nHallo %1$s,\n\ndanke für Deine Registrierung auf %2$s. Dein Account wurde muss noch vom Admin des Knotens geprüft werden." -#: include/text.php:927 -msgid "View Contacts" -msgstr "Kontakte anzeigen" +#: include/user.php:410 +#, php-format +msgid "Registration at %s" +msgstr "Registrierung als %s" -#: include/text.php:1015 mod/filer.php:31 mod/notes.php:62 mod/editpost.php:99 -msgid "Save" -msgstr "Speichern" +#: include/user.php:420 +#, php-format +msgid "" +"\n" +"\t\tDear %1$s,\n" +"\t\t\tThank you for registering at %2$s. Your account has been created.\n" +"\t" +msgstr "\nHallo %1$s,\n\ndanke für Deine Registrierung auf %2$s. Dein Account wurde eingerichtet." -#: include/text.php:1078 -msgid "poke" -msgstr "anstupsen" +#: include/user.php:424 +#, php-format +msgid "" +"\n" +"\t\tThe login details are as follows:\n" +"\t\t\tSite Location:\t%3$s\n" +"\t\t\tLogin Name:\t%1$s\n" +"\t\t\tPassword:\t%5$s\n" +"\n" +"\t\tYou may change your password from your account \"Settings\" page after logging\n" +"\t\tin.\n" +"\n" +"\t\tPlease take a few moments to review the other account settings on that page.\n" +"\n" +"\t\tYou may also wish to add some basic information to your default profile\n" +"\t\t(on the \"Profiles\" page) so that other people can easily find you.\n" +"\n" +"\t\tWe recommend setting your full name, adding a profile photo,\n" +"\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n" +"\t\tperhaps what country you live in; if you do not wish to be more specific\n" +"\t\tthan that.\n" +"\n" +"\t\tWe fully respect your right to privacy, and none of these items are necessary.\n" +"\t\tIf you are new and do not know anybody here, they may help\n" +"\t\tyou to make some new and interesting friends.\n" +"\n" +"\n" +"\t\tThank you and welcome to %2$s." +msgstr "\nDie Anmelde-Details sind die folgenden:\n\tAdresse der Seite:\t%3$s\n\tBenutzernamename:\t%1$s\n\tPasswort:\t%5$s\n\nDu kannst Dein Passwort unter \"Einstellungen\" ändern, sobald Du Dich\nangemeldet hast.\n\nBitte nimm Dir ein paar Minuten um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst Du ja auch einige Informationen über Dich in Deinem\nProfil veröffentlichen, damit andere Leute Dich einfacher finden können.\nBearbeite hierfür einfach Dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen Dir, Deinen kompletten Namen anzugeben und ein zu Dir\npassendes Profilbild zu wählen, damit Dich alte Bekannte wieder finden.\nAußerdem ist es nützlich, wenn Du auf Deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die Deine Interessen teilen.\n\nWir respektieren Deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn Du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nDanke für Deine Aufmerksamkeit und willkommen auf %2$s." -#: include/text.php:1078 -msgid "poked" -msgstr "stupste" +#: include/user.php:456 mod/admin.php:1308 +#, php-format +msgid "Registration details for %s" +msgstr "Details der Registration von %s" -#: include/text.php:1079 -msgid "ping" -msgstr "anpingen" +#: include/dbstructure.php:20 +msgid "There are no tables on MyISAM." +msgstr "Es gibt keine MyISAM Tabellen." -#: include/text.php:1079 -msgid "pinged" -msgstr "pingte" - -#: include/text.php:1080 -msgid "prod" -msgstr "knuffen" - -#: include/text.php:1080 -msgid "prodded" -msgstr "knuffte" - -#: include/text.php:1081 -msgid "slap" -msgstr "ohrfeigen" - -#: include/text.php:1081 -msgid "slapped" -msgstr "ohrfeigte" - -#: include/text.php:1082 -msgid "finger" -msgstr "befummeln" - -#: include/text.php:1082 -msgid "fingered" -msgstr "befummelte" - -#: include/text.php:1083 -msgid "rebuff" -msgstr "eine Abfuhr erteilen" - -#: include/text.php:1083 -msgid "rebuffed" -msgstr "abfuhrerteilte" - -#: include/text.php:1097 -msgid "happy" -msgstr "glücklich" - -#: include/text.php:1098 -msgid "sad" -msgstr "traurig" - -#: include/text.php:1099 -msgid "mellow" -msgstr "sanft" - -#: include/text.php:1100 -msgid "tired" -msgstr "müde" - -#: include/text.php:1101 -msgid "perky" -msgstr "frech" - -#: include/text.php:1102 -msgid "angry" -msgstr "sauer" - -#: include/text.php:1103 -msgid "stupified" -msgstr "verblüfft" - -#: include/text.php:1104 -msgid "puzzled" -msgstr "verwirrt" - -#: include/text.php:1105 -msgid "interested" -msgstr "interessiert" - -#: include/text.php:1106 -msgid "bitter" -msgstr "verbittert" - -#: include/text.php:1107 -msgid "cheerful" -msgstr "fröhlich" - -#: include/text.php:1108 -msgid "alive" -msgstr "lebendig" - -#: include/text.php:1109 -msgid "annoyed" -msgstr "verärgert" - -#: include/text.php:1110 -msgid "anxious" -msgstr "unruhig" - -#: include/text.php:1111 -msgid "cranky" -msgstr "schrullig" - -#: include/text.php:1112 -msgid "disturbed" -msgstr "verstört" - -#: include/text.php:1113 -msgid "frustrated" -msgstr "frustriert" - -#: include/text.php:1114 -msgid "motivated" -msgstr "motiviert" - -#: include/text.php:1115 -msgid "relaxed" -msgstr "entspannt" - -#: include/text.php:1116 -msgid "surprised" -msgstr "überrascht" - -#: include/text.php:1326 mod/videos.php:384 -msgid "View Video" -msgstr "Video ansehen" - -#: include/text.php:1358 -msgid "bytes" -msgstr "Byte" - -#: include/text.php:1390 include/text.php:1402 -msgid "Click to open/close" -msgstr "Zum öffnen/schließen klicken" - -#: include/text.php:1528 -msgid "View on separate page" -msgstr "Auf separater Seite ansehen" - -#: include/text.php:1529 -msgid "view on separate page" -msgstr "auf separater Seite ansehen" - -#: include/text.php:1808 -msgid "activity" -msgstr "Aktivität" - -#: include/text.php:1810 mod/content.php:623 object/Item.php:446 -#: object/Item.php:458 -msgid "comment" -msgid_plural "comments" -msgstr[0] "Kommentar" -msgstr[1] "Kommentare" - -#: include/text.php:1811 -msgid "post" -msgstr "Beitrag" - -#: include/text.php:1979 -msgid "Item filed" -msgstr "Beitrag abgelegt" - -#: include/Contact.php:450 -msgid "Drop Contact" -msgstr "Kontakt löschen" - -#: include/Contact.php:827 -msgid "Organisation" -msgstr "Organisation" - -#: include/Contact.php:830 -msgid "News" -msgstr "Nachrichten" - -#: include/Contact.php:833 -msgid "Forum" -msgstr "Forum" - -#: include/items.php:1584 mod/dfrn_confirm.php:735 mod/dfrn_request.php:754 -msgid "[Name Withheld]" -msgstr "[Name unterdrückt]" - -#: include/items.php:1939 mod/notice.php:15 mod/viewsrc.php:15 -#: mod/display.php:103 mod/display.php:279 mod/display.php:484 -#: mod/admin.php:235 mod/admin.php:1492 mod/admin.php:1738 -msgid "Item not found." -msgstr "Beitrag nicht gefunden." - -#: include/items.php:1978 -msgid "Do you really want to delete this item?" -msgstr "Möchtest Du wirklich dieses Item löschen?" - -#: include/items.php:1980 mod/api.php:105 mod/follow.php:113 -#: mod/register.php:245 mod/settings.php:1171 mod/settings.php:1177 -#: mod/settings.php:1184 mod/settings.php:1188 mod/settings.php:1193 -#: mod/settings.php:1198 mod/settings.php:1203 mod/settings.php:1208 -#: mod/settings.php:1234 mod/settings.php:1235 mod/settings.php:1236 -#: mod/settings.php:1237 mod/settings.php:1238 mod/suggest.php:29 -#: mod/contacts.php:452 mod/message.php:206 mod/dfrn_request.php:875 -#: mod/profiles.php:640 mod/profiles.php:643 mod/profiles.php:669 -msgid "Yes" -msgstr "Ja" - -#: include/items.php:2143 mod/allfriends.php:12 mod/api.php:26 mod/api.php:31 -#: mod/attach.php:33 mod/common.php:18 mod/crepair.php:102 mod/delegate.php:12 -#: mod/dirfind.php:11 mod/follow.php:11 mod/follow.php:74 mod/follow.php:158 -#: mod/fsuggest.php:79 mod/group.php:19 mod/invite.php:15 mod/invite.php:103 -#: mod/manage.php:98 mod/mood.php:115 mod/nogroup.php:27 mod/notes.php:23 -#: mod/ostatus_subscribe.php:9 mod/poke.php:154 mod/profile_photo.php:19 -#: mod/profile_photo.php:180 mod/profile_photo.php:191 -#: mod/profile_photo.php:204 mod/register.php:42 mod/regmod.php:113 -#: mod/repair_ostatus.php:9 mod/settings.php:22 mod/settings.php:130 -#: mod/settings.php:668 mod/suggest.php:58 mod/uimport.php:24 -#: mod/wall_attach.php:67 mod/wall_attach.php:70 mod/cal.php:299 -#: mod/contacts.php:360 mod/dfrn_confirm.php:61 mod/editpost.php:10 -#: mod/events.php:195 mod/item.php:193 mod/item.php:205 mod/message.php:46 -#: mod/message.php:171 mod/wall_upload.php:77 mod/wall_upload.php:80 -#: mod/wallmessage.php:9 mod/wallmessage.php:33 mod/wallmessage.php:73 -#: mod/wallmessage.php:97 mod/photos.php:161 mod/photos.php:1092 -#: mod/profiles.php:166 mod/profiles.php:607 mod/display.php:481 -#: mod/viewcontacts.php:46 mod/network.php:4 mod/notifications.php:71 -#: index.php:407 -msgid "Permission denied." -msgstr "Zugriff verweigert." - -#: include/items.php:2248 -msgid "Archives" -msgstr "Archiv" - -#: include/dbstructure.php:33 +#: include/dbstructure.php:61 #, php-format msgid "" "\n" @@ -3090,26 +2801,333 @@ msgid "" "\t\t\tfriendica developer if you can not help me on your own. My database might be invalid." msgstr "\nDie Friendica-Entwickler haben vor kurzem das Update %s veröffentlicht, aber bei der Installation ging etwas schrecklich schief.\n\nDas Problem sollte so schnell wie möglich gelöst werden, aber ich schaffe es nicht alleine. Bitte kontaktiere einen Friendica-Entwickler falls Du mir nicht alleine helfen kannst. Meine Datenbank könnte ungültig sein." -#: include/dbstructure.php:38 +#: include/dbstructure.php:66 #, php-format msgid "" "The error message is\n" "[pre]%s[/pre]" msgstr "Die Fehlermeldung lautet\n[pre]%s[/pre]" -#: include/dbstructure.php:195 -msgid "Errors encountered creating database tables." -msgstr "Fehler aufgetreten während der Erzeugung der Datenbanktabellen." +#: include/dbstructure.php:190 +#, php-format +msgid "" +"\n" +"Error %d occurred during database update:\n" +"%s\n" +msgstr "\nFehler %d beim Update der Datenbank aufgetreten\n%s\n" -#: include/dbstructure.php:329 include/dbstructure.php:337 -#: include/dbstructure.php:345 include/dbstructure.php:350 -#: include/dbstructure.php:355 -msgid "Errors encountered performing database changes." -msgstr "Es sind Fehler beim Bearbeiten der Datenbank aufgetreten." +#: include/dbstructure.php:193 +msgid "Errors encountered performing database changes: " +msgstr "Fehler beim Ändern der Datenbank aufgetreten" -#: include/network.php:619 -msgid "view full size" -msgstr "Volle Größe anzeigen" +#: include/dbstructure.php:201 +msgid ": Database update" +msgstr ": Datenbank Update" + +#: include/dbstructure.php:425 +#, php-format +msgid "%s: updating %s table." +msgstr "%s: aktualisiere Tabelle %s" + +#: include/dfrn.php:1251 +#, php-format +msgid "%s\\'s birthday" +msgstr "%ss Geburtstag" + +#: include/diaspora.php:2137 +msgid "Sharing notification from Diaspora network" +msgstr "Freigabe-Benachrichtigung von Diaspora" + +#: include/diaspora.php:3146 +msgid "Attachments:" +msgstr "Anhänge:" + +#: include/items.php:1738 mod/dfrn_confirm.php:736 mod/dfrn_request.php:759 +msgid "[Name Withheld]" +msgstr "[Name unterdrückt]" + +#: include/items.php:2123 mod/display.php:103 mod/display.php:279 +#: mod/display.php:484 mod/notice.php:15 mod/viewsrc.php:15 mod/admin.php:247 +#: mod/admin.php:1565 mod/admin.php:1816 +msgid "Item not found." +msgstr "Beitrag nicht gefunden." + +#: include/items.php:2162 +msgid "Do you really want to delete this item?" +msgstr "Möchtest Du wirklich dieses Item löschen?" + +#: include/items.php:2164 mod/api.php:105 mod/contacts.php:452 +#: mod/suggest.php:29 mod/dfrn_request.php:880 mod/follow.php:113 +#: mod/message.php:206 mod/profiles.php:640 mod/profiles.php:643 +#: mod/profiles.php:670 mod/register.php:245 mod/settings.php:1171 +#: mod/settings.php:1177 mod/settings.php:1184 mod/settings.php:1188 +#: mod/settings.php:1193 mod/settings.php:1198 mod/settings.php:1203 +#: mod/settings.php:1208 mod/settings.php:1234 mod/settings.php:1235 +#: mod/settings.php:1236 mod/settings.php:1237 mod/settings.php:1238 +msgid "Yes" +msgstr "Ja" + +#: include/items.php:2327 mod/allfriends.php:12 mod/api.php:26 mod/api.php:31 +#: mod/attach.php:33 mod/common.php:18 mod/contacts.php:360 +#: mod/crepair.php:102 mod/delegate.php:12 mod/display.php:481 +#: mod/editpost.php:10 mod/fsuggest.php:79 mod/invite.php:15 +#: mod/invite.php:103 mod/mood.php:115 mod/nogroup.php:27 mod/notes.php:23 +#: mod/ostatus_subscribe.php:9 mod/poke.php:154 mod/profile_photo.php:19 +#: mod/profile_photo.php:180 mod/profile_photo.php:191 +#: mod/profile_photo.php:204 mod/regmod.php:113 mod/repair_ostatus.php:9 +#: mod/suggest.php:58 mod/uimport.php:24 mod/viewcontacts.php:46 +#: mod/wall_attach.php:67 mod/wall_attach.php:70 mod/wallmessage.php:9 +#: mod/wallmessage.php:33 mod/wallmessage.php:73 mod/wallmessage.php:97 +#: mod/cal.php:299 mod/dfrn_confirm.php:61 mod/dirfind.php:11 +#: mod/events.php:185 mod/follow.php:11 mod/follow.php:74 mod/follow.php:158 +#: mod/group.php:19 mod/manage.php:102 mod/message.php:46 mod/message.php:171 +#: mod/network.php:4 mod/photos.php:166 mod/photos.php:1109 +#: mod/profiles.php:168 mod/profiles.php:607 mod/register.php:42 +#: mod/settings.php:22 mod/settings.php:130 mod/settings.php:668 +#: mod/wall_upload.php:101 mod/wall_upload.php:104 mod/item.php:196 +#: mod/item.php:208 mod/notifications.php:71 index.php:407 +msgid "Permission denied." +msgstr "Zugriff verweigert." + +#: include/items.php:2444 +msgid "Archives" +msgstr "Archiv" + +#: include/ostatus.php:1947 +#, php-format +msgid "%s is now following %s." +msgstr "%s folgt nun %s" + +#: include/ostatus.php:1948 +msgid "following" +msgstr "folgen" + +#: include/ostatus.php:1951 +#, php-format +msgid "%s stopped following %s." +msgstr "%s hat aufgehört %s zu folgen" + +#: include/ostatus.php:1952 +msgid "stopped following" +msgstr "wird nicht mehr gefolgt" + +#: include/text.php:307 +msgid "newer" +msgstr "neuer" + +#: include/text.php:308 +msgid "older" +msgstr "älter" + +#: include/text.php:313 +msgid "first" +msgstr "erste" + +#: include/text.php:314 +msgid "prev" +msgstr "vorige" + +#: include/text.php:348 +msgid "next" +msgstr "nächste" + +#: include/text.php:349 +msgid "last" +msgstr "letzte" + +#: include/text.php:403 +msgid "Loading more entries..." +msgstr "lade weitere Einträge..." + +#: include/text.php:404 +msgid "The end" +msgstr "Das Ende" + +#: include/text.php:955 +msgid "No contacts" +msgstr "Keine Kontakte" + +#: include/text.php:980 +#, php-format +msgid "%d Contact" +msgid_plural "%d Contacts" +msgstr[0] "%d Kontakt" +msgstr[1] "%d Kontakte" + +#: include/text.php:993 +msgid "View Contacts" +msgstr "Kontakte anzeigen" + +#: include/text.php:1081 mod/editpost.php:99 mod/filer.php:31 mod/notes.php:62 +msgid "Save" +msgstr "Speichern" + +#: include/text.php:1144 +msgid "poke" +msgstr "anstupsen" + +#: include/text.php:1144 +msgid "poked" +msgstr "stupste" + +#: include/text.php:1145 +msgid "ping" +msgstr "anpingen" + +#: include/text.php:1145 +msgid "pinged" +msgstr "pingte" + +#: include/text.php:1146 +msgid "prod" +msgstr "knuffen" + +#: include/text.php:1146 +msgid "prodded" +msgstr "knuffte" + +#: include/text.php:1147 +msgid "slap" +msgstr "ohrfeigen" + +#: include/text.php:1147 +msgid "slapped" +msgstr "ohrfeigte" + +#: include/text.php:1148 +msgid "finger" +msgstr "befummeln" + +#: include/text.php:1148 +msgid "fingered" +msgstr "befummelte" + +#: include/text.php:1149 +msgid "rebuff" +msgstr "eine Abfuhr erteilen" + +#: include/text.php:1149 +msgid "rebuffed" +msgstr "abfuhrerteilte" + +#: include/text.php:1163 +msgid "happy" +msgstr "glücklich" + +#: include/text.php:1164 +msgid "sad" +msgstr "traurig" + +#: include/text.php:1165 +msgid "mellow" +msgstr "sanft" + +#: include/text.php:1166 +msgid "tired" +msgstr "müde" + +#: include/text.php:1167 +msgid "perky" +msgstr "frech" + +#: include/text.php:1168 +msgid "angry" +msgstr "sauer" + +#: include/text.php:1169 +msgid "stupified" +msgstr "verblüfft" + +#: include/text.php:1170 +msgid "puzzled" +msgstr "verwirrt" + +#: include/text.php:1171 +msgid "interested" +msgstr "interessiert" + +#: include/text.php:1172 +msgid "bitter" +msgstr "verbittert" + +#: include/text.php:1173 +msgid "cheerful" +msgstr "fröhlich" + +#: include/text.php:1174 +msgid "alive" +msgstr "lebendig" + +#: include/text.php:1175 +msgid "annoyed" +msgstr "verärgert" + +#: include/text.php:1176 +msgid "anxious" +msgstr "unruhig" + +#: include/text.php:1177 +msgid "cranky" +msgstr "schrullig" + +#: include/text.php:1178 +msgid "disturbed" +msgstr "verstört" + +#: include/text.php:1179 +msgid "frustrated" +msgstr "frustriert" + +#: include/text.php:1180 +msgid "motivated" +msgstr "motiviert" + +#: include/text.php:1181 +msgid "relaxed" +msgstr "entspannt" + +#: include/text.php:1182 +msgid "surprised" +msgstr "überrascht" + +#: include/text.php:1392 mod/videos.php:386 +msgid "View Video" +msgstr "Video ansehen" + +#: include/text.php:1424 +msgid "bytes" +msgstr "Byte" + +#: include/text.php:1456 include/text.php:1468 +msgid "Click to open/close" +msgstr "Zum öffnen/schließen klicken" + +#: include/text.php:1594 +msgid "View on separate page" +msgstr "Auf separater Seite ansehen" + +#: include/text.php:1595 +msgid "view on separate page" +msgstr "auf separater Seite ansehen" + +#: include/text.php:1874 +msgid "activity" +msgstr "Aktivität" + +#: include/text.php:1876 mod/content.php:623 object/Item.php:419 +#: object/Item.php:431 +msgid "comment" +msgid_plural "comments" +msgstr[0] "Kommentar" +msgstr[1] "Kommentare" + +#: include/text.php:1877 +msgid "post" +msgstr "Beitrag" + +#: include/text.php:2045 +msgid "Item filed" +msgstr "Beitrag abgelegt" #: mod/allfriends.php:46 msgid "No friends to display." @@ -3133,17 +3151,17 @@ msgid "" " and/or create new posts for you?" msgstr "Möchtest Du dieser Anwendung den Zugriff auf Deine Beiträge und Kontakte, sowie das Erstellen neuer Beiträge in Deinem Namen gestatten?" -#: mod/api.php:106 mod/follow.php:113 mod/register.php:246 -#: mod/settings.php:1171 mod/settings.php:1177 mod/settings.php:1184 -#: mod/settings.php:1188 mod/settings.php:1193 mod/settings.php:1198 -#: mod/settings.php:1203 mod/settings.php:1208 mod/settings.php:1234 -#: mod/settings.php:1235 mod/settings.php:1236 mod/settings.php:1237 -#: mod/settings.php:1238 mod/dfrn_request.php:875 mod/profiles.php:640 -#: mod/profiles.php:644 mod/profiles.php:669 +#: mod/api.php:106 mod/dfrn_request.php:880 mod/follow.php:113 +#: mod/profiles.php:640 mod/profiles.php:644 mod/profiles.php:670 +#: mod/register.php:246 mod/settings.php:1171 mod/settings.php:1177 +#: mod/settings.php:1184 mod/settings.php:1188 mod/settings.php:1193 +#: mod/settings.php:1198 mod/settings.php:1203 mod/settings.php:1208 +#: mod/settings.php:1234 mod/settings.php:1235 mod/settings.php:1236 +#: mod/settings.php:1237 mod/settings.php:1238 msgid "No" msgstr "Nein" -#: mod/apps.php:7 index.php:248 +#: mod/apps.php:7 index.php:254 msgid "You must be logged in to use addons. " msgstr "Sie müssen angemeldet sein um Addons benutzen zu können." @@ -3163,54 +3181,6 @@ msgstr "Beitrag nicht verfügbar." msgid "Item was not found." msgstr "Beitrag konnte nicht gefunden werden." -#: mod/babel.php:17 -msgid "Source (bbcode) text:" -msgstr "Quelle (bbcode) Text:" - -#: mod/babel.php:23 -msgid "Source (Diaspora) text to convert to BBcode:" -msgstr "Eingabe (Diaspora) nach BBCode zu konvertierender Text:" - -#: mod/babel.php:31 -msgid "Source input: " -msgstr "Originaltext:" - -#: mod/babel.php:35 -msgid "bb2html (raw HTML): " -msgstr "bb2html (reines HTML): " - -#: mod/babel.php:39 -msgid "bb2html: " -msgstr "bb2html: " - -#: mod/babel.php:43 -msgid "bb2html2bb: " -msgstr "bb2html2bb: " - -#: mod/babel.php:47 -msgid "bb2md: " -msgstr "bb2md: " - -#: mod/babel.php:51 -msgid "bb2md2html: " -msgstr "bb2md2html: " - -#: mod/babel.php:55 -msgid "bb2dia2bb: " -msgstr "bb2dia2bb: " - -#: mod/babel.php:59 -msgid "bb2md2html2bb: " -msgstr "bb2md2html2bb: " - -#: mod/babel.php:69 -msgid "Source input (Diaspora format): " -msgstr "Originaltext (Diaspora Format): " - -#: mod/babel.php:74 -msgid "diaspora2bb: " -msgstr "diaspora2bb: " - #: mod/bookmarklet.php:41 msgid "The post was created" msgstr "Der Beitrag wurde angelegt" @@ -3223,29 +3193,399 @@ msgstr "Keine gemeinsamen Kontakte." msgid "Common Friends" msgstr "Gemeinsame Kontakte" -#: mod/community.php:22 mod/directory.php:37 mod/videos.php:198 -#: mod/photos.php:964 mod/dfrn_request.php:799 mod/display.php:200 -#: mod/viewcontacts.php:36 mod/search.php:93 mod/search.php:99 -msgid "Public access denied." -msgstr "Öffentlicher Zugriff verweigert." +#: mod/contacts.php:134 +#, php-format +msgid "%d contact edited." +msgid_plural "%d contacts edited." +msgstr[0] "%d Kontakt bearbeitet." +msgstr[1] "%d Kontakte bearbeitet." -#: mod/community.php:27 -msgid "Not available." -msgstr "Nicht verfügbar." +#: mod/contacts.php:169 mod/contacts.php:378 +msgid "Could not access contact record." +msgstr "Konnte nicht auf die Kontaktdaten zugreifen." -#: mod/community.php:66 mod/community.php:75 mod/search.php:224 -msgid "No results." -msgstr "Keine Ergebnisse." +#: mod/contacts.php:183 +msgid "Could not locate selected profile." +msgstr "Konnte das ausgewählte Profil nicht finden." -#: mod/content.php:119 mod/network.php:468 +#: mod/contacts.php:216 +msgid "Contact updated." +msgstr "Kontakt aktualisiert." + +#: mod/contacts.php:218 mod/dfrn_request.php:593 +msgid "Failed to update contact record." +msgstr "Aktualisierung der Kontaktdaten fehlgeschlagen." + +#: mod/contacts.php:399 +msgid "Contact has been blocked" +msgstr "Kontakt wurde blockiert" + +#: mod/contacts.php:399 +msgid "Contact has been unblocked" +msgstr "Kontakt wurde wieder freigegeben" + +#: mod/contacts.php:410 +msgid "Contact has been ignored" +msgstr "Kontakt wurde ignoriert" + +#: mod/contacts.php:410 +msgid "Contact has been unignored" +msgstr "Kontakt wird nicht mehr ignoriert" + +#: mod/contacts.php:422 +msgid "Contact has been archived" +msgstr "Kontakt wurde archiviert" + +#: mod/contacts.php:422 +msgid "Contact has been unarchived" +msgstr "Kontakt wurde aus dem Archiv geholt" + +#: mod/contacts.php:447 +msgid "Drop contact" +msgstr "Kontakt löschen" + +#: mod/contacts.php:450 mod/contacts.php:809 +msgid "Do you really want to delete this contact?" +msgstr "Möchtest Du wirklich diesen Kontakt löschen?" + +#: mod/contacts.php:469 +msgid "Contact has been removed." +msgstr "Kontakt wurde entfernt." + +#: mod/contacts.php:506 +#, php-format +msgid "You are mutual friends with %s" +msgstr "Du hast mit %s eine beidseitige Freundschaft" + +#: mod/contacts.php:510 +#, php-format +msgid "You are sharing with %s" +msgstr "Du teilst mit %s" + +#: mod/contacts.php:515 +#, php-format +msgid "%s is sharing with you" +msgstr "%s teilt mit Dir" + +#: mod/contacts.php:535 +msgid "Private communications are not available for this contact." +msgstr "Private Kommunikation ist für diesen Kontakt nicht verfügbar." + +#: mod/contacts.php:538 mod/admin.php:978 +msgid "Never" +msgstr "Niemals" + +#: mod/contacts.php:542 +msgid "(Update was successful)" +msgstr "(Aktualisierung war erfolgreich)" + +#: mod/contacts.php:542 +msgid "(Update was not successful)" +msgstr "(Aktualisierung war nicht erfolgreich)" + +#: mod/contacts.php:544 mod/contacts.php:972 +msgid "Suggest friends" +msgstr "Kontakte vorschlagen" + +#: mod/contacts.php:548 +#, php-format +msgid "Network type: %s" +msgstr "Netzwerktyp: %s" + +#: mod/contacts.php:561 +msgid "Communications lost with this contact!" +msgstr "Verbindungen mit diesem Kontakt verloren!" + +#: mod/contacts.php:564 +msgid "Fetch further information for feeds" +msgstr "Weitere Informationen zu Feeds holen" + +#: mod/contacts.php:565 mod/admin.php:987 +msgid "Disabled" +msgstr "Deaktiviert" + +#: mod/contacts.php:565 +msgid "Fetch information" +msgstr "Beziehe Information" + +#: mod/contacts.php:565 +msgid "Fetch information and keywords" +msgstr "Beziehe Information und Schlüsselworte" + +#: mod/contacts.php:583 +msgid "Contact" +msgstr "Kontakt" + +#: mod/contacts.php:585 mod/content.php:728 mod/crepair.php:156 +#: mod/fsuggest.php:108 mod/invite.php:142 mod/localtime.php:45 +#: mod/mood.php:138 mod/poke.php:203 mod/events.php:505 mod/manage.php:155 +#: mod/message.php:338 mod/message.php:521 mod/photos.php:1141 +#: mod/photos.php:1271 mod/photos.php:1597 mod/photos.php:1646 +#: mod/photos.php:1688 mod/photos.php:1768 mod/profiles.php:681 +#: mod/install.php:242 mod/install.php:282 object/Item.php:705 +#: view/theme/duepuntozero/config.php:61 view/theme/frio/config.php:64 +#: view/theme/quattro/config.php:67 view/theme/vier/config.php:112 +msgid "Submit" +msgstr "Senden" + +#: mod/contacts.php:586 +msgid "Profile Visibility" +msgstr "Profil-Sichtbarkeit" + +#: mod/contacts.php:587 +#, php-format +msgid "" +"Please choose the profile you would like to display to %s when viewing your " +"profile securely." +msgstr "Bitte wähle eines Deiner Profile das angezeigt werden soll, wenn %s Dein Profil aufruft." + +#: mod/contacts.php:588 +msgid "Contact Information / Notes" +msgstr "Kontakt Informationen / Notizen" + +#: mod/contacts.php:589 +msgid "Edit contact notes" +msgstr "Notizen zum Kontakt bearbeiten" + +#: mod/contacts.php:594 mod/contacts.php:938 mod/nogroup.php:43 +#: mod/viewcontacts.php:102 +#, php-format +msgid "Visit %s's profile [%s]" +msgstr "Besuche %ss Profil [%s]" + +#: mod/contacts.php:595 +msgid "Block/Unblock contact" +msgstr "Kontakt blockieren/freischalten" + +#: mod/contacts.php:596 +msgid "Ignore contact" +msgstr "Ignoriere den Kontakt" + +#: mod/contacts.php:597 +msgid "Repair URL settings" +msgstr "URL Einstellungen reparieren" + +#: mod/contacts.php:598 +msgid "View conversations" +msgstr "Unterhaltungen anzeigen" + +#: mod/contacts.php:604 +msgid "Last update:" +msgstr "Letzte Aktualisierung: " + +#: mod/contacts.php:606 +msgid "Update public posts" +msgstr "Öffentliche Beiträge aktualisieren" + +#: mod/contacts.php:608 mod/contacts.php:982 +msgid "Update now" +msgstr "Jetzt aktualisieren" + +#: mod/contacts.php:613 mod/contacts.php:813 mod/contacts.php:991 +#: mod/admin.php:1510 +msgid "Unblock" +msgstr "Entsperren" + +#: mod/contacts.php:613 mod/contacts.php:813 mod/contacts.php:991 +#: mod/admin.php:1509 +msgid "Block" +msgstr "Sperren" + +#: mod/contacts.php:614 mod/contacts.php:814 mod/contacts.php:999 +msgid "Unignore" +msgstr "Ignorieren aufheben" + +#: mod/contacts.php:614 mod/contacts.php:814 mod/contacts.php:999 +#: mod/notifications.php:60 mod/notifications.php:179 +#: mod/notifications.php:263 +msgid "Ignore" +msgstr "Ignorieren" + +#: mod/contacts.php:618 +msgid "Currently blocked" +msgstr "Derzeit geblockt" + +#: mod/contacts.php:619 +msgid "Currently ignored" +msgstr "Derzeit ignoriert" + +#: mod/contacts.php:620 +msgid "Currently archived" +msgstr "Momentan archiviert" + +#: mod/contacts.php:621 mod/notifications.php:172 mod/notifications.php:251 +msgid "Hide this contact from others" +msgstr "Verbirg diesen Kontakt vor Anderen" + +#: mod/contacts.php:621 +msgid "" +"Replies/likes to your public posts may still be visible" +msgstr "Antworten/Likes auf deine öffentlichen Beiträge könnten weiterhin sichtbar sein" + +#: mod/contacts.php:622 +msgid "Notification for new posts" +msgstr "Benachrichtigung bei neuen Beiträgen" + +#: mod/contacts.php:622 +msgid "Send a notification of every new post of this contact" +msgstr "Sende eine Benachrichtigung, wann immer dieser Kontakt einen neuen Beitrag schreibt." + +#: mod/contacts.php:625 +msgid "Blacklisted keywords" +msgstr "Blacklistete Schlüsselworte " + +#: mod/contacts.php:625 +msgid "" +"Comma separated list of keywords that should not be converted to hashtags, " +"when \"Fetch information and keywords\" is selected" +msgstr "Komma-Separierte Liste mit Schlüsselworten, die nicht in Hashtags konvertiert werden, wenn \"Beziehe Information und Schlüsselworte\" aktiviert wurde" + +#: mod/contacts.php:632 mod/follow.php:129 mod/notifications.php:255 +msgid "Profile URL" +msgstr "Profil URL" + +#: mod/contacts.php:643 +msgid "Actions" +msgstr "Aktionen" + +#: mod/contacts.php:646 +msgid "Contact Settings" +msgstr "Kontakteinstellungen" + +#: mod/contacts.php:692 +msgid "Suggestions" +msgstr "Kontaktvorschläge" + +#: mod/contacts.php:695 +msgid "Suggest potential friends" +msgstr "Kontakte vorschlagen" + +#: mod/contacts.php:700 mod/group.php:212 +msgid "All Contacts" +msgstr "Alle Kontakte" + +#: mod/contacts.php:703 +msgid "Show all contacts" +msgstr "Alle Kontakte anzeigen" + +#: mod/contacts.php:708 +msgid "Unblocked" +msgstr "Ungeblockt" + +#: mod/contacts.php:711 +msgid "Only show unblocked contacts" +msgstr "Nur nicht-blockierte Kontakte anzeigen" + +#: mod/contacts.php:717 +msgid "Blocked" +msgstr "Geblockt" + +#: mod/contacts.php:720 +msgid "Only show blocked contacts" +msgstr "Nur blockierte Kontakte anzeigen" + +#: mod/contacts.php:726 +msgid "Ignored" +msgstr "Ignoriert" + +#: mod/contacts.php:729 +msgid "Only show ignored contacts" +msgstr "Nur ignorierte Kontakte anzeigen" + +#: mod/contacts.php:735 +msgid "Archived" +msgstr "Archiviert" + +#: mod/contacts.php:738 +msgid "Only show archived contacts" +msgstr "Nur archivierte Kontakte anzeigen" + +#: mod/contacts.php:744 +msgid "Hidden" +msgstr "Verborgen" + +#: mod/contacts.php:747 +msgid "Only show hidden contacts" +msgstr "Nur verborgene Kontakte anzeigen" + +#: mod/contacts.php:804 +msgid "Search your contacts" +msgstr "Suche in deinen Kontakten" + +#: mod/contacts.php:805 mod/network.php:151 mod/search.php:227 +#, php-format +msgid "Results for: %s" +msgstr "Ergebnisse für: %s" + +#: mod/contacts.php:812 mod/settings.php:160 mod/settings.php:707 +msgid "Update" +msgstr "Aktualisierungen" + +#: mod/contacts.php:815 mod/contacts.php:1007 +msgid "Archive" +msgstr "Archivieren" + +#: mod/contacts.php:815 mod/contacts.php:1007 +msgid "Unarchive" +msgstr "Aus Archiv zurückholen" + +#: mod/contacts.php:818 +msgid "Batch Actions" +msgstr "Stapelverarbeitung" + +#: mod/contacts.php:864 +msgid "View all contacts" +msgstr "Alle Kontakte anzeigen" + +#: mod/contacts.php:874 +msgid "View all common friends" +msgstr "Alle Kontakte anzeigen" + +#: mod/contacts.php:881 +msgid "Advanced Contact Settings" +msgstr "Fortgeschrittene Kontakteinstellungen" + +#: mod/contacts.php:915 +msgid "Mutual Friendship" +msgstr "Beidseitige Freundschaft" + +#: mod/contacts.php:919 +msgid "is a fan of yours" +msgstr "ist ein Fan von dir" + +#: mod/contacts.php:923 +msgid "you are a fan of" +msgstr "Du bist Fan von" + +#: mod/contacts.php:939 mod/nogroup.php:44 +msgid "Edit contact" +msgstr "Kontakt bearbeiten" + +#: mod/contacts.php:993 +msgid "Toggle Blocked status" +msgstr "Geblockt-Status ein-/ausschalten" + +#: mod/contacts.php:1001 +msgid "Toggle Ignored status" +msgstr "Ignoriert-Status ein-/ausschalten" + +#: mod/contacts.php:1009 +msgid "Toggle Archive status" +msgstr "Archiviert-Status ein-/ausschalten" + +#: mod/contacts.php:1017 +msgid "Delete contact" +msgstr "Lösche den Kontakt" + +#: mod/content.php:119 mod/network.php:475 msgid "No such group" msgstr "Es gibt keine solche Gruppe" -#: mod/content.php:130 mod/group.php:203 mod/network.php:495 +#: mod/content.php:130 mod/group.php:213 mod/network.php:502 msgid "Group is empty" msgstr "Gruppe ist leer" -#: mod/content.php:135 mod/network.php:499 +#: mod/content.php:135 mod/network.php:506 #, php-format msgid "Group: %s" msgstr "Gruppe: %s" @@ -3254,18 +3594,18 @@ msgstr "Gruppe: %s" msgid "This entry was edited" msgstr "Dieser Beitrag wurde bearbeitet." -#: mod/content.php:621 object/Item.php:444 +#: mod/content.php:621 object/Item.php:417 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d Kommentar" msgstr[1] "%d Kommentare" -#: mod/content.php:638 mod/photos.php:1402 object/Item.php:117 +#: mod/content.php:638 mod/photos.php:1429 object/Item.php:117 msgid "Private Message" msgstr "Private Nachricht" -#: mod/content.php:702 mod/photos.php:1590 object/Item.php:274 +#: mod/content.php:702 mod/photos.php:1625 object/Item.php:274 msgid "I like this (toggle)" msgstr "Ich mag das (toggle)" @@ -3273,7 +3613,7 @@ msgstr "Ich mag das (toggle)" msgid "like" msgstr "mag ich" -#: mod/content.php:703 mod/photos.php:1591 object/Item.php:275 +#: mod/content.php:703 mod/photos.php:1626 object/Item.php:275 msgid "I don't like this (toggle)" msgstr "Ich mag das nicht (toggle)" @@ -3289,59 +3629,46 @@ msgstr "Weitersagen" msgid "share" msgstr "Teilen" -#: mod/content.php:725 mod/photos.php:1609 mod/photos.php:1657 -#: mod/photos.php:1743 object/Item.php:729 +#: mod/content.php:725 mod/photos.php:1643 mod/photos.php:1685 +#: mod/photos.php:1765 object/Item.php:702 msgid "This is you" msgstr "Das bist Du" -#: mod/content.php:727 mod/content.php:950 mod/photos.php:1611 -#: mod/photos.php:1659 mod/photos.php:1745 object/Item.php:418 -#: object/Item.php:731 +#: mod/content.php:727 mod/content.php:950 mod/photos.php:1645 +#: mod/photos.php:1687 mod/photos.php:1767 object/Item.php:392 +#: object/Item.php:704 msgid "Comment" msgstr "Kommentar" -#: mod/content.php:728 mod/crepair.php:156 mod/fsuggest.php:108 -#: mod/invite.php:142 mod/localtime.php:45 mod/manage.php:145 mod/mood.php:138 -#: mod/poke.php:203 mod/contacts.php:585 mod/events.php:513 -#: mod/message.php:338 mod/message.php:521 mod/photos.php:1124 -#: mod/photos.php:1246 mod/photos.php:1562 mod/photos.php:1612 -#: mod/photos.php:1660 mod/photos.php:1746 mod/install.php:276 -#: mod/install.php:316 mod/profiles.php:680 object/Item.php:732 -#: view/theme/quattro/config.php:67 view/theme/vier/config.php:112 -#: view/theme/duepuntozero/config.php:61 view/theme/clean/config.php:87 -#: view/theme/frio/config.php:64 -msgid "Submit" -msgstr "Senden" - -#: mod/content.php:729 object/Item.php:733 +#: mod/content.php:729 object/Item.php:706 msgid "Bold" msgstr "Fett" -#: mod/content.php:730 object/Item.php:734 +#: mod/content.php:730 object/Item.php:707 msgid "Italic" msgstr "Kursiv" -#: mod/content.php:731 object/Item.php:735 +#: mod/content.php:731 object/Item.php:708 msgid "Underline" msgstr "Unterstrichen" -#: mod/content.php:732 object/Item.php:736 +#: mod/content.php:732 object/Item.php:709 msgid "Quote" msgstr "Zitat" -#: mod/content.php:733 object/Item.php:737 +#: mod/content.php:733 object/Item.php:710 msgid "Code" msgstr "Code" -#: mod/content.php:734 object/Item.php:738 +#: mod/content.php:734 object/Item.php:711 msgid "Image" msgstr "Bild" -#: mod/content.php:735 object/Item.php:739 +#: mod/content.php:735 object/Item.php:712 msgid "Link" msgstr "Link" -#: mod/content.php:736 object/Item.php:740 +#: mod/content.php:736 object/Item.php:713 msgid "Video" msgstr "Video" @@ -3402,15 +3729,15 @@ msgstr "Ich werde nicht teilnehmen" msgid "I might attend" msgstr "Ich werde eventuell teilnehmen" -#: mod/content.php:917 object/Item.php:384 +#: mod/content.php:917 object/Item.php:358 msgid "to" msgstr "zu" -#: mod/content.php:918 object/Item.php:386 +#: mod/content.php:918 object/Item.php:360 msgid "Wall-to-Wall" msgstr "Wall-to-Wall" -#: mod/content.php:919 object/Item.php:387 +#: mod/content.php:919 object/Item.php:361 msgid "via Wall-To-Wall:" msgstr "via Wall-To-Wall:" @@ -3485,7 +3812,7 @@ msgid "" msgstr "Markiere diesen Kontakt als remote_self (entferntes Konto), dies veranlasst Friendica alle Top-Level Beiträge dieses Kontakts an all Deine Kontakte zu senden." #: mod/crepair.php:167 mod/settings.php:683 mod/settings.php:709 -#: mod/admin.php:1417 mod/admin.php:1430 mod/admin.php:1443 mod/admin.php:1459 +#: mod/admin.php:1490 mod/admin.php:1503 mod/admin.php:1516 mod/admin.php:1532 msgid "Name" msgstr "Name" @@ -3561,7 +3888,14 @@ msgstr "Keine Einträge." msgid "%1$s welcomes %2$s" msgstr "%1$s heißt %2$s herzlich willkommen" -#: mod/directory.php:199 view/theme/vier/theme.php:196 +#: mod/directory.php:37 mod/display.php:200 mod/viewcontacts.php:36 +#: mod/community.php:18 mod/dfrn_request.php:804 mod/photos.php:979 +#: mod/probe.php:9 mod/search.php:93 mod/search.php:99 mod/videos.php:198 +#: mod/webfinger.php:8 +msgid "Public access denied." +msgstr "Öffentlicher Zugriff verweigert." + +#: mod/directory.php:199 view/theme/vier/theme.php:199 msgid "Global Directory" msgstr "Weltweites Verzeichnis" @@ -3581,69 +3915,35 @@ msgstr "Verzeichnis" msgid "No entries (some entries may be hidden)." msgstr "Keine Einträge (einige Einträge könnten versteckt sein)." -#: mod/dirfind.php:37 -#, php-format -msgid "People Search - %s" -msgstr "Personensuche - %s" +#: mod/display.php:328 mod/cal.php:143 mod/profile.php:155 +msgid "Access to this profile has been restricted." +msgstr "Der Zugriff zu diesem Profil wurde eingeschränkt." -#: mod/dirfind.php:48 -#, php-format -msgid "Forum Search - %s" -msgstr "Forensuche - %s" +#: mod/display.php:479 +msgid "Item has been removed." +msgstr "Eintrag wurde entfernt." -#: mod/dirfind.php:245 mod/match.php:109 -msgid "No matches" -msgstr "Keine Übereinstimmungen" +#: mod/editpost.php:17 mod/editpost.php:27 +msgid "Item not found" +msgstr "Beitrag nicht gefunden" + +#: mod/editpost.php:32 +msgid "Edit post" +msgstr "Beitrag bearbeiten" + +#: mod/fbrowser.php:132 +msgid "Files" +msgstr "Dateien" + +#: mod/fetch.php:12 mod/fetch.php:39 mod/fetch.php:48 mod/help.php:53 +#: mod/p.php:16 mod/p.php:43 mod/p.php:52 index.php:298 +msgid "Not Found" +msgstr "Nicht gefunden" #: mod/filer.php:30 msgid "- select -" msgstr "- auswählen -" -#: mod/follow.php:19 mod/dfrn_request.php:888 -msgid "Submit Request" -msgstr "Anfrage abschicken" - -#: mod/follow.php:30 -msgid "You already added this contact." -msgstr "Du hast den Kontakt bereits hinzugefügt." - -#: mod/follow.php:39 -msgid "Diaspora support isn't enabled. Contact can't be added." -msgstr "Diaspora Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden." - -#: mod/follow.php:46 -msgid "OStatus support is disabled. Contact can't be added." -msgstr "OStatus Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden." - -#: mod/follow.php:53 -msgid "The network type couldn't be detected. Contact can't be added." -msgstr "Der Netzwerktype wurde nicht erkannt. Der Kontakt kann nicht hinzugefügt werden." - -#: mod/follow.php:112 mod/dfrn_request.php:874 -msgid "Please answer the following:" -msgstr "Bitte beantworte folgendes:" - -#: mod/follow.php:113 mod/dfrn_request.php:875 -#, php-format -msgid "Does %s know you?" -msgstr "Kennt %s Dich?" - -#: mod/follow.php:114 mod/dfrn_request.php:879 -msgid "Add a personal note:" -msgstr "Eine persönliche Notiz beifügen:" - -#: mod/follow.php:120 mod/dfrn_request.php:885 -msgid "Your Identity Address:" -msgstr "Adresse Deines Profils:" - -#: mod/follow.php:129 mod/contacts.php:632 mod/notifications.php:249 -msgid "Profile URL" -msgstr "Profil URL" - -#: mod/follow.php:186 -msgid "Contact added" -msgstr "Kontakt hinzugefügt" - #: mod/fsuggest.php:64 msgid "Friend suggestion sent." msgstr "Kontaktvorschlag gesendet." @@ -3657,58 +3957,6 @@ msgstr "Kontakte vorschlagen" msgid "Suggest a friend for %s" msgstr "Schlage %s einen Kontakt vor" -#: mod/group.php:29 -msgid "Group created." -msgstr "Gruppe erstellt." - -#: mod/group.php:35 -msgid "Could not create group." -msgstr "Konnte die Gruppe nicht erstellen." - -#: mod/group.php:49 mod/group.php:150 -msgid "Group not found." -msgstr "Gruppe nicht gefunden." - -#: mod/group.php:63 -msgid "Group name changed." -msgstr "Gruppenname geändert." - -#: mod/group.php:76 mod/profperm.php:20 index.php:406 -msgid "Permission denied" -msgstr "Zugriff verweigert" - -#: mod/group.php:91 -msgid "Save Group" -msgstr "Gruppe speichern" - -#: mod/group.php:97 -msgid "Create a group of contacts/friends." -msgstr "Eine Kontaktgruppe anlegen." - -#: mod/group.php:122 -msgid "Group removed." -msgstr "Gruppe entfernt." - -#: mod/group.php:124 -msgid "Unable to remove group." -msgstr "Konnte die Gruppe nicht entfernen." - -#: mod/group.php:187 -msgid "Group Editor" -msgstr "Gruppeneditor" - -#: mod/group.php:200 -msgid "Members" -msgstr "Mitglieder" - -#: mod/group.php:202 mod/contacts.php:700 -msgid "All Contacts" -msgstr "Alle Kontakte" - -#: mod/group.php:233 mod/profperm.php:107 -msgid "Click on a contact to add or remove." -msgstr "Klicke einen Kontakt an, um ihn hinzuzufügen oder zu entfernen" - #: mod/hcard.php:11 msgid "No profile" msgstr "Kein Profil" @@ -3717,12 +3965,7 @@ msgstr "Kein Profil" msgid "Help:" msgstr "Hilfe:" -#: mod/help.php:53 mod/fetch.php:12 mod/fetch.php:39 mod/fetch.php:48 -#: mod/p.php:16 mod/p.php:43 mod/p.php:52 index.php:292 -msgid "Not Found" -msgstr "Nicht gefunden" - -#: mod/help.php:56 index.php:295 +#: mod/help.php:56 index.php:301 msgid "Page not found." msgstr "Seite nicht gefunden." @@ -3802,8 +4045,8 @@ msgstr "Einladungen senden" msgid "Enter email addresses, one per line:" msgstr "E-Mail-Adressen eingeben, eine pro Zeile:" -#: mod/invite.php:136 mod/message.php:332 mod/message.php:515 -#: mod/wallmessage.php:135 +#: mod/invite.php:136 mod/wallmessage.php:135 mod/message.php:332 +#: mod/message.php:515 msgid "Your message:" msgstr "Deine Nachricht:" @@ -3917,7 +4160,7 @@ msgid "" "Password reset failed." msgstr "Anfrage konnte nicht verifiziert werden. (Eventuell hast Du bereits eine ähnliche Anfrage gestellt.) Zurücksetzen des Passworts gescheitert." -#: mod/lostpass.php:110 boot.php:1848 +#: mod/lostpass.php:110 boot.php:1882 msgid "Password Reset" msgstr "Passwort zurücksetzen" @@ -3983,7 +4226,7 @@ msgid "" "your email for further instructions." msgstr "Gib Deine E-Mail-Adresse an und fordere ein neues Passwort an. Es werden Dir dann weitere Informationen per Mail zugesendet." -#: mod/lostpass.php:161 boot.php:1836 +#: mod/lostpass.php:161 boot.php:1870 msgid "Nickname or Email: " msgstr "Spitzname oder E-Mail:" @@ -3991,24 +4234,10 @@ msgstr "Spitzname oder E-Mail:" msgid "Reset" msgstr "Zurücksetzen" -#: mod/maintenance.php:9 +#: mod/maintenance.php:20 msgid "System down for maintenance" msgstr "System zur Wartung abgeschaltet" -#: mod/manage.php:141 -msgid "Manage Identities and/or Pages" -msgstr "Verwalte Identitäten und/oder Seiten" - -#: mod/manage.php:142 -msgid "" -"Toggle between different identities or community/group pages which share " -"your account details or which you have been granted \"manage\" permissions" -msgstr "Zwischen verschiedenen Identitäten oder Gemeinschafts-/Gruppenseiten wechseln, die Deine Kontoinformationen teilen oder zu denen Du „Verwalten“-Befugnisse bekommen hast." - -#: mod/manage.php:143 -msgid "Select an identity to manage: " -msgstr "Wähle eine Identität zum Verwalten aus: " - #: mod/match.php:35 msgid "No keywords to match. Please add keywords to your default profile." msgstr "Keine Schlüsselwörter zum Abgleichen gefunden. Bitte füge einige Schlüsselwörter zu Deinem Standardprofil hinzu." @@ -4021,6 +4250,10 @@ msgstr "ist interessiert an:" msgid "Profile Match" msgstr "Profilübereinstimmungen" +#: mod/match.php:109 mod/dirfind.php:245 +msgid "No matches" +msgstr "Keine Übereinstimmungen" + #: mod/mood.php:134 msgid "Mood" msgstr "Stimmung" @@ -4079,7 +4312,7 @@ msgid "" "potential friends know exactly how to find you." msgstr "Überprüfe die restlichen Einstellungen, insbesondere die Einstellungen zur Privatsphäre. Wenn Du Dein Profil nicht veröffentlichst, ist das als wenn Du Deine Telefonnummer nicht ins Telefonbuch einträgst. Im Allgemeinen solltest Du es veröffentlichen - außer all Deine Kontakte und potentiellen Kontakte wissen genau, wie sie Dich finden können." -#: mod/newmember.php:36 mod/profile_photo.php:256 mod/profiles.php:699 +#: mod/newmember.php:36 mod/profile_photo.php:256 mod/profiles.php:700 msgid "Upload Profile Photo" msgstr "Profilbild hochladen" @@ -4198,16 +4431,6 @@ msgid "" " features and resources." msgstr "Unsere Hilfe Seiten können herangezogen werden, um weitere Einzelheiten zu andern Programm Features zu erhalten." -#: mod/nogroup.php:43 mod/contacts.php:594 mod/contacts.php:938 -#: mod/viewcontacts.php:102 -#, php-format -msgid "Visit %s's profile [%s]" -msgstr "Besuche %ss Profil [%s]" - -#: mod/nogroup.php:44 mod/contacts.php:939 -msgid "Edit contact" -msgstr "Kontakt bearbeiten" - #: mod/nogroup.php:65 msgid "Contacts who are not members of a group" msgstr "Kontakte, die keiner Gruppe zugewiesen sind" @@ -4224,15 +4447,6 @@ msgstr "Systembenachrichtigungen" msgid "Post successful." msgstr "Beitrag erfolgreich veröffentlicht." -#: mod/openid.php:24 -msgid "OpenID protocol error. No ID returned." -msgstr "OpenID Protokollfehler. Keine ID zurückgegeben." - -#: mod/openid.php:60 -msgid "" -"Account not found and OpenID registration is not permitted on this site." -msgstr "Nutzerkonto wurde nicht gefunden und OpenID-Registrierung ist auf diesem Server nicht gestattet." - #: mod/ostatus_subscribe.php:14 msgid "Subscribing to OStatus contacts" msgstr "OStatus Kontakten folgen" @@ -4265,6 +4479,10 @@ msgstr "Fehlgeschlagen" msgid "Keep this window open until done." msgstr "Lasse dieses Fenster offen, bis der Vorgang abgeschlossen ist." +#: mod/p.php:9 +msgid "Not Extended" +msgstr "Nicht erweitert." + #: mod/poke.php:196 msgid "Poke/Prod" msgstr "Anstupsen" @@ -4285,14 +4503,6 @@ msgstr "Was willst Du mit dem Empfänger machen:" msgid "Make this post private" msgstr "Diesen Beitrag privat machen" -#: mod/profile.php:154 mod/cal.php:143 mod/display.php:328 -msgid "Access to this profile has been restricted." -msgstr "Der Zugriff zu diesem Profil wurde eingeschränkt." - -#: mod/profile.php:174 -msgid "Tips for New Members" -msgstr "Tipps für neue Nutzer" - #: mod/profile_photo.php:44 msgid "Image uploaded but image cropping failed." msgstr "Bild hochgeladen, aber das Zuschneiden schlug fehl." @@ -4313,12 +4523,12 @@ msgstr "Drücke Umschalt+Neu Laden oder leere den Browser-Cache, falls das neue msgid "Unable to process image" msgstr "Bild konnte nicht verarbeitet werden" -#: mod/profile_photo.php:156 mod/wall_upload.php:151 mod/photos.php:803 +#: mod/profile_photo.php:156 mod/photos.php:813 mod/wall_upload.php:181 #, php-format msgid "Image exceeds size limit of %s" msgstr "Bildgröße überschreitet das Limit von %s" -#: mod/profile_photo.php:165 mod/wall_upload.php:186 mod/photos.php:844 +#: mod/profile_photo.php:165 mod/photos.php:854 mod/wall_upload.php:218 msgid "Unable to process image." msgstr "Konnte das Bild nicht bearbeiten." @@ -4362,10 +4572,14 @@ msgstr "Bearbeitung abgeschlossen" msgid "Image uploaded successfully." msgstr "Bild erfolgreich hochgeladen." -#: mod/profile_photo.php:315 mod/wall_upload.php:219 mod/photos.php:871 +#: mod/profile_photo.php:315 mod/photos.php:883 mod/wall_upload.php:257 msgid "Image upload failed." msgstr "Hochladen des Bildes gescheitert." +#: mod/profperm.php:20 mod/group.php:76 index.php:406 +msgid "Permission denied" +msgstr "Zugriff verweigert" + #: mod/profperm.php:26 mod/profperm.php:57 msgid "Invalid profile identifier." msgstr "Ungültiger Profil-Bezeichner." @@ -4374,6 +4588,10 @@ msgstr "Ungültiger Profil-Bezeichner." msgid "Profile Visibility Editor" msgstr "Editor für die Profil-Sichtbarkeit" +#: mod/profperm.php:107 mod/group.php:262 +msgid "Click on a contact to add or remove." +msgstr "Klicke einen Kontakt an, um ihn hinzuzufügen oder zu entfernen" + #: mod/profperm.php:116 msgid "Visible To" msgstr "Sichtbar für" @@ -4382,6 +4600,1378 @@ msgstr "Sichtbar für" msgid "All Contacts (with secure profile access)" msgstr "Alle Kontakte (mit gesichertem Profilzugriff)" +#: mod/regmod.php:58 +msgid "Account approved." +msgstr "Konto freigegeben." + +#: mod/regmod.php:95 +#, php-format +msgid "Registration revoked for %s" +msgstr "Registrierung für %s wurde zurückgezogen" + +#: mod/regmod.php:107 +msgid "Please login." +msgstr "Bitte melde Dich an." + +#: mod/removeme.php:52 mod/removeme.php:55 +msgid "Remove My Account" +msgstr "Konto löschen" + +#: mod/removeme.php:53 +msgid "" +"This will completely remove your account. Once this has been done it is not " +"recoverable." +msgstr "Dein Konto wird endgültig gelöscht. Es gibt keine Möglichkeit, es wiederherzustellen." + +#: mod/removeme.php:54 +msgid "Please enter your password for verification:" +msgstr "Bitte gib Dein Passwort zur Verifikation ein:" + +#: mod/repair_ostatus.php:14 +msgid "Resubscribing to OStatus contacts" +msgstr "Erneuern der OStatus Abonements" + +#: mod/repair_ostatus.php:30 +msgid "Error" +msgstr "Fehler" + +#: mod/subthread.php:104 +#, php-format +msgid "%1$s is following %2$s's %3$s" +msgstr "%1$s folgt %2$s %3$s" + +#: mod/suggest.php:27 +msgid "Do you really want to delete this suggestion?" +msgstr "Möchtest Du wirklich diese Empfehlung löschen?" + +#: mod/suggest.php:71 +msgid "" +"No suggestions available. If this is a new site, please try again in 24 " +"hours." +msgstr "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde, versuche es bitte in 24 Stunden noch einmal." + +#: mod/suggest.php:84 mod/suggest.php:104 +msgid "Ignore/Hide" +msgstr "Ignorieren/Verbergen" + +#: mod/tagrm.php:43 +msgid "Tag removed" +msgstr "Tag entfernt" + +#: mod/tagrm.php:82 +msgid "Remove Item Tag" +msgstr "Gegenstands-Tag entfernen" + +#: mod/tagrm.php:84 +msgid "Select a tag to remove: " +msgstr "Wähle ein Tag zum Entfernen aus: " + +#: mod/uimport.php:51 mod/register.php:198 +msgid "" +"This site has exceeded the number of allowed daily account registrations. " +"Please try again tomorrow." +msgstr "Die maximale Anzahl täglicher Registrierungen auf dieser Seite wurde überschritten. Bitte versuche es morgen noch einmal." + +#: mod/uimport.php:66 mod/register.php:295 +msgid "Import" +msgstr "Import" + +#: mod/uimport.php:68 +msgid "Move account" +msgstr "Account umziehen" + +#: mod/uimport.php:69 +msgid "You can import an account from another Friendica server." +msgstr "Du kannst einen Account von einem anderen Friendica Server importieren." + +#: mod/uimport.php:70 +msgid "" +"You need to export your account from the old server and upload it here. We " +"will recreate your old account here with all your contacts. We will try also" +" to inform your friends that you moved here." +msgstr "Du musst Deinen Account vom alten Server exportieren und hier hochladen. Wir stellen Deinen alten Account mit all Deinen Kontakten wieder her. Wir werden auch versuchen all Deine Kontakte darüber zu informieren, dass Du hierher umgezogen bist." + +#: mod/uimport.php:71 +msgid "" +"This feature is experimental. We can't import contacts from the OStatus " +"network (GNU Social/Statusnet) or from Diaspora" +msgstr "Dieses Feature ist experimentell. Wir können keine Kontakte vom OStatus Netzwerk (GNU Social/Statusnet) oder von Diaspora importieren" + +#: mod/uimport.php:72 +msgid "Account file" +msgstr "Account Datei" + +#: mod/uimport.php:72 +msgid "" +"To export your account, go to \"Settings->Export your personal data\" and " +"select \"Export account\"" +msgstr "Um Deinen Account zu exportieren, rufe \"Einstellungen -> Persönliche Daten exportieren\" auf und wähle \"Account exportieren\"" + +#: mod/update_community.php:19 mod/update_display.php:23 +#: mod/update_network.php:27 mod/update_notes.php:36 mod/update_profile.php:35 +msgid "[Embedded content - reload page to view]" +msgstr "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]" + +#: mod/viewcontacts.php:75 +msgid "No contacts." +msgstr "Keine Kontakte." + +#: mod/viewsrc.php:7 +msgid "Access denied." +msgstr "Zugriff verweigert." + +#: mod/wall_attach.php:17 mod/wall_attach.php:25 mod/wall_attach.php:76 +#: mod/wall_upload.php:36 mod/wall_upload.php:52 mod/wall_upload.php:110 +#: mod/wall_upload.php:150 mod/wall_upload.php:153 +msgid "Invalid request." +msgstr "Ungültige Anfrage" + +#: mod/wall_attach.php:94 +msgid "Sorry, maybe your upload is bigger than the PHP configuration allows" +msgstr "Entschuldige, die Datei scheint größer zu sein als es die PHP Konfiguration erlaubt." + +#: mod/wall_attach.php:94 +msgid "Or - did you try to upload an empty file?" +msgstr "Oder - hast Du versucht, eine leere Datei hochzuladen?" + +#: mod/wall_attach.php:105 +#, php-format +msgid "File exceeds size limit of %s" +msgstr "Die Datei ist größer als das erlaubte Limit von %s" + +#: mod/wall_attach.php:158 mod/wall_attach.php:174 +msgid "File upload failed." +msgstr "Hochladen der Datei fehlgeschlagen." + +#: mod/wallmessage.php:42 mod/wallmessage.php:106 +#, php-format +msgid "Number of daily wall messages for %s exceeded. Message failed." +msgstr "Maximale Anzahl der täglichen Pinnwand Nachrichten für %s ist überschritten. Zustellung fehlgeschlagen." + +#: mod/wallmessage.php:50 mod/message.php:60 +msgid "No recipient selected." +msgstr "Kein Empfänger gewählt." + +#: mod/wallmessage.php:53 +msgid "Unable to check your home location." +msgstr "Konnte Deinen Heimatort nicht bestimmen." + +#: mod/wallmessage.php:56 mod/message.php:67 +msgid "Message could not be sent." +msgstr "Nachricht konnte nicht gesendet werden." + +#: mod/wallmessage.php:59 mod/message.php:70 +msgid "Message collection failure." +msgstr "Konnte Nachrichten nicht abrufen." + +#: mod/wallmessage.php:62 mod/message.php:73 +msgid "Message sent." +msgstr "Nachricht gesendet." + +#: mod/wallmessage.php:80 mod/wallmessage.php:89 +msgid "No recipient." +msgstr "Kein Empfänger." + +#: mod/wallmessage.php:126 mod/message.php:322 +msgid "Send Private Message" +msgstr "Private Nachricht senden" + +#: mod/wallmessage.php:127 +#, php-format +msgid "" +"If you wish for %s to respond, please check that the privacy settings on " +"your site allow private mail from unknown senders." +msgstr "Wenn Du möchtest, dass %s Dir antworten kann, überprüfe Deine Privatsphären-Einstellungen und erlaube private Nachrichten von unbekannten Absendern." + +#: mod/wallmessage.php:128 mod/message.php:323 mod/message.php:510 +msgid "To:" +msgstr "An:" + +#: mod/wallmessage.php:129 mod/message.php:328 mod/message.php:512 +msgid "Subject:" +msgstr "Betreff:" + +#: mod/babel.php:16 +msgid "Source (bbcode) text:" +msgstr "Quelle (bbcode) Text:" + +#: mod/babel.php:23 +msgid "Source (Diaspora) text to convert to BBcode:" +msgstr "Eingabe (Diaspora) nach BBCode zu konvertierender Text:" + +#: mod/babel.php:31 +msgid "Source input: " +msgstr "Originaltext:" + +#: mod/babel.php:35 +msgid "bb2html (raw HTML): " +msgstr "bb2html (reines HTML): " + +#: mod/babel.php:39 +msgid "bb2html: " +msgstr "bb2html: " + +#: mod/babel.php:43 +msgid "bb2html2bb: " +msgstr "bb2html2bb: " + +#: mod/babel.php:47 +msgid "bb2md: " +msgstr "bb2md: " + +#: mod/babel.php:51 +msgid "bb2md2html: " +msgstr "bb2md2html: " + +#: mod/babel.php:55 +msgid "bb2dia2bb: " +msgstr "bb2dia2bb: " + +#: mod/babel.php:59 +msgid "bb2md2html2bb: " +msgstr "bb2md2html2bb: " + +#: mod/babel.php:65 +msgid "Source input (Diaspora format): " +msgstr "Originaltext (Diaspora Format): " + +#: mod/babel.php:69 +msgid "diaspora2bb: " +msgstr "diaspora2bb: " + +#: mod/cal.php:271 mod/events.php:375 +msgid "View" +msgstr "Ansehen" + +#: mod/cal.php:272 mod/events.php:377 +msgid "Previous" +msgstr "Vorherige" + +#: mod/cal.php:273 mod/events.php:378 mod/install.php:201 +msgid "Next" +msgstr "Nächste" + +#: mod/cal.php:282 mod/events.php:387 +msgid "list" +msgstr "Liste" + +#: mod/cal.php:292 +msgid "User not found" +msgstr "Nutzer nicht gefunden" + +#: mod/cal.php:308 +msgid "This calendar format is not supported" +msgstr "Dieses Kalenderformat wird nicht unterstützt." + +#: mod/cal.php:310 +msgid "No exportable data found" +msgstr "Keine exportierbaren Daten gefunden" + +#: mod/cal.php:325 +msgid "calendar" +msgstr "Kalender" + +#: mod/community.php:23 +msgid "Not available." +msgstr "Nicht verfügbar." + +#: mod/community.php:50 mod/search.php:219 +msgid "No results." +msgstr "Keine Ergebnisse." + +#: mod/dfrn_confirm.php:70 mod/profiles.php:19 mod/profiles.php:135 +#: mod/profiles.php:182 mod/profiles.php:619 +msgid "Profile not found." +msgstr "Profil nicht gefunden." + +#: mod/dfrn_confirm.php:127 +msgid "" +"This may occasionally happen if contact was requested by both persons and it" +" has already been approved." +msgstr "Das kann passieren, wenn sich zwei Kontakte gegenseitig eingeladen haben und bereits einer angenommen wurde." + +#: mod/dfrn_confirm.php:244 +msgid "Response from remote site was not understood." +msgstr "Antwort der Gegenstelle unverständlich." + +#: mod/dfrn_confirm.php:253 mod/dfrn_confirm.php:258 +msgid "Unexpected response from remote site: " +msgstr "Unerwartete Antwort der Gegenstelle: " + +#: mod/dfrn_confirm.php:267 +msgid "Confirmation completed successfully." +msgstr "Bestätigung erfolgreich abgeschlossen." + +#: mod/dfrn_confirm.php:269 mod/dfrn_confirm.php:283 mod/dfrn_confirm.php:290 +msgid "Remote site reported: " +msgstr "Gegenstelle meldet: " + +#: mod/dfrn_confirm.php:281 +msgid "Temporary failure. Please wait and try again." +msgstr "Zeitweiser Fehler. Bitte warte einige Momente und versuche es dann noch einmal." + +#: mod/dfrn_confirm.php:288 +msgid "Introduction failed or was revoked." +msgstr "Kontaktanfrage schlug fehl oder wurde zurückgezogen." + +#: mod/dfrn_confirm.php:418 +msgid "Unable to set contact photo." +msgstr "Konnte das Bild des Kontakts nicht speichern." + +#: mod/dfrn_confirm.php:559 +#, php-format +msgid "No user record found for '%s' " +msgstr "Für '%s' wurde kein Nutzer gefunden" + +#: mod/dfrn_confirm.php:569 +msgid "Our site encryption key is apparently messed up." +msgstr "Der Verschlüsselungsschlüssel unserer Seite ist anscheinend nicht in Ordnung." + +#: mod/dfrn_confirm.php:580 +msgid "Empty site URL was provided or URL could not be decrypted by us." +msgstr "Leere URL für die Seite erhalten oder die URL konnte nicht entschlüsselt werden." + +#: mod/dfrn_confirm.php:602 +msgid "Contact record was not found for you on our site." +msgstr "Für diesen Kontakt wurde auf unserer Seite kein Eintrag gefunden." + +#: mod/dfrn_confirm.php:616 +#, php-format +msgid "Site public key not available in contact record for URL %s." +msgstr "Die Kontaktdaten für URL %s enthalten keinen Public Key für den Server." + +#: mod/dfrn_confirm.php:636 +msgid "" +"The ID provided by your system is a duplicate on our system. It should work " +"if you try again." +msgstr "Die ID, die uns Dein System angeboten hat, ist hier bereits vergeben. Bitte versuche es noch einmal." + +#: mod/dfrn_confirm.php:647 +msgid "Unable to set your contact credentials on our system." +msgstr "Deine Kontaktreferenzen konnten nicht in unserem System gespeichert werden." + +#: mod/dfrn_confirm.php:709 +msgid "Unable to update your contact profile details on our system" +msgstr "Die Updates für Dein Profil konnten nicht gespeichert werden" + +#: mod/dfrn_confirm.php:781 +#, php-format +msgid "%1$s has joined %2$s" +msgstr "%1$s ist %2$s beigetreten" + +#: mod/dfrn_request.php:101 +msgid "This introduction has already been accepted." +msgstr "Diese Kontaktanfrage wurde bereits akzeptiert." + +#: mod/dfrn_request.php:124 mod/dfrn_request.php:528 +msgid "Profile location is not valid or does not contain profile information." +msgstr "Profiladresse ist ungültig oder stellt keine Profildaten zur Verfügung." + +#: mod/dfrn_request.php:129 mod/dfrn_request.php:533 +msgid "Warning: profile location has no identifiable owner name." +msgstr "Warnung: Es konnte kein Name des Besitzers von der angegebenen Profiladresse gefunden werden." + +#: mod/dfrn_request.php:132 mod/dfrn_request.php:536 +msgid "Warning: profile location has no profile photo." +msgstr "Warnung: Es gibt kein Profilbild bei der angegebenen Profiladresse." + +#: mod/dfrn_request.php:136 mod/dfrn_request.php:540 +#, php-format +msgid "%d required parameter was not found at the given location" +msgid_plural "%d required parameters were not found at the given location" +msgstr[0] "%d benötigter Parameter wurde an der angegebenen Stelle nicht gefunden" +msgstr[1] "%d benötigte Parameter wurden an der angegebenen Stelle nicht gefunden" + +#: mod/dfrn_request.php:180 +msgid "Introduction complete." +msgstr "Kontaktanfrage abgeschlossen." + +#: mod/dfrn_request.php:225 +msgid "Unrecoverable protocol error." +msgstr "Nicht behebbarer Protokollfehler." + +#: mod/dfrn_request.php:253 +msgid "Profile unavailable." +msgstr "Profil nicht verfügbar." + +#: mod/dfrn_request.php:280 +#, php-format +msgid "%s has received too many connection requests today." +msgstr "%s hat heute zu viele Kontaktanfragen erhalten." + +#: mod/dfrn_request.php:281 +msgid "Spam protection measures have been invoked." +msgstr "Maßnahmen zum Spamschutz wurden ergriffen." + +#: mod/dfrn_request.php:282 +msgid "Friends are advised to please try again in 24 hours." +msgstr "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen." + +#: mod/dfrn_request.php:344 +msgid "Invalid locator" +msgstr "Ungültiger Locator" + +#: mod/dfrn_request.php:353 +msgid "Invalid email address." +msgstr "Ungültige E-Mail-Adresse." + +#: mod/dfrn_request.php:378 +msgid "This account has not been configured for email. Request failed." +msgstr "Dieses Konto ist nicht für E-Mail konfiguriert. Anfrage fehlgeschlagen." + +#: mod/dfrn_request.php:481 +msgid "You have already introduced yourself here." +msgstr "Du hast Dich hier bereits vorgestellt." + +#: mod/dfrn_request.php:485 +#, php-format +msgid "Apparently you are already friends with %s." +msgstr "Es scheint so, als ob Du bereits mit %s in Kontakt stehst." + +#: mod/dfrn_request.php:506 +msgid "Invalid profile URL." +msgstr "Ungültige Profil-URL." + +#: mod/dfrn_request.php:614 +msgid "Your introduction has been sent." +msgstr "Deine Kontaktanfrage wurde gesendet." + +#: mod/dfrn_request.php:656 +msgid "" +"Remote subscription can't be done for your network. Please subscribe " +"directly on your system." +msgstr "Entferntes abon­nie­ren kann für dein Netzwerk nicht durchgeführt werden. Bitte nutze direkt die Abonnieren-Funktion deines Systems. " + +#: mod/dfrn_request.php:677 +msgid "Please login to confirm introduction." +msgstr "Bitte melde Dich an, um die Kontaktanfrage zu bestätigen." + +#: mod/dfrn_request.php:687 +msgid "" +"Incorrect identity currently logged in. Please login to " +"this profile." +msgstr "Momentan bist Du mit einer anderen Identität angemeldet. Bitte melde Dich mit diesem Profil an." + +#: mod/dfrn_request.php:701 mod/dfrn_request.php:718 +msgid "Confirm" +msgstr "Bestätigen" + +#: mod/dfrn_request.php:713 +msgid "Hide this contact" +msgstr "Verberge diesen Kontakt" + +#: mod/dfrn_request.php:716 +#, php-format +msgid "Welcome home %s." +msgstr "Willkommen zurück %s." + +#: mod/dfrn_request.php:717 +#, php-format +msgid "Please confirm your introduction/connection request to %s." +msgstr "Bitte bestätige Deine Kontaktanfrage bei %s." + +#: mod/dfrn_request.php:848 +msgid "" +"Please enter your 'Identity Address' from one of the following supported " +"communications networks:" +msgstr "Bitte gib die Adresse Deines Profils in einem der unterstützten sozialen Netzwerke an:" + +#: mod/dfrn_request.php:872 +#, php-format +msgid "" +"If you are not yet a member of the free social web, follow this link to find a public Friendica site and " +"join us today." +msgstr "Wenn du noch kein Mitglied dieses freien sozialen Netzwerks bist, folge diesem Link um einen öffentlichen Friendica-Server zu finden und beizutreten." + +#: mod/dfrn_request.php:877 +msgid "Friend/Connection Request" +msgstr "Kontaktanfrage" + +#: mod/dfrn_request.php:878 +msgid "" +"Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, " +"testuser@identi.ca" +msgstr "Beispiele: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca" + +#: mod/dfrn_request.php:879 mod/follow.php:112 +msgid "Please answer the following:" +msgstr "Bitte beantworte folgendes:" + +#: mod/dfrn_request.php:880 mod/follow.php:113 +#, php-format +msgid "Does %s know you?" +msgstr "Kennt %s Dich?" + +#: mod/dfrn_request.php:884 mod/follow.php:114 +msgid "Add a personal note:" +msgstr "Eine persönliche Notiz beifügen:" + +#: mod/dfrn_request.php:887 +msgid "StatusNet/Federated Social Web" +msgstr "StatusNet/Federated Social Web" + +#: mod/dfrn_request.php:889 +#, php-format +msgid "" +" - please do not use this form. Instead, enter %s into your Diaspora search" +" bar." +msgstr " - bitte verwende dieses Formular nicht. Stattdessen suche nach %s in Deiner Diaspora Suchleiste." + +#: mod/dfrn_request.php:890 mod/follow.php:120 +msgid "Your Identity Address:" +msgstr "Adresse Deines Profils:" + +#: mod/dfrn_request.php:893 mod/follow.php:19 +msgid "Submit Request" +msgstr "Anfrage abschicken" + +#: mod/dirfind.php:37 +#, php-format +msgid "People Search - %s" +msgstr "Personensuche - %s" + +#: mod/dirfind.php:48 +#, php-format +msgid "Forum Search - %s" +msgstr "Forensuche - %s" + +#: mod/events.php:93 mod/events.php:95 +msgid "Event can not end before it has started." +msgstr "Die Veranstaltung kann nicht enden bevor sie beginnt." + +#: mod/events.php:102 mod/events.php:104 +msgid "Event title and start time are required." +msgstr "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden." + +#: mod/events.php:376 +msgid "Create New Event" +msgstr "Neue Veranstaltung erstellen" + +#: mod/events.php:481 +msgid "Event details" +msgstr "Veranstaltungsdetails" + +#: mod/events.php:482 +msgid "Starting date and Title are required." +msgstr "Anfangszeitpunkt und Titel werden benötigt" + +#: mod/events.php:483 mod/events.php:484 +msgid "Event Starts:" +msgstr "Veranstaltungsbeginn:" + +#: mod/events.php:483 mod/events.php:495 mod/profiles.php:709 +msgid "Required" +msgstr "Benötigt" + +#: mod/events.php:485 mod/events.php:501 +msgid "Finish date/time is not known or not relevant" +msgstr "Enddatum/-zeit ist nicht bekannt oder nicht relevant" + +#: mod/events.php:487 mod/events.php:488 +msgid "Event Finishes:" +msgstr "Veranstaltungsende:" + +#: mod/events.php:489 mod/events.php:502 +msgid "Adjust for viewer timezone" +msgstr "An Zeitzone des Betrachters anpassen" + +#: mod/events.php:491 +msgid "Description:" +msgstr "Beschreibung" + +#: mod/events.php:495 mod/events.php:497 +msgid "Title:" +msgstr "Titel:" + +#: mod/events.php:498 mod/events.php:499 +msgid "Share this event" +msgstr "Veranstaltung teilen" + +#: mod/events.php:528 +msgid "Failed to remove event" +msgstr "Entfernen der Veranstaltung fehlgeschlagen" + +#: mod/events.php:530 +msgid "Event removed" +msgstr "Veranstaltung enfternt" + +#: mod/follow.php:30 +msgid "You already added this contact." +msgstr "Du hast den Kontakt bereits hinzugefügt." + +#: mod/follow.php:39 +msgid "Diaspora support isn't enabled. Contact can't be added." +msgstr "Diaspora Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden." + +#: mod/follow.php:46 +msgid "OStatus support is disabled. Contact can't be added." +msgstr "OStatus Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden." + +#: mod/follow.php:53 +msgid "The network type couldn't be detected. Contact can't be added." +msgstr "Der Netzwerktype wurde nicht erkannt. Der Kontakt kann nicht hinzugefügt werden." + +#: mod/follow.php:186 +msgid "Contact added" +msgstr "Kontakt hinzugefügt" + +#: mod/friendica.php:68 +msgid "This is Friendica, version" +msgstr "Dies ist Friendica, Version" + +#: mod/friendica.php:69 +msgid "running at web location" +msgstr "die unter folgender Webadresse zu finden ist" + +#: mod/friendica.php:73 +msgid "" +"Please visit Friendica.com to learn " +"more about the Friendica project." +msgstr "Bitte besuche Friendica.com, um mehr über das Friendica Projekt zu erfahren." + +#: mod/friendica.php:77 +msgid "Bug reports and issues: please visit" +msgstr "Probleme oder Fehler gefunden? Bitte besuche" + +#: mod/friendica.php:77 +msgid "the bugtracker at github" +msgstr "den Bugtracker auf github" + +#: mod/friendica.php:80 +msgid "" +"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - " +"dot com" +msgstr "Vorschläge, Lob, Spenden usw.: E-Mail an \"Info\" at Friendica - dot com" + +#: mod/friendica.php:94 +msgid "Installed plugins/addons/apps:" +msgstr "Installierte Plugins/Erweiterungen/Apps:" + +#: mod/friendica.php:108 +msgid "No installed plugins/addons/apps" +msgstr "Keine Plugins/Erweiterungen/Apps installiert" + +#: mod/friendica.php:113 +msgid "On this server the following remote servers are blocked." +msgstr "Auf diesem Server werden die folgenden entfernten Server blockiert." + +#: mod/friendica.php:114 mod/admin.php:280 mod/admin.php:298 +msgid "Reason for the block" +msgstr "Begründung für die Blockierung" + +#: mod/group.php:29 +msgid "Group created." +msgstr "Gruppe erstellt." + +#: mod/group.php:35 +msgid "Could not create group." +msgstr "Konnte die Gruppe nicht erstellen." + +#: mod/group.php:49 mod/group.php:154 +msgid "Group not found." +msgstr "Gruppe nicht gefunden." + +#: mod/group.php:63 +msgid "Group name changed." +msgstr "Gruppenname geändert." + +#: mod/group.php:93 +msgid "Save Group" +msgstr "Gruppe speichern" + +#: mod/group.php:98 +msgid "Create a group of contacts/friends." +msgstr "Eine Kontaktgruppe anlegen." + +#: mod/group.php:123 +msgid "Group removed." +msgstr "Gruppe entfernt." + +#: mod/group.php:125 +msgid "Unable to remove group." +msgstr "Konnte die Gruppe nicht entfernen." + +#: mod/group.php:189 +msgid "Delete Group" +msgstr "Gruppe löschen" + +#: mod/group.php:195 +msgid "Group Editor" +msgstr "Gruppeneditor" + +#: mod/group.php:200 +msgid "Edit Group Name" +msgstr "Gruppen Name bearbeiten" + +#: mod/group.php:210 +msgid "Members" +msgstr "Mitglieder" + +#: mod/group.php:226 +msgid "Remove Contact" +msgstr "Kontakt löschen" + +#: mod/group.php:250 +msgid "Add Contact" +msgstr "Kontakt hinzufügen" + +#: mod/manage.php:151 +msgid "Manage Identities and/or Pages" +msgstr "Verwalte Identitäten und/oder Seiten" + +#: mod/manage.php:152 +msgid "" +"Toggle between different identities or community/group pages which share " +"your account details or which you have been granted \"manage\" permissions" +msgstr "Zwischen verschiedenen Identitäten oder Gemeinschafts-/Gruppenseiten wechseln, die Deine Kontoinformationen teilen oder zu denen Du „Verwalten“-Befugnisse bekommen hast." + +#: mod/manage.php:153 +msgid "Select an identity to manage: " +msgstr "Wähle eine Identität zum Verwalten aus: " + +#: mod/message.php:64 +msgid "Unable to locate contact information." +msgstr "Konnte die Kontaktinformationen nicht finden." + +#: mod/message.php:204 +msgid "Do you really want to delete this message?" +msgstr "Möchtest Du wirklich diese Nachricht löschen?" + +#: mod/message.php:224 +msgid "Message deleted." +msgstr "Nachricht gelöscht." + +#: mod/message.php:255 +msgid "Conversation removed." +msgstr "Unterhaltung gelöscht." + +#: mod/message.php:364 +msgid "No messages." +msgstr "Keine Nachrichten." + +#: mod/message.php:403 +msgid "Message not available." +msgstr "Nachricht nicht verfügbar." + +#: mod/message.php:477 +msgid "Delete message" +msgstr "Nachricht löschen" + +#: mod/message.php:503 mod/message.php:591 +msgid "Delete conversation" +msgstr "Unterhaltung löschen" + +#: mod/message.php:505 +msgid "" +"No secure communications available. You may be able to " +"respond from the sender's profile page." +msgstr "Sichere Kommunikation ist nicht verfügbar. Eventuell kannst Du auf der Profilseite des Absenders antworten." + +#: mod/message.php:509 +msgid "Send Reply" +msgstr "Antwort senden" + +#: mod/message.php:561 +#, php-format +msgid "Unknown sender - %s" +msgstr "'Unbekannter Absender - %s" + +#: mod/message.php:563 +#, php-format +msgid "You and %s" +msgstr "Du und %s" + +#: mod/message.php:565 +#, php-format +msgid "%s and You" +msgstr "%s und Du" + +#: mod/message.php:594 +msgid "D, d M Y - g:i A" +msgstr "D, d. M Y - g:i A" + +#: mod/message.php:597 +#, php-format +msgid "%d message" +msgid_plural "%d messages" +msgstr[0] "%d Nachricht" +msgstr[1] "%d Nachrichten" + +#: mod/network.php:197 mod/search.php:25 +msgid "Remove term" +msgstr "Begriff entfernen" + +#: mod/network.php:404 +#, php-format +msgid "" +"Warning: This group contains %s member from a network that doesn't allow non" +" public messages." +msgid_plural "" +"Warning: This group contains %s members from a network that doesn't allow " +"non public messages." +msgstr[0] "Warnung: Diese Gruppe beinhaltet %s Person aus einem Netzwerk das keine nicht öffentlichen Beiträge empfangen kann." +msgstr[1] "Warnung: Diese Gruppe beinhaltet %s Personen aus Netzwerken die keine nicht-öffentlichen Beiträge empfangen können." + +#: mod/network.php:407 +msgid "Messages in this group won't be send to these receivers." +msgstr "Beiträge in dieser Gruppe werden deshalb nicht an diese Personen zugestellt werden." + +#: mod/network.php:535 +msgid "Private messages to this person are at risk of public disclosure." +msgstr "Private Nachrichten an diese Person könnten an die Öffentlichkeit gelangen." + +#: mod/network.php:540 +msgid "Invalid contact." +msgstr "Ungültiger Kontakt." + +#: mod/network.php:813 +msgid "Commented Order" +msgstr "Neueste Kommentare" + +#: mod/network.php:816 +msgid "Sort by Comment Date" +msgstr "Nach Kommentardatum sortieren" + +#: mod/network.php:821 +msgid "Posted Order" +msgstr "Neueste Beiträge" + +#: mod/network.php:824 +msgid "Sort by Post Date" +msgstr "Nach Beitragsdatum sortieren" + +#: mod/network.php:835 +msgid "Posts that mention or involve you" +msgstr "Beiträge, in denen es um Dich geht" + +#: mod/network.php:843 +msgid "New" +msgstr "Neue" + +#: mod/network.php:846 +msgid "Activity Stream - by date" +msgstr "Aktivitäten-Stream - nach Datum" + +#: mod/network.php:854 +msgid "Shared Links" +msgstr "Geteilte Links" + +#: mod/network.php:857 +msgid "Interesting Links" +msgstr "Interessante Links" + +#: mod/network.php:865 +msgid "Starred" +msgstr "Markierte" + +#: mod/network.php:868 +msgid "Favourite Posts" +msgstr "Favorisierte Beiträge" + +#: mod/openid.php:24 +msgid "OpenID protocol error. No ID returned." +msgstr "OpenID Protokollfehler. Keine ID zurückgegeben." + +#: mod/openid.php:60 +msgid "" +"Account not found and OpenID registration is not permitted on this site." +msgstr "Nutzerkonto wurde nicht gefunden und OpenID-Registrierung ist auf diesem Server nicht gestattet." + +#: mod/photos.php:94 mod/photos.php:1900 +msgid "Recent Photos" +msgstr "Neueste Fotos" + +#: mod/photos.php:97 mod/photos.php:1328 mod/photos.php:1902 +msgid "Upload New Photos" +msgstr "Neue Fotos hochladen" + +#: mod/photos.php:112 mod/settings.php:36 +msgid "everybody" +msgstr "jeder" + +#: mod/photos.php:176 +msgid "Contact information unavailable" +msgstr "Kontaktinformationen nicht verfügbar" + +#: mod/photos.php:197 +msgid "Album not found." +msgstr "Album nicht gefunden." + +#: mod/photos.php:230 mod/photos.php:242 mod/photos.php:1272 +msgid "Delete Album" +msgstr "Album löschen" + +#: mod/photos.php:240 +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:323 mod/photos.php:334 mod/photos.php:1598 +msgid "Delete Photo" +msgstr "Foto löschen" + +#: mod/photos.php:332 +msgid "Do you really want to delete this photo?" +msgstr "Möchtest Du wirklich dieses Foto löschen?" + +#: mod/photos.php:713 +#, 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:713 +msgid "a photo" +msgstr "einem Foto" + +#: mod/photos.php:821 +msgid "Image file is empty." +msgstr "Bilddatei ist leer." + +#: mod/photos.php:988 +msgid "No photos selected" +msgstr "Keine Bilder ausgewählt" + +#: mod/photos.php:1091 mod/videos.php:309 +msgid "Access to this item is restricted." +msgstr "Zugriff zu diesem Eintrag wurde eingeschränkt." + +#: mod/photos.php:1151 +#, php-format +msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage." +msgstr "Du verwendest %1$.2f Mbyte von %2$.2f Mbyte des Foto-Speichers." + +#: mod/photos.php:1188 +msgid "Upload Photos" +msgstr "Bilder hochladen" + +#: mod/photos.php:1192 mod/photos.php:1267 +msgid "New album name: " +msgstr "Name des neuen Albums: " + +#: mod/photos.php:1193 +msgid "or existing album name: " +msgstr "oder existierender Albumname: " + +#: mod/photos.php:1194 +msgid "Do not show a status post for this upload" +msgstr "Keine Status-Mitteilung für diesen Beitrag anzeigen" + +#: mod/photos.php:1205 mod/photos.php:1602 mod/settings.php:1307 +msgid "Show to Groups" +msgstr "Zeige den Gruppen" + +#: mod/photos.php:1206 mod/photos.php:1603 mod/settings.php:1308 +msgid "Show to Contacts" +msgstr "Zeige den Kontakten" + +#: mod/photos.php:1207 +msgid "Private Photo" +msgstr "Privates Foto" + +#: mod/photos.php:1208 +msgid "Public Photo" +msgstr "Öffentliches Foto" + +#: mod/photos.php:1278 +msgid "Edit Album" +msgstr "Album bearbeiten" + +#: mod/photos.php:1283 +msgid "Show Newest First" +msgstr "Zeige neueste zuerst" + +#: mod/photos.php:1285 +msgid "Show Oldest First" +msgstr "Zeige älteste zuerst" + +#: mod/photos.php:1314 mod/photos.php:1885 +msgid "View Photo" +msgstr "Foto betrachten" + +#: mod/photos.php:1359 +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:1361 +msgid "Photo not available" +msgstr "Foto nicht verfügbar" + +#: mod/photos.php:1422 +msgid "View photo" +msgstr "Fotos ansehen" + +#: mod/photos.php:1422 +msgid "Edit photo" +msgstr "Foto bearbeiten" + +#: mod/photos.php:1423 +msgid "Use as profile photo" +msgstr "Als Profilbild verwenden" + +#: mod/photos.php:1448 +msgid "View Full Size" +msgstr "Betrachte Originalgröße" + +#: mod/photos.php:1538 +msgid "Tags: " +msgstr "Tags: " + +#: mod/photos.php:1541 +msgid "[Remove any tag]" +msgstr "[Tag entfernen]" + +#: mod/photos.php:1584 +msgid "New album name" +msgstr "Name des neuen Albums" + +#: mod/photos.php:1585 +msgid "Caption" +msgstr "Bildunterschrift" + +#: mod/photos.php:1586 +msgid "Add a Tag" +msgstr "Tag hinzufügen" + +#: mod/photos.php:1586 +msgid "" +"Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" +msgstr "Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" + +#: mod/photos.php:1587 +msgid "Do not rotate" +msgstr "Nicht rotieren" + +#: mod/photos.php:1588 +msgid "Rotate CW (right)" +msgstr "Drehen US (rechts)" + +#: mod/photos.php:1589 +msgid "Rotate CCW (left)" +msgstr "Drehen EUS (links)" + +#: mod/photos.php:1604 +msgid "Private photo" +msgstr "Privates Foto" + +#: mod/photos.php:1605 +msgid "Public photo" +msgstr "Öffentliches Foto" + +#: mod/photos.php:1814 +msgid "Map" +msgstr "Karte" + +#: mod/photos.php:1891 mod/videos.php:393 +msgid "View Album" +msgstr "Album betrachten" + +#: mod/probe.php:10 mod/webfinger.php:9 +msgid "Only logged in users are permitted to perform a probing." +msgstr "Nur eingeloggten Benutzern ist das Untersuchen von Adressen gestattet." + +#: mod/profile.php:175 +msgid "Tips for New Members" +msgstr "Tipps für neue Nutzer" + +#: mod/profiles.php:38 +msgid "Profile deleted." +msgstr "Profil gelöscht." + +#: mod/profiles.php:54 mod/profiles.php:90 +msgid "Profile-" +msgstr "Profil-" + +#: mod/profiles.php:73 mod/profiles.php:118 +msgid "New profile created." +msgstr "Neues Profil angelegt." + +#: mod/profiles.php:96 +msgid "Profile unavailable to clone." +msgstr "Profil nicht zum Duplizieren verfügbar." + +#: mod/profiles.php:192 +msgid "Profile Name is required." +msgstr "Profilname ist erforderlich." + +#: mod/profiles.php:332 +msgid "Marital Status" +msgstr "Familienstand" + +#: mod/profiles.php:336 +msgid "Romantic Partner" +msgstr "Romanze" + +#: mod/profiles.php:348 +msgid "Work/Employment" +msgstr "Arbeit / Beschäftigung" + +#: mod/profiles.php:351 +msgid "Religion" +msgstr "Religion" + +#: mod/profiles.php:355 +msgid "Political Views" +msgstr "Politische Ansichten" + +#: mod/profiles.php:359 +msgid "Gender" +msgstr "Geschlecht" + +#: mod/profiles.php:363 +msgid "Sexual Preference" +msgstr "Sexuelle Vorlieben" + +#: mod/profiles.php:367 +msgid "XMPP" +msgstr "XMPP" + +#: mod/profiles.php:371 +msgid "Homepage" +msgstr "Webseite" + +#: mod/profiles.php:375 mod/profiles.php:695 +msgid "Interests" +msgstr "Interessen" + +#: mod/profiles.php:379 +msgid "Address" +msgstr "Adresse" + +#: mod/profiles.php:386 mod/profiles.php:691 +msgid "Location" +msgstr "Wohnort" + +#: mod/profiles.php:471 +msgid "Profile updated." +msgstr "Profil aktualisiert." + +#: mod/profiles.php:564 +msgid " and " +msgstr " und " + +#: mod/profiles.php:573 +msgid "public profile" +msgstr "öffentliches Profil" + +#: mod/profiles.php:576 +#, php-format +msgid "%1$s changed %2$s to “%3$s”" +msgstr "%1$s hat %2$s geändert auf “%3$s”" + +#: mod/profiles.php:577 +#, php-format +msgid " - Visit %1$s's %2$s" +msgstr " – %1$ss %2$s besuchen" + +#: mod/profiles.php:579 +#, php-format +msgid "%1$s has an updated %2$s, changing %3$s." +msgstr "%1$s hat folgendes aktualisiert %2$s, verändert wurde %3$s." + +#: mod/profiles.php:637 +msgid "Hide contacts and friends:" +msgstr "Kontakte und Freunde verbergen" + +#: mod/profiles.php:642 +msgid "Hide your contact/friend list from viewers of this profile?" +msgstr "Liste der Kontakte vor Betrachtern dieses Profils verbergen?" + +#: mod/profiles.php:667 +msgid "Show more profile fields:" +msgstr "Zeige mehr Profil-Felder:" + +#: mod/profiles.php:679 +msgid "Profile Actions" +msgstr "Profilaktionen" + +#: mod/profiles.php:680 +msgid "Edit Profile Details" +msgstr "Profil bearbeiten" + +#: mod/profiles.php:682 +msgid "Change Profile Photo" +msgstr "Profilbild ändern" + +#: mod/profiles.php:683 +msgid "View this profile" +msgstr "Dieses Profil anzeigen" + +#: mod/profiles.php:685 +msgid "Create a new profile using these settings" +msgstr "Neues Profil anlegen und diese Einstellungen verwenden" + +#: mod/profiles.php:686 +msgid "Clone this profile" +msgstr "Dieses Profil duplizieren" + +#: mod/profiles.php:687 +msgid "Delete this profile" +msgstr "Dieses Profil löschen" + +#: mod/profiles.php:689 +msgid "Basic information" +msgstr "Grundinformationen" + +#: mod/profiles.php:690 +msgid "Profile picture" +msgstr "Profilbild" + +#: mod/profiles.php:692 +msgid "Preferences" +msgstr "Vorlieben" + +#: mod/profiles.php:693 +msgid "Status information" +msgstr "Status Informationen" + +#: mod/profiles.php:694 +msgid "Additional information" +msgstr "Zusätzliche Informationen" + +#: mod/profiles.php:697 +msgid "Relation" +msgstr "Beziehung" + +#: mod/profiles.php:701 +msgid "Your Gender:" +msgstr "Dein Geschlecht:" + +#: mod/profiles.php:702 +msgid " Marital Status:" +msgstr " Beziehungsstatus:" + +#: mod/profiles.php:704 +msgid "Example: fishing photography software" +msgstr "Beispiel: Fischen Fotografie Software" + +#: mod/profiles.php:709 +msgid "Profile Name:" +msgstr "Profilname:" + +#: mod/profiles.php:711 +msgid "" +"This is your public profile.
It may " +"be visible to anybody using the internet." +msgstr "Dies ist Dein öffentliches Profil.
Es könnte für jeden Nutzer des Internets sichtbar sein." + +#: mod/profiles.php:712 +msgid "Your Full Name:" +msgstr "Dein kompletter Name:" + +#: mod/profiles.php:713 +msgid "Title/Description:" +msgstr "Titel/Beschreibung:" + +#: mod/profiles.php:716 +msgid "Street Address:" +msgstr "Adresse:" + +#: mod/profiles.php:717 +msgid "Locality/City:" +msgstr "Wohnort:" + +#: mod/profiles.php:718 +msgid "Region/State:" +msgstr "Region/Bundesstaat:" + +#: mod/profiles.php:719 +msgid "Postal/Zip Code:" +msgstr "Postleitzahl:" + +#: mod/profiles.php:720 +msgid "Country:" +msgstr "Land:" + +#: mod/profiles.php:724 +msgid "Who: (if applicable)" +msgstr "Wer: (falls anwendbar)" + +#: mod/profiles.php:724 +msgid "Examples: cathy123, Cathy Williams, cathy@example.com" +msgstr "Beispiele: cathy123, Cathy Williams, cathy@example.com" + +#: mod/profiles.php:725 +msgid "Since [date]:" +msgstr "Seit [Datum]:" + +#: mod/profiles.php:727 +msgid "Tell us about yourself..." +msgstr "Erzähle uns ein bisschen von Dir …" + +#: mod/profiles.php:728 +msgid "XMPP (Jabber) address:" +msgstr "XMPP (Jabber) Adresse" + +#: mod/profiles.php:728 +msgid "" +"The XMPP address will be propagated to your contacts so that they can follow" +" you." +msgstr "Die XMPP Adresse wird an deine Kontakte verteilt werden, so dass sie auch über XMPP mit dir in Kontakt treten können." + +#: mod/profiles.php:729 +msgid "Homepage URL:" +msgstr "Adresse der Homepage:" + +#: mod/profiles.php:732 +msgid "Religious Views:" +msgstr "Religiöse Ansichten:" + +#: mod/profiles.php:733 +msgid "Public Keywords:" +msgstr "Öffentliche Schlüsselwörter:" + +#: mod/profiles.php:733 +msgid "(Used for suggesting potential friends, can be seen by others)" +msgstr "(Wird verwendet, um potentielle Kontakte zu finden, kann von Kontakten eingesehen werden)" + +#: mod/profiles.php:734 +msgid "Private Keywords:" +msgstr "Private Schlüsselwörter:" + +#: mod/profiles.php:734 +msgid "(Used for searching profiles, never shown to others)" +msgstr "(Wird für die Suche nach Profilen verwendet und niemals veröffentlicht)" + +#: mod/profiles.php:737 +msgid "Musical interests" +msgstr "Musikalische Interessen" + +#: mod/profiles.php:738 +msgid "Books, literature" +msgstr "Bücher, Literatur" + +#: mod/profiles.php:739 +msgid "Television" +msgstr "Fernsehen" + +#: mod/profiles.php:740 +msgid "Film/dance/culture/entertainment" +msgstr "Filme/Tänze/Kultur/Unterhaltung" + +#: mod/profiles.php:741 +msgid "Hobbies/Interests" +msgstr "Hobbies/Interessen" + +#: mod/profiles.php:742 +msgid "Love/romance" +msgstr "Liebe/Romantik" + +#: mod/profiles.php:743 +msgid "Work/employment" +msgstr "Arbeit/Anstellung" + +#: mod/profiles.php:744 +msgid "School/education" +msgstr "Schule/Ausbildung" + +#: mod/profiles.php:745 +msgid "Contact information and Social Networks" +msgstr "Kontaktinformationen und Soziale Netzwerke" + +#: mod/profiles.php:786 +msgid "Edit/Manage Profiles" +msgstr "Bearbeite/Verwalte Profile" + #: mod/register.php:93 msgid "" "Registration successful. Please check your email for further instructions." @@ -4406,12 +5996,6 @@ msgstr "Deine Registrierung konnte nicht verarbeitet werden." msgid "Your registration is pending approval by the site owner." msgstr "Deine Registrierung muss noch vom Betreiber der Seite freigegeben werden." -#: mod/register.php:198 mod/uimport.php:51 -msgid "" -"This site has exceeded the number of allowed daily account registrations. " -"Please try again tomorrow." -msgstr "Die maximale Anzahl täglicher Registrierungen auf dieser Seite wurde überschritten. Bitte versuche es morgen noch einmal." - #: mod/register.php:226 msgid "" "You may (optionally) fill in this form via OpenID by supplying your OpenID " @@ -4448,7 +6032,7 @@ msgstr "Mitgliedschaft auf dieser Seite ist nur nach vorheriger Einladung mögli msgid "Your invitation ID: " msgstr "ID Deiner Einladung: " -#: mod/register.php:272 mod/admin.php:977 +#: mod/register.php:272 mod/admin.php:1056 msgid "Registration" msgstr "Registrierung" @@ -4483,58 +6067,32 @@ msgstr "Wähle einen Spitznamen für Dein Profil. Dieser muss mit einem Buchstab msgid "Choose a nickname: " msgstr "Spitznamen wählen: " -#: mod/register.php:295 mod/uimport.php:66 -msgid "Import" -msgstr "Import" - #: mod/register.php:296 msgid "Import your profile to this friendica instance" msgstr "Importiere Dein Profil auf diese Friendica Instanz" -#: mod/regmod.php:58 -msgid "Account approved." -msgstr "Konto freigegeben." +#: mod/search.php:100 +msgid "Only logged in users are permitted to perform a search." +msgstr "Nur eingeloggten Benutzern ist das Suchen gestattet." -#: mod/regmod.php:95 +#: mod/search.php:124 +msgid "Too Many Requests" +msgstr "Zu viele Abfragen" + +#: mod/search.php:125 +msgid "Only one search per minute is permitted for not logged in users." +msgstr "Es ist nur eine Suchanfrage pro Minute für nicht eingeloggte Benutzer gestattet." + +#: mod/search.php:225 #, php-format -msgid "Registration revoked for %s" -msgstr "Registrierung für %s wurde zurückgezogen" +msgid "Items tagged with: %s" +msgstr "Beiträge die mit %s getaggt sind" -#: mod/regmod.php:107 -msgid "Please login." -msgstr "Bitte melde Dich an." - -#: mod/removeme.php:52 mod/removeme.php:55 -msgid "Remove My Account" -msgstr "Konto löschen" - -#: mod/removeme.php:53 -msgid "" -"This will completely remove your account. Once this has been done it is not " -"recoverable." -msgstr "Dein Konto wird endgültig gelöscht. Es gibt keine Möglichkeit, es wiederherzustellen." - -#: mod/removeme.php:54 -msgid "Please enter your password for verification:" -msgstr "Bitte gib Dein Passwort zur Verifikation ein:" - -#: mod/repair_ostatus.php:14 -msgid "Resubscribing to OStatus contacts" -msgstr "Erneuern der OStatus Abonements" - -#: mod/repair_ostatus.php:30 -msgid "Error" -msgstr "Fehler" - -#: mod/settings.php:36 mod/photos.php:107 -msgid "everybody" -msgstr "jeder" - -#: mod/settings.php:43 mod/admin.php:1417 +#: mod/settings.php:43 mod/admin.php:1490 msgid "Account" msgstr "Nutzerkonto" -#: mod/settings.php:52 mod/admin.php:161 +#: mod/settings.php:52 mod/admin.php:169 msgid "Additional features" msgstr "Zusätzliche Features" @@ -4546,7 +6104,7 @@ msgstr "Anzeige" msgid "Social Networks" msgstr "Soziale Netzwerke" -#: mod/settings.php:74 mod/admin.php:159 mod/admin.php:1543 mod/admin.php:1606 +#: mod/settings.php:74 mod/admin.php:167 mod/admin.php:1616 mod/admin.php:1679 msgid "Plugins" msgstr "Plugins" @@ -4566,10 +6124,6 @@ msgstr "Konto löschen" msgid "Missing some important data!" msgstr "Wichtige Daten fehlen!" -#: mod/settings.php:160 mod/settings.php:707 mod/contacts.php:812 -msgid "Update" -msgstr "Aktualisierungen" - #: mod/settings.php:271 msgid "Failed to connect with email account using the settings provided." msgstr "Verbindung zum E-Mail-Konto mit den angegebenen Einstellungen nicht möglich." @@ -4640,8 +6194,8 @@ msgstr "Programm hinzufügen" #: mod/settings.php:681 mod/settings.php:792 mod/settings.php:841 #: mod/settings.php:908 mod/settings.php:1005 mod/settings.php:1271 -#: mod/admin.php:976 mod/admin.php:1607 mod/admin.php:1864 mod/admin.php:1938 -#: mod/admin.php:2088 +#: mod/admin.php:1055 mod/admin.php:1680 mod/admin.php:1943 mod/admin.php:2017 +#: mod/admin.php:2170 msgid "Save Settings" msgstr "Einstellungen speichern" @@ -4689,11 +6243,11 @@ msgstr "Keine Plugin-Einstellungen konfiguriert" msgid "Plugin Settings" msgstr "Plugin-Einstellungen" -#: mod/settings.php:782 mod/admin.php:2077 mod/admin.php:2078 +#: mod/settings.php:782 mod/admin.php:2159 mod/admin.php:2160 msgid "Off" msgstr "Aus" -#: mod/settings.php:782 mod/admin.php:2077 mod/admin.php:2078 +#: mod/settings.php:782 mod/admin.php:2159 mod/admin.php:2160 msgid "On" msgstr "An" @@ -4825,7 +6379,7 @@ msgstr "In einen Ordner verschieben" msgid "Move to folder:" msgstr "In diesen Ordner verschieben:" -#: mod/settings.php:943 mod/admin.php:863 +#: mod/settings.php:943 mod/admin.php:942 msgid "No special theme for mobile devices" msgstr "Kein spezielles Theme für mobile Geräte verwenden." @@ -4917,9 +6471,9 @@ msgstr "Benutzerdefinierte Theme Einstellungen" msgid "Content Settings" msgstr "Einstellungen zum Inhalt" -#: mod/settings.php:1026 view/theme/quattro/config.php:69 -#: view/theme/vier/config.php:114 view/theme/duepuntozero/config.php:63 -#: view/theme/clean/config.php:89 view/theme/frio/config.php:66 +#: mod/settings.php:1026 view/theme/duepuntozero/config.php:63 +#: view/theme/frio/config.php:66 view/theme/quattro/config.php:69 +#: view/theme/vier/config.php:114 msgid "Theme settings" msgstr "Themeneinstellungen" @@ -5020,6 +6574,10 @@ msgstr "(Optional) Erlaube die Anmeldung für dieses Konto mit dieser OpenID." msgid "Publish your default profile in your local site directory?" msgstr "Darf Dein Standardprofil im Verzeichnis dieses Servers veröffentlicht werden?" +#: mod/settings.php:1171 +msgid "Your profile may be visible in public." +msgstr "Dein Profil könnte öffentlich abrufbar sein." + #: mod/settings.php:1177 msgid "Publish your default profile in the global social directory?" msgstr "Darf Dein Standardprofil im weltweiten Verzeichnis veröffentlicht werden?" @@ -5169,14 +6727,6 @@ msgstr "Standard-Zugriffsrechte für Beiträge" msgid "(click to open/close)" msgstr "(klicke zum öffnen/schließen)" -#: mod/settings.php:1307 mod/photos.php:1185 mod/photos.php:1567 -msgid "Show to Groups" -msgstr "Zeige den Gruppen" - -#: mod/settings.php:1308 mod/photos.php:1186 mod/photos.php:1568 -msgid "Show to Contacts" -msgstr "Zeige den Kontakten" - #: mod/settings.php:1309 msgid "Default Private Post" msgstr "Privater Standardbeitrag" @@ -5287,41 +6837,6 @@ msgstr "Wenn Du Dein Profil von einem anderen Server umgezogen hast und einige D msgid "Resend relocate message to contacts" msgstr "Umzugsbenachrichtigung erneut an Kontakte senden" -#: mod/share.php:38 -msgid "link" -msgstr "Link" - -#: mod/subthread.php:104 -#, php-format -msgid "%1$s is following %2$s's %3$s" -msgstr "%1$s folgt %2$s %3$s" - -#: mod/suggest.php:27 -msgid "Do you really want to delete this suggestion?" -msgstr "Möchtest Du wirklich diese Empfehlung löschen?" - -#: mod/suggest.php:71 -msgid "" -"No suggestions available. If this is a new site, please try again in 24 " -"hours." -msgstr "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde, versuche es bitte in 24 Stunden noch einmal." - -#: mod/suggest.php:84 mod/suggest.php:104 -msgid "Ignore/Hide" -msgstr "Ignorieren/Verbergen" - -#: mod/tagrm.php:43 -msgid "Tag removed" -msgstr "Tag entfernt" - -#: mod/tagrm.php:82 -msgid "Remove Item Tag" -msgstr "Gegenstands-Tag entfernen" - -#: mod/tagrm.php:84 -msgid "Select a tag to remove: " -msgstr "Wähle ein Tag zum Entfernen aus: " - #: mod/uexport.php:37 msgid "Export account" msgstr "Account exportieren" @@ -5343,42 +6858,6 @@ msgid "" "of your account (photos are not exported)" msgstr "Exportiere Deine Account Informationen, Kontakte und alle Einträge als JSON Datei. Dies könnte eine sehr große Datei werden und dementsprechend viel Zeit benötigen. Verwende dies um ein komplettes Backup Deines Accounts anzulegen (Fotos werden nicht exportiert)." -#: mod/uimport.php:68 -msgid "Move account" -msgstr "Account umziehen" - -#: mod/uimport.php:69 -msgid "You can import an account from another Friendica server." -msgstr "Du kannst einen Account von einem anderen Friendica Server importieren." - -#: mod/uimport.php:70 -msgid "" -"You need to export your account from the old server and upload it here. We " -"will recreate your old account here with all your contacts. We will try also" -" to inform your friends that you moved here." -msgstr "Du musst Deinen Account vom alten Server exportieren und hier hochladen. Wir stellen Deinen alten Account mit all Deinen Kontakten wieder her. Wir werden auch versuchen all Deine Kontakte darüber zu informieren, dass Du hierher umgezogen bist." - -#: mod/uimport.php:71 -msgid "" -"This feature is experimental. We can't import contacts from the OStatus " -"network (GNU Social/Statusnet) or from Diaspora" -msgstr "Dieses Feature ist experimentell. Wir können keine Kontakte vom OStatus Netzwerk (GNU Social/Statusnet) oder von Diaspora importieren" - -#: mod/uimport.php:72 -msgid "Account file" -msgstr "Account Datei" - -#: mod/uimport.php:72 -msgid "" -"To export your account, go to \"Settings->Export your personal data\" and " -"select \"Export account\"" -msgstr "Um Deinen Account zu exportieren, rufe \"Einstellungen -> Persönliche Daten exportieren\" auf und wähle \"Account exportieren\"" - -#: mod/update_community.php:19 mod/update_display.php:23 -#: mod/update_network.php:27 mod/update_notes.php:36 mod/update_profile.php:35 -msgid "[Embedded content - reload page to view]" -msgstr "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]" - #: mod/videos.php:124 msgid "Do you really want to delete this video?" msgstr "Möchtest Du dieses Video wirklich löschen?" @@ -5391,3221 +6870,396 @@ msgstr "Video Löschen" msgid "No videos selected" msgstr "Keine Videos ausgewählt" -#: mod/videos.php:309 mod/photos.php:1074 -msgid "Access to this item is restricted." -msgstr "Zugriff zu diesem Eintrag wurde eingeschränkt." - -#: mod/videos.php:391 mod/photos.php:1867 -msgid "View Album" -msgstr "Album betrachten" - -#: mod/videos.php:400 +#: mod/videos.php:402 msgid "Recent Videos" msgstr "Neueste Videos" -#: mod/videos.php:402 +#: mod/videos.php:404 msgid "Upload New Videos" msgstr "Neues Video hochladen" -#: mod/viewsrc.php:7 -msgid "Access denied." -msgstr "Zugriff verweigert." - -#: mod/wall_attach.php:17 mod/wall_attach.php:25 mod/wall_attach.php:76 -#: mod/wall_upload.php:20 mod/wall_upload.php:33 mod/wall_upload.php:86 -#: mod/wall_upload.php:122 mod/wall_upload.php:125 -msgid "Invalid request." -msgstr "Ungültige Anfrage" - -#: mod/wall_attach.php:94 -msgid "Sorry, maybe your upload is bigger than the PHP configuration allows" -msgstr "Entschuldige, die Datei scheint größer zu sein als es die PHP Konfiguration erlaubt." - -#: mod/wall_attach.php:94 -msgid "Or - did you try to upload an empty file?" -msgstr "Oder - hast Du versucht, eine leere Datei hochzuladen?" - -#: mod/wall_attach.php:105 -#, php-format -msgid "File exceeds size limit of %s" -msgstr "Die Datei ist größer als das erlaubte Limit von %s" - -#: mod/wall_attach.php:158 mod/wall_attach.php:174 -msgid "File upload failed." -msgstr "Hochladen der Datei fehlgeschlagen." - -#: mod/cal.php:271 mod/events.php:387 -msgid "View" -msgstr "Ansehen" - -#: mod/cal.php:272 mod/events.php:389 -msgid "Previous" -msgstr "Vorherige" - -#: mod/cal.php:273 mod/events.php:390 mod/install.php:235 -msgid "Next" -msgstr "Nächste" - -#: mod/cal.php:282 mod/events.php:399 -msgid "list" -msgstr "Liste" - -#: mod/cal.php:292 -msgid "User not found" -msgstr "Nutzer nicht gefunden" - -#: mod/cal.php:308 -msgid "This calendar format is not supported" -msgstr "Dieses Kalenderformat wird nicht unterstützt." - -#: mod/cal.php:310 -msgid "No exportable data found" -msgstr "Keine exportierbaren Daten gefunden" - -#: mod/cal.php:325 -msgid "calendar" -msgstr "Kalender" - -#: mod/contacts.php:134 -#, php-format -msgid "%d contact edited." -msgid_plural "%d contacts edited." -msgstr[0] "%d Kontakt bearbeitet." -msgstr[1] "%d Kontakte bearbeitet." - -#: mod/contacts.php:169 mod/contacts.php:378 -msgid "Could not access contact record." -msgstr "Konnte nicht auf die Kontaktdaten zugreifen." - -#: mod/contacts.php:183 -msgid "Could not locate selected profile." -msgstr "Konnte das ausgewählte Profil nicht finden." - -#: mod/contacts.php:216 -msgid "Contact updated." -msgstr "Kontakt aktualisiert." - -#: mod/contacts.php:218 mod/dfrn_request.php:588 -msgid "Failed to update contact record." -msgstr "Aktualisierung der Kontaktdaten fehlgeschlagen." - -#: mod/contacts.php:399 -msgid "Contact has been blocked" -msgstr "Kontakt wurde blockiert" - -#: mod/contacts.php:399 -msgid "Contact has been unblocked" -msgstr "Kontakt wurde wieder freigegeben" - -#: mod/contacts.php:410 -msgid "Contact has been ignored" -msgstr "Kontakt wurde ignoriert" - -#: mod/contacts.php:410 -msgid "Contact has been unignored" -msgstr "Kontakt wird nicht mehr ignoriert" - -#: mod/contacts.php:422 -msgid "Contact has been archived" -msgstr "Kontakt wurde archiviert" - -#: mod/contacts.php:422 -msgid "Contact has been unarchived" -msgstr "Kontakt wurde aus dem Archiv geholt" - -#: mod/contacts.php:447 -msgid "Drop contact" -msgstr "Kontakt löschen" - -#: mod/contacts.php:450 mod/contacts.php:809 -msgid "Do you really want to delete this contact?" -msgstr "Möchtest Du wirklich diesen Kontakt löschen?" - -#: mod/contacts.php:469 -msgid "Contact has been removed." -msgstr "Kontakt wurde entfernt." - -#: mod/contacts.php:506 -#, php-format -msgid "You are mutual friends with %s" -msgstr "Du hast mit %s eine beidseitige Freundschaft" - -#: mod/contacts.php:510 -#, php-format -msgid "You are sharing with %s" -msgstr "Du teilst mit %s" - -#: mod/contacts.php:515 -#, php-format -msgid "%s is sharing with you" -msgstr "%s teilt mit Dir" - -#: mod/contacts.php:535 -msgid "Private communications are not available for this contact." -msgstr "Private Kommunikation ist für diesen Kontakt nicht verfügbar." - -#: mod/contacts.php:538 mod/admin.php:899 -msgid "Never" -msgstr "Niemals" - -#: mod/contacts.php:542 -msgid "(Update was successful)" -msgstr "(Aktualisierung war erfolgreich)" - -#: mod/contacts.php:542 -msgid "(Update was not successful)" -msgstr "(Aktualisierung war nicht erfolgreich)" - -#: mod/contacts.php:544 mod/contacts.php:972 -msgid "Suggest friends" -msgstr "Kontakte vorschlagen" - -#: mod/contacts.php:548 -#, php-format -msgid "Network type: %s" -msgstr "Netzwerktyp: %s" - -#: mod/contacts.php:561 -msgid "Communications lost with this contact!" -msgstr "Verbindungen mit diesem Kontakt verloren!" - -#: mod/contacts.php:564 -msgid "Fetch further information for feeds" -msgstr "Weitere Informationen zu Feeds holen" - -#: mod/contacts.php:565 mod/admin.php:908 -msgid "Disabled" -msgstr "Deaktiviert" - -#: mod/contacts.php:565 -msgid "Fetch information" -msgstr "Beziehe Information" - -#: mod/contacts.php:565 -msgid "Fetch information and keywords" -msgstr "Beziehe Information und Schlüsselworte" - -#: mod/contacts.php:583 -msgid "Contact" -msgstr "Kontakt" - -#: mod/contacts.php:586 -msgid "Profile Visibility" -msgstr "Profil-Sichtbarkeit" - -#: mod/contacts.php:587 -#, php-format -msgid "" -"Please choose the profile you would like to display to %s when viewing your " -"profile securely." -msgstr "Bitte wähle eines Deiner Profile das angezeigt werden soll, wenn %s Dein Profil aufruft." - -#: mod/contacts.php:588 -msgid "Contact Information / Notes" -msgstr "Kontakt Informationen / Notizen" - -#: mod/contacts.php:589 -msgid "Edit contact notes" -msgstr "Notizen zum Kontakt bearbeiten" - -#: mod/contacts.php:595 -msgid "Block/Unblock contact" -msgstr "Kontakt blockieren/freischalten" - -#: mod/contacts.php:596 -msgid "Ignore contact" -msgstr "Ignoriere den Kontakt" - -#: mod/contacts.php:597 -msgid "Repair URL settings" -msgstr "URL Einstellungen reparieren" - -#: mod/contacts.php:598 -msgid "View conversations" -msgstr "Unterhaltungen anzeigen" - -#: mod/contacts.php:604 -msgid "Last update:" -msgstr "Letzte Aktualisierung: " - -#: mod/contacts.php:606 -msgid "Update public posts" -msgstr "Öffentliche Beiträge aktualisieren" - -#: mod/contacts.php:608 mod/contacts.php:982 -msgid "Update now" -msgstr "Jetzt aktualisieren" - -#: mod/contacts.php:613 mod/contacts.php:813 mod/contacts.php:991 -#: mod/admin.php:1437 -msgid "Unblock" -msgstr "Entsperren" - -#: mod/contacts.php:613 mod/contacts.php:813 mod/contacts.php:991 -#: mod/admin.php:1436 -msgid "Block" -msgstr "Sperren" - -#: mod/contacts.php:614 mod/contacts.php:814 mod/contacts.php:999 -msgid "Unignore" -msgstr "Ignorieren aufheben" - -#: mod/contacts.php:614 mod/contacts.php:814 mod/contacts.php:999 -#: mod/notifications.php:60 mod/notifications.php:179 -#: mod/notifications.php:257 -msgid "Ignore" -msgstr "Ignorieren" - -#: mod/contacts.php:618 -msgid "Currently blocked" -msgstr "Derzeit geblockt" - -#: mod/contacts.php:619 -msgid "Currently ignored" -msgstr "Derzeit ignoriert" - -#: mod/contacts.php:620 -msgid "Currently archived" -msgstr "Momentan archiviert" - -#: mod/contacts.php:621 mod/notifications.php:172 mod/notifications.php:245 -msgid "Hide this contact from others" -msgstr "Verbirg diesen Kontakt vor Anderen" - -#: mod/contacts.php:621 -msgid "" -"Replies/likes to your public posts may still be visible" -msgstr "Antworten/Likes auf deine öffentlichen Beiträge könnten weiterhin sichtbar sein" - -#: mod/contacts.php:622 -msgid "Notification for new posts" -msgstr "Benachrichtigung bei neuen Beiträgen" - -#: mod/contacts.php:622 -msgid "Send a notification of every new post of this contact" -msgstr "Sende eine Benachrichtigung, wann immer dieser Kontakt einen neuen Beitrag schreibt." - -#: mod/contacts.php:625 -msgid "Blacklisted keywords" -msgstr "Blacklistete Schlüsselworte " - -#: mod/contacts.php:625 -msgid "" -"Comma separated list of keywords that should not be converted to hashtags, " -"when \"Fetch information and keywords\" is selected" -msgstr "Komma-Separierte Liste mit Schlüsselworten, die nicht in Hashtags konvertiert werden, wenn \"Beziehe Information und Schlüsselworte\" aktiviert wurde" - -#: mod/contacts.php:643 -msgid "Actions" -msgstr "Aktionen" - -#: mod/contacts.php:646 -msgid "Contact Settings" -msgstr "Kontakteinstellungen" - -#: mod/contacts.php:692 -msgid "Suggestions" -msgstr "Kontaktvorschläge" - -#: mod/contacts.php:695 -msgid "Suggest potential friends" -msgstr "Kontakte vorschlagen" - -#: mod/contacts.php:703 -msgid "Show all contacts" -msgstr "Alle Kontakte anzeigen" - -#: mod/contacts.php:708 -msgid "Unblocked" -msgstr "Ungeblockt" - -#: mod/contacts.php:711 -msgid "Only show unblocked contacts" -msgstr "Nur nicht-blockierte Kontakte anzeigen" - -#: mod/contacts.php:717 -msgid "Blocked" -msgstr "Geblockt" - -#: mod/contacts.php:720 -msgid "Only show blocked contacts" -msgstr "Nur blockierte Kontakte anzeigen" - -#: mod/contacts.php:726 -msgid "Ignored" -msgstr "Ignoriert" - -#: mod/contacts.php:729 -msgid "Only show ignored contacts" -msgstr "Nur ignorierte Kontakte anzeigen" - -#: mod/contacts.php:735 -msgid "Archived" -msgstr "Archiviert" - -#: mod/contacts.php:738 -msgid "Only show archived contacts" -msgstr "Nur archivierte Kontakte anzeigen" - -#: mod/contacts.php:744 -msgid "Hidden" -msgstr "Verborgen" - -#: mod/contacts.php:747 -msgid "Only show hidden contacts" -msgstr "Nur verborgene Kontakte anzeigen" - -#: mod/contacts.php:804 -msgid "Search your contacts" -msgstr "Suche in deinen Kontakten" - -#: mod/contacts.php:805 mod/network.php:145 mod/search.php:232 -#, php-format -msgid "Results for: %s" -msgstr "Ergebnisse für: %s" - -#: mod/contacts.php:815 mod/contacts.php:1007 -msgid "Archive" -msgstr "Archivieren" - -#: mod/contacts.php:815 mod/contacts.php:1007 -msgid "Unarchive" -msgstr "Aus Archiv zurückholen" - -#: mod/contacts.php:818 -msgid "Batch Actions" -msgstr "Stapelverarbeitung" - -#: mod/contacts.php:864 -msgid "View all contacts" -msgstr "Alle Kontakte anzeigen" - -#: mod/contacts.php:874 -msgid "View all common friends" -msgstr "Alle Kontakte anzeigen" - -#: mod/contacts.php:881 -msgid "Advanced Contact Settings" -msgstr "Fortgeschrittene Kontakteinstellungen" - -#: mod/contacts.php:915 -msgid "Mutual Friendship" -msgstr "Beidseitige Freundschaft" - -#: mod/contacts.php:919 -msgid "is a fan of yours" -msgstr "ist ein Fan von dir" - -#: mod/contacts.php:923 -msgid "you are a fan of" -msgstr "Du bist Fan von" - -#: mod/contacts.php:993 -msgid "Toggle Blocked status" -msgstr "Geblockt-Status ein-/ausschalten" - -#: mod/contacts.php:1001 -msgid "Toggle Ignored status" -msgstr "Ignoriert-Status ein-/ausschalten" - -#: mod/contacts.php:1009 -msgid "Toggle Archive status" -msgstr "Archiviert-Status ein-/ausschalten" - -#: mod/contacts.php:1017 -msgid "Delete contact" -msgstr "Lösche den Kontakt" - -#: mod/dfrn_confirm.php:70 mod/profiles.php:19 mod/profiles.php:134 -#: mod/profiles.php:180 mod/profiles.php:619 -msgid "Profile not found." -msgstr "Profil nicht gefunden." - -#: mod/dfrn_confirm.php:127 -msgid "" -"This may occasionally happen if contact was requested by both persons and it" -" has already been approved." -msgstr "Das kann passieren, wenn sich zwei Kontakte gegenseitig eingeladen haben und bereits einer angenommen wurde." - -#: mod/dfrn_confirm.php:244 -msgid "Response from remote site was not understood." -msgstr "Antwort der Gegenstelle unverständlich." - -#: mod/dfrn_confirm.php:253 mod/dfrn_confirm.php:258 -msgid "Unexpected response from remote site: " -msgstr "Unerwartete Antwort der Gegenstelle: " - -#: mod/dfrn_confirm.php:267 -msgid "Confirmation completed successfully." -msgstr "Bestätigung erfolgreich abgeschlossen." - -#: mod/dfrn_confirm.php:269 mod/dfrn_confirm.php:283 mod/dfrn_confirm.php:290 -msgid "Remote site reported: " -msgstr "Gegenstelle meldet: " - -#: mod/dfrn_confirm.php:281 -msgid "Temporary failure. Please wait and try again." -msgstr "Zeitweiser Fehler. Bitte warte einige Momente und versuche es dann noch einmal." - -#: mod/dfrn_confirm.php:288 -msgid "Introduction failed or was revoked." -msgstr "Kontaktanfrage schlug fehl oder wurde zurückgezogen." - -#: mod/dfrn_confirm.php:418 -msgid "Unable to set contact photo." -msgstr "Konnte das Bild des Kontakts nicht speichern." - -#: mod/dfrn_confirm.php:559 -#, php-format -msgid "No user record found for '%s' " -msgstr "Für '%s' wurde kein Nutzer gefunden" - -#: mod/dfrn_confirm.php:569 -msgid "Our site encryption key is apparently messed up." -msgstr "Der Verschlüsselungsschlüssel unserer Seite ist anscheinend nicht in Ordnung." - -#: mod/dfrn_confirm.php:580 -msgid "Empty site URL was provided or URL could not be decrypted by us." -msgstr "Leere URL für die Seite erhalten oder die URL konnte nicht entschlüsselt werden." - -#: mod/dfrn_confirm.php:601 -msgid "Contact record was not found for you on our site." -msgstr "Für diesen Kontakt wurde auf unserer Seite kein Eintrag gefunden." - -#: mod/dfrn_confirm.php:615 -#, php-format -msgid "Site public key not available in contact record for URL %s." -msgstr "Die Kontaktdaten für URL %s enthalten keinen Public Key für den Server." - -#: mod/dfrn_confirm.php:635 -msgid "" -"The ID provided by your system is a duplicate on our system. It should work " -"if you try again." -msgstr "Die ID, die uns Dein System angeboten hat, ist hier bereits vergeben. Bitte versuche es noch einmal." - -#: mod/dfrn_confirm.php:646 -msgid "Unable to set your contact credentials on our system." -msgstr "Deine Kontaktreferenzen konnten nicht in unserem System gespeichert werden." - -#: mod/dfrn_confirm.php:708 -msgid "Unable to update your contact profile details on our system" -msgstr "Die Updates für Dein Profil konnten nicht gespeichert werden" - -#: mod/dfrn_confirm.php:780 -#, php-format -msgid "%1$s has joined %2$s" -msgstr "%1$s ist %2$s beigetreten" - -#: mod/editpost.php:17 mod/editpost.php:27 -msgid "Item not found" -msgstr "Beitrag nicht gefunden" - -#: mod/editpost.php:32 -msgid "Edit post" -msgstr "Beitrag bearbeiten" - -#: mod/events.php:100 mod/events.php:102 -msgid "Event can not end before it has started." -msgstr "Die Veranstaltung kann nicht enden bevor sie beginnt." - -#: mod/events.php:109 mod/events.php:111 -msgid "Event title and start time are required." -msgstr "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden." - -#: mod/events.php:388 -msgid "Create New Event" -msgstr "Neue Veranstaltung erstellen" - -#: mod/events.php:489 -msgid "Event details" -msgstr "Veranstaltungsdetails" - -#: mod/events.php:490 -msgid "Starting date and Title are required." -msgstr "Anfangszeitpunkt und Titel werden benötigt" - -#: mod/events.php:491 mod/events.php:492 -msgid "Event Starts:" -msgstr "Veranstaltungsbeginn:" - -#: mod/events.php:491 mod/events.php:503 mod/profiles.php:708 -msgid "Required" -msgstr "Benötigt" - -#: mod/events.php:493 mod/events.php:509 -msgid "Finish date/time is not known or not relevant" -msgstr "Enddatum/-zeit ist nicht bekannt oder nicht relevant" - -#: mod/events.php:495 mod/events.php:496 -msgid "Event Finishes:" -msgstr "Veranstaltungsende:" - -#: mod/events.php:497 mod/events.php:510 -msgid "Adjust for viewer timezone" -msgstr "An Zeitzone des Betrachters anpassen" - -#: mod/events.php:499 -msgid "Description:" -msgstr "Beschreibung" - -#: mod/events.php:503 mod/events.php:505 -msgid "Title:" -msgstr "Titel:" - -#: mod/events.php:506 mod/events.php:507 -msgid "Share this event" -msgstr "Veranstaltung teilen" - -#: mod/fbrowser.php:132 -msgid "Files" -msgstr "Dateien" - -#: mod/friendica.php:72 -msgid "This is Friendica, version" -msgstr "Dies ist Friendica, Version" - -#: mod/friendica.php:73 -msgid "running at web location" -msgstr "die unter folgender Webadresse zu finden ist" - -#: mod/friendica.php:75 -msgid "" -"Please visit Friendica.com to learn " -"more about the Friendica project." -msgstr "Bitte besuche Friendica.com, um mehr über das Friendica Projekt zu erfahren." - -#: mod/friendica.php:77 -msgid "Bug reports and issues: please visit" -msgstr "Probleme oder Fehler gefunden? Bitte besuche" - -#: mod/friendica.php:77 -msgid "the bugtracker at github" -msgstr "den Bugtracker auf github" - -#: mod/friendica.php:78 -msgid "" -"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - " -"dot com" -msgstr "Vorschläge, Lob, Spenden usw.: E-Mail an \"Info\" at Friendica - dot com" - -#: mod/friendica.php:92 -msgid "Installed plugins/addons/apps:" -msgstr "Installierte Plugins/Erweiterungen/Apps:" - -#: mod/friendica.php:105 -msgid "No installed plugins/addons/apps" -msgstr "Keine Plugins/Erweiterungen/Apps installiert" - -#: mod/item.php:118 -msgid "Unable to locate original post." -msgstr "Konnte den Originalbeitrag nicht finden." - -#: mod/item.php:336 -msgid "Empty post discarded." -msgstr "Leerer Beitrag wurde verworfen." - -#: mod/item.php:889 -msgid "System error. Post not saved." -msgstr "Systemfehler. Beitrag konnte nicht gespeichert werden." - -#: mod/item.php:979 -#, php-format -msgid "" -"This message was sent to you by %s, a member of the Friendica social " -"network." -msgstr "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica." - -#: mod/item.php:981 -#, php-format -msgid "You may visit them online at %s" -msgstr "Du kannst sie online unter %s besuchen" - -#: mod/item.php:982 -msgid "" -"Please contact the sender by replying to this post if you do not wish to " -"receive these messages." -msgstr "Falls Du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem Du auf diese Nachricht antwortest." - -#: mod/item.php:986 -#, php-format -msgid "%s posted an update." -msgstr "%s hat ein Update veröffentlicht." - -#: mod/message.php:60 mod/wallmessage.php:50 -msgid "No recipient selected." -msgstr "Kein Empfänger gewählt." - -#: mod/message.php:64 -msgid "Unable to locate contact information." -msgstr "Konnte die Kontaktinformationen nicht finden." - -#: mod/message.php:67 mod/wallmessage.php:56 -msgid "Message could not be sent." -msgstr "Nachricht konnte nicht gesendet werden." - -#: mod/message.php:70 mod/wallmessage.php:59 -msgid "Message collection failure." -msgstr "Konnte Nachrichten nicht abrufen." - -#: mod/message.php:73 mod/wallmessage.php:62 -msgid "Message sent." -msgstr "Nachricht gesendet." - -#: mod/message.php:204 -msgid "Do you really want to delete this message?" -msgstr "Möchtest Du wirklich diese Nachricht löschen?" - -#: mod/message.php:224 -msgid "Message deleted." -msgstr "Nachricht gelöscht." - -#: mod/message.php:255 -msgid "Conversation removed." -msgstr "Unterhaltung gelöscht." - -#: mod/message.php:322 mod/wallmessage.php:126 -msgid "Send Private Message" -msgstr "Private Nachricht senden" - -#: mod/message.php:323 mod/message.php:510 mod/wallmessage.php:128 -msgid "To:" -msgstr "An:" - -#: mod/message.php:328 mod/message.php:512 mod/wallmessage.php:129 -msgid "Subject:" -msgstr "Betreff:" - -#: mod/message.php:364 -msgid "No messages." -msgstr "Keine Nachrichten." - -#: mod/message.php:403 -msgid "Message not available." -msgstr "Nachricht nicht verfügbar." - -#: mod/message.php:477 -msgid "Delete message" -msgstr "Nachricht löschen" - -#: mod/message.php:503 mod/message.php:583 -msgid "Delete conversation" -msgstr "Unterhaltung löschen" - -#: mod/message.php:505 -msgid "" -"No secure communications available. You may be able to " -"respond from the sender's profile page." -msgstr "Sichere Kommunikation ist nicht verfügbar. Eventuell kannst Du auf der Profilseite des Absenders antworten." - -#: mod/message.php:509 -msgid "Send Reply" -msgstr "Antwort senden" - -#: mod/message.php:553 -#, php-format -msgid "Unknown sender - %s" -msgstr "'Unbekannter Absender - %s" - -#: mod/message.php:555 -#, php-format -msgid "You and %s" -msgstr "Du und %s" - -#: mod/message.php:557 -#, php-format -msgid "%s and You" -msgstr "%s und Du" - -#: mod/message.php:586 -msgid "D, d M Y - g:i A" -msgstr "D, d. M Y - g:i A" - -#: mod/message.php:589 -#, php-format -msgid "%d message" -msgid_plural "%d messages" -msgstr[0] "%d Nachricht" -msgstr[1] "%d Nachrichten" - -#: mod/p.php:9 -msgid "Not Extended" -msgstr "Nicht erweitert." - -#: mod/ping.php:270 -msgid "{0} wants to be your friend" -msgstr "{0} möchte mit Dir in Kontakt treten" - -#: mod/ping.php:285 -msgid "{0} sent you a message" -msgstr "{0} schickte Dir eine Nachricht" - -#: mod/ping.php:300 -msgid "{0} requested registration" -msgstr "{0} möchte sich registrieren" - -#: mod/wallmessage.php:42 mod/wallmessage.php:106 -#, php-format -msgid "Number of daily wall messages for %s exceeded. Message failed." -msgstr "Maximale Anzahl der täglichen Pinnwand Nachrichten für %s ist überschritten. Zustellung fehlgeschlagen." - -#: mod/wallmessage.php:53 -msgid "Unable to check your home location." -msgstr "Konnte Deinen Heimatort nicht bestimmen." - -#: mod/wallmessage.php:80 mod/wallmessage.php:89 -msgid "No recipient." -msgstr "Kein Empfänger." - -#: mod/wallmessage.php:127 -#, php-format -msgid "" -"If you wish for %s to respond, please check that the privacy settings on " -"your site allow private mail from unknown senders." -msgstr "Wenn Du möchtest, dass %s Dir antworten kann, überprüfe Deine Privatsphären-Einstellungen und erlaube private Nachrichten von unbekannten Absendern." - -#: mod/photos.php:90 mod/photos.php:1876 -msgid "Recent Photos" -msgstr "Neueste Fotos" - -#: mod/photos.php:93 mod/photos.php:1303 mod/photos.php:1878 -msgid "Upload New Photos" -msgstr "Neue Fotos hochladen" - -#: mod/photos.php:171 -msgid "Contact information unavailable" -msgstr "Kontaktinformationen nicht verfügbar" - -#: mod/photos.php:192 -msgid "Album not found." -msgstr "Album nicht gefunden." - -#: mod/photos.php:225 mod/photos.php:237 mod/photos.php:1247 -msgid "Delete Album" -msgstr "Album löschen" - -#: mod/photos.php:235 -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:317 mod/photos.php:328 mod/photos.php:1563 -msgid "Delete Photo" -msgstr "Foto löschen" - -#: mod/photos.php:326 -msgid "Do you really want to delete this photo?" -msgstr "Möchtest Du wirklich dieses Foto löschen?" - -#: mod/photos.php:705 -#, 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:705 -msgid "a photo" -msgstr "einem Foto" - -#: mod/photos.php:811 -msgid "Image file is empty." -msgstr "Bilddatei ist leer." - -#: mod/photos.php:974 -msgid "No photos selected" -msgstr "Keine Bilder ausgewählt" - -#: mod/photos.php:1134 -#, php-format -msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage." -msgstr "Du verwendest %1$.2f Mbyte von %2$.2f Mbyte des Foto-Speichers." - -#: mod/photos.php:1168 -msgid "Upload Photos" -msgstr "Bilder hochladen" - -#: mod/photos.php:1172 mod/photos.php:1242 -msgid "New album name: " -msgstr "Name des neuen Albums: " - -#: mod/photos.php:1173 -msgid "or existing album name: " -msgstr "oder existierender Albumname: " - -#: mod/photos.php:1174 -msgid "Do not show a status post for this upload" -msgstr "Keine Status-Mitteilung für diesen Beitrag anzeigen" - -#: mod/photos.php:1187 -msgid "Private Photo" -msgstr "Privates Foto" - -#: mod/photos.php:1188 -msgid "Public Photo" -msgstr "Öffentliches Foto" - -#: mod/photos.php:1254 -msgid "Edit Album" -msgstr "Album bearbeiten" - -#: mod/photos.php:1260 -msgid "Show Newest First" -msgstr "Zeige neueste zuerst" - -#: mod/photos.php:1262 -msgid "Show Oldest First" -msgstr "Zeige älteste zuerst" - -#: mod/photos.php:1289 mod/photos.php:1861 -msgid "View Photo" -msgstr "Foto betrachten" - -#: mod/photos.php:1335 -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:1337 -msgid "Photo not available" -msgstr "Foto nicht verfügbar" - -#: mod/photos.php:1395 -msgid "View photo" -msgstr "Fotos ansehen" - -#: mod/photos.php:1395 -msgid "Edit photo" -msgstr "Foto bearbeiten" - -#: mod/photos.php:1396 -msgid "Use as profile photo" -msgstr "Als Profilbild verwenden" - -#: mod/photos.php:1421 -msgid "View Full Size" -msgstr "Betrachte Originalgröße" - -#: mod/photos.php:1507 -msgid "Tags: " -msgstr "Tags: " - -#: mod/photos.php:1510 -msgid "[Remove any tag]" -msgstr "[Tag entfernen]" - -#: mod/photos.php:1549 -msgid "New album name" -msgstr "Name des neuen Albums" - -#: mod/photos.php:1550 -msgid "Caption" -msgstr "Bildunterschrift" - -#: mod/photos.php:1551 -msgid "Add a Tag" -msgstr "Tag hinzufügen" - -#: mod/photos.php:1551 -msgid "" -"Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" -msgstr "Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" - -#: mod/photos.php:1552 -msgid "Do not rotate" -msgstr "Nicht rotieren" - -#: mod/photos.php:1553 -msgid "Rotate CW (right)" -msgstr "Drehen US (rechts)" - -#: mod/photos.php:1554 -msgid "Rotate CCW (left)" -msgstr "Drehen EUS (links)" - -#: mod/photos.php:1569 -msgid "Private photo" -msgstr "Privates Foto" - -#: mod/photos.php:1570 -msgid "Public photo" -msgstr "Öffentliches Foto" - -#: mod/photos.php:1792 -msgid "Map" -msgstr "Karte" - -#: mod/dfrn_request.php:101 -msgid "This introduction has already been accepted." -msgstr "Diese Kontaktanfrage wurde bereits akzeptiert." - -#: mod/dfrn_request.php:124 mod/dfrn_request.php:523 -msgid "Profile location is not valid or does not contain profile information." -msgstr "Profiladresse ist ungültig oder stellt keine Profildaten zur Verfügung." - -#: mod/dfrn_request.php:129 mod/dfrn_request.php:528 -msgid "Warning: profile location has no identifiable owner name." -msgstr "Warnung: Es konnte kein Name des Besitzers von der angegebenen Profiladresse gefunden werden." - -#: mod/dfrn_request.php:132 mod/dfrn_request.php:531 -msgid "Warning: profile location has no profile photo." -msgstr "Warnung: Es gibt kein Profilbild bei der angegebenen Profiladresse." - -#: mod/dfrn_request.php:136 mod/dfrn_request.php:535 -#, php-format -msgid "%d required parameter was not found at the given location" -msgid_plural "%d required parameters were not found at the given location" -msgstr[0] "%d benötigter Parameter wurde an der angegebenen Stelle nicht gefunden" -msgstr[1] "%d benötigte Parameter wurden an der angegebenen Stelle nicht gefunden" - -#: mod/dfrn_request.php:180 -msgid "Introduction complete." -msgstr "Kontaktanfrage abgeschlossen." - -#: mod/dfrn_request.php:225 -msgid "Unrecoverable protocol error." -msgstr "Nicht behebbarer Protokollfehler." - -#: mod/dfrn_request.php:253 -msgid "Profile unavailable." -msgstr "Profil nicht verfügbar." - -#: mod/dfrn_request.php:280 -#, php-format -msgid "%s has received too many connection requests today." -msgstr "%s hat heute zu viele Kontaktanfragen erhalten." - -#: mod/dfrn_request.php:281 -msgid "Spam protection measures have been invoked." -msgstr "Maßnahmen zum Spamschutz wurden ergriffen." - -#: mod/dfrn_request.php:282 -msgid "Friends are advised to please try again in 24 hours." -msgstr "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen." - -#: mod/dfrn_request.php:344 -msgid "Invalid locator" -msgstr "Ungültiger Locator" - -#: mod/dfrn_request.php:353 -msgid "Invalid email address." -msgstr "Ungültige E-Mail-Adresse." - -#: mod/dfrn_request.php:378 -msgid "This account has not been configured for email. Request failed." -msgstr "Dieses Konto ist nicht für E-Mail konfiguriert. Anfrage fehlgeschlagen." - -#: mod/dfrn_request.php:481 -msgid "You have already introduced yourself here." -msgstr "Du hast Dich hier bereits vorgestellt." - -#: mod/dfrn_request.php:485 -#, php-format -msgid "Apparently you are already friends with %s." -msgstr "Es scheint so, als ob Du bereits mit %s in Kontakt stehst." - -#: mod/dfrn_request.php:506 -msgid "Invalid profile URL." -msgstr "Ungültige Profil-URL." - -#: mod/dfrn_request.php:609 -msgid "Your introduction has been sent." -msgstr "Deine Kontaktanfrage wurde gesendet." - -#: mod/dfrn_request.php:651 -msgid "" -"Remote subscription can't be done for your network. Please subscribe " -"directly on your system." -msgstr "Entferntes abon­nie­ren kann für dein Netzwerk nicht durchgeführt werden. Bitte nutze direkt die Abonnieren-Funktion deines Systems. " - -#: mod/dfrn_request.php:672 -msgid "Please login to confirm introduction." -msgstr "Bitte melde Dich an, um die Kontaktanfrage zu bestätigen." - -#: mod/dfrn_request.php:682 -msgid "" -"Incorrect identity currently logged in. Please login to " -"this profile." -msgstr "Momentan bist Du mit einer anderen Identität angemeldet. Bitte melde Dich mit diesem Profil an." - -#: mod/dfrn_request.php:696 mod/dfrn_request.php:713 -msgid "Confirm" -msgstr "Bestätigen" - -#: mod/dfrn_request.php:708 -msgid "Hide this contact" -msgstr "Verberge diesen Kontakt" - -#: mod/dfrn_request.php:711 -#, php-format -msgid "Welcome home %s." -msgstr "Willkommen zurück %s." - -#: mod/dfrn_request.php:712 -#, php-format -msgid "Please confirm your introduction/connection request to %s." -msgstr "Bitte bestätige Deine Kontaktanfrage bei %s." - -#: mod/dfrn_request.php:843 -msgid "" -"Please enter your 'Identity Address' from one of the following supported " -"communications networks:" -msgstr "Bitte gib die Adresse Deines Profils in einem der unterstützten sozialen Netzwerke an:" - -#: mod/dfrn_request.php:867 -#, php-format -msgid "" -"If you are not yet a member of the free social web, follow this link to find a public Friendica site and " -"join us today." -msgstr "Wenn du noch kein Mitglied dieses freien sozialen Netzwerks bist, folge diesem Link um einen öffentlichen Friendica-Server zu finden und beizutreten." - -#: mod/dfrn_request.php:872 -msgid "Friend/Connection Request" -msgstr "Kontaktanfrage" - -#: mod/dfrn_request.php:873 -msgid "" -"Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, " -"testuser@identi.ca" -msgstr "Beispiele: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca" - -#: mod/dfrn_request.php:882 -msgid "StatusNet/Federated Social Web" -msgstr "StatusNet/Federated Social Web" - -#: mod/dfrn_request.php:884 -#, php-format -msgid "" -" - please do not use this form. Instead, enter %s into your Diaspora search" -" bar." -msgstr " - bitte verwende dieses Formular nicht. Stattdessen suche nach %s in Deiner Diaspora Suchleiste." - -#: mod/install.php:140 +#: mod/install.php:106 msgid "Friendica Communications Server - Setup" msgstr "Friendica-Server für soziale Netzwerke – Setup" -#: mod/install.php:146 +#: mod/install.php:112 msgid "Could not connect to database." msgstr "Verbindung zur Datenbank gescheitert." -#: mod/install.php:150 +#: mod/install.php:116 msgid "Could not create table." msgstr "Tabelle konnte nicht angelegt werden." -#: mod/install.php:156 +#: mod/install.php:122 msgid "Your Friendica site database has been installed." msgstr "Die Datenbank Deiner Friendicaseite wurde installiert." -#: mod/install.php:161 +#: mod/install.php:127 msgid "" "You may need to import the file \"database.sql\" manually using phpmyadmin " "or mysql." msgstr "Möglicherweise musst Du die Datei \"database.sql\" manuell mit phpmyadmin oder mysql importieren." -#: mod/install.php:162 mod/install.php:234 mod/install.php:609 +#: mod/install.php:128 mod/install.php:200 mod/install.php:547 msgid "Please see the file \"INSTALL.txt\"." msgstr "Lies bitte die \"INSTALL.txt\"." -#: mod/install.php:174 +#: mod/install.php:140 msgid "Database already in use." msgstr "Die Datenbank wird bereits verwendet." -#: mod/install.php:231 +#: mod/install.php:197 msgid "System check" msgstr "Systemtest" -#: mod/install.php:236 +#: mod/install.php:202 msgid "Check again" msgstr "Noch einmal testen" -#: mod/install.php:255 +#: mod/install.php:221 msgid "Database connection" msgstr "Datenbankverbindung" -#: mod/install.php:256 +#: mod/install.php:222 msgid "" "In order to install Friendica we need to know how to connect to your " "database." msgstr "Um Friendica installieren zu können, müssen wir wissen, wie wir mit Deiner Datenbank Kontakt aufnehmen können." -#: mod/install.php:257 +#: mod/install.php:223 msgid "" "Please contact your hosting provider or site administrator if you have " "questions about these settings." msgstr "Bitte kontaktiere den Hosting Provider oder den Administrator der Seite, falls Du Fragen zu diesen Einstellungen haben solltest." -#: mod/install.php:258 +#: mod/install.php:224 msgid "" "The database you specify below should already exist. If it does not, please " "create it before continuing." msgstr "Die Datenbank, die Du unten angibst, sollte bereits existieren. Ist dies noch nicht der Fall, erzeuge sie bitte bevor Du mit der Installation fortfährst." -#: mod/install.php:262 +#: mod/install.php:228 msgid "Database Server Name" msgstr "Datenbank-Server" -#: mod/install.php:263 +#: mod/install.php:229 msgid "Database Login Name" msgstr "Datenbank-Nutzer" -#: mod/install.php:264 +#: mod/install.php:230 msgid "Database Login Password" msgstr "Datenbank-Passwort" -#: mod/install.php:264 +#: mod/install.php:230 msgid "For security reasons the password must not be empty" msgstr "Aus Sicherheitsgründen darf das Passwort nicht leer sein." -#: mod/install.php:265 +#: mod/install.php:231 msgid "Database Name" msgstr "Datenbank-Name" -#: mod/install.php:266 mod/install.php:307 +#: mod/install.php:232 mod/install.php:273 msgid "Site administrator email address" msgstr "E-Mail-Adresse des Administrators" -#: mod/install.php:266 mod/install.php:307 +#: mod/install.php:232 mod/install.php:273 msgid "" "Your account email address must match this in order to use the web admin " "panel." msgstr "Die E-Mail-Adresse, die in Deinem Friendica-Account eingetragen ist, muss mit dieser Adresse übereinstimmen, damit Du das Admin-Panel benutzen kannst." -#: mod/install.php:270 mod/install.php:310 +#: mod/install.php:236 mod/install.php:276 msgid "Please select a default timezone for your website" msgstr "Bitte wähle die Standardzeitzone Deiner Webseite" -#: mod/install.php:297 +#: mod/install.php:263 msgid "Site settings" msgstr "Server-Einstellungen" -#: mod/install.php:311 +#: mod/install.php:277 msgid "System Language:" msgstr "Systemsprache:" -#: mod/install.php:311 +#: mod/install.php:277 msgid "" "Set the default language for your Friendica installation interface and to " "send emails." msgstr "Wähle die Standardsprache für deine Friendica-Installations-Oberfläche und den E-Mail-Versand" -#: mod/install.php:351 +#: mod/install.php:317 msgid "Could not find a command line version of PHP in the web server PATH." msgstr "Konnte keine Kommandozeilenversion von PHP im PATH des Servers finden." -#: mod/install.php:352 +#: mod/install.php:318 msgid "" "If you don't have a command line version of PHP installed on server, you " -"will not be able to run background polling via cron. See 'Setup the poller'" -msgstr "Wenn Du keine Kommandozeilen-Version von PHP auf Deinem Server installiert hast, kannst Du keine Hintergrundprozesse via cron starten. Siehe 'Setup the poller'" +msgstr "Wenn auf deinem Server keine Kommandozeilenversion von PHP installiert ist, kannst du den Hintergrundprozess nicht einrichten. Hier findest du alternative Möglichkeiten'für das Poller Setup'" -#: mod/install.php:356 +#: mod/install.php:322 msgid "PHP executable path" msgstr "Pfad zu PHP" -#: mod/install.php:356 +#: mod/install.php:322 msgid "" "Enter full path to php executable. You can leave this blank to continue the " "installation." msgstr "Gib den kompletten Pfad zur ausführbaren Datei von PHP an. Du kannst dieses Feld auch frei lassen und mit der Installation fortfahren." -#: mod/install.php:361 +#: mod/install.php:327 msgid "Command line PHP" msgstr "Kommandozeilen-PHP" -#: mod/install.php:370 +#: mod/install.php:336 msgid "PHP executable is not the php cli binary (could be cgi-fgci version)" msgstr "Die ausführbare Datei von PHP stimmt nicht mit der PHP cli Version überein (es könnte sich um die cgi-fgci Version handeln)" -#: mod/install.php:371 +#: mod/install.php:337 msgid "Found PHP version: " msgstr "Gefundene PHP Version:" -#: mod/install.php:373 +#: mod/install.php:339 msgid "PHP cli binary" msgstr "PHP CLI Binary" -#: mod/install.php:384 +#: mod/install.php:350 msgid "" "The command line version of PHP on your system does not have " "\"register_argc_argv\" enabled." msgstr "Die Kommandozeilenversion von PHP auf Deinem System hat \"register_argc_argv\" nicht aktiviert." -#: mod/install.php:385 +#: mod/install.php:351 msgid "This is required for message delivery to work." msgstr "Dies wird für die Auslieferung von Nachrichten benötigt." -#: mod/install.php:387 +#: mod/install.php:353 msgid "PHP register_argc_argv" msgstr "PHP register_argc_argv" -#: mod/install.php:410 +#: mod/install.php:376 msgid "" "Error: the \"openssl_pkey_new\" function on this system is not able to " "generate encryption keys" msgstr "Fehler: Die Funktion \"openssl_pkey_new\" auf diesem System ist nicht in der Lage, Verschlüsselungsschlüssel zu erzeugen" -#: mod/install.php:411 +#: mod/install.php:377 msgid "" "If running under Windows, please see " "\"http://www.php.net/manual/en/openssl.installation.php\"." msgstr "Wenn der Server unter Windows läuft, schau Dir bitte \"http://www.php.net/manual/en/openssl.installation.php\" an." -#: mod/install.php:413 +#: mod/install.php:379 msgid "Generate encryption keys" msgstr "Schlüssel erzeugen" -#: mod/install.php:420 +#: mod/install.php:386 msgid "libCurl PHP module" msgstr "PHP: libCurl-Modul" -#: mod/install.php:421 +#: mod/install.php:387 msgid "GD graphics PHP module" msgstr "PHP: GD-Grafikmodul" -#: mod/install.php:422 +#: mod/install.php:388 msgid "OpenSSL PHP module" msgstr "PHP: OpenSSL-Modul" -#: mod/install.php:423 -msgid "mysqli PHP module" -msgstr "PHP: mysqli-Modul" +#: mod/install.php:389 +msgid "PDO or MySQLi PHP module" +msgstr "PDO oder MySQLi PHP Modul" -#: mod/install.php:424 +#: mod/install.php:390 msgid "mb_string PHP module" msgstr "PHP: mb_string-Modul" -#: mod/install.php:425 -msgid "mcrypt PHP module" -msgstr "PHP mcrypt Modul" - -#: mod/install.php:426 +#: mod/install.php:391 msgid "XML PHP module" msgstr "XML PHP Modul" -#: mod/install.php:427 +#: mod/install.php:392 msgid "iconv module" msgstr "iconv module" -#: mod/install.php:431 mod/install.php:433 +#: mod/install.php:396 mod/install.php:398 msgid "Apache mod_rewrite module" msgstr "Apache mod_rewrite module" -#: mod/install.php:431 +#: mod/install.php:396 msgid "" "Error: Apache webserver mod-rewrite module is required but not installed." msgstr "Fehler: Das Apache-Modul mod-rewrite wird benötigt, es ist allerdings nicht installiert." -#: mod/install.php:439 +#: mod/install.php:404 msgid "Error: libCURL PHP module required but not installed." msgstr "Fehler: Das libCURL PHP Modul wird benötigt, ist aber nicht installiert." -#: mod/install.php:443 +#: mod/install.php:408 msgid "" "Error: GD graphics PHP module with JPEG support required but not installed." msgstr "Fehler: Das GD-Graphikmodul für PHP mit JPEG-Unterstützung ist nicht installiert." -#: mod/install.php:447 +#: mod/install.php:412 msgid "Error: openssl PHP module required but not installed." msgstr "Fehler: Das openssl-Modul von PHP ist nicht installiert." -#: mod/install.php:451 -msgid "Error: mysqli PHP module required but not installed." -msgstr "Fehler: Das mysqli-Modul von PHP ist nicht installiert." +#: mod/install.php:416 +msgid "Error: PDO or MySQLi PHP module required but not installed." +msgstr "Fehler: PDO oder MySQLi PHP Modul erforderlich, aber nicht installiert." -#: mod/install.php:455 +#: mod/install.php:420 +msgid "Error: The MySQL driver for PDO is not installed." +msgstr "Fehler: der MySQL Treiber für PDO ist nicht installiert" + +#: mod/install.php:424 msgid "Error: mb_string PHP module required but not installed." msgstr "Fehler: mb_string PHP Module wird benötigt ist aber nicht installiert." -#: mod/install.php:459 -msgid "Error: mcrypt PHP module required but not installed." -msgstr "Fehler: Das mcrypt Modul von PHP ist nicht installiert" - -#: mod/install.php:463 +#: mod/install.php:428 msgid "Error: iconv PHP module required but not installed." msgstr "Fehler: Das iconv-Modul von PHP ist nicht installiert." -#: mod/install.php:472 -msgid "" -"If you are using php_cli, please make sure that mcrypt module is enabled in " -"its config file" -msgstr "Wenn du das Modul \"php_cli\" benutzt dann versichere dich, daß das mcrypt Modul in seiner Konfigurationsdatei aktiviert ist. " - -#: mod/install.php:475 -msgid "" -"Function mcrypt_create_iv() is not defined. This is needed to enable RINO2 " -"encryption layer." -msgstr "Die Funktion mcrypt_create_iv() ist nicht festgelegt. Dies ist notwendig um den RINO2-Encryption-Layer zu aktivieren." - -#: mod/install.php:477 -msgid "mcrypt_create_iv() function" -msgstr "mcrypt_create_iv() function" - -#: mod/install.php:485 +#: mod/install.php:438 msgid "Error, XML PHP module required but not installed." msgstr "Fehler: XML PHP Modul erforderlich aber nicht installiert." -#: mod/install.php:500 +#: mod/install.php:450 msgid "" "The web installer needs to be able to create a file called \".htconfig.php\"" " in the top folder of your web server and it is unable to do so." msgstr "Der Installationswizard muss in der Lage sein, eine Datei im Stammverzeichnis Deines Webservers anzulegen, ist allerdings derzeit nicht in der Lage, dies zu tun." -#: mod/install.php:501 +#: mod/install.php:451 msgid "" "This is most often a permission setting, as the web server may not be able " "to write files in your folder - even if you can." msgstr "In den meisten Fällen ist dies ein Problem mit den Schreibrechten. Der Webserver könnte keine Schreiberlaubnis haben, selbst wenn Du sie hast." -#: mod/install.php:502 +#: mod/install.php:452 msgid "" "At the end of this procedure, we will give you a text to save in a file " "named .htconfig.php in your Friendica top folder." msgstr "Nachdem Du alles ausgefüllt hast, erhältst Du einen Text, den Du in eine Datei namens .htconfig.php in Deinem Friendica-Wurzelverzeichnis kopieren musst." -#: mod/install.php:503 +#: mod/install.php:453 msgid "" "You can alternatively skip this procedure and perform a manual installation." " Please see the file \"INSTALL.txt\" for instructions." msgstr "Alternativ kannst Du diesen Schritt aber auch überspringen und die Installation manuell durchführen. Eine Anleitung dazu (Englisch) findest Du in der Datei INSTALL.txt." -#: mod/install.php:506 +#: mod/install.php:456 msgid ".htconfig.php is writable" msgstr "Schreibrechte auf .htconfig.php" -#: mod/install.php:516 +#: mod/install.php:466 msgid "" "Friendica uses the Smarty3 template engine to render its web views. Smarty3 " "compiles templates to PHP to speed up rendering." msgstr "Friendica nutzt die Smarty3 Template Engine um die Webansichten zu rendern. Smarty3 kompiliert Templates zu PHP um das Rendern zu beschleunigen." -#: mod/install.php:517 +#: mod/install.php:467 msgid "" "In order to store these compiled templates, the web server needs to have " "write access to the directory view/smarty3/ under the Friendica top level " "folder." msgstr "Um diese kompilierten Templates zu speichern benötigt der Webserver Schreibrechte zum Verzeichnis view/smarty3/ im obersten Ordner von Friendica." -#: mod/install.php:518 +#: mod/install.php:468 msgid "" "Please ensure that the user that your web server runs as (e.g. www-data) has" " write access to this folder." msgstr "Bitte stelle sicher, dass der Nutzer unter dem der Webserver läuft (z.B. www-data) Schreibrechte zu diesem Verzeichnis hat." -#: mod/install.php:519 +#: mod/install.php:469 msgid "" "Note: as a security measure, you should give the web server write access to " "view/smarty3/ only--not the template files (.tpl) that it contains." msgstr "Hinweis: aus Sicherheitsgründen solltest Du dem Webserver nur Schreibrechte für view/smarty3/ geben -- Nicht den Templatedateien (.tpl) die sie enthalten." -#: mod/install.php:522 +#: mod/install.php:472 msgid "view/smarty3 is writable" msgstr "view/smarty3 ist schreibbar" -#: mod/install.php:538 +#: mod/install.php:488 msgid "" "Url rewrite in .htaccess is not working. Check your server configuration." msgstr "Umschreiben der URLs in der .htaccess funktioniert nicht. Überprüfe die Konfiguration des Servers." -#: mod/install.php:540 +#: mod/install.php:490 msgid "Url rewrite is working" msgstr "URL rewrite funktioniert" -#: mod/install.php:559 +#: mod/install.php:509 msgid "ImageMagick PHP extension is not installed" msgstr "ImageMagicx PHP Erweiterung ist nicht installiert." -#: mod/install.php:561 +#: mod/install.php:511 msgid "ImageMagick PHP extension is installed" msgstr "ImageMagick PHP Erweiterung ist installiert" -#: mod/install.php:563 +#: mod/install.php:513 msgid "ImageMagick supports GIF" msgstr "ImageMagick unterstützt GIF" -#: mod/install.php:570 +#: mod/install.php:520 msgid "" "The database configuration file \".htconfig.php\" could not be written. " "Please use the enclosed text to create a configuration file in your web " "server root." msgstr "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text, um die Datei im Stammverzeichnis Deiner Friendica-Installation zu erzeugen." -#: mod/install.php:607 +#: mod/install.php:545 msgid "

What next

" msgstr "

Wie geht es weiter?

" -#: mod/install.php:608 +#: mod/install.php:546 msgid "" "IMPORTANT: You will need to [manually] setup a scheduled task for the " "poller." msgstr "WICHTIG: Du musst [manuell] einen Cronjob (o.ä.) für den Poller einrichten." -#: mod/profiles.php:38 -msgid "Profile deleted." -msgstr "Profil gelöscht." +#: mod/item.php:116 +msgid "Unable to locate original post." +msgstr "Konnte den Originalbeitrag nicht finden." -#: mod/profiles.php:56 mod/profiles.php:90 -msgid "Profile-" -msgstr "Profil-" +#: mod/item.php:344 +msgid "Empty post discarded." +msgstr "Leerer Beitrag wurde verworfen." -#: mod/profiles.php:75 mod/profiles.php:118 -msgid "New profile created." -msgstr "Neues Profil angelegt." +#: mod/item.php:904 +msgid "System error. Post not saved." +msgstr "Systemfehler. Beitrag konnte nicht gespeichert werden." -#: mod/profiles.php:96 -msgid "Profile unavailable to clone." -msgstr "Profil nicht zum Duplizieren verfügbar." - -#: mod/profiles.php:190 -msgid "Profile Name is required." -msgstr "Profilname ist erforderlich." - -#: mod/profiles.php:338 -msgid "Marital Status" -msgstr "Familienstand" - -#: mod/profiles.php:342 -msgid "Romantic Partner" -msgstr "Romanze" - -#: mod/profiles.php:354 -msgid "Work/Employment" -msgstr "Arbeit / Beschäftigung" - -#: mod/profiles.php:357 -msgid "Religion" -msgstr "Religion" - -#: mod/profiles.php:361 -msgid "Political Views" -msgstr "Politische Ansichten" - -#: mod/profiles.php:365 -msgid "Gender" -msgstr "Geschlecht" - -#: mod/profiles.php:369 -msgid "Sexual Preference" -msgstr "Sexuelle Vorlieben" - -#: mod/profiles.php:373 -msgid "XMPP" -msgstr "XMPP" - -#: mod/profiles.php:377 -msgid "Homepage" -msgstr "Webseite" - -#: mod/profiles.php:381 mod/profiles.php:694 -msgid "Interests" -msgstr "Interessen" - -#: mod/profiles.php:385 -msgid "Address" -msgstr "Adresse" - -#: mod/profiles.php:392 mod/profiles.php:690 -msgid "Location" -msgstr "Wohnort" - -#: mod/profiles.php:477 -msgid "Profile updated." -msgstr "Profil aktualisiert." - -#: mod/profiles.php:565 -msgid " and " -msgstr " und " - -#: mod/profiles.php:573 -msgid "public profile" -msgstr "öffentliches Profil" - -#: mod/profiles.php:576 -#, php-format -msgid "%1$s changed %2$s to “%3$s”" -msgstr "%1$s hat %2$s geändert auf “%3$s”" - -#: mod/profiles.php:577 -#, php-format -msgid " - Visit %1$s's %2$s" -msgstr " – %1$ss %2$s besuchen" - -#: mod/profiles.php:580 -#, php-format -msgid "%1$s has an updated %2$s, changing %3$s." -msgstr "%1$s hat folgendes aktualisiert %2$s, verändert wurde %3$s." - -#: mod/profiles.php:637 -msgid "Hide contacts and friends:" -msgstr "Kontakte und Freunde verbergen" - -#: mod/profiles.php:642 -msgid "Hide your contact/friend list from viewers of this profile?" -msgstr "Liste der Kontakte vor Betrachtern dieses Profils verbergen?" - -#: mod/profiles.php:666 -msgid "Show more profile fields:" -msgstr "Zeige mehr Profil-Felder:" - -#: mod/profiles.php:678 -msgid "Profile Actions" -msgstr "Profilaktionen" - -#: mod/profiles.php:679 -msgid "Edit Profile Details" -msgstr "Profil bearbeiten" - -#: mod/profiles.php:681 -msgid "Change Profile Photo" -msgstr "Profilbild ändern" - -#: mod/profiles.php:682 -msgid "View this profile" -msgstr "Dieses Profil anzeigen" - -#: mod/profiles.php:684 -msgid "Create a new profile using these settings" -msgstr "Neues Profil anlegen und diese Einstellungen verwenden" - -#: mod/profiles.php:685 -msgid "Clone this profile" -msgstr "Dieses Profil duplizieren" - -#: mod/profiles.php:686 -msgid "Delete this profile" -msgstr "Dieses Profil löschen" - -#: mod/profiles.php:688 -msgid "Basic information" -msgstr "Grundinformationen" - -#: mod/profiles.php:689 -msgid "Profile picture" -msgstr "Profilbild" - -#: mod/profiles.php:691 -msgid "Preferences" -msgstr "Vorlieben" - -#: mod/profiles.php:692 -msgid "Status information" -msgstr "Status Informationen" - -#: mod/profiles.php:693 -msgid "Additional information" -msgstr "Zusätzliche Informationen" - -#: mod/profiles.php:696 -msgid "Relation" -msgstr "Beziehung" - -#: mod/profiles.php:700 -msgid "Your Gender:" -msgstr "Dein Geschlecht:" - -#: mod/profiles.php:701 -msgid " Marital Status:" -msgstr " Beziehungsstatus:" - -#: mod/profiles.php:703 -msgid "Example: fishing photography software" -msgstr "Beispiel: Fischen Fotografie Software" - -#: mod/profiles.php:708 -msgid "Profile Name:" -msgstr "Profilname:" - -#: mod/profiles.php:710 -msgid "" -"This is your public profile.
It may " -"be visible to anybody using the internet." -msgstr "Dies ist Dein öffentliches Profil.
Es könnte für jeden Nutzer des Internets sichtbar sein." - -#: mod/profiles.php:711 -msgid "Your Full Name:" -msgstr "Dein kompletter Name:" - -#: mod/profiles.php:712 -msgid "Title/Description:" -msgstr "Titel/Beschreibung:" - -#: mod/profiles.php:715 -msgid "Street Address:" -msgstr "Adresse:" - -#: mod/profiles.php:716 -msgid "Locality/City:" -msgstr "Wohnort:" - -#: mod/profiles.php:717 -msgid "Region/State:" -msgstr "Region/Bundesstaat:" - -#: mod/profiles.php:718 -msgid "Postal/Zip Code:" -msgstr "Postleitzahl:" - -#: mod/profiles.php:719 -msgid "Country:" -msgstr "Land:" - -#: mod/profiles.php:723 -msgid "Who: (if applicable)" -msgstr "Wer: (falls anwendbar)" - -#: mod/profiles.php:723 -msgid "Examples: cathy123, Cathy Williams, cathy@example.com" -msgstr "Beispiele: cathy123, Cathy Williams, cathy@example.com" - -#: mod/profiles.php:724 -msgid "Since [date]:" -msgstr "Seit [Datum]:" - -#: mod/profiles.php:726 -msgid "Tell us about yourself..." -msgstr "Erzähle uns ein bisschen von Dir …" - -#: mod/profiles.php:727 -msgid "XMPP (Jabber) address:" -msgstr "XMPP (Jabber) Adresse" - -#: mod/profiles.php:727 -msgid "" -"The XMPP address will be propagated to your contacts so that they can follow" -" you." -msgstr "Die XMPP Adresse wird an deine Kontakte verteilt werden, so dass sie auch über XMPP mit dir in Kontakt treten können." - -#: mod/profiles.php:728 -msgid "Homepage URL:" -msgstr "Adresse der Homepage:" - -#: mod/profiles.php:731 -msgid "Religious Views:" -msgstr "Religiöse Ansichten:" - -#: mod/profiles.php:732 -msgid "Public Keywords:" -msgstr "Öffentliche Schlüsselwörter:" - -#: mod/profiles.php:732 -msgid "(Used for suggesting potential friends, can be seen by others)" -msgstr "(Wird verwendet, um potentielle Kontakte zu finden, kann von Kontakten eingesehen werden)" - -#: mod/profiles.php:733 -msgid "Private Keywords:" -msgstr "Private Schlüsselwörter:" - -#: mod/profiles.php:733 -msgid "(Used for searching profiles, never shown to others)" -msgstr "(Wird für die Suche nach Profilen verwendet und niemals veröffentlicht)" - -#: mod/profiles.php:736 -msgid "Musical interests" -msgstr "Musikalische Interessen" - -#: mod/profiles.php:737 -msgid "Books, literature" -msgstr "Bücher, Literatur" - -#: mod/profiles.php:738 -msgid "Television" -msgstr "Fernsehen" - -#: mod/profiles.php:739 -msgid "Film/dance/culture/entertainment" -msgstr "Filme/Tänze/Kultur/Unterhaltung" - -#: mod/profiles.php:740 -msgid "Hobbies/Interests" -msgstr "Hobbies/Interessen" - -#: mod/profiles.php:741 -msgid "Love/romance" -msgstr "Liebe/Romantik" - -#: mod/profiles.php:742 -msgid "Work/employment" -msgstr "Arbeit/Anstellung" - -#: mod/profiles.php:743 -msgid "School/education" -msgstr "Schule/Ausbildung" - -#: mod/profiles.php:744 -msgid "Contact information and Social Networks" -msgstr "Kontaktinformationen und Soziale Netzwerke" - -#: mod/profiles.php:788 -msgid "Edit/Manage Profiles" -msgstr "Bearbeite/Verwalte Profile" - -#: mod/display.php:479 -msgid "Item has been removed." -msgstr "Eintrag wurde entfernt." - -#: mod/admin.php:92 -msgid "Theme settings updated." -msgstr "Themeneinstellungen aktualisiert." - -#: mod/admin.php:157 mod/admin.php:975 -msgid "Site" -msgstr "Seite" - -#: mod/admin.php:158 mod/admin.php:909 mod/admin.php:1425 mod/admin.php:1441 -msgid "Users" -msgstr "Nutzer" - -#: mod/admin.php:160 mod/admin.php:1813 mod/admin.php:1863 -msgid "Themes" -msgstr "Themen" - -#: mod/admin.php:162 -msgid "DB updates" -msgstr "DB Updates" - -#: mod/admin.php:163 mod/admin.php:407 -msgid "Inspect Queue" -msgstr "Warteschlange Inspizieren" - -#: mod/admin.php:164 mod/admin.php:373 -msgid "Federation Statistics" -msgstr "Federation Statistik" - -#: mod/admin.php:178 mod/admin.php:189 mod/admin.php:1937 -msgid "Logs" -msgstr "Protokolle" - -#: mod/admin.php:179 mod/admin.php:2005 -msgid "View Logs" -msgstr "Protokolle anzeigen" - -#: mod/admin.php:180 -msgid "probe address" -msgstr "Adresse untersuchen" - -#: mod/admin.php:181 -msgid "check webfinger" -msgstr "Webfinger überprüfen" - -#: mod/admin.php:188 -msgid "Plugin Features" -msgstr "Plugin Features" - -#: mod/admin.php:190 -msgid "diagnostics" -msgstr "Diagnose" - -#: mod/admin.php:191 -msgid "User registrations waiting for confirmation" -msgstr "Nutzeranmeldungen die auf Bestätigung warten" - -#: mod/admin.php:307 -msgid "unknown" -msgstr "Unbekannt" - -#: mod/admin.php:366 -msgid "" -"This page offers you some numbers to the known part of the federated social " -"network your Friendica node is part of. These numbers are not complete but " -"only reflect the part of the network your node is aware of." -msgstr "Diese Seite präsentiert einige Zahlen zu dem bekannten Teil des föderalen sozialen Netzwerks, von dem deine Friendica Installation ein Teil ist. Diese Zahlen sind nicht absolut und reflektieren nur den Teil des Netzwerks, den dein Knoten kennt." - -#: mod/admin.php:367 -msgid "" -"The Auto Discovered Contact Directory feature is not enabled, it " -"will improve the data displayed here." -msgstr "Die Funktion um Automatisch ein Kontaktverzeichnis erstellen ist nicht aktiv. Es wird die hier angezeigten Daten verbessern." - -#: mod/admin.php:372 mod/admin.php:406 mod/admin.php:485 mod/admin.php:974 -#: mod/admin.php:1424 mod/admin.php:1542 mod/admin.php:1605 mod/admin.php:1812 -#: mod/admin.php:1862 mod/admin.php:1936 mod/admin.php:2004 -msgid "Administration" -msgstr "Administration" - -#: mod/admin.php:379 -#, php-format -msgid "Currently this node is aware of %d nodes from the following platforms:" -msgstr "Momentan kennt dieser Knoten %d andere Knoten der folgenden Plattformen:" - -#: mod/admin.php:409 -msgid "ID" -msgstr "ID" - -#: mod/admin.php:410 -msgid "Recipient Name" -msgstr "Empfänger Name" - -#: mod/admin.php:411 -msgid "Recipient Profile" -msgstr "Empfänger Profil" - -#: mod/admin.php:413 -msgid "Created" -msgstr "Erstellt" - -#: mod/admin.php:414 -msgid "Last Tried" -msgstr "Zuletzt versucht" - -#: mod/admin.php:415 -msgid "" -"This page lists the content of the queue for outgoing postings. These are " -"postings the initial delivery failed for. They will be resend later and " -"eventually deleted if the delivery fails permanently." -msgstr "Auf dieser Seite werden die in der Warteschlange eingereihten Beiträge aufgelistet. Bei diesen Beiträgen schlug die erste Zustellung fehl. Es wird später wiederholt versucht die Beiträge zuzustellen, bis sie schließlich gelöscht werden." - -#: mod/admin.php:440 +#: mod/item.php:995 #, php-format msgid "" -"Your DB still runs with MyISAM tables. You should change the engine type to " -"InnoDB. As Friendica will use InnoDB only features in the future, you should" -" change this! See here for a guide that may be helpful " -"converting the table engines. You may also use the " -"convert_innodb.sql in the /util directory of your " -"Friendica installation.
" -msgstr "Deine DB enthält einige Tabellen die noch auf MyISAM laufen. Du solltest den Engine-Type auf InnoDB umstellen, da Friendica in Zukunft einige InnoDB Features nutzen wird. Eine Anleitung zur Umstellung kannst du hier finden. Außerdem kannst du das convert_innodb.sql Skript verwenden, das du im /util Verzeichnis deiner Friendica Installation findest." +"This message was sent to you by %s, a member of the Friendica social " +"network." +msgstr "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica." -#: mod/admin.php:445 -msgid "" -"You are using a MySQL version which does not support all features that " -"Friendica uses. You should consider switching to MariaDB." -msgstr "Du verwendets eine MySQL Version die nicht alle Features unterstützt die Friendica verwendet. Wir empfehlen dir einen Wechsel auf MariaDB, falls dies möglich ist." - -#: mod/admin.php:449 mod/admin.php:1373 -msgid "Normal Account" -msgstr "Normales Konto" - -#: mod/admin.php:450 mod/admin.php:1374 -msgid "Soapbox Account" -msgstr "Marktschreier-Konto" - -#: mod/admin.php:451 mod/admin.php:1375 -msgid "Community/Celebrity Account" -msgstr "Forum/Promi-Konto" - -#: mod/admin.php:452 mod/admin.php:1376 -msgid "Automatic Friend Account" -msgstr "Automatisches Freundekonto" - -#: mod/admin.php:453 -msgid "Blog Account" -msgstr "Blog-Konto" - -#: mod/admin.php:454 -msgid "Private Forum" -msgstr "Privates Forum" - -#: mod/admin.php:480 -msgid "Message queues" -msgstr "Nachrichten-Warteschlangen" - -#: mod/admin.php:486 -msgid "Summary" -msgstr "Zusammenfassung" - -#: mod/admin.php:489 -msgid "Registered users" -msgstr "Registrierte Nutzer" - -#: mod/admin.php:491 -msgid "Pending registrations" -msgstr "Anstehende Anmeldungen" - -#: mod/admin.php:492 -msgid "Version" -msgstr "Version" - -#: mod/admin.php:497 -msgid "Active plugins" -msgstr "Aktive Plugins" - -#: mod/admin.php:522 -msgid "Can not parse base url. Must have at least ://" -msgstr "Die Basis-URL konnte nicht analysiert werden. Sie muss mindestens aus :// bestehen" - -#: mod/admin.php:827 -msgid "RINO2 needs mcrypt php extension to work." -msgstr "RINO2 benötigt die PHP Extension mcrypt." - -#: mod/admin.php:835 -msgid "Site settings updated." -msgstr "Seiteneinstellungen aktualisiert." - -#: mod/admin.php:892 -msgid "No community page" -msgstr "Keine Gemeinschaftsseite" - -#: mod/admin.php:893 -msgid "Public postings from users of this site" -msgstr "Öffentliche Beiträge von Nutzer_innen dieser Seite" - -#: mod/admin.php:894 -msgid "Global community page" -msgstr "Globale Gemeinschaftsseite" - -#: mod/admin.php:900 -msgid "At post arrival" -msgstr "Beim Empfang von Nachrichten" - -#: mod/admin.php:910 -msgid "Users, Global Contacts" -msgstr "Nutzer, globale Kontakte" - -#: mod/admin.php:911 -msgid "Users, Global Contacts/fallback" -msgstr "Nutzer, globale Kontakte / Fallback" - -#: mod/admin.php:915 -msgid "One month" -msgstr "ein Monat" - -#: mod/admin.php:916 -msgid "Three months" -msgstr "drei Monate" - -#: mod/admin.php:917 -msgid "Half a year" -msgstr "ein halbes Jahr" - -#: mod/admin.php:918 -msgid "One year" -msgstr "ein Jahr" - -#: mod/admin.php:923 -msgid "Multi user instance" -msgstr "Mehrbenutzer Instanz" - -#: mod/admin.php:946 -msgid "Closed" -msgstr "Geschlossen" - -#: mod/admin.php:947 -msgid "Requires approval" -msgstr "Bedarf der Zustimmung" - -#: mod/admin.php:948 -msgid "Open" -msgstr "Offen" - -#: mod/admin.php:952 -msgid "No SSL policy, links will track page SSL state" -msgstr "Keine SSL Richtlinie, Links werden das verwendete Protokoll beibehalten" - -#: mod/admin.php:953 -msgid "Force all links to use SSL" -msgstr "SSL für alle Links erzwingen" - -#: mod/admin.php:954 -msgid "Self-signed certificate, use SSL for local links only (discouraged)" -msgstr "Selbst-unterzeichnetes Zertifikat, SSL nur für lokale Links verwenden (nicht empfohlen)" - -#: mod/admin.php:978 -msgid "File upload" -msgstr "Datei hochladen" - -#: mod/admin.php:979 -msgid "Policies" -msgstr "Regeln" - -#: mod/admin.php:981 -msgid "Auto Discovered Contact Directory" -msgstr "Automatisch ein Kontaktverzeichnis erstellen" - -#: mod/admin.php:982 -msgid "Performance" -msgstr "Performance" - -#: mod/admin.php:983 -msgid "Worker" -msgstr "Worker" - -#: mod/admin.php:984 -msgid "" -"Relocate - WARNING: advanced function. Could make this server unreachable." -msgstr "Umsiedeln - WARNUNG: Könnte diesen Server unerreichbar machen." - -#: mod/admin.php:987 -msgid "Site name" -msgstr "Seitenname" - -#: mod/admin.php:988 -msgid "Host name" -msgstr "Host Name" - -#: mod/admin.php:989 -msgid "Sender Email" -msgstr "Absender für Emails" - -#: mod/admin.php:989 -msgid "" -"The email address your server shall use to send notification emails from." -msgstr "Die E-Mail Adresse die dein Server zum Versenden von Benachrichtigungen verwenden soll." - -#: mod/admin.php:990 -msgid "Banner/Logo" -msgstr "Banner/Logo" - -#: mod/admin.php:991 -msgid "Shortcut icon" -msgstr "Shortcut Icon" - -#: mod/admin.php:991 -msgid "Link to an icon that will be used for browsers." -msgstr "Link zu einem Icon, das Browser verwenden werden." - -#: mod/admin.php:992 -msgid "Touch icon" -msgstr "Touch Icon" - -#: mod/admin.php:992 -msgid "Link to an icon that will be used for tablets and mobiles." -msgstr "Link zu einem Icon das Tablets und Handies verwenden sollen." - -#: mod/admin.php:993 -msgid "Additional Info" -msgstr "Zusätzliche Informationen" - -#: mod/admin.php:993 +#: mod/item.php:997 #, php-format +msgid "You may visit them online at %s" +msgstr "Du kannst sie online unter %s besuchen" + +#: mod/item.php:998 msgid "" -"For public servers: you can add additional information here that will be " -"listed at %s/siteinfo." -msgstr "Für öffentliche Server kannst Du hier zusätzliche Informationen angeben, die dann auf %s/siteinfo angezeigt werden." +"Please contact the sender by replying to this post if you do not wish to " +"receive these messages." +msgstr "Falls Du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem Du auf diese Nachricht antwortest." -#: mod/admin.php:994 -msgid "System language" -msgstr "Systemsprache" - -#: mod/admin.php:995 -msgid "System theme" -msgstr "Systemweites Theme" - -#: mod/admin.php:995 -msgid "" -"Default system theme - may be over-ridden by user profiles - change theme settings" -msgstr "Vorgabe für das System-Theme - kann von Benutzerprofilen überschrieben werden - Theme-Einstellungen ändern" - -#: mod/admin.php:996 -msgid "Mobile system theme" -msgstr "Systemweites mobiles Theme" - -#: mod/admin.php:996 -msgid "Theme for mobile devices" -msgstr "Thema für mobile Geräte" - -#: mod/admin.php:997 -msgid "SSL link policy" -msgstr "Regeln für SSL Links" - -#: mod/admin.php:997 -msgid "Determines whether generated links should be forced to use SSL" -msgstr "Bestimmt, ob generierte Links SSL verwenden müssen" - -#: mod/admin.php:998 -msgid "Force SSL" -msgstr "Erzwinge SSL" - -#: mod/admin.php:998 -msgid "" -"Force all Non-SSL requests to SSL - Attention: on some systems it could lead" -" to endless loops." -msgstr "Erzinge alle Nicht-SSL Anfragen auf SSL - Achtung: auf manchen Systemen verursacht dies eine Endlosschleife." - -#: mod/admin.php:999 -msgid "Old style 'Share'" -msgstr "Altes \"Teilen\" Element" - -#: mod/admin.php:999 -msgid "Deactivates the bbcode element 'share' for repeating items." -msgstr "Deaktiviert das BBCode Element \"share\" beim Wiederholen von Beiträgen." - -#: mod/admin.php:1000 -msgid "Hide help entry from navigation menu" -msgstr "Verberge den Menüeintrag für die Hilfe im Navigationsmenü" - -#: mod/admin.php:1000 -msgid "" -"Hides the menu entry for the Help pages from the navigation menu. You can " -"still access it calling /help directly." -msgstr "Verbirgt den Menüeintrag für die Hilfe-Seiten im Navigationsmenü. Die Seiten können weiterhin über /help aufgerufen werden." - -#: mod/admin.php:1001 -msgid "Single user instance" -msgstr "Ein-Nutzer Instanz" - -#: mod/admin.php:1001 -msgid "Make this instance multi-user or single-user for the named user" -msgstr "Regelt ob es sich bei dieser Instanz um eine ein Personen Installation oder eine Installation mit mehr als einem Nutzer handelt." - -#: mod/admin.php:1002 -msgid "Maximum image size" -msgstr "Maximale Bildgröße" - -#: mod/admin.php:1002 -msgid "" -"Maximum size in bytes of uploaded images. Default is 0, which means no " -"limits." -msgstr "Maximale Uploadgröße von Bildern in Bytes. Standard ist 0, d.h. ohne Limit." - -#: mod/admin.php:1003 -msgid "Maximum image length" -msgstr "Maximale Bildlänge" - -#: mod/admin.php:1003 -msgid "" -"Maximum length in pixels of the longest side of uploaded images. Default is " -"-1, which means no limits." -msgstr "Maximale Länge in Pixeln der längsten Seite eines hoch geladenen Bildes. Grundeinstellung ist -1 was keine Einschränkung bedeutet." - -#: mod/admin.php:1004 -msgid "JPEG image quality" -msgstr "Qualität des JPEG Bildes" - -#: mod/admin.php:1004 -msgid "" -"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is " -"100, which is full quality." -msgstr "Hoch geladene JPEG Bilder werden mit dieser Qualität [0-100] gespeichert. Grundeinstellung ist 100, kein Qualitätsverlust." - -#: mod/admin.php:1006 -msgid "Register policy" -msgstr "Registrierungsmethode" - -#: mod/admin.php:1007 -msgid "Maximum Daily Registrations" -msgstr "Maximum täglicher Registrierungen" - -#: mod/admin.php:1007 -msgid "" -"If registration is permitted above, this sets the maximum number of new user" -" registrations to accept per day. If register is set to closed, this " -"setting has no effect." -msgstr "Wenn die Registrierung weiter oben erlaubt ist, regelt dies die maximale Anzahl von Neuanmeldungen pro Tag. Wenn die Registrierung geschlossen ist, hat diese Einstellung keinen Effekt." - -#: mod/admin.php:1008 -msgid "Register text" -msgstr "Registrierungstext" - -#: mod/admin.php:1008 -msgid "Will be displayed prominently on the registration page." -msgstr "Wird gut sichtbar auf der Registrierungsseite angezeigt." - -#: mod/admin.php:1009 -msgid "Accounts abandoned after x days" -msgstr "Nutzerkonten gelten nach x Tagen als unbenutzt" - -#: mod/admin.php:1009 -msgid "" -"Will not waste system resources polling external sites for abandonded " -"accounts. Enter 0 for no time limit." -msgstr "Verschwende keine System-Ressourcen auf das Pollen externer Seiten, wenn Konten nicht mehr benutzt werden. 0 eingeben für kein Limit." - -#: mod/admin.php:1010 -msgid "Allowed friend domains" -msgstr "Erlaubte Domains für Kontakte" - -#: mod/admin.php:1010 -msgid "" -"Comma separated list of domains which are allowed to establish friendships " -"with this site. Wildcards are accepted. Empty to allow any domains" -msgstr "Liste der Domains, die für Kontakte erlaubt sind, durch Kommas getrennt. Platzhalter werden akzeptiert. Leer lassen, um alle Domains zu erlauben." - -#: mod/admin.php:1011 -msgid "Allowed email domains" -msgstr "Erlaubte Domains für E-Mails" - -#: mod/admin.php:1011 -msgid "" -"Comma separated list of domains which are allowed in email addresses for " -"registrations to this site. Wildcards are accepted. Empty to allow any " -"domains" -msgstr "Liste der Domains, die für E-Mail-Adressen bei der Registrierung erlaubt sind, durch Kommas getrennt. Platzhalter werden akzeptiert. Leer lassen, um alle Domains zu erlauben." - -#: mod/admin.php:1012 -msgid "Block public" -msgstr "Öffentlichen Zugriff blockieren" - -#: mod/admin.php:1012 -msgid "" -"Check to block public access to all otherwise public personal pages on this " -"site unless you are currently logged in." -msgstr "Klicken, um öffentlichen Zugriff auf sonst öffentliche Profile zu blockieren, wenn man nicht eingeloggt ist." - -#: mod/admin.php:1013 -msgid "Force publish" -msgstr "Erzwinge Veröffentlichung" - -#: mod/admin.php:1013 -msgid "" -"Check to force all profiles on this site to be listed in the site directory." -msgstr "Klicken, um Anzeige aller Profile dieses Servers im Verzeichnis zu erzwingen." - -#: mod/admin.php:1014 -msgid "Global directory URL" -msgstr "URL des weltweiten Verzeichnisses" - -#: mod/admin.php:1014 -msgid "" -"URL to the global directory. If this is not set, the global directory is " -"completely unavailable to the application." -msgstr "URL des weltweiten Verzeichnisses. Wenn diese nicht gesetzt ist, ist das Verzeichnis für die Applikation nicht erreichbar." - -#: mod/admin.php:1015 -msgid "Allow threaded items" -msgstr "Erlaube Threads in Diskussionen" - -#: mod/admin.php:1015 -msgid "Allow infinite level threading for items on this site." -msgstr "Erlaube ein unendliches Level für Threads auf dieser Seite." - -#: mod/admin.php:1016 -msgid "Private posts by default for new users" -msgstr "Private Beiträge als Standard für neue Nutzer" - -#: mod/admin.php:1016 -msgid "" -"Set default post permissions for all new members to the default privacy " -"group rather than public." -msgstr "Die Standard-Zugriffsrechte für neue Nutzer werden so gesetzt, dass als Voreinstellung in die private Gruppe gepostet wird anstelle von öffentlichen Beiträgen." - -#: mod/admin.php:1017 -msgid "Don't include post content in email notifications" -msgstr "Inhalte von Beiträgen nicht in E-Mail-Benachrichtigungen versenden" - -#: mod/admin.php:1017 -msgid "" -"Don't include the content of a post/comment/private message/etc. in the " -"email notifications that are sent out from this site, as a privacy measure." -msgstr "Inhalte von Beiträgen/Kommentaren/privaten Nachrichten/usw., zum Datenschutz nicht in E-Mail-Benachrichtigungen einbinden." - -#: mod/admin.php:1018 -msgid "Disallow public access to addons listed in the apps menu." -msgstr "Öffentlichen Zugriff auf Addons im Apps Menü verbieten." - -#: mod/admin.php:1018 -msgid "" -"Checking this box will restrict addons listed in the apps menu to members " -"only." -msgstr "Wenn ausgewählt werden die im Apps Menü aufgeführten Addons nur angemeldeten Nutzern der Seite zur Verfügung gestellt." - -#: mod/admin.php:1019 -msgid "Don't embed private images in posts" -msgstr "Private Bilder nicht in Beiträgen einbetten." - -#: mod/admin.php:1019 -msgid "" -"Don't replace locally-hosted private photos in posts with an embedded copy " -"of the image. This means that contacts who receive posts containing private " -"photos will have to authenticate and load each image, which may take a " -"while." -msgstr "Ersetze lokal gehostete private Fotos in Beiträgen nicht mit einer eingebetteten Kopie des Bildes. Dies bedeutet, dass Kontakte, die Beiträge mit privaten Fotos erhalten sich zunächst auf den jeweiligen Servern authentifizieren müssen bevor die Bilder geladen und angezeigt werden, was eine gewisse Zeit dauert." - -#: mod/admin.php:1020 -msgid "Allow Users to set remote_self" -msgstr "Nutzern erlauben das remote_self Flag zu setzen" - -#: mod/admin.php:1020 -msgid "" -"With checking this, every user is allowed to mark every contact as a " -"remote_self in the repair contact dialog. Setting this flag on a contact " -"causes mirroring every posting of that contact in the users stream." -msgstr "Ist dies ausgewählt kann jeder Nutzer jeden seiner Kontakte als remote_self (entferntes Konto) im Kontakt reparieren Dialog markieren. Nach dem setzten dieses Flags werden alle Top-Level Beiträge dieser Kontakte automatisch in den Stream dieses Nutzers gepostet." - -#: mod/admin.php:1021 -msgid "Block multiple registrations" -msgstr "Unterbinde Mehrfachregistrierung" - -#: mod/admin.php:1021 -msgid "Disallow users to register additional accounts for use as pages." -msgstr "Benutzern nicht erlauben, weitere Konten als zusätzliche Profile anzulegen." - -#: mod/admin.php:1022 -msgid "OpenID support" -msgstr "OpenID Unterstützung" - -#: mod/admin.php:1022 -msgid "OpenID support for registration and logins." -msgstr "OpenID-Unterstützung für Registrierung und Login." - -#: mod/admin.php:1023 -msgid "Fullname check" -msgstr "Namen auf Vollständigkeit überprüfen" - -#: mod/admin.php:1023 -msgid "" -"Force users to register with a space between firstname and lastname in Full " -"name, as an antispam measure" -msgstr "Leerzeichen zwischen Vor- und Nachname im vollständigen Namen erzwingen, um SPAM zu vermeiden." - -#: mod/admin.php:1024 -msgid "UTF-8 Regular expressions" -msgstr "UTF-8 Reguläre Ausdrücke" - -#: mod/admin.php:1024 -msgid "Use PHP UTF8 regular expressions" -msgstr "PHP UTF8 Ausdrücke verwenden" - -#: mod/admin.php:1025 -msgid "Community Page Style" -msgstr "Art der Gemeinschaftsseite" - -#: mod/admin.php:1025 -msgid "" -"Type of community page to show. 'Global community' shows every public " -"posting from an open distributed network that arrived on this server." -msgstr "Welche Art der Gemeinschaftsseite soll verwendet werden? Globale Gemeinschaftsseite zeigt alle öffentlichen Beiträge eines offenen dezentralen Netzwerks an die auf diesem Server eintreffen." - -#: mod/admin.php:1026 -msgid "Posts per user on community page" -msgstr "Anzahl der Beiträge pro Benutzer auf der Gemeinschaftsseite" - -#: mod/admin.php:1026 -msgid "" -"The maximum number of posts per user on the community page. (Not valid for " -"'Global Community')" -msgstr "Die Anzahl der Beiträge die von jedem Nutzer maximal auf der Gemeinschaftsseite angezeigt werden sollen. Dieser Parameter wird nicht für die Globale Gemeinschaftsseite genutzt." - -#: mod/admin.php:1027 -msgid "Enable OStatus support" -msgstr "OStatus Unterstützung aktivieren" - -#: mod/admin.php:1027 -msgid "" -"Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " -"communications in OStatus are public, so privacy warnings will be " -"occasionally displayed." -msgstr "Biete die eingebaute OStatus (iStatusNet, GNU Social, etc.) Unterstützung an. Jede Kommunikation in OStatus ist öffentlich, Privatsphäre Warnungen werden nur bei Bedarf angezeigt." - -#: mod/admin.php:1028 -msgid "OStatus conversation completion interval" -msgstr "Intervall zum Vervollständigen von OStatus Unterhaltungen" - -#: mod/admin.php:1028 -msgid "" -"How often shall the poller check for new entries in OStatus conversations? " -"This can be a very ressource task." -msgstr "Wie oft soll der Poller checken ob es neue Nachrichten in OStatus Unterhaltungen gibt die geladen werden müssen. Je nach Anzahl der OStatus Kontakte könnte dies ein sehr Ressourcen lastiger Job sein." - -#: mod/admin.php:1029 -msgid "Only import OStatus threads from our contacts" -msgstr "Nur OStatus Konversationen unserer Kontakte importieren" - -#: mod/admin.php:1029 -msgid "" -"Normally we import every content from our OStatus contacts. With this option" -" we only store threads that are started by a contact that is known on our " -"system." -msgstr "Normalerweise werden alle Inhalte von OStatus Kontakten importiert. Mit dieser Option werden nur solche Konversationen gespeichert, die von Kontakten der Nutzer dieses Knotens gestartet wurden." - -#: mod/admin.php:1030 -msgid "OStatus support can only be enabled if threading is enabled." -msgstr "OStatus Unterstützung kann nur aktiviert werden wenn \"Threading\" aktiviert ist. " - -#: mod/admin.php:1032 -msgid "" -"Diaspora support can't be enabled because Friendica was installed into a sub" -" directory." -msgstr "Diaspora Unterstützung kann nicht aktiviert werden da Friendica in ein Unterverzeichnis installiert ist." - -#: mod/admin.php:1033 -msgid "Enable Diaspora support" -msgstr "Diaspora Unterstützung aktivieren" - -#: mod/admin.php:1033 -msgid "Provide built-in Diaspora network compatibility." -msgstr "Verwende die eingebaute Diaspora-Verknüpfung." - -#: mod/admin.php:1034 -msgid "Only allow Friendica contacts" -msgstr "Nur Friendica-Kontakte erlauben" - -#: mod/admin.php:1034 -msgid "" -"All contacts must use Friendica protocols. All other built-in communication " -"protocols disabled." -msgstr "Alle Kontakte müssen das Friendica Protokoll nutzen. Alle anderen Kommunikationsprotokolle werden deaktiviert." - -#: mod/admin.php:1035 -msgid "Verify SSL" -msgstr "SSL Überprüfen" - -#: mod/admin.php:1035 -msgid "" -"If you wish, you can turn on strict certificate checking. This will mean you" -" cannot connect (at all) to self-signed SSL sites." -msgstr "Wenn gewollt, kann man hier eine strenge Zertifikatkontrolle einstellen. Das bedeutet, dass man zu keinen Seiten mit selbst unterzeichnetem SSL eine Verbindung herstellen kann." - -#: mod/admin.php:1036 -msgid "Proxy user" -msgstr "Proxy Nutzer" - -#: mod/admin.php:1037 -msgid "Proxy URL" -msgstr "Proxy URL" - -#: mod/admin.php:1038 -msgid "Network timeout" -msgstr "Netzwerk Wartezeit" - -#: mod/admin.php:1038 -msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." -msgstr "Der Wert ist in Sekunden. Setze 0 für unbegrenzt (nicht empfohlen)." - -#: mod/admin.php:1039 -msgid "Delivery interval" -msgstr "Zustellungsintervall" - -#: mod/admin.php:1039 -msgid "" -"Delay background delivery processes by this many seconds to reduce system " -"load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 " -"for large dedicated servers." -msgstr "Verzögere im Hintergrund laufende Auslieferungsprozesse um die angegebene Anzahl an Sekunden, um die Systemlast zu verringern. Empfehlungen: 4-5 für Shared-Hosts, 2-3 für VPS, 0-1 für große dedizierte Server." - -#: mod/admin.php:1040 -msgid "Poll interval" -msgstr "Abfrageintervall" - -#: mod/admin.php:1040 -msgid "" -"Delay background polling processes by this many seconds to reduce system " -"load. If 0, use delivery interval." -msgstr "Verzögere Hintergrundprozesse um diese Anzahl an Sekunden, um die Systemlast zu reduzieren. Bei 0 Sekunden wird das Auslieferungsintervall verwendet." - -#: mod/admin.php:1041 -msgid "Maximum Load Average" -msgstr "Maximum Load Average" - -#: mod/admin.php:1041 -msgid "" -"Maximum system load before delivery and poll processes are deferred - " -"default 50." -msgstr "Maximale Systemlast bevor Verteil- und Empfangsprozesse verschoben werden - Standard 50" - -#: mod/admin.php:1042 -msgid "Maximum Load Average (Frontend)" -msgstr "Maximum Load Average (Frontend)" - -#: mod/admin.php:1042 -msgid "Maximum system load before the frontend quits service - default 50." -msgstr "Maximale Systemlast bevor Vordergrundprozesse pausiert werden - Standard 50." - -#: mod/admin.php:1043 -msgid "Maximum table size for optimization" -msgstr "Maximale Tabellengröße zur Optimierung" - -#: mod/admin.php:1043 -msgid "" -"Maximum table size (in MB) for the automatic optimization - default 100 MB. " -"Enter -1 to disable it." -msgstr "Maximale Tabellengröße (in MB) für die automatische Optimierung - Standard 100 MB. Gib -1 für Deaktivierung ein." - -#: mod/admin.php:1044 -msgid "Minimum level of fragmentation" -msgstr "Minimaler Fragmentationsgrad" - -#: mod/admin.php:1044 -msgid "" -"Minimum fragmenation level to start the automatic optimization - default " -"value is 30%." -msgstr "Minimales Fragmentationsgrad von Datenbanktabellen um die automatische Optimierung einzuleiten - Standardwert ist 30%" - -#: mod/admin.php:1046 -msgid "Periodical check of global contacts" -msgstr "Regelmäßig globale Kontakte überprüfen" - -#: mod/admin.php:1046 -msgid "" -"If enabled, the global contacts are checked periodically for missing or " -"outdated data and the vitality of the contacts and servers." -msgstr "Wenn diese Option aktiviert ist, werden die globalen Kontakte regelmäßig auf fehlende oder veraltete Daten sowie auf Erreichbarkeit des Kontakts und des Servers überprüft." - -#: mod/admin.php:1047 -msgid "Days between requery" -msgstr "Tage zwischen erneuten Abfragen" - -#: mod/admin.php:1047 -msgid "Number of days after which a server is requeried for his contacts." -msgstr "Legt das Abfrageintervall fest, nachdem ein Server erneut nach Kontakten abgefragt werden soll." - -#: mod/admin.php:1048 -msgid "Discover contacts from other servers" -msgstr "Neue Kontakte auf anderen Servern entdecken" - -#: mod/admin.php:1048 -msgid "" -"Periodically query other servers for contacts. You can choose between " -"'users': the users on the remote system, 'Global Contacts': active contacts " -"that are known on the system. The fallback is meant for Redmatrix servers " -"and older friendica servers, where global contacts weren't available. The " -"fallback increases the server load, so the recommened setting is 'Users, " -"Global Contacts'." -msgstr "Regelmäßig andere Server nach potentiellen Kontakten absuchen. Du kannst zwischen 'Nutzern', den tatsächlichen Nutzern des anderen Systems und 'globalen Kontakten', aktiven Kontakten die auf dem System bekannt sind, wählen. Der Fallback-Mechanismus ist für ältere Friendica und Redmatrix Server gedacht, bei denen globale Kontakte noch nicht verfügbar sind. Durch den Fallbackmodus entsteht auf deinem Server eine wesentlich höhere Last, empfohlen wird der Modus 'Nutzer, globale Kontakte'." - -#: mod/admin.php:1049 -msgid "Timeframe for fetching global contacts" -msgstr "Zeitfenster für globale Kontakte" - -#: mod/admin.php:1049 -msgid "" -"When the discovery is activated, this value defines the timeframe for the " -"activity of the global contacts that are fetched from other servers." -msgstr "Wenn die Entdeckung neuer Kontakte aktiv ist, definiert dieses Zeitfenster den Zeitraum in dem globale Kontakte als aktiv gelten und von anderen Servern importiert werden." - -#: mod/admin.php:1050 -msgid "Search the local directory" -msgstr "Lokales Verzeichnis durchsuchen" - -#: mod/admin.php:1050 -msgid "" -"Search the local directory instead of the global directory. When searching " -"locally, every search will be executed on the global directory in the " -"background. This improves the search results when the search is repeated." -msgstr "Suche im lokalen Verzeichnis anstelle des globalen Verzeichnisses durchführen. Jede Suche wird im Hintergrund auch im globalen Verzeichnis durchgeführt umd die Suchresultate zu verbessern, wenn diese Suche wiederholt wird." - -#: mod/admin.php:1052 -msgid "Publish server information" -msgstr "Server Informationen veröffentlichen" - -#: mod/admin.php:1052 -msgid "" -"If enabled, general server and usage data will be published. The data " -"contains the name and version of the server, number of users with public " -"profiles, number of posts and the activated protocols and connectors. See the-federation.info for details." -msgstr "Wenn aktiviert, werden allgemeine Informationen über den Server und Nutzungsdaten veröffentlicht. Die Daten beinhalten den Namen sowie die Version des Servers, die Anzahl der Nutzer_innen mit öffentlichen Profilen, die Anzahl der Beiträge sowie aktivierte Protokolle und Connectoren. Für Details bitte the-federation.info aufrufen." - -#: mod/admin.php:1054 -msgid "Use MySQL full text engine" -msgstr "Nutze MySQL full text engine" - -#: mod/admin.php:1054 -msgid "" -"Activates the full text engine. Speeds up search - but can only search for " -"four and more characters." -msgstr "Aktiviert die 'full text engine'. Beschleunigt die Suche - aber es kann nur nach vier oder mehr Zeichen gesucht werden." - -#: mod/admin.php:1055 -msgid "Suppress Language" -msgstr "Sprachinformation unterdrücken" - -#: mod/admin.php:1055 -msgid "Suppress language information in meta information about a posting." -msgstr "Verhindert das Erzeugen der Meta-Information zur Spracherkennung eines Beitrags." - -#: mod/admin.php:1056 -msgid "Suppress Tags" -msgstr "Tags Unterdrücken" - -#: mod/admin.php:1056 -msgid "Suppress showing a list of hashtags at the end of the posting." -msgstr "Unterdrückt die Anzeige von Tags am Ende eines Beitrags." - -#: mod/admin.php:1057 -msgid "Path to item cache" -msgstr "Pfad zum Eintrag Cache" - -#: mod/admin.php:1057 -msgid "The item caches buffers generated bbcode and external images." -msgstr "Im Item-Cache werden externe Bilder und geparster BBCode zwischen gespeichert." - -#: mod/admin.php:1058 -msgid "Cache duration in seconds" -msgstr "Cache-Dauer in Sekunden" - -#: mod/admin.php:1058 -msgid "" -"How long should the cache files be hold? Default value is 86400 seconds (One" -" day). To disable the item cache, set the value to -1." -msgstr "Wie lange sollen die gecachedten Dateien vorgehalten werden? Grundeinstellung sind 86400 Sekunden (ein Tag). Um den Item Cache zu deaktivieren, setze diesen Wert auf -1." - -#: mod/admin.php:1059 -msgid "Maximum numbers of comments per post" -msgstr "Maximale Anzahl von Kommentaren pro Beitrag" - -#: mod/admin.php:1059 -msgid "How much comments should be shown for each post? Default value is 100." -msgstr "Wie viele Kommentare sollen pro Beitrag angezeigt werden? Standardwert sind 100." - -#: mod/admin.php:1060 -msgid "Path for lock file" -msgstr "Pfad für die Sperrdatei" - -#: mod/admin.php:1060 -msgid "" -"The lock file is used to avoid multiple pollers at one time. Only define a " -"folder here." -msgstr "Die lock-Datei wird benutzt, damit nicht mehrere poller auf einmal laufen. Definiere hier einen Dateiverzeichnis." - -#: mod/admin.php:1061 -msgid "Temp path" -msgstr "Temp Pfad" - -#: mod/admin.php:1061 -msgid "" -"If you have a restricted system where the webserver can't access the system " -"temp path, enter another path here." -msgstr "Solltest du ein eingeschränktes System haben, auf dem der Webserver nicht auf das temp Verzeichnis des Systems zugreifen kann, setze hier einen anderen Pfad." - -#: mod/admin.php:1062 -msgid "Base path to installation" -msgstr "Basis-Pfad zur Installation" - -#: mod/admin.php:1062 -msgid "" -"If the system cannot detect the correct path to your installation, enter the" -" correct path here. This setting should only be set if you are using a " -"restricted system and symbolic links to your webroot." -msgstr "Falls das System nicht den korrekten Pfad zu deiner Installation gefunden hat, gib den richtigen Pfad bitte hier ein. Du solltest hier den Pfad nur auf einem eingeschränkten System angeben müssen, bei dem du mit symbolischen Links auf dein Webverzeichnis verweist." - -#: mod/admin.php:1063 -msgid "Disable picture proxy" -msgstr "Bilder Proxy deaktivieren" - -#: mod/admin.php:1063 -msgid "" -"The picture proxy increases performance and privacy. It shouldn't be used on" -" systems with very low bandwith." -msgstr "Der Proxy für Bilder verbessert die Leistung und Privatsphäre der Nutzer. Er sollte nicht auf Systemen verwendet werden, die nur über begrenzte Bandbreite verfügen." - -#: mod/admin.php:1064 -msgid "Enable old style pager" -msgstr "Den Old-Style Pager aktiviren" - -#: mod/admin.php:1064 -msgid "" -"The old style pager has page numbers but slows down massively the page " -"speed." -msgstr "Der Old-Style Pager zeigt Seitennummern an, verlangsamt aber auch drastisch das Laden einer Seite." - -#: mod/admin.php:1065 -msgid "Only search in tags" -msgstr "Nur in Tags suchen" - -#: mod/admin.php:1065 -msgid "On large systems the text search can slow down the system extremely." -msgstr "Auf großen Knoten kann die Volltext-Suche das System ausbremsen." - -#: mod/admin.php:1067 -msgid "New base url" -msgstr "Neue Basis-URL" - -#: mod/admin.php:1067 -msgid "" -"Change base url for this server. Sends relocate message to all DFRN contacts" -" of all users." -msgstr "Ändert die Basis-URL dieses Servers und sendet eine Umzugsmitteilung an alle DFRN Kontakte deiner Nutzer_innen." - -#: mod/admin.php:1069 -msgid "RINO Encryption" -msgstr "RINO Verschlüsselung" - -#: mod/admin.php:1069 -msgid "Encryption layer between nodes." -msgstr "Verschlüsselung zwischen Friendica Instanzen" - -#: mod/admin.php:1070 -msgid "Embedly API key" -msgstr "Embedly API Schlüssel" - -#: mod/admin.php:1070 -msgid "" -"Embedly is used to fetch additional data for " -"web pages. This is an optional parameter." -msgstr "Embedly wird verwendet um zusätzliche Informationen von Webseiten zu laden. Dies ist ein optionaler Parameter." - -#: mod/admin.php:1072 -msgid "Enable 'worker' background processing" -msgstr "Aktiviere die 'Worker' Hintergrundprozesse" - -#: mod/admin.php:1072 -msgid "" -"The worker background processing limits the number of parallel background " -"jobs to a maximum number and respects the system load." -msgstr "Der 'background worker' Prozess begrenzt die Zahl der Prozesse, die im Hintergrund parallel laufen und beachtet dabei die Systemlast." - -#: mod/admin.php:1073 -msgid "Maximum number of parallel workers" -msgstr "Maximale Anzahl parallel laufender Worker" - -#: mod/admin.php:1073 -msgid "" -"On shared hosters set this to 2. On larger systems, values of 10 are great. " -"Default value is 4." -msgstr "Wenn dein Knoten bei einem Shared Hoster ist, setzte diesen Wert auf 2. Auf größeren Systemen funktioniert ein Wert von 10 recht gut. Standardeinstellung sind 4." - -#: mod/admin.php:1074 -msgid "Don't use 'proc_open' with the worker" -msgstr "'proc_open' nicht mit den Workern verwenden" - -#: mod/admin.php:1074 -msgid "" -"Enable this if your system doesn't allow the use of 'proc_open'. This can " -"happen on shared hosters. If this is enabled you should increase the " -"frequency of poller calls in your crontab." -msgstr "Aktiviere diese Option, wenn dein System die Verwendung von 'proc_open' verhindert. Dies könnte auf Shared Hostern der Fall sein. Wenn du diese Option aktivierst, solltest du die Frequenz der poller Aufrufe in deiner crontab erhöhen." - -#: mod/admin.php:1075 -msgid "Enable fastlane" -msgstr "Aktiviere Fastlane" - -#: mod/admin.php:1075 -msgid "" -"When enabed, the fastlane mechanism starts an additional worker if processes" -" with higher priority are blocked by processes of lower priority." -msgstr "Wenn aktiviert, wird der Fastlane-Mechanismus einen weiteren Worker-Prozeß starten wenn Prozesse mit höherer Priorität von Prozessen mit niedrigerer Priorität blockiert werden." - -#: mod/admin.php:1076 -msgid "Enable frontend worker" -msgstr "Aktiviere den Frontend Worker" - -#: mod/admin.php:1076 -msgid "" -"When enabled the Worker process is triggered when backend access is " -"performed (e.g. messages being delivered). On smaller sites you might want " -"to call yourdomain.tld/worker on a regular basis via an external cron job. " -"You should only enable this option if you cannot utilize cron/scheduled jobs" -" on your server. The worker background process needs to be activated for " -"this." -msgstr "Ist diese Option aktiv, wird der Worker Prozess durch Aktionen am Frontend gestartet (z.B. wenn Nachrichten zugestellt werden). Auf kleineren Seiten sollte yourdomain.tld/worker regelmäßig, beispielsweise durch einen externen Cron Anbieter, aufgerufen werden. Du solltest dies Option nur dann aktivieren, wenn du keinen Cron Job auf deinem eigenen Server starten kannst. Damit diese Option einen Effekt hat, muss der Worker Prozess aktiviert sein." - -#: mod/admin.php:1105 -msgid "Update has been marked successful" -msgstr "Update wurde als erfolgreich markiert" - -#: mod/admin.php:1113 +#: mod/item.php:1002 #, php-format -msgid "Database structure update %s was successfully applied." -msgstr "Das Update %s der Struktur der Datenbank wurde erfolgreich angewandt." - -#: mod/admin.php:1116 -#, php-format -msgid "Executing of database structure update %s failed with error: %s" -msgstr "Das Update %s der Struktur der Datenbank schlug mit folgender Fehlermeldung fehl: %s" - -#: mod/admin.php:1128 -#, php-format -msgid "Executing %s failed with error: %s" -msgstr "Die Ausführung von %s schlug fehl. Fehlermeldung: %s" - -#: mod/admin.php:1131 -#, php-format -msgid "Update %s was successfully applied." -msgstr "Update %s war erfolgreich." - -#: mod/admin.php:1135 -#, php-format -msgid "Update %s did not return a status. Unknown if it succeeded." -msgstr "Update %s hat keinen Status zurückgegeben. Unbekannter Status." - -#: mod/admin.php:1137 -#, php-format -msgid "There was no additional update function %s that needed to be called." -msgstr "Es gab keine weitere Update-Funktion, die von %s ausgeführt werden musste." - -#: mod/admin.php:1156 -msgid "No failed updates." -msgstr "Keine fehlgeschlagenen Updates." - -#: mod/admin.php:1157 -msgid "Check database structure" -msgstr "Datenbank Struktur überprüfen" - -#: mod/admin.php:1162 -msgid "Failed Updates" -msgstr "Fehlgeschlagene Updates" - -#: mod/admin.php:1163 -msgid "" -"This does not include updates prior to 1139, which did not return a status." -msgstr "Ohne Updates vor 1139, da diese keinen Status zurückgegeben haben." - -#: mod/admin.php:1164 -msgid "Mark success (if update was manually applied)" -msgstr "Als erfolgreich markieren (falls das Update manuell installiert wurde)" - -#: mod/admin.php:1165 -msgid "Attempt to execute this update step automatically" -msgstr "Versuchen, diesen Schritt automatisch auszuführen" - -#: mod/admin.php:1199 -#, php-format -msgid "" -"\n" -"\t\t\tDear %1$s,\n" -"\t\t\t\tthe administrator of %2$s has set up an account for you." -msgstr "\nHallo %1$s,\n\nauf %2$s wurde ein Account für Dich angelegt." - -#: mod/admin.php:1202 -#, php-format -msgid "" -"\n" -"\t\t\tThe login details are as follows:\n" -"\n" -"\t\t\tSite Location:\t%1$s\n" -"\t\t\tLogin Name:\t\t%2$s\n" -"\t\t\tPassword:\t\t%3$s\n" -"\n" -"\t\t\tYou may change your password from your account \"Settings\" page after logging\n" -"\t\t\tin.\n" -"\n" -"\t\t\tPlease take a few moments to review the other account settings on that page.\n" -"\n" -"\t\t\tYou may also wish to add some basic information to your default profile\n" -"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n" -"\n" -"\t\t\tWe recommend setting your full name, adding a profile photo,\n" -"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n" -"\t\t\tperhaps what country you live in; if you do not wish to be more specific\n" -"\t\t\tthan that.\n" -"\n" -"\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n" -"\t\t\tIf you are new and do not know anybody here, they may help\n" -"\t\t\tyou to make some new and interesting friends.\n" -"\n" -"\t\t\tThank you and welcome to %4$s." -msgstr "\nNachfolgend die Anmelde-Details:\n\tAdresse der Seite:\t%1$s\n\tBenutzername:\t%2$s\n\tPasswort:\t%3$s\n\nDu kannst Dein Passwort unter \"Einstellungen\" ändern, sobald Du Dich\nangemeldet hast.\n\nBitte nimm Dir ein paar Minuten um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst Du ja auch einige Informationen über Dich in Deinem\nProfil veröffentlichen, damit andere Leute Dich einfacher finden können.\nBearbeite hierfür einfach Dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen Dir, Deinen kompletten Namen anzugeben und ein zu Dir\npassendes Profilbild zu wählen, damit Dich alte Bekannte wieder finden.\nAußerdem ist es nützlich, wenn Du auf Deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die Deine Interessen teilen.\n\nWir respektieren Deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn Du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nNun viel Spaß, gute Begegnungen und willkommen auf %4$s." - -#: mod/admin.php:1246 -#, php-format -msgid "%s user blocked/unblocked" -msgid_plural "%s users blocked/unblocked" -msgstr[0] "%s Benutzer geblockt/freigegeben" -msgstr[1] "%s Benutzer geblockt/freigegeben" - -#: mod/admin.php:1253 -#, php-format -msgid "%s user deleted" -msgid_plural "%s users deleted" -msgstr[0] "%s Nutzer gelöscht" -msgstr[1] "%s Nutzer gelöscht" - -#: mod/admin.php:1300 -#, php-format -msgid "User '%s' deleted" -msgstr "Nutzer '%s' gelöscht" - -#: mod/admin.php:1308 -#, php-format -msgid "User '%s' unblocked" -msgstr "Nutzer '%s' entsperrt" - -#: mod/admin.php:1308 -#, php-format -msgid "User '%s' blocked" -msgstr "Nutzer '%s' gesperrt" - -#: mod/admin.php:1417 mod/admin.php:1443 -msgid "Register date" -msgstr "Anmeldedatum" - -#: mod/admin.php:1417 mod/admin.php:1443 -msgid "Last login" -msgstr "Letzte Anmeldung" - -#: mod/admin.php:1417 mod/admin.php:1443 -msgid "Last item" -msgstr "Letzter Beitrag" - -#: mod/admin.php:1426 -msgid "Add User" -msgstr "Nutzer hinzufügen" - -#: mod/admin.php:1427 -msgid "select all" -msgstr "Alle auswählen" - -#: mod/admin.php:1428 -msgid "User registrations waiting for confirm" -msgstr "Neuanmeldungen, die auf Deine Bestätigung warten" - -#: mod/admin.php:1429 -msgid "User waiting for permanent deletion" -msgstr "Nutzer wartet auf permanente Löschung" - -#: mod/admin.php:1430 -msgid "Request date" -msgstr "Anfragedatum" - -#: mod/admin.php:1431 -msgid "No registrations." -msgstr "Keine Neuanmeldungen." - -#: mod/admin.php:1432 -msgid "Note from the user" -msgstr "Hinweis vom Nutzer" - -#: mod/admin.php:1433 mod/notifications.php:176 mod/notifications.php:255 -msgid "Approve" -msgstr "Genehmigen" - -#: mod/admin.php:1434 -msgid "Deny" -msgstr "Verwehren" - -#: mod/admin.php:1438 -msgid "Site admin" -msgstr "Seitenadministrator" - -#: mod/admin.php:1439 -msgid "Account expired" -msgstr "Account ist abgelaufen" - -#: mod/admin.php:1442 -msgid "New User" -msgstr "Neuer Nutzer" - -#: mod/admin.php:1443 -msgid "Deleted since" -msgstr "Gelöscht seit" - -#: mod/admin.php:1448 -msgid "" -"Selected users will be deleted!\\n\\nEverything these users had posted on " -"this site will be permanently deleted!\\n\\nAre you sure?" -msgstr "Die markierten Nutzer werden gelöscht!\\n\\nAlle Beiträge, die diese Nutzer auf dieser Seite veröffentlicht haben, werden permanent gelöscht!\\n\\nBist Du sicher?" - -#: mod/admin.php:1449 -msgid "" -"The user {0} will be deleted!\\n\\nEverything this user has posted on this " -"site will be permanently deleted!\\n\\nAre you sure?" -msgstr "Der Nutzer {0} wird gelöscht!\\n\\nAlles was dieser Nutzer auf dieser Seite veröffentlicht hat, wird permanent gelöscht!\\n\\nBist Du sicher?" - -#: mod/admin.php:1459 -msgid "Name of the new user." -msgstr "Name des neuen Nutzers" - -#: mod/admin.php:1460 -msgid "Nickname" -msgstr "Spitzname" - -#: mod/admin.php:1460 -msgid "Nickname of the new user." -msgstr "Spitznamen für den neuen Nutzer" - -#: mod/admin.php:1461 -msgid "Email address of the new user." -msgstr "Email Adresse des neuen Nutzers" - -#: mod/admin.php:1504 -#, php-format -msgid "Plugin %s disabled." -msgstr "Plugin %s deaktiviert." - -#: mod/admin.php:1508 -#, php-format -msgid "Plugin %s enabled." -msgstr "Plugin %s aktiviert." - -#: mod/admin.php:1519 mod/admin.php:1767 -msgid "Disable" -msgstr "Ausschalten" - -#: mod/admin.php:1521 mod/admin.php:1769 -msgid "Enable" -msgstr "Einschalten" - -#: mod/admin.php:1544 mod/admin.php:1814 -msgid "Toggle" -msgstr "Umschalten" - -#: mod/admin.php:1552 mod/admin.php:1823 -msgid "Author: " -msgstr "Autor:" - -#: mod/admin.php:1553 mod/admin.php:1824 -msgid "Maintainer: " -msgstr "Betreuer:" - -#: mod/admin.php:1608 -msgid "Reload active plugins" -msgstr "Aktive Plugins neu laden" - -#: mod/admin.php:1613 -#, php-format -msgid "" -"There are currently no plugins available on your node. You can find the " -"official plugin repository at %1$s and might find other interesting plugins " -"in the open plugin registry at %2$s" -msgstr "Es sind derzeit keine Plugins auf diesem Knoten verfügbar. Du findest das offizielle Plugin-Repository unter %1$s und weitere eventuell interessante Plugins im offenen Plugins-Verzeichnis auf %2$s." - -#: mod/admin.php:1727 -msgid "No themes found." -msgstr "Keine Themen gefunden." - -#: mod/admin.php:1805 -msgid "Screenshot" -msgstr "Bildschirmfoto" - -#: mod/admin.php:1865 -msgid "Reload active themes" -msgstr "Aktives Theme neu laden" - -#: mod/admin.php:1870 -#, php-format -msgid "No themes found on the system. They should be paced in %1$s" -msgstr "Es wurden keine Themes auf dem System gefunden. Diese sollten in %1$s patziert werden." - -#: mod/admin.php:1871 -msgid "[Experimental]" -msgstr "[Experimentell]" - -#: mod/admin.php:1872 -msgid "[Unsupported]" -msgstr "[Nicht unterstützt]" - -#: mod/admin.php:1896 -msgid "Log settings updated." -msgstr "Protokolleinstellungen aktualisiert." - -#: mod/admin.php:1928 -msgid "PHP log currently enabled." -msgstr "PHP Protokollierung ist derzeit aktiviert." - -#: mod/admin.php:1930 -msgid "PHP log currently disabled." -msgstr "PHP Protokollierung ist derzeit nicht aktiviert." - -#: mod/admin.php:1939 -msgid "Clear" -msgstr "löschen" - -#: mod/admin.php:1944 -msgid "Enable Debugging" -msgstr "Protokoll führen" - -#: mod/admin.php:1945 -msgid "Log file" -msgstr "Protokolldatei" - -#: mod/admin.php:1945 -msgid "" -"Must be writable by web server. Relative to your Friendica top-level " -"directory." -msgstr "Webserver muss Schreibrechte besitzen. Abhängig vom Friendica-Installationsverzeichnis." - -#: mod/admin.php:1946 -msgid "Log level" -msgstr "Protokoll-Level" - -#: mod/admin.php:1949 -msgid "PHP logging" -msgstr "PHP Protokollieren" - -#: mod/admin.php:1950 -msgid "" -"To enable logging of PHP errors and warnings you can add the following to " -"the .htconfig.php file of your installation. The filename set in the " -"'error_log' line is relative to the friendica top-level directory and must " -"be writeable by the web server. The option '1' for 'log_errors' and " -"'display_errors' is to enable these options, set to '0' to disable them." -msgstr "Um PHP Warnungen und Fehler zu protokollieren, kannst du die folgenden Zeilen zur .htconfig.php Datei deiner Installation hinzufügen. Den Dateinamen der Log-Datei legst du in der Zeile mit dem 'error_log' fest, Er ist relativ zum Friendica-Stammverzeichnis und muss schreibbar durch den Webserver sein. Eine \"1\" als Option für die Punkte 'log_errors' und 'display_errors' aktiviert die Funktionen zum Protokollieren bzw. Anzeigen der Fehler, eine \"0\" deaktiviert sie." - -#: mod/admin.php:2078 -#, php-format -msgid "Lock feature %s" -msgstr "Feature festlegen: %s" - -#: mod/admin.php:2086 -msgid "Manage Additional Features" -msgstr "Zusätzliche Features Verwalten" - -#: mod/viewcontacts.php:75 -msgid "No contacts." -msgstr "Keine Kontakte." - -#: mod/network.php:190 mod/search.php:25 -msgid "Remove term" -msgstr "Begriff entfernen" - -#: mod/network.php:397 -#, php-format -msgid "" -"Warning: This group contains %s member from a network that doesn't allow non" -" public messages." -msgid_plural "" -"Warning: This group contains %s members from a network that doesn't allow " -"non public messages." -msgstr[0] "Warnung: Diese Gruppe beinhaltet %s Person aus einem Netzwerk das keine nicht öffentlichen Beiträge empfangen kann." -msgstr[1] "Warnung: Diese Gruppe beinhaltet %s Personen aus Netzwerken die keine nicht-öffentlichen Beiträge empfangen können." - -#: mod/network.php:400 -msgid "Messages in this group won't be send to these receivers." -msgstr "Beiträge in dieser Gruppe werden deshalb nicht an diese Personen zugestellt werden." - -#: mod/network.php:528 -msgid "Private messages to this person are at risk of public disclosure." -msgstr "Private Nachrichten an diese Person könnten an die Öffentlichkeit gelangen." - -#: mod/network.php:533 -msgid "Invalid contact." -msgstr "Ungültiger Kontakt." - -#: mod/network.php:827 -msgid "Commented Order" -msgstr "Neueste Kommentare" - -#: mod/network.php:830 -msgid "Sort by Comment Date" -msgstr "Nach Kommentardatum sortieren" - -#: mod/network.php:835 -msgid "Posted Order" -msgstr "Neueste Beiträge" - -#: mod/network.php:838 -msgid "Sort by Post Date" -msgstr "Nach Beitragsdatum sortieren" - -#: mod/network.php:849 -msgid "Posts that mention or involve you" -msgstr "Beiträge, in denen es um Dich geht" - -#: mod/network.php:857 -msgid "New" -msgstr "Neue" - -#: mod/network.php:860 -msgid "Activity Stream - by date" -msgstr "Aktivitäten-Stream - nach Datum" - -#: mod/network.php:868 -msgid "Shared Links" -msgstr "Geteilte Links" - -#: mod/network.php:871 -msgid "Interesting Links" -msgstr "Interessante Links" - -#: mod/network.php:879 -msgid "Starred" -msgstr "Markierte" - -#: mod/network.php:882 -msgid "Favourite Posts" -msgstr "Favorisierte Beiträge" - -#: mod/search.php:100 -msgid "Only logged in users are permitted to perform a search." -msgstr "Nur eingeloggten Benutzern ist das Suchen gestattet." - -#: mod/search.php:124 -msgid "Too Many Requests" -msgstr "Zu viele Abfragen" - -#: mod/search.php:125 -msgid "Only one search per minute is permitted for not logged in users." -msgstr "Es ist nur eine Suchanfrage pro Minute für nicht eingeloggte Benutzer gestattet." - -#: mod/search.php:230 -#, php-format -msgid "Items tagged with: %s" -msgstr "Beiträge die mit %s getaggt sind" +msgid "%s posted an update." +msgstr "%s hat ein Update veröffentlicht." #: mod/notifications.php:35 msgid "Invalid request identifier." msgstr "Invalid request identifier." #: mod/notifications.php:44 mod/notifications.php:180 -#: mod/notifications.php:258 +#: mod/notifications.php:227 msgid "Discard" msgstr "Verwerfen" @@ -8629,7 +7283,7 @@ msgstr "Zeige ignorierte Anfragen" msgid "Hide Ignored Requests" msgstr "Verberge ignorierte Anfragen" -#: mod/notifications.php:164 mod/notifications.php:228 +#: mod/notifications.php:164 mod/notifications.php:234 msgid "Notification type: " msgstr "Benachrichtigungstyp: " @@ -8638,14 +7292,18 @@ msgstr "Benachrichtigungstyp: " msgid "suggested by %s" msgstr "vorgeschlagen von %s" -#: mod/notifications.php:173 mod/notifications.php:246 +#: mod/notifications.php:173 mod/notifications.php:252 msgid "Post a new friend activity" msgstr "Neue-Kontakt Nachricht senden" -#: mod/notifications.php:173 mod/notifications.php:246 +#: mod/notifications.php:173 mod/notifications.php:252 msgid "if applicable" msgstr "falls anwendbar" +#: mod/notifications.php:176 mod/notifications.php:261 mod/admin.php:1506 +msgid "Approve" +msgstr "Genehmigen" + #: mod/notifications.php:195 msgid "Claims to be known to you: " msgstr "Behauptet Dich zu kennen: " @@ -8695,91 +7353,1395 @@ msgstr "Teilenden" msgid "Subscriber" msgstr "Abonnent" -#: mod/notifications.php:266 +#: mod/notifications.php:272 msgid "No introductions." msgstr "Keine Kontaktanfragen." -#: mod/notifications.php:307 +#: mod/notifications.php:313 msgid "Show unread" msgstr "Ungelesene anzeigen" -#: mod/notifications.php:307 +#: mod/notifications.php:313 msgid "Show all" msgstr "Alle anzeigen" -#: mod/notifications.php:313 +#: mod/notifications.php:319 #, php-format msgid "No more %s notifications." msgstr "Keine weiteren %s Benachrichtigungen" -#: object/Item.php:385 +#: mod/ping.php:270 +msgid "{0} wants to be your friend" +msgstr "{0} möchte mit Dir in Kontakt treten" + +#: mod/ping.php:285 +msgid "{0} sent you a message" +msgstr "{0} schickte Dir eine Nachricht" + +#: mod/ping.php:300 +msgid "{0} requested registration" +msgstr "{0} möchte sich registrieren" + +#: mod/admin.php:96 +msgid "Theme settings updated." +msgstr "Themeneinstellungen aktualisiert." + +#: mod/admin.php:165 mod/admin.php:1054 +msgid "Site" +msgstr "Seite" + +#: mod/admin.php:166 mod/admin.php:988 mod/admin.php:1498 mod/admin.php:1514 +msgid "Users" +msgstr "Nutzer" + +#: mod/admin.php:168 mod/admin.php:1892 mod/admin.php:1942 +msgid "Themes" +msgstr "Themen" + +#: mod/admin.php:170 +msgid "DB updates" +msgstr "DB Updates" + +#: mod/admin.php:171 mod/admin.php:512 +msgid "Inspect Queue" +msgstr "Warteschlange Inspizieren" + +#: mod/admin.php:172 mod/admin.php:288 +msgid "Server Blocklist" +msgstr "Server Blockliste" + +#: mod/admin.php:173 mod/admin.php:478 +msgid "Federation Statistics" +msgstr "Federation Statistik" + +#: mod/admin.php:187 mod/admin.php:198 mod/admin.php:2016 +msgid "Logs" +msgstr "Protokolle" + +#: mod/admin.php:188 mod/admin.php:2084 +msgid "View Logs" +msgstr "Protokolle anzeigen" + +#: mod/admin.php:189 +msgid "probe address" +msgstr "Adresse untersuchen" + +#: mod/admin.php:190 +msgid "check webfinger" +msgstr "Webfinger überprüfen" + +#: mod/admin.php:197 +msgid "Plugin Features" +msgstr "Plugin Features" + +#: mod/admin.php:199 +msgid "diagnostics" +msgstr "Diagnose" + +#: mod/admin.php:200 +msgid "User registrations waiting for confirmation" +msgstr "Nutzeranmeldungen die auf Bestätigung warten" + +#: mod/admin.php:279 +msgid "The blocked domain" +msgstr "Die blockierte Domain" + +#: mod/admin.php:280 mod/admin.php:293 +msgid "The reason why you blocked this domain." +msgstr "Die Begründung warum du diese Domain blockiert hast." + +#: mod/admin.php:281 +msgid "Delete domain" +msgstr "Domain löschen" + +#: mod/admin.php:281 +msgid "Check to delete this entry from the blocklist" +msgstr "Markieren, um diesen Eintrag von der Blocklist zu entfernen" + +#: mod/admin.php:287 mod/admin.php:477 mod/admin.php:511 mod/admin.php:586 +#: mod/admin.php:1053 mod/admin.php:1497 mod/admin.php:1615 mod/admin.php:1678 +#: mod/admin.php:1891 mod/admin.php:1941 mod/admin.php:2015 mod/admin.php:2083 +msgid "Administration" +msgstr "Administration" + +#: mod/admin.php:289 +msgid "" +"This page can be used to define a black list of servers from the federated " +"network that are not allowed to interact with your node. For all entered " +"domains you should also give a reason why you have blocked the remote " +"server." +msgstr "Auf dieser Seite kannst du die Liste der blockierten Domains aus dem föderalen Netzwerk verwalten, denen es untersagt ist mit deinem Knoten zu interagieren. Für jede der blockierten Domains musst du außerdem einen Grund für die Sperrung angeben." + +#: mod/admin.php:290 +msgid "" +"The list of blocked servers will be made publically available on the " +"/friendica page so that your users and people investigating communication " +"problems can find the reason easily." +msgstr "Die Liste der blockierten Domains wird auf der /friendica Seite öffentlich einsehbar gemacht, damit deine Nutzer und Personen die Kommunikationsprobleme erkunden, die Ursachen einfach finden können." + +#: mod/admin.php:291 +msgid "Add new entry to block list" +msgstr "Neuen Eintrag in die Blockliste" + +#: mod/admin.php:292 +msgid "Server Domain" +msgstr "Domain des Servers" + +#: mod/admin.php:292 +msgid "" +"The domain of the new server to add to the block list. Do not include the " +"protocol." +msgstr "Der Domain-Name des Servers der geblockt werden soll. Gib das Protokoll nicht mit an!" + +#: mod/admin.php:293 +msgid "Block reason" +msgstr "Begründung der Blockierung" + +#: mod/admin.php:294 +msgid "Add Entry" +msgstr "Eintrag hinzufügen" + +#: mod/admin.php:295 +msgid "Save changes to the blocklist" +msgstr "Änderungen der Blockliste speichern" + +#: mod/admin.php:296 +msgid "Current Entries in the Blocklist" +msgstr "Aktuelle Einträge der Blockliste" + +#: mod/admin.php:299 +msgid "Delete entry from blocklist" +msgstr "Eintrag von der Blockliste entfernen" + +#: mod/admin.php:302 +msgid "Delete entry from blocklist?" +msgstr "Eintrag von der Blockliste entfernen?" + +#: mod/admin.php:327 +msgid "Server added to blocklist." +msgstr "Server zur Blockliste hinzugefügt." + +#: mod/admin.php:343 +msgid "Site blocklist updated." +msgstr "Blockliste aktualisiert." + +#: mod/admin.php:408 +msgid "unknown" +msgstr "Unbekannt" + +#: mod/admin.php:471 +msgid "" +"This page offers you some numbers to the known part of the federated social " +"network your Friendica node is part of. These numbers are not complete but " +"only reflect the part of the network your node is aware of." +msgstr "Diese Seite präsentiert einige Zahlen zu dem bekannten Teil des föderalen sozialen Netzwerks, von dem deine Friendica Installation ein Teil ist. Diese Zahlen sind nicht absolut und reflektieren nur den Teil des Netzwerks, den dein Knoten kennt." + +#: mod/admin.php:472 +msgid "" +"The Auto Discovered Contact Directory feature is not enabled, it " +"will improve the data displayed here." +msgstr "Die Funktion um Automatisch ein Kontaktverzeichnis erstellen ist nicht aktiv. Es wird die hier angezeigten Daten verbessern." + +#: mod/admin.php:484 +#, php-format +msgid "Currently this node is aware of %d nodes from the following platforms:" +msgstr "Momentan kennt dieser Knoten %d andere Knoten der folgenden Plattformen:" + +#: mod/admin.php:514 +msgid "ID" +msgstr "ID" + +#: mod/admin.php:515 +msgid "Recipient Name" +msgstr "Empfänger Name" + +#: mod/admin.php:516 +msgid "Recipient Profile" +msgstr "Empfänger Profil" + +#: mod/admin.php:518 +msgid "Created" +msgstr "Erstellt" + +#: mod/admin.php:519 +msgid "Last Tried" +msgstr "Zuletzt versucht" + +#: mod/admin.php:520 +msgid "" +"This page lists the content of the queue for outgoing postings. These are " +"postings the initial delivery failed for. They will be resend later and " +"eventually deleted if the delivery fails permanently." +msgstr "Auf dieser Seite werden die in der Warteschlange eingereihten Beiträge aufgelistet. Bei diesen Beiträgen schlug die erste Zustellung fehl. Es wird später wiederholt versucht die Beiträge zuzustellen, bis sie schließlich gelöscht werden." + +#: mod/admin.php:545 +#, php-format +msgid "" +"Your DB still runs with MyISAM tables. You should change the engine type to " +"InnoDB. As Friendica will use InnoDB only features in the future, you should" +" change this! See here for a guide that may be helpful " +"converting the table engines. You may also use the command php " +"include/dbstructure.php toinnodb of your Friendica installation for an " +"automatic conversion.
" +msgstr "Deine DB verwendet derzeit noch MyISAM Tabellen. Du solltest die Datenbank Engine auf InnoDB umstellen, da Friendica in Zukunft InnoDB Features verwenden wird. Eine Anleitung zur Umstellung der Datenbank kannst du hier finden. Du kannst außerdem mit dem Befehl php include/dbstructure.php toinnodb auf der Kommandozeile die Umstellung automatisch vornehmen lassen." + +#: mod/admin.php:550 +msgid "" +"You are using a MySQL version which does not support all features that " +"Friendica uses. You should consider switching to MariaDB." +msgstr "Du verwendets eine MySQL Version die nicht alle Features unterstützt die Friendica verwendet. Wir empfehlen dir einen Wechsel auf MariaDB, falls dies möglich ist." + +#: mod/admin.php:554 mod/admin.php:1447 +msgid "Normal Account" +msgstr "Normales Konto" + +#: mod/admin.php:555 mod/admin.php:1448 +msgid "Soapbox Account" +msgstr "Marktschreier-Konto" + +#: mod/admin.php:556 mod/admin.php:1449 +msgid "Community/Celebrity Account" +msgstr "Forum/Promi-Konto" + +#: mod/admin.php:557 mod/admin.php:1450 +msgid "Automatic Friend Account" +msgstr "Automatisches Freundekonto" + +#: mod/admin.php:558 +msgid "Blog Account" +msgstr "Blog-Konto" + +#: mod/admin.php:559 +msgid "Private Forum" +msgstr "Privates Forum" + +#: mod/admin.php:581 +msgid "Message queues" +msgstr "Nachrichten-Warteschlangen" + +#: mod/admin.php:587 +msgid "Summary" +msgstr "Zusammenfassung" + +#: mod/admin.php:589 +msgid "Registered users" +msgstr "Registrierte Nutzer" + +#: mod/admin.php:591 +msgid "Pending registrations" +msgstr "Anstehende Anmeldungen" + +#: mod/admin.php:592 +msgid "Version" +msgstr "Version" + +#: mod/admin.php:597 +msgid "Active plugins" +msgstr "Aktive Plugins" + +#: mod/admin.php:622 +msgid "Can not parse base url. Must have at least ://" +msgstr "Die Basis-URL konnte nicht analysiert werden. Sie muss mindestens aus :// bestehen" + +#: mod/admin.php:914 +msgid "Site settings updated." +msgstr "Seiteneinstellungen aktualisiert." + +#: mod/admin.php:971 +msgid "No community page" +msgstr "Keine Gemeinschaftsseite" + +#: mod/admin.php:972 +msgid "Public postings from users of this site" +msgstr "Öffentliche Beiträge von Nutzer_innen dieser Seite" + +#: mod/admin.php:973 +msgid "Global community page" +msgstr "Globale Gemeinschaftsseite" + +#: mod/admin.php:979 +msgid "At post arrival" +msgstr "Beim Empfang von Nachrichten" + +#: mod/admin.php:989 +msgid "Users, Global Contacts" +msgstr "Nutzer, globale Kontakte" + +#: mod/admin.php:990 +msgid "Users, Global Contacts/fallback" +msgstr "Nutzer, globale Kontakte / Fallback" + +#: mod/admin.php:994 +msgid "One month" +msgstr "ein Monat" + +#: mod/admin.php:995 +msgid "Three months" +msgstr "drei Monate" + +#: mod/admin.php:996 +msgid "Half a year" +msgstr "ein halbes Jahr" + +#: mod/admin.php:997 +msgid "One year" +msgstr "ein Jahr" + +#: mod/admin.php:1002 +msgid "Multi user instance" +msgstr "Mehrbenutzer Instanz" + +#: mod/admin.php:1025 +msgid "Closed" +msgstr "Geschlossen" + +#: mod/admin.php:1026 +msgid "Requires approval" +msgstr "Bedarf der Zustimmung" + +#: mod/admin.php:1027 +msgid "Open" +msgstr "Offen" + +#: mod/admin.php:1031 +msgid "No SSL policy, links will track page SSL state" +msgstr "Keine SSL Richtlinie, Links werden das verwendete Protokoll beibehalten" + +#: mod/admin.php:1032 +msgid "Force all links to use SSL" +msgstr "SSL für alle Links erzwingen" + +#: mod/admin.php:1033 +msgid "Self-signed certificate, use SSL for local links only (discouraged)" +msgstr "Selbst-unterzeichnetes Zertifikat, SSL nur für lokale Links verwenden (nicht empfohlen)" + +#: mod/admin.php:1057 +msgid "File upload" +msgstr "Datei hochladen" + +#: mod/admin.php:1058 +msgid "Policies" +msgstr "Regeln" + +#: mod/admin.php:1060 +msgid "Auto Discovered Contact Directory" +msgstr "Automatisch ein Kontaktverzeichnis erstellen" + +#: mod/admin.php:1061 +msgid "Performance" +msgstr "Performance" + +#: mod/admin.php:1062 +msgid "Worker" +msgstr "Worker" + +#: mod/admin.php:1063 +msgid "" +"Relocate - WARNING: advanced function. Could make this server unreachable." +msgstr "Umsiedeln - WARNUNG: Könnte diesen Server unerreichbar machen." + +#: mod/admin.php:1066 +msgid "Site name" +msgstr "Seitenname" + +#: mod/admin.php:1067 +msgid "Host name" +msgstr "Host Name" + +#: mod/admin.php:1068 +msgid "Sender Email" +msgstr "Absender für Emails" + +#: mod/admin.php:1068 +msgid "" +"The email address your server shall use to send notification emails from." +msgstr "Die E-Mail Adresse die dein Server zum Versenden von Benachrichtigungen verwenden soll." + +#: mod/admin.php:1069 +msgid "Banner/Logo" +msgstr "Banner/Logo" + +#: mod/admin.php:1070 +msgid "Shortcut icon" +msgstr "Shortcut Icon" + +#: mod/admin.php:1070 +msgid "Link to an icon that will be used for browsers." +msgstr "Link zu einem Icon, das Browser verwenden werden." + +#: mod/admin.php:1071 +msgid "Touch icon" +msgstr "Touch Icon" + +#: mod/admin.php:1071 +msgid "Link to an icon that will be used for tablets and mobiles." +msgstr "Link zu einem Icon das Tablets und Handies verwenden sollen." + +#: mod/admin.php:1072 +msgid "Additional Info" +msgstr "Zusätzliche Informationen" + +#: mod/admin.php:1072 +#, php-format +msgid "" +"For public servers: you can add additional information here that will be " +"listed at %s/siteinfo." +msgstr "Für öffentliche Server kannst Du hier zusätzliche Informationen angeben, die dann auf %s/siteinfo angezeigt werden." + +#: mod/admin.php:1073 +msgid "System language" +msgstr "Systemsprache" + +#: mod/admin.php:1074 +msgid "System theme" +msgstr "Systemweites Theme" + +#: mod/admin.php:1074 +msgid "" +"Default system theme - may be over-ridden by user profiles - change theme settings" +msgstr "Vorgabe für das System-Theme - kann von Benutzerprofilen überschrieben werden - Theme-Einstellungen ändern" + +#: mod/admin.php:1075 +msgid "Mobile system theme" +msgstr "Systemweites mobiles Theme" + +#: mod/admin.php:1075 +msgid "Theme for mobile devices" +msgstr "Thema für mobile Geräte" + +#: mod/admin.php:1076 +msgid "SSL link policy" +msgstr "Regeln für SSL Links" + +#: mod/admin.php:1076 +msgid "Determines whether generated links should be forced to use SSL" +msgstr "Bestimmt, ob generierte Links SSL verwenden müssen" + +#: mod/admin.php:1077 +msgid "Force SSL" +msgstr "Erzwinge SSL" + +#: mod/admin.php:1077 +msgid "" +"Force all Non-SSL requests to SSL - Attention: on some systems it could lead" +" to endless loops." +msgstr "Erzinge alle Nicht-SSL Anfragen auf SSL - Achtung: auf manchen Systemen verursacht dies eine Endlosschleife." + +#: mod/admin.php:1078 +msgid "Hide help entry from navigation menu" +msgstr "Verberge den Menüeintrag für die Hilfe im Navigationsmenü" + +#: mod/admin.php:1078 +msgid "" +"Hides the menu entry for the Help pages from the navigation menu. You can " +"still access it calling /help directly." +msgstr "Verbirgt den Menüeintrag für die Hilfe-Seiten im Navigationsmenü. Die Seiten können weiterhin über /help aufgerufen werden." + +#: mod/admin.php:1079 +msgid "Single user instance" +msgstr "Ein-Nutzer Instanz" + +#: mod/admin.php:1079 +msgid "Make this instance multi-user or single-user for the named user" +msgstr "Regelt ob es sich bei dieser Instanz um eine ein Personen Installation oder eine Installation mit mehr als einem Nutzer handelt." + +#: mod/admin.php:1080 +msgid "Maximum image size" +msgstr "Maximale Bildgröße" + +#: mod/admin.php:1080 +msgid "" +"Maximum size in bytes of uploaded images. Default is 0, which means no " +"limits." +msgstr "Maximale Uploadgröße von Bildern in Bytes. Standard ist 0, d.h. ohne Limit." + +#: mod/admin.php:1081 +msgid "Maximum image length" +msgstr "Maximale Bildlänge" + +#: mod/admin.php:1081 +msgid "" +"Maximum length in pixels of the longest side of uploaded images. Default is " +"-1, which means no limits." +msgstr "Maximale Länge in Pixeln der längsten Seite eines hoch geladenen Bildes. Grundeinstellung ist -1 was keine Einschränkung bedeutet." + +#: mod/admin.php:1082 +msgid "JPEG image quality" +msgstr "Qualität des JPEG Bildes" + +#: mod/admin.php:1082 +msgid "" +"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is " +"100, which is full quality." +msgstr "Hoch geladene JPEG Bilder werden mit dieser Qualität [0-100] gespeichert. Grundeinstellung ist 100, kein Qualitätsverlust." + +#: mod/admin.php:1084 +msgid "Register policy" +msgstr "Registrierungsmethode" + +#: mod/admin.php:1085 +msgid "Maximum Daily Registrations" +msgstr "Maximum täglicher Registrierungen" + +#: mod/admin.php:1085 +msgid "" +"If registration is permitted above, this sets the maximum number of new user" +" registrations to accept per day. If register is set to closed, this " +"setting has no effect." +msgstr "Wenn die Registrierung weiter oben erlaubt ist, regelt dies die maximale Anzahl von Neuanmeldungen pro Tag. Wenn die Registrierung geschlossen ist, hat diese Einstellung keinen Effekt." + +#: mod/admin.php:1086 +msgid "Register text" +msgstr "Registrierungstext" + +#: mod/admin.php:1086 +msgid "Will be displayed prominently on the registration page." +msgstr "Wird gut sichtbar auf der Registrierungsseite angezeigt." + +#: mod/admin.php:1087 +msgid "Accounts abandoned after x days" +msgstr "Nutzerkonten gelten nach x Tagen als unbenutzt" + +#: mod/admin.php:1087 +msgid "" +"Will not waste system resources polling external sites for abandonded " +"accounts. Enter 0 for no time limit." +msgstr "Verschwende keine System-Ressourcen auf das Pollen externer Seiten, wenn Konten nicht mehr benutzt werden. 0 eingeben für kein Limit." + +#: mod/admin.php:1088 +msgid "Allowed friend domains" +msgstr "Erlaubte Domains für Kontakte" + +#: mod/admin.php:1088 +msgid "" +"Comma separated list of domains which are allowed to establish friendships " +"with this site. Wildcards are accepted. Empty to allow any domains" +msgstr "Liste der Domains, die für Kontakte erlaubt sind, durch Kommas getrennt. Platzhalter werden akzeptiert. Leer lassen, um alle Domains zu erlauben." + +#: mod/admin.php:1089 +msgid "Allowed email domains" +msgstr "Erlaubte Domains für E-Mails" + +#: mod/admin.php:1089 +msgid "" +"Comma separated list of domains which are allowed in email addresses for " +"registrations to this site. Wildcards are accepted. Empty to allow any " +"domains" +msgstr "Liste der Domains, die für E-Mail-Adressen bei der Registrierung erlaubt sind, durch Kommas getrennt. Platzhalter werden akzeptiert. Leer lassen, um alle Domains zu erlauben." + +#: mod/admin.php:1090 +msgid "Block public" +msgstr "Öffentlichen Zugriff blockieren" + +#: mod/admin.php:1090 +msgid "" +"Check to block public access to all otherwise public personal pages on this " +"site unless you are currently logged in." +msgstr "Klicken, um öffentlichen Zugriff auf sonst öffentliche Profile zu blockieren, wenn man nicht eingeloggt ist." + +#: mod/admin.php:1091 +msgid "Force publish" +msgstr "Erzwinge Veröffentlichung" + +#: mod/admin.php:1091 +msgid "" +"Check to force all profiles on this site to be listed in the site directory." +msgstr "Klicken, um Anzeige aller Profile dieses Servers im Verzeichnis zu erzwingen." + +#: mod/admin.php:1092 +msgid "Global directory URL" +msgstr "URL des weltweiten Verzeichnisses" + +#: mod/admin.php:1092 +msgid "" +"URL to the global directory. If this is not set, the global directory is " +"completely unavailable to the application." +msgstr "URL des weltweiten Verzeichnisses. Wenn diese nicht gesetzt ist, ist das Verzeichnis für die Applikation nicht erreichbar." + +#: mod/admin.php:1093 +msgid "Allow threaded items" +msgstr "Erlaube Threads in Diskussionen" + +#: mod/admin.php:1093 +msgid "Allow infinite level threading for items on this site." +msgstr "Erlaube ein unendliches Level für Threads auf dieser Seite." + +#: mod/admin.php:1094 +msgid "Private posts by default for new users" +msgstr "Private Beiträge als Standard für neue Nutzer" + +#: mod/admin.php:1094 +msgid "" +"Set default post permissions for all new members to the default privacy " +"group rather than public." +msgstr "Die Standard-Zugriffsrechte für neue Nutzer werden so gesetzt, dass als Voreinstellung in die private Gruppe gepostet wird anstelle von öffentlichen Beiträgen." + +#: mod/admin.php:1095 +msgid "Don't include post content in email notifications" +msgstr "Inhalte von Beiträgen nicht in E-Mail-Benachrichtigungen versenden" + +#: mod/admin.php:1095 +msgid "" +"Don't include the content of a post/comment/private message/etc. in the " +"email notifications that are sent out from this site, as a privacy measure." +msgstr "Inhalte von Beiträgen/Kommentaren/privaten Nachrichten/usw., zum Datenschutz nicht in E-Mail-Benachrichtigungen einbinden." + +#: mod/admin.php:1096 +msgid "Disallow public access to addons listed in the apps menu." +msgstr "Öffentlichen Zugriff auf Addons im Apps Menü verbieten." + +#: mod/admin.php:1096 +msgid "" +"Checking this box will restrict addons listed in the apps menu to members " +"only." +msgstr "Wenn ausgewählt werden die im Apps Menü aufgeführten Addons nur angemeldeten Nutzern der Seite zur Verfügung gestellt." + +#: mod/admin.php:1097 +msgid "Don't embed private images in posts" +msgstr "Private Bilder nicht in Beiträgen einbetten." + +#: mod/admin.php:1097 +msgid "" +"Don't replace locally-hosted private photos in posts with an embedded copy " +"of the image. This means that contacts who receive posts containing private " +"photos will have to authenticate and load each image, which may take a " +"while." +msgstr "Ersetze lokal gehostete private Fotos in Beiträgen nicht mit einer eingebetteten Kopie des Bildes. Dies bedeutet, dass Kontakte, die Beiträge mit privaten Fotos erhalten sich zunächst auf den jeweiligen Servern authentifizieren müssen bevor die Bilder geladen und angezeigt werden, was eine gewisse Zeit dauert." + +#: mod/admin.php:1098 +msgid "Allow Users to set remote_self" +msgstr "Nutzern erlauben das remote_self Flag zu setzen" + +#: mod/admin.php:1098 +msgid "" +"With checking this, every user is allowed to mark every contact as a " +"remote_self in the repair contact dialog. Setting this flag on a contact " +"causes mirroring every posting of that contact in the users stream." +msgstr "Ist dies ausgewählt kann jeder Nutzer jeden seiner Kontakte als remote_self (entferntes Konto) im Kontakt reparieren Dialog markieren. Nach dem setzten dieses Flags werden alle Top-Level Beiträge dieser Kontakte automatisch in den Stream dieses Nutzers gepostet." + +#: mod/admin.php:1099 +msgid "Block multiple registrations" +msgstr "Unterbinde Mehrfachregistrierung" + +#: mod/admin.php:1099 +msgid "Disallow users to register additional accounts for use as pages." +msgstr "Benutzern nicht erlauben, weitere Konten als zusätzliche Profile anzulegen." + +#: mod/admin.php:1100 +msgid "OpenID support" +msgstr "OpenID Unterstützung" + +#: mod/admin.php:1100 +msgid "OpenID support for registration and logins." +msgstr "OpenID-Unterstützung für Registrierung und Login." + +#: mod/admin.php:1101 +msgid "Fullname check" +msgstr "Namen auf Vollständigkeit überprüfen" + +#: mod/admin.php:1101 +msgid "" +"Force users to register with a space between firstname and lastname in Full " +"name, as an antispam measure" +msgstr "Leerzeichen zwischen Vor- und Nachname im vollständigen Namen erzwingen, um SPAM zu vermeiden." + +#: mod/admin.php:1102 +msgid "Community Page Style" +msgstr "Art der Gemeinschaftsseite" + +#: mod/admin.php:1102 +msgid "" +"Type of community page to show. 'Global community' shows every public " +"posting from an open distributed network that arrived on this server." +msgstr "Welche Art der Gemeinschaftsseite soll verwendet werden? Globale Gemeinschaftsseite zeigt alle öffentlichen Beiträge eines offenen dezentralen Netzwerks an die auf diesem Server eintreffen." + +#: mod/admin.php:1103 +msgid "Posts per user on community page" +msgstr "Anzahl der Beiträge pro Benutzer auf der Gemeinschaftsseite" + +#: mod/admin.php:1103 +msgid "" +"The maximum number of posts per user on the community page. (Not valid for " +"'Global Community')" +msgstr "Die Anzahl der Beiträge die von jedem Nutzer maximal auf der Gemeinschaftsseite angezeigt werden sollen. Dieser Parameter wird nicht für die Globale Gemeinschaftsseite genutzt." + +#: mod/admin.php:1104 +msgid "Enable OStatus support" +msgstr "OStatus Unterstützung aktivieren" + +#: mod/admin.php:1104 +msgid "" +"Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " +"communications in OStatus are public, so privacy warnings will be " +"occasionally displayed." +msgstr "Biete die eingebaute OStatus (iStatusNet, GNU Social, etc.) Unterstützung an. Jede Kommunikation in OStatus ist öffentlich, Privatsphäre Warnungen werden nur bei Bedarf angezeigt." + +#: mod/admin.php:1105 +msgid "OStatus conversation completion interval" +msgstr "Intervall zum Vervollständigen von OStatus Unterhaltungen" + +#: mod/admin.php:1105 +msgid "" +"How often shall the poller check for new entries in OStatus conversations? " +"This can be a very ressource task." +msgstr "Wie oft soll der Poller checken ob es neue Nachrichten in OStatus Unterhaltungen gibt die geladen werden müssen. Je nach Anzahl der OStatus Kontakte könnte dies ein sehr Ressourcen lastiger Job sein." + +#: mod/admin.php:1106 +msgid "Only import OStatus threads from our contacts" +msgstr "Nur OStatus Konversationen unserer Kontakte importieren" + +#: mod/admin.php:1106 +msgid "" +"Normally we import every content from our OStatus contacts. With this option" +" we only store threads that are started by a contact that is known on our " +"system." +msgstr "Normalerweise werden alle Inhalte von OStatus Kontakten importiert. Mit dieser Option werden nur solche Konversationen gespeichert, die von Kontakten der Nutzer dieses Knotens gestartet wurden." + +#: mod/admin.php:1107 +msgid "OStatus support can only be enabled if threading is enabled." +msgstr "OStatus Unterstützung kann nur aktiviert werden wenn \"Threading\" aktiviert ist. " + +#: mod/admin.php:1109 +msgid "" +"Diaspora support can't be enabled because Friendica was installed into a sub" +" directory." +msgstr "Diaspora Unterstützung kann nicht aktiviert werden da Friendica in ein Unterverzeichnis installiert ist." + +#: mod/admin.php:1110 +msgid "Enable Diaspora support" +msgstr "Diaspora Unterstützung aktivieren" + +#: mod/admin.php:1110 +msgid "Provide built-in Diaspora network compatibility." +msgstr "Verwende die eingebaute Diaspora-Verknüpfung." + +#: mod/admin.php:1111 +msgid "Only allow Friendica contacts" +msgstr "Nur Friendica-Kontakte erlauben" + +#: mod/admin.php:1111 +msgid "" +"All contacts must use Friendica protocols. All other built-in communication " +"protocols disabled." +msgstr "Alle Kontakte müssen das Friendica Protokoll nutzen. Alle anderen Kommunikationsprotokolle werden deaktiviert." + +#: mod/admin.php:1112 +msgid "Verify SSL" +msgstr "SSL Überprüfen" + +#: mod/admin.php:1112 +msgid "" +"If you wish, you can turn on strict certificate checking. This will mean you" +" cannot connect (at all) to self-signed SSL sites." +msgstr "Wenn gewollt, kann man hier eine strenge Zertifikatkontrolle einstellen. Das bedeutet, dass man zu keinen Seiten mit selbst unterzeichnetem SSL eine Verbindung herstellen kann." + +#: mod/admin.php:1113 +msgid "Proxy user" +msgstr "Proxy Nutzer" + +#: mod/admin.php:1114 +msgid "Proxy URL" +msgstr "Proxy URL" + +#: mod/admin.php:1115 +msgid "Network timeout" +msgstr "Netzwerk Wartezeit" + +#: mod/admin.php:1115 +msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." +msgstr "Der Wert ist in Sekunden. Setze 0 für unbegrenzt (nicht empfohlen)." + +#: mod/admin.php:1116 +msgid "Maximum Load Average" +msgstr "Maximum Load Average" + +#: mod/admin.php:1116 +msgid "" +"Maximum system load before delivery and poll processes are deferred - " +"default 50." +msgstr "Maximale Systemlast bevor Verteil- und Empfangsprozesse verschoben werden - Standard 50" + +#: mod/admin.php:1117 +msgid "Maximum Load Average (Frontend)" +msgstr "Maximum Load Average (Frontend)" + +#: mod/admin.php:1117 +msgid "Maximum system load before the frontend quits service - default 50." +msgstr "Maximale Systemlast bevor Vordergrundprozesse pausiert werden - Standard 50." + +#: mod/admin.php:1118 +msgid "Minimal Memory" +msgstr "Minimaler Speicher" + +#: mod/admin.php:1118 +msgid "" +"Minimal free memory in MB for the poller. Needs access to /proc/meminfo - " +"default 0 (deactivated)." +msgstr "Minimal freier Speicher in MB für den Poller. Benötigt Zugriff auf /proc/meminfo - Standard 0 (Deaktiviert)." + +#: mod/admin.php:1119 +msgid "Maximum table size for optimization" +msgstr "Maximale Tabellengröße zur Optimierung" + +#: mod/admin.php:1119 +msgid "" +"Maximum table size (in MB) for the automatic optimization - default 100 MB. " +"Enter -1 to disable it." +msgstr "Maximale Tabellengröße (in MB) für die automatische Optimierung - Standard 100 MB. Gib -1 für Deaktivierung ein." + +#: mod/admin.php:1120 +msgid "Minimum level of fragmentation" +msgstr "Minimaler Fragmentationsgrad" + +#: mod/admin.php:1120 +msgid "" +"Minimum fragmenation level to start the automatic optimization - default " +"value is 30%." +msgstr "Minimales Fragmentationsgrad von Datenbanktabellen um die automatische Optimierung einzuleiten - Standardwert ist 30%" + +#: mod/admin.php:1122 +msgid "Periodical check of global contacts" +msgstr "Regelmäßig globale Kontakte überprüfen" + +#: mod/admin.php:1122 +msgid "" +"If enabled, the global contacts are checked periodically for missing or " +"outdated data and the vitality of the contacts and servers." +msgstr "Wenn diese Option aktiviert ist, werden die globalen Kontakte regelmäßig auf fehlende oder veraltete Daten sowie auf Erreichbarkeit des Kontakts und des Servers überprüft." + +#: mod/admin.php:1123 +msgid "Days between requery" +msgstr "Tage zwischen erneuten Abfragen" + +#: mod/admin.php:1123 +msgid "Number of days after which a server is requeried for his contacts." +msgstr "Legt das Abfrageintervall fest, nachdem ein Server erneut nach Kontakten abgefragt werden soll." + +#: mod/admin.php:1124 +msgid "Discover contacts from other servers" +msgstr "Neue Kontakte auf anderen Servern entdecken" + +#: mod/admin.php:1124 +msgid "" +"Periodically query other servers for contacts. You can choose between " +"'users': the users on the remote system, 'Global Contacts': active contacts " +"that are known on the system. The fallback is meant for Redmatrix servers " +"and older friendica servers, where global contacts weren't available. The " +"fallback increases the server load, so the recommened setting is 'Users, " +"Global Contacts'." +msgstr "Regelmäßig andere Server nach potentiellen Kontakten absuchen. Du kannst zwischen 'Nutzern', den tatsächlichen Nutzern des anderen Systems und 'globalen Kontakten', aktiven Kontakten die auf dem System bekannt sind, wählen. Der Fallback-Mechanismus ist für ältere Friendica und Redmatrix Server gedacht, bei denen globale Kontakte noch nicht verfügbar sind. Durch den Fallbackmodus entsteht auf deinem Server eine wesentlich höhere Last, empfohlen wird der Modus 'Nutzer, globale Kontakte'." + +#: mod/admin.php:1125 +msgid "Timeframe for fetching global contacts" +msgstr "Zeitfenster für globale Kontakte" + +#: mod/admin.php:1125 +msgid "" +"When the discovery is activated, this value defines the timeframe for the " +"activity of the global contacts that are fetched from other servers." +msgstr "Wenn die Entdeckung neuer Kontakte aktiv ist, definiert dieses Zeitfenster den Zeitraum in dem globale Kontakte als aktiv gelten und von anderen Servern importiert werden." + +#: mod/admin.php:1126 +msgid "Search the local directory" +msgstr "Lokales Verzeichnis durchsuchen" + +#: mod/admin.php:1126 +msgid "" +"Search the local directory instead of the global directory. When searching " +"locally, every search will be executed on the global directory in the " +"background. This improves the search results when the search is repeated." +msgstr "Suche im lokalen Verzeichnis anstelle des globalen Verzeichnisses durchführen. Jede Suche wird im Hintergrund auch im globalen Verzeichnis durchgeführt umd die Suchresultate zu verbessern, wenn diese Suche wiederholt wird." + +#: mod/admin.php:1128 +msgid "Publish server information" +msgstr "Server Informationen veröffentlichen" + +#: mod/admin.php:1128 +msgid "" +"If enabled, general server and usage data will be published. The data " +"contains the name and version of the server, number of users with public " +"profiles, number of posts and the activated protocols and connectors. See the-federation.info for details." +msgstr "Wenn aktiviert, werden allgemeine Informationen über den Server und Nutzungsdaten veröffentlicht. Die Daten beinhalten den Namen sowie die Version des Servers, die Anzahl der Nutzer_innen mit öffentlichen Profilen, die Anzahl der Beiträge sowie aktivierte Protokolle und Connectoren. Für Details bitte the-federation.info aufrufen." + +#: mod/admin.php:1130 +msgid "Suppress Tags" +msgstr "Tags Unterdrücken" + +#: mod/admin.php:1130 +msgid "Suppress showing a list of hashtags at the end of the posting." +msgstr "Unterdrückt die Anzeige von Tags am Ende eines Beitrags." + +#: mod/admin.php:1131 +msgid "Path to item cache" +msgstr "Pfad zum Eintrag Cache" + +#: mod/admin.php:1131 +msgid "The item caches buffers generated bbcode and external images." +msgstr "Im Item-Cache werden externe Bilder und geparster BBCode zwischen gespeichert." + +#: mod/admin.php:1132 +msgid "Cache duration in seconds" +msgstr "Cache-Dauer in Sekunden" + +#: mod/admin.php:1132 +msgid "" +"How long should the cache files be hold? Default value is 86400 seconds (One" +" day). To disable the item cache, set the value to -1." +msgstr "Wie lange sollen die gecachedten Dateien vorgehalten werden? Grundeinstellung sind 86400 Sekunden (ein Tag). Um den Item Cache zu deaktivieren, setze diesen Wert auf -1." + +#: mod/admin.php:1133 +msgid "Maximum numbers of comments per post" +msgstr "Maximale Anzahl von Kommentaren pro Beitrag" + +#: mod/admin.php:1133 +msgid "How much comments should be shown for each post? Default value is 100." +msgstr "Wie viele Kommentare sollen pro Beitrag angezeigt werden? Standardwert sind 100." + +#: mod/admin.php:1134 +msgid "Temp path" +msgstr "Temp Pfad" + +#: mod/admin.php:1134 +msgid "" +"If you have a restricted system where the webserver can't access the system " +"temp path, enter another path here." +msgstr "Solltest du ein eingeschränktes System haben, auf dem der Webserver nicht auf das temp Verzeichnis des Systems zugreifen kann, setze hier einen anderen Pfad." + +#: mod/admin.php:1135 +msgid "Base path to installation" +msgstr "Basis-Pfad zur Installation" + +#: mod/admin.php:1135 +msgid "" +"If the system cannot detect the correct path to your installation, enter the" +" correct path here. This setting should only be set if you are using a " +"restricted system and symbolic links to your webroot." +msgstr "Falls das System nicht den korrekten Pfad zu deiner Installation gefunden hat, gib den richtigen Pfad bitte hier ein. Du solltest hier den Pfad nur auf einem eingeschränkten System angeben müssen, bei dem du mit symbolischen Links auf dein Webverzeichnis verweist." + +#: mod/admin.php:1136 +msgid "Disable picture proxy" +msgstr "Bilder Proxy deaktivieren" + +#: mod/admin.php:1136 +msgid "" +"The picture proxy increases performance and privacy. It shouldn't be used on" +" systems with very low bandwith." +msgstr "Der Proxy für Bilder verbessert die Leistung und Privatsphäre der Nutzer. Er sollte nicht auf Systemen verwendet werden, die nur über begrenzte Bandbreite verfügen." + +#: mod/admin.php:1137 +msgid "Only search in tags" +msgstr "Nur in Tags suchen" + +#: mod/admin.php:1137 +msgid "On large systems the text search can slow down the system extremely." +msgstr "Auf großen Knoten kann die Volltext-Suche das System ausbremsen." + +#: mod/admin.php:1139 +msgid "New base url" +msgstr "Neue Basis-URL" + +#: mod/admin.php:1139 +msgid "" +"Change base url for this server. Sends relocate message to all DFRN contacts" +" of all users." +msgstr "Ändert die Basis-URL dieses Servers und sendet eine Umzugsmitteilung an alle DFRN Kontakte deiner Nutzer_innen." + +#: mod/admin.php:1141 +msgid "RINO Encryption" +msgstr "RINO Verschlüsselung" + +#: mod/admin.php:1141 +msgid "Encryption layer between nodes." +msgstr "Verschlüsselung zwischen Friendica Instanzen" + +#: mod/admin.php:1143 +msgid "Maximum number of parallel workers" +msgstr "Maximale Anzahl parallel laufender Worker" + +#: mod/admin.php:1143 +msgid "" +"On shared hosters set this to 2. On larger systems, values of 10 are great. " +"Default value is 4." +msgstr "Wenn dein Knoten bei einem Shared Hoster ist, setzte diesen Wert auf 2. Auf größeren Systemen funktioniert ein Wert von 10 recht gut. Standardeinstellung sind 4." + +#: mod/admin.php:1144 +msgid "Don't use 'proc_open' with the worker" +msgstr "'proc_open' nicht mit den Workern verwenden" + +#: mod/admin.php:1144 +msgid "" +"Enable this if your system doesn't allow the use of 'proc_open'. This can " +"happen on shared hosters. If this is enabled you should increase the " +"frequency of poller calls in your crontab." +msgstr "Aktiviere diese Option, wenn dein System die Verwendung von 'proc_open' verhindert. Dies könnte auf Shared Hostern der Fall sein. Wenn du diese Option aktivierst, solltest du die Frequenz der poller Aufrufe in deiner crontab erhöhen." + +#: mod/admin.php:1145 +msgid "Enable fastlane" +msgstr "Aktiviere Fastlane" + +#: mod/admin.php:1145 +msgid "" +"When enabed, the fastlane mechanism starts an additional worker if processes" +" with higher priority are blocked by processes of lower priority." +msgstr "Wenn aktiviert, wird der Fastlane-Mechanismus einen weiteren Worker-Prozeß starten wenn Prozesse mit höherer Priorität von Prozessen mit niedrigerer Priorität blockiert werden." + +#: mod/admin.php:1146 +msgid "Enable frontend worker" +msgstr "Aktiviere den Frontend Worker" + +#: mod/admin.php:1146 +msgid "" +"When enabled the Worker process is triggered when backend access is " +"performed (e.g. messages being delivered). On smaller sites you might want " +"to call yourdomain.tld/worker on a regular basis via an external cron job. " +"You should only enable this option if you cannot utilize cron/scheduled jobs" +" on your server. The worker background process needs to be activated for " +"this." +msgstr "Ist diese Option aktiv, wird der Worker Prozess durch Aktionen am Frontend gestartet (z.B. wenn Nachrichten zugestellt werden). Auf kleineren Seiten sollte yourdomain.tld/worker regelmäßig, beispielsweise durch einen externen Cron Anbieter, aufgerufen werden. Du solltest dies Option nur dann aktivieren, wenn du keinen Cron Job auf deinem eigenen Server starten kannst. Damit diese Option einen Effekt hat, muss der Worker Prozess aktiviert sein." + +#: mod/admin.php:1176 +msgid "Update has been marked successful" +msgstr "Update wurde als erfolgreich markiert" + +#: mod/admin.php:1184 +#, php-format +msgid "Database structure update %s was successfully applied." +msgstr "Das Update %s der Struktur der Datenbank wurde erfolgreich angewandt." + +#: mod/admin.php:1187 +#, php-format +msgid "Executing of database structure update %s failed with error: %s" +msgstr "Das Update %s der Struktur der Datenbank schlug mit folgender Fehlermeldung fehl: %s" + +#: mod/admin.php:1201 +#, php-format +msgid "Executing %s failed with error: %s" +msgstr "Die Ausführung von %s schlug fehl. Fehlermeldung: %s" + +#: mod/admin.php:1204 +#, php-format +msgid "Update %s was successfully applied." +msgstr "Update %s war erfolgreich." + +#: mod/admin.php:1207 +#, php-format +msgid "Update %s did not return a status. Unknown if it succeeded." +msgstr "Update %s hat keinen Status zurückgegeben. Unbekannter Status." + +#: mod/admin.php:1210 +#, php-format +msgid "There was no additional update function %s that needed to be called." +msgstr "Es gab keine weitere Update-Funktion, die von %s ausgeführt werden musste." + +#: mod/admin.php:1230 +msgid "No failed updates." +msgstr "Keine fehlgeschlagenen Updates." + +#: mod/admin.php:1231 +msgid "Check database structure" +msgstr "Datenbank Struktur überprüfen" + +#: mod/admin.php:1236 +msgid "Failed Updates" +msgstr "Fehlgeschlagene Updates" + +#: mod/admin.php:1237 +msgid "" +"This does not include updates prior to 1139, which did not return a status." +msgstr "Ohne Updates vor 1139, da diese keinen Status zurückgegeben haben." + +#: mod/admin.php:1238 +msgid "Mark success (if update was manually applied)" +msgstr "Als erfolgreich markieren (falls das Update manuell installiert wurde)" + +#: mod/admin.php:1239 +msgid "Attempt to execute this update step automatically" +msgstr "Versuchen, diesen Schritt automatisch auszuführen" + +#: mod/admin.php:1273 +#, php-format +msgid "" +"\n" +"\t\t\tDear %1$s,\n" +"\t\t\t\tthe administrator of %2$s has set up an account for you." +msgstr "\nHallo %1$s,\n\nauf %2$s wurde ein Account für Dich angelegt." + +#: mod/admin.php:1276 +#, php-format +msgid "" +"\n" +"\t\t\tThe login details are as follows:\n" +"\n" +"\t\t\tSite Location:\t%1$s\n" +"\t\t\tLogin Name:\t\t%2$s\n" +"\t\t\tPassword:\t\t%3$s\n" +"\n" +"\t\t\tYou may change your password from your account \"Settings\" page after logging\n" +"\t\t\tin.\n" +"\n" +"\t\t\tPlease take a few moments to review the other account settings on that page.\n" +"\n" +"\t\t\tYou may also wish to add some basic information to your default profile\n" +"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n" +"\n" +"\t\t\tWe recommend setting your full name, adding a profile photo,\n" +"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n" +"\t\t\tperhaps what country you live in; if you do not wish to be more specific\n" +"\t\t\tthan that.\n" +"\n" +"\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n" +"\t\t\tIf you are new and do not know anybody here, they may help\n" +"\t\t\tyou to make some new and interesting friends.\n" +"\n" +"\t\t\tThank you and welcome to %4$s." +msgstr "\nNachfolgend die Anmelde-Details:\n\tAdresse der Seite:\t%1$s\n\tBenutzername:\t%2$s\n\tPasswort:\t%3$s\n\nDu kannst Dein Passwort unter \"Einstellungen\" ändern, sobald Du Dich\nangemeldet hast.\n\nBitte nimm Dir ein paar Minuten um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst Du ja auch einige Informationen über Dich in Deinem\nProfil veröffentlichen, damit andere Leute Dich einfacher finden können.\nBearbeite hierfür einfach Dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen Dir, Deinen kompletten Namen anzugeben und ein zu Dir\npassendes Profilbild zu wählen, damit Dich alte Bekannte wieder finden.\nAußerdem ist es nützlich, wenn Du auf Deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die Deine Interessen teilen.\n\nWir respektieren Deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn Du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nNun viel Spaß, gute Begegnungen und willkommen auf %4$s." + +#: mod/admin.php:1320 +#, php-format +msgid "%s user blocked/unblocked" +msgid_plural "%s users blocked/unblocked" +msgstr[0] "%s Benutzer geblockt/freigegeben" +msgstr[1] "%s Benutzer geblockt/freigegeben" + +#: mod/admin.php:1327 +#, php-format +msgid "%s user deleted" +msgid_plural "%s users deleted" +msgstr[0] "%s Nutzer gelöscht" +msgstr[1] "%s Nutzer gelöscht" + +#: mod/admin.php:1374 +#, php-format +msgid "User '%s' deleted" +msgstr "Nutzer '%s' gelöscht" + +#: mod/admin.php:1382 +#, php-format +msgid "User '%s' unblocked" +msgstr "Nutzer '%s' entsperrt" + +#: mod/admin.php:1382 +#, php-format +msgid "User '%s' blocked" +msgstr "Nutzer '%s' gesperrt" + +#: mod/admin.php:1490 mod/admin.php:1516 +msgid "Register date" +msgstr "Anmeldedatum" + +#: mod/admin.php:1490 mod/admin.php:1516 +msgid "Last login" +msgstr "Letzte Anmeldung" + +#: mod/admin.php:1490 mod/admin.php:1516 +msgid "Last item" +msgstr "Letzter Beitrag" + +#: mod/admin.php:1499 +msgid "Add User" +msgstr "Nutzer hinzufügen" + +#: mod/admin.php:1500 +msgid "select all" +msgstr "Alle auswählen" + +#: mod/admin.php:1501 +msgid "User registrations waiting for confirm" +msgstr "Neuanmeldungen, die auf Deine Bestätigung warten" + +#: mod/admin.php:1502 +msgid "User waiting for permanent deletion" +msgstr "Nutzer wartet auf permanente Löschung" + +#: mod/admin.php:1503 +msgid "Request date" +msgstr "Anfragedatum" + +#: mod/admin.php:1504 +msgid "No registrations." +msgstr "Keine Neuanmeldungen." + +#: mod/admin.php:1505 +msgid "Note from the user" +msgstr "Hinweis vom Nutzer" + +#: mod/admin.php:1507 +msgid "Deny" +msgstr "Verwehren" + +#: mod/admin.php:1511 +msgid "Site admin" +msgstr "Seitenadministrator" + +#: mod/admin.php:1512 +msgid "Account expired" +msgstr "Account ist abgelaufen" + +#: mod/admin.php:1515 +msgid "New User" +msgstr "Neuer Nutzer" + +#: mod/admin.php:1516 +msgid "Deleted since" +msgstr "Gelöscht seit" + +#: mod/admin.php:1521 +msgid "" +"Selected users will be deleted!\\n\\nEverything these users had posted on " +"this site will be permanently deleted!\\n\\nAre you sure?" +msgstr "Die markierten Nutzer werden gelöscht!\\n\\nAlle Beiträge, die diese Nutzer auf dieser Seite veröffentlicht haben, werden permanent gelöscht!\\n\\nBist Du sicher?" + +#: mod/admin.php:1522 +msgid "" +"The user {0} will be deleted!\\n\\nEverything this user has posted on this " +"site will be permanently deleted!\\n\\nAre you sure?" +msgstr "Der Nutzer {0} wird gelöscht!\\n\\nAlles was dieser Nutzer auf dieser Seite veröffentlicht hat, wird permanent gelöscht!\\n\\nBist Du sicher?" + +#: mod/admin.php:1532 +msgid "Name of the new user." +msgstr "Name des neuen Nutzers" + +#: mod/admin.php:1533 +msgid "Nickname" +msgstr "Spitzname" + +#: mod/admin.php:1533 +msgid "Nickname of the new user." +msgstr "Spitznamen für den neuen Nutzer" + +#: mod/admin.php:1534 +msgid "Email address of the new user." +msgstr "Email Adresse des neuen Nutzers" + +#: mod/admin.php:1577 +#, php-format +msgid "Plugin %s disabled." +msgstr "Plugin %s deaktiviert." + +#: mod/admin.php:1581 +#, php-format +msgid "Plugin %s enabled." +msgstr "Plugin %s aktiviert." + +#: mod/admin.php:1592 mod/admin.php:1844 +msgid "Disable" +msgstr "Ausschalten" + +#: mod/admin.php:1594 mod/admin.php:1846 +msgid "Enable" +msgstr "Einschalten" + +#: mod/admin.php:1617 mod/admin.php:1893 +msgid "Toggle" +msgstr "Umschalten" + +#: mod/admin.php:1625 mod/admin.php:1902 +msgid "Author: " +msgstr "Autor:" + +#: mod/admin.php:1626 mod/admin.php:1903 +msgid "Maintainer: " +msgstr "Betreuer:" + +#: mod/admin.php:1681 +msgid "Reload active plugins" +msgstr "Aktive Plugins neu laden" + +#: mod/admin.php:1686 +#, php-format +msgid "" +"There are currently no plugins available on your node. You can find the " +"official plugin repository at %1$s and might find other interesting plugins " +"in the open plugin registry at %2$s" +msgstr "Es sind derzeit keine Plugins auf diesem Knoten verfügbar. Du findest das offizielle Plugin-Repository unter %1$s und weitere eventuell interessante Plugins im offenen Plugins-Verzeichnis auf %2$s." + +#: mod/admin.php:1805 +msgid "No themes found." +msgstr "Keine Themen gefunden." + +#: mod/admin.php:1884 +msgid "Screenshot" +msgstr "Bildschirmfoto" + +#: mod/admin.php:1944 +msgid "Reload active themes" +msgstr "Aktives Theme neu laden" + +#: mod/admin.php:1949 +#, php-format +msgid "No themes found on the system. They should be paced in %1$s" +msgstr "Es wurden keine Themes auf dem System gefunden. Diese sollten in %1$s patziert werden." + +#: mod/admin.php:1950 +msgid "[Experimental]" +msgstr "[Experimentell]" + +#: mod/admin.php:1951 +msgid "[Unsupported]" +msgstr "[Nicht unterstützt]" + +#: mod/admin.php:1975 +msgid "Log settings updated." +msgstr "Protokolleinstellungen aktualisiert." + +#: mod/admin.php:2007 +msgid "PHP log currently enabled." +msgstr "PHP Protokollierung ist derzeit aktiviert." + +#: mod/admin.php:2009 +msgid "PHP log currently disabled." +msgstr "PHP Protokollierung ist derzeit nicht aktiviert." + +#: mod/admin.php:2018 +msgid "Clear" +msgstr "löschen" + +#: mod/admin.php:2023 +msgid "Enable Debugging" +msgstr "Protokoll führen" + +#: mod/admin.php:2024 +msgid "Log file" +msgstr "Protokolldatei" + +#: mod/admin.php:2024 +msgid "" +"Must be writable by web server. Relative to your Friendica top-level " +"directory." +msgstr "Webserver muss Schreibrechte besitzen. Abhängig vom Friendica-Installationsverzeichnis." + +#: mod/admin.php:2025 +msgid "Log level" +msgstr "Protokoll-Level" + +#: mod/admin.php:2028 +msgid "PHP logging" +msgstr "PHP Protokollieren" + +#: mod/admin.php:2029 +msgid "" +"To enable logging of PHP errors and warnings you can add the following to " +"the .htconfig.php file of your installation. The filename set in the " +"'error_log' line is relative to the friendica top-level directory and must " +"be writeable by the web server. The option '1' for 'log_errors' and " +"'display_errors' is to enable these options, set to '0' to disable them." +msgstr "Um PHP Warnungen und Fehler zu protokollieren, kannst du die folgenden Zeilen zur .htconfig.php Datei deiner Installation hinzufügen. Den Dateinamen der Log-Datei legst du in der Zeile mit dem 'error_log' fest, Er ist relativ zum Friendica-Stammverzeichnis und muss schreibbar durch den Webserver sein. Eine \"1\" als Option für die Punkte 'log_errors' und 'display_errors' aktiviert die Funktionen zum Protokollieren bzw. Anzeigen der Fehler, eine \"0\" deaktiviert sie." + +#: mod/admin.php:2160 +#, php-format +msgid "Lock feature %s" +msgstr "Feature festlegen: %s" + +#: mod/admin.php:2168 +msgid "Manage Additional Features" +msgstr "Zusätzliche Features Verwalten" + +#: object/Item.php:359 msgid "via" msgstr "via" -#: view/theme/quattro/config.php:70 -msgid "Alignment" -msgstr "Ausrichtung" - -#: view/theme/quattro/config.php:70 -msgid "Left" -msgstr "Links" - -#: view/theme/quattro/config.php:70 -msgid "Center" -msgstr "Mitte" - -#: view/theme/quattro/config.php:71 view/theme/clean/config.php:108 -msgid "Color scheme" -msgstr "Farbschema" - -#: view/theme/quattro/config.php:72 -msgid "Posts font size" -msgstr "Schriftgröße in Beiträgen" - -#: view/theme/quattro/config.php:73 -msgid "Textareas font size" -msgstr "Schriftgröße in Eingabefeldern" - -#: view/theme/vier/config.php:69 -msgid "Comma separated list of helper forums" -msgstr "Komma-Separierte Liste der Helfer-Foren" - -#: view/theme/vier/config.php:115 -msgid "Set style" -msgstr "Stil auswählen" - -#: view/theme/vier/config.php:116 -msgid "Community Pages" -msgstr "Foren" - -#: view/theme/vier/config.php:117 view/theme/vier/theme.php:146 -msgid "Community Profiles" -msgstr "Community-Profile" - -#: view/theme/vier/config.php:118 -msgid "Help or @NewHere ?" -msgstr "Hilfe oder @NewHere" - -#: view/theme/vier/config.php:119 view/theme/vier/theme.php:385 -msgid "Connect Services" -msgstr "Verbinde Dienste" - -#: view/theme/vier/config.php:120 view/theme/vier/theme.php:194 -msgid "Find Friends" -msgstr "Kontakte finden" - -#: view/theme/vier/config.php:121 view/theme/vier/theme.php:176 -msgid "Last users" -msgstr "Letzte Nutzer" - -#: view/theme/vier/theme.php:195 -msgid "Local Directory" -msgstr "Lokales Verzeichnis" - -#: view/theme/vier/theme.php:286 -msgid "Quick Start" -msgstr "Schnell-Start" - #: view/theme/duepuntozero/config.php:44 msgid "greenzero" msgstr "greenzero" @@ -8808,97 +8770,6 @@ msgstr "slackr" msgid "Variations" msgstr "Variationen" -#: view/theme/clean/config.php:61 -msgid "Midnight" -msgstr "Mitternacht" - -#: view/theme/clean/config.php:62 -msgid "Zenburn" -msgstr "Zenburn" - -#: view/theme/clean/config.php:63 -msgid "Bootstrap" -msgstr "Bootstrap" - -#: view/theme/clean/config.php:64 -msgid "Shades of Pink" -msgstr "Shades of Pink" - -#: view/theme/clean/config.php:65 -msgid "Lime and Orange" -msgstr "Lime and Orange" - -#: view/theme/clean/config.php:66 -msgid "GeoCities Retro" -msgstr "GeoCities Retro" - -#: view/theme/clean/config.php:92 -msgid "Background Image" -msgstr "Hintergrundbild" - -#: view/theme/clean/config.php:94 -msgid "" -"The URL to a picture (e.g. from your photo album) that should be used as " -"background image." -msgstr "Die URL zum Bild (z.B. aus deinem Foto Album), das als Hintergrundbild verwendet werden soll." - -#: view/theme/clean/config.php:99 -msgid "Background Color" -msgstr "Hintergrundfarbe" - -#: view/theme/clean/config.php:101 -msgid "HEX value for the background color. Don't include the #" -msgstr "HEX Wert der Hintergrundfarbe, ohne das #" - -#: view/theme/clean/config.php:115 -msgid "font size" -msgstr "Zeichengröße" - -#: view/theme/clean/config.php:117 -msgid "base font size for your interface" -msgstr "Basiszeichengröße für das Interface" - -#: view/theme/clean/config.php:122 -msgid "Display Accesskeys" -msgstr "Accesskeys anzeigen" - -#: view/theme/clean/config.php:124 -msgid "" -"Diaplay the access keys assigned to some menu element in the web interface." -msgstr "Einige Menüelemente sind über Accesskeys aufrufbar. Sollen diese angezeigt werden?" - -#: view/theme/frio/php/Image.php:23 -msgid "Repeat the image" -msgstr "Bild wiederholen" - -#: view/theme/frio/php/Image.php:23 -msgid "Will repeat your image to fill the background." -msgstr "Wiederholt das Bild um den Hintergrund auszufüllen." - -#: view/theme/frio/php/Image.php:25 -msgid "Stretch" -msgstr "Strecken" - -#: view/theme/frio/php/Image.php:25 -msgid "Will stretch to width/height of the image." -msgstr "Streckt Breite/Höhe des Bildes." - -#: view/theme/frio/php/Image.php:27 -msgid "Resize fill and-clip" -msgstr "Größe anpassen - Ausfüllen und abschneiden" - -#: view/theme/frio/php/Image.php:27 -msgid "Resize to fill and retain aspect ratio." -msgstr "Größe anpassen: Ausfüllen und Seitenverhältnis beibehalten" - -#: view/theme/frio/php/Image.php:29 -msgid "Resize best fit" -msgstr "Größe anpassen - Optimale Größe" - -#: view/theme/frio/php/Image.php:29 -msgid "Resize to best fit and retain aspect ratio." -msgstr "Größe anpassen - Optimale Größe und Seitenverhältnisse beibehalten" - #: view/theme/frio/config.php:47 msgid "Default" msgstr "Standard" @@ -8939,6 +8810,38 @@ msgstr "Transparanz des Hintergrunds von Beiträgem" msgid "Set the background image" msgstr "Hintergrundbild festlegen" +#: view/theme/frio/php/Image.php:23 +msgid "Repeat the image" +msgstr "Bild wiederholen" + +#: view/theme/frio/php/Image.php:23 +msgid "Will repeat your image to fill the background." +msgstr "Wiederholt das Bild um den Hintergrund auszufüllen." + +#: view/theme/frio/php/Image.php:25 +msgid "Stretch" +msgstr "Strecken" + +#: view/theme/frio/php/Image.php:25 +msgid "Will stretch to width/height of the image." +msgstr "Streckt Breite/Höhe des Bildes." + +#: view/theme/frio/php/Image.php:27 +msgid "Resize fill and-clip" +msgstr "Größe anpassen - Ausfüllen und abschneiden" + +#: view/theme/frio/php/Image.php:27 +msgid "Resize to fill and retain aspect ratio." +msgstr "Größe anpassen: Ausfüllen und Seitenverhältnis beibehalten" + +#: view/theme/frio/php/Image.php:29 +msgid "Resize best fit" +msgstr "Größe anpassen - Optimale Größe" + +#: view/theme/frio/php/Image.php:29 +msgid "Resize to best fit and retain aspect ratio." +msgstr "Größe anpassen - Optimale Größe und Seitenverhältnisse beibehalten" + #: view/theme/frio/theme.php:226 msgid "Guest" msgstr "Gast" @@ -8947,55 +8850,119 @@ msgstr "Gast" msgid "Visitor" msgstr "Besucher" -#: index.php:457 +#: view/theme/quattro/config.php:70 +msgid "Alignment" +msgstr "Ausrichtung" + +#: view/theme/quattro/config.php:70 +msgid "Left" +msgstr "Links" + +#: view/theme/quattro/config.php:70 +msgid "Center" +msgstr "Mitte" + +#: view/theme/quattro/config.php:71 +msgid "Color scheme" +msgstr "Farbschema" + +#: view/theme/quattro/config.php:72 +msgid "Posts font size" +msgstr "Schriftgröße in Beiträgen" + +#: view/theme/quattro/config.php:73 +msgid "Textareas font size" +msgstr "Schriftgröße in Eingabefeldern" + +#: view/theme/vier/config.php:69 +msgid "Comma separated list of helper forums" +msgstr "Komma-Separierte Liste der Helfer-Foren" + +#: view/theme/vier/config.php:115 +msgid "Set style" +msgstr "Stil auswählen" + +#: view/theme/vier/config.php:116 +msgid "Community Pages" +msgstr "Foren" + +#: view/theme/vier/config.php:117 view/theme/vier/theme.php:149 +msgid "Community Profiles" +msgstr "Community-Profile" + +#: view/theme/vier/config.php:118 +msgid "Help or @NewHere ?" +msgstr "Hilfe oder @NewHere" + +#: view/theme/vier/config.php:119 view/theme/vier/theme.php:390 +msgid "Connect Services" +msgstr "Verbinde Dienste" + +#: view/theme/vier/config.php:120 view/theme/vier/theme.php:197 +msgid "Find Friends" +msgstr "Kontakte finden" + +#: view/theme/vier/config.php:121 view/theme/vier/theme.php:179 +msgid "Last users" +msgstr "Letzte Nutzer" + +#: view/theme/vier/theme.php:198 +msgid "Local Directory" +msgstr "Lokales Verzeichnis" + +#: view/theme/vier/theme.php:290 +msgid "Quick Start" +msgstr "Schnell-Start" + +#: index.php:433 msgid "toggle mobile" msgstr "auf/von Mobile Ansicht wechseln" -#: boot.php:970 +#: boot.php:999 msgid "Delete this item?" msgstr "Diesen Beitrag löschen?" -#: boot.php:972 +#: boot.php:1001 msgid "show fewer" msgstr "weniger anzeigen" -#: boot.php:1696 +#: boot.php:1729 #, php-format msgid "Update %s failed. See error logs." msgstr "Update %s fehlgeschlagen. Bitte Fehlerprotokoll überprüfen." -#: boot.php:1808 +#: boot.php:1843 msgid "Create a New Account" msgstr "Neues Konto erstellen" -#: boot.php:1837 +#: boot.php:1871 msgid "Password: " msgstr "Passwort: " -#: boot.php:1838 +#: boot.php:1872 msgid "Remember me" msgstr "Anmeldedaten merken" -#: boot.php:1841 +#: boot.php:1875 msgid "Or login using OpenID: " msgstr "Oder melde Dich mit Deiner OpenID an: " -#: boot.php:1847 +#: boot.php:1881 msgid "Forgot your password?" msgstr "Passwort vergessen?" -#: boot.php:1850 +#: boot.php:1884 msgid "Website Terms of Service" msgstr "Website Nutzungsbedingungen" -#: boot.php:1851 +#: boot.php:1885 msgid "terms of service" msgstr "Nutzungsbedingungen" -#: boot.php:1853 +#: boot.php:1887 msgid "Website Privacy Policy" msgstr "Website Datenschutzerklärung" -#: boot.php:1854 +#: boot.php:1888 msgid "privacy policy" msgstr "Datenschutzerklärung" diff --git a/view/lang/de/strings.php b/view/lang/de/strings.php index e88b6ff1e4..31e283643f 100644 --- a/view/lang/de/strings.php +++ b/view/lang/de/strings.php @@ -5,67 +5,6 @@ function string_plural_select_de($n){ return ($n != 1);; }} ; -$a->strings["Male"] = "Männlich"; -$a->strings["Female"] = "Weiblich"; -$a->strings["Currently Male"] = "Momentan männlich"; -$a->strings["Currently Female"] = "Momentan weiblich"; -$a->strings["Mostly Male"] = "Hauptsächlich männlich"; -$a->strings["Mostly Female"] = "Hauptsächlich weiblich"; -$a->strings["Transgender"] = "Transgender"; -$a->strings["Intersex"] = "Intersex"; -$a->strings["Transsexual"] = "Transsexuell"; -$a->strings["Hermaphrodite"] = "Hermaphrodit"; -$a->strings["Neuter"] = "Neuter"; -$a->strings["Non-specific"] = "Nicht spezifiziert"; -$a->strings["Other"] = "Andere"; -$a->strings["Undecided"] = array( - 0 => "Unentschieden", - 1 => "Unentschieden", -); -$a->strings["Males"] = "Männer"; -$a->strings["Females"] = "Frauen"; -$a->strings["Gay"] = "Schwul"; -$a->strings["Lesbian"] = "Lesbisch"; -$a->strings["No Preference"] = "Keine Vorlieben"; -$a->strings["Bisexual"] = "Bisexuell"; -$a->strings["Autosexual"] = "Autosexual"; -$a->strings["Abstinent"] = "Abstinent"; -$a->strings["Virgin"] = "Jungfrauen"; -$a->strings["Deviant"] = "Deviant"; -$a->strings["Fetish"] = "Fetish"; -$a->strings["Oodles"] = "Oodles"; -$a->strings["Nonsexual"] = "Nonsexual"; -$a->strings["Single"] = "Single"; -$a->strings["Lonely"] = "Einsam"; -$a->strings["Available"] = "Verfügbar"; -$a->strings["Unavailable"] = "Nicht verfügbar"; -$a->strings["Has crush"] = "verknallt"; -$a->strings["Infatuated"] = "verliebt"; -$a->strings["Dating"] = "Dating"; -$a->strings["Unfaithful"] = "Untreu"; -$a->strings["Sex Addict"] = "Sexbesessen"; -$a->strings["Friends"] = "Kontakte"; -$a->strings["Friends/Benefits"] = "Freunde/Zuwendungen"; -$a->strings["Casual"] = "Casual"; -$a->strings["Engaged"] = "Verlobt"; -$a->strings["Married"] = "Verheiratet"; -$a->strings["Imaginarily married"] = "imaginär verheiratet"; -$a->strings["Partners"] = "Partner"; -$a->strings["Cohabiting"] = "zusammenlebend"; -$a->strings["Common law"] = "wilde Ehe"; -$a->strings["Happy"] = "Glücklich"; -$a->strings["Not looking"] = "Nicht auf der Suche"; -$a->strings["Swinger"] = "Swinger"; -$a->strings["Betrayed"] = "Betrogen"; -$a->strings["Separated"] = "Getrennt"; -$a->strings["Unstable"] = "Unstabil"; -$a->strings["Divorced"] = "Geschieden"; -$a->strings["Imaginarily divorced"] = "imaginär geschieden"; -$a->strings["Widowed"] = "Verwitwet"; -$a->strings["Uncertain"] = "Unsicher"; -$a->strings["It's complicated"] = "Ist kompliziert"; -$a->strings["Don't care"] = "Ist mir nicht wichtig"; -$a->strings["Ask me"] = "Frag mich"; $a->strings["Forums"] = "Foren"; $a->strings["External link to forum"] = "Externer Link zum Forum"; $a->strings["show more"] = "mehr anzeigen"; @@ -86,108 +25,16 @@ $a->strings["Friend Suggestion"] = "Kontaktvorschlag"; $a->strings["Friend/Connect Request"] = "Kontakt-/Freundschaftsanfrage"; $a->strings["New Follower"] = "Neuer Bewunderer"; $a->strings["Wall Photos"] = "Pinnwand-Bilder"; -$a->strings["Logged out."] = "Abgemeldet."; -$a->strings["Login failed."] = "Anmeldung fehlgeschlagen."; -$a->strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Beim Versuch Dich mit der von Dir angegebenen OpenID anzumelden trat ein Problem auf. Bitte überprüfe, dass Du die OpenID richtig geschrieben hast."; -$a->strings["The error message was:"] = "Die Fehlermeldung lautete:"; -$a->strings["Image/photo"] = "Bild/Foto"; -$a->strings["%2\$s %3\$s"] = "%2\$s %3\$s"; -$a->strings["$1 wrote:"] = "$1 hat geschrieben:"; -$a->strings["Encrypted content"] = "Verschlüsselter Inhalt"; -$a->strings["Invalid source protocol"] = "Ungültiges Quell-Protokoll"; -$a->strings["Invalid link protocol"] = "Ungültiges Link-Protokoll"; -$a->strings["Cannot locate DNS info for database server '%s'"] = "Kann die DNS Informationen für den Datenbankserver '%s' nicht ermitteln."; -$a->strings["Friendica Notification"] = "Friendica-Benachrichtigung"; -$a->strings["Thank You,"] = "Danke,"; -$a->strings["%s Administrator"] = "der Administrator von %s"; -$a->strings["%1\$s, %2\$s Administrator"] = "%1\$s, %2\$s Administrator"; +$a->strings["(no subject)"] = "(kein Betreff)"; $a->strings["noreply"] = "noreply"; -$a->strings["%s "] = "%s "; -$a->strings["[Friendica:Notify] New mail received at %s"] = "[Friendica-Meldung] Neue Nachricht erhalten von %s"; -$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["%1\$s sent you %2\$s."] = "%1\$s schickte Dir %2\$s."; -$a->strings["a private message"] = "eine private Nachricht"; -$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 [url=%2\$s]a %3\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]a %3\$s[/url]"; -$a->strings["%1\$s commented on [url=%2\$s]%3\$s's %4\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]%3\$ss %4\$s[/url]"; -$a->strings["%1\$s commented on [url=%2\$s]your %3\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]Deinen %3\$s[/url]"; -$a->strings["[Friendica:Notify] Comment to conversation #%1\$d by %2\$s"] = "[Friendica-Meldung] Kommentar zum Beitrag #%1\$d von %2\$s"; -$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["[Friendica:Notify] %s posted to your profile wall"] = "[Friendica-Meldung] %s hat auf Deine Pinnwand geschrieben"; -$a->strings["%1\$s posted to your profile wall at %2\$s"] = "%1\$s schrieb auf %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["[Friendica:Notify] %s tagged you"] = "[Friendica-Meldung] %s hat Dich erwähnt"; -$a->strings["%1\$s tagged you at %2\$s"] = "%1\$s erwähnte Dich auf %2\$s"; -$a->strings["%1\$s [url=%2\$s]tagged you[/url]."] = "%1\$s [url=%2\$s]erwähnte Dich[/url]."; -$a->strings["[Friendica:Notify] %s shared a new post"] = "[Friendica Benachrichtigung] %s hat einen Beitrag geteilt"; -$a->strings["%1\$s shared a new post at %2\$s"] = "%1\$s hat einen neuen Beitrag auf %2\$s geteilt"; -$a->strings["%1\$s [url=%2\$s]shared a post[/url]."] = "%1\$s [url=%2\$s]hat einen Beitrag geteilt[/url]."; -$a->strings["[Friendica:Notify] %1\$s poked you"] = "[Friendica-Meldung] %1\$s hat Dich angestupst"; -$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["[Friendica:Notify] %s tagged your post"] = "[Friendica-Meldung] %s hat Deinen Beitrag getaggt"; -$a->strings["%1\$s tagged your post at %2\$s"] = "%1\$s erwähnte Deinen Beitrag auf %2\$s"; -$a->strings["%1\$s tagged [url=%2\$s]your post[/url]"] = "%1\$s erwähnte [url=%2\$s]Deinen Beitrag[/url]"; -$a->strings["[Friendica:Notify] Introduction received"] = "[Friendica-Meldung] Kontaktanfrage 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["[Friendica:Notify] A new person is sharing with you"] = "[Friendica Benachrichtigung] Eine neue Person teilt mit Dir"; -$a->strings["%1\$s is sharing with you at %2\$s"] = "%1\$s teilt mit Dir auf %2\$s"; -$a->strings["[Friendica:Notify] You have a new follower"] = "[Friendica Benachrichtigung] Du hast einen neuen Kontakt auf "; -$a->strings["You have a new follower at %2\$s : %1\$s"] = "Du hast einen neuen Kontakt auf %2\$s: %1\$s"; -$a->strings["[Friendica:Notify] Friend suggestion received"] = "[Friendica-Meldung] Kontaktvorschlag 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["[Friendica:Notify] Connection accepted"] = "[Friendica-Benachrichtigung] Kontaktanfrage 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 Emails 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] registration request"] = "[Friendica System:Benachrichtigung] Registrationsanfrage"; -$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:\t%1\$s\\nSite Location:\t%2\$s\\nLogin Name:\t%3\$s (%4\$s)"] = "Kompletter Name:\t%1\$s\\nURL der Seite:\t%2\$s\\nLogin Name:\t%3\$s (%4\$s)"; -$a->strings["Please visit %s to approve or reject the request."] = "Bitte besuche %s um die Anfrage zu bearbeiten."; -$a->strings["Disallowed profile URL."] = "Nicht erlaubte Profil-URL."; -$a->strings["Connect URL missing."] = "Connect-URL fehlt"; -$a->strings["This site is not configured to allow communications with other networks."] = "Diese Seite ist so konfiguriert, dass keine Kommunikation mit anderen Netzwerken erfolgen kann."; -$a->strings["No compatible communication protocols or feeds were discovered."] = "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden."; -$a->strings["The profile address specified does not provide adequate information."] = "Die angegebene Profiladresse liefert unzureichende Informationen."; -$a->strings["An author or name was not found."] = "Es wurde kein Autor oder Name gefunden."; -$a->strings["No browser URL could be matched to this address."] = "Zu dieser Adresse konnte keine passende Browser URL gefunden werden."; -$a->strings["Unable to match @-style Identity Address with a known protocol or email contact."] = "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen."; -$a->strings["Use mailto: in front of address to force email check."] = "Verwende mailto: vor der Email Adresse, um eine Überprüfung der E-Mail-Adresse zu erzwingen."; -$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde."; -$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von Dir erhalten können."; -$a->strings["Unable to retrieve contact information."] = "Konnte die Kontaktinformationen nicht empfangen."; -$a->strings["A deleted group with this name was revived. Existing item permissions may apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "Eine gelöschte Gruppe mit diesem Namen wurde wiederbelebt. Bestehende Berechtigungseinstellungen könnten auf diese Gruppe oder zukünftige Mitglieder angewandt werden. Falls Du dies nicht möchtest, erstelle bitte eine andere Gruppe mit einem anderen Namen."; -$a->strings["Default privacy group for new contacts"] = "Voreingestellte Gruppe für neue Kontakte"; -$a->strings["Everybody"] = "Alle Kontakte"; -$a->strings["edit"] = "bearbeiten"; -$a->strings["Groups"] = "Gruppen"; -$a->strings["Edit groups"] = "Gruppen bearbeiten"; -$a->strings["Edit group"] = "Gruppe bearbeiten"; -$a->strings["Create a new group"] = "Neue Gruppe erstellen"; -$a->strings["Group Name: "] = "Gruppenname:"; -$a->strings["Contacts not in any group"] = "Kontakte in keiner Gruppe"; -$a->strings["add"] = "hinzufügen"; -$a->strings["photo"] = "Foto"; -$a->strings["status"] = "Status"; -$a->strings["event"] = "Event"; $a->strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s mag %2\$ss %3\$s"; $a->strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s mag %2\$ss %3\$s nicht"; $a->strings["%1\$s is attending %2\$s's %3\$s"] = "%1\$s nimmt an %2\$ss %3\$s teil."; $a->strings["%1\$s is not attending %2\$s's %3\$s"] = "%1\$s nimmt nicht an %2\$ss %3\$s teil."; $a->strings["%1\$s may attend %2\$s's %3\$s"] = "%1\$s nimmt eventuell an %2\$ss %3\$s teil."; +$a->strings["photo"] = "Foto"; +$a->strings["status"] = "Status"; +$a->strings["event"] = "Event"; $a->strings["[no subject]"] = "[kein Betreff]"; $a->strings["Nothing new here"] = "Keine Neuigkeiten"; $a->strings["Clear notifications"] = "Bereinige Benachrichtigungen"; @@ -254,15 +101,70 @@ $a->strings["Admin"] = "Administration"; $a->strings["Site setup and configuration"] = "Einstellungen der Seite und Konfiguration"; $a->strings["Navigation"] = "Navigation"; $a->strings["Site map"] = "Sitemap"; -$a->strings["Embedded content"] = "Eingebetteter Inhalt"; -$a->strings["Embedding disabled"] = "Einbettungen deaktiviert"; -$a->strings["%s is now following %s."] = "%s folgt nun %s"; -$a->strings["following"] = "folgen"; -$a->strings["%s stopped following %s."] = "%s hat aufgehört %s zu folgen"; -$a->strings["stopped following"] = "wird nicht mehr gefolgt"; $a->strings["Click here to upgrade."] = "Zum Upgraden hier klicken."; $a->strings["This action exceeds the limits set by your subscription plan."] = "Diese Aktion überschreitet die Obergrenze Deines Abonnements."; $a->strings["This action is not available under your subscription plan."] = "Diese Aktion ist in Deinem Abonnement nicht verfügbar."; +$a->strings["Male"] = "Männlich"; +$a->strings["Female"] = "Weiblich"; +$a->strings["Currently Male"] = "Momentan männlich"; +$a->strings["Currently Female"] = "Momentan weiblich"; +$a->strings["Mostly Male"] = "Hauptsächlich männlich"; +$a->strings["Mostly Female"] = "Hauptsächlich weiblich"; +$a->strings["Transgender"] = "Transgender"; +$a->strings["Intersex"] = "Intersex"; +$a->strings["Transsexual"] = "Transsexuell"; +$a->strings["Hermaphrodite"] = "Hermaphrodit"; +$a->strings["Neuter"] = "Neuter"; +$a->strings["Non-specific"] = "Nicht spezifiziert"; +$a->strings["Other"] = "Andere"; +$a->strings["Undecided"] = array( + 0 => "Unentschieden", + 1 => "Unentschieden", +); +$a->strings["Males"] = "Männer"; +$a->strings["Females"] = "Frauen"; +$a->strings["Gay"] = "Schwul"; +$a->strings["Lesbian"] = "Lesbisch"; +$a->strings["No Preference"] = "Keine Vorlieben"; +$a->strings["Bisexual"] = "Bisexuell"; +$a->strings["Autosexual"] = "Autosexual"; +$a->strings["Abstinent"] = "Abstinent"; +$a->strings["Virgin"] = "Jungfrauen"; +$a->strings["Deviant"] = "Deviant"; +$a->strings["Fetish"] = "Fetish"; +$a->strings["Oodles"] = "Oodles"; +$a->strings["Nonsexual"] = "Nonsexual"; +$a->strings["Single"] = "Single"; +$a->strings["Lonely"] = "Einsam"; +$a->strings["Available"] = "Verfügbar"; +$a->strings["Unavailable"] = "Nicht verfügbar"; +$a->strings["Has crush"] = "verknallt"; +$a->strings["Infatuated"] = "verliebt"; +$a->strings["Dating"] = "Dating"; +$a->strings["Unfaithful"] = "Untreu"; +$a->strings["Sex Addict"] = "Sexbesessen"; +$a->strings["Friends"] = "Kontakte"; +$a->strings["Friends/Benefits"] = "Freunde/Zuwendungen"; +$a->strings["Casual"] = "Casual"; +$a->strings["Engaged"] = "Verlobt"; +$a->strings["Married"] = "Verheiratet"; +$a->strings["Imaginarily married"] = "imaginär verheiratet"; +$a->strings["Partners"] = "Partner"; +$a->strings["Cohabiting"] = "zusammenlebend"; +$a->strings["Common law"] = "wilde Ehe"; +$a->strings["Happy"] = "Glücklich"; +$a->strings["Not looking"] = "Nicht auf der Suche"; +$a->strings["Swinger"] = "Swinger"; +$a->strings["Betrayed"] = "Betrogen"; +$a->strings["Separated"] = "Getrennt"; +$a->strings["Unstable"] = "Unstabil"; +$a->strings["Divorced"] = "Geschieden"; +$a->strings["Imaginarily divorced"] = "imaginär geschieden"; +$a->strings["Widowed"] = "Verwitwet"; +$a->strings["Uncertain"] = "Unsicher"; +$a->strings["It's complicated"] = "Ist kompliziert"; +$a->strings["Don't care"] = "Ist mir nicht wichtig"; +$a->strings["Ask me"] = "Frag mich"; $a->strings["Welcome "] = "Willkommen "; $a->strings["Please upload a profile photo."] = "Bitte lade ein Profilbild hoch."; $a->strings["Welcome back "] = "Willkommen zurück "; @@ -278,30 +180,18 @@ $a->strings["%d contact not imported"] = array( 1 => "%d Kontakte nicht importiert", ); $a->strings["Done. You can now login with your username and password"] = "Erledigt. Du kannst Dich jetzt mit Deinem Nutzernamen und Passwort anmelden"; -$a->strings["Passwords do not match. Password unchanged."] = "Die Passwörter stimmen nicht überein. Das Passwort bleibt unverändert."; -$a->strings["An invitation is required."] = "Du benötigst eine Einladung."; -$a->strings["Invitation could not be verified."] = "Die Einladung konnte nicht überprüft werden."; -$a->strings["Invalid OpenID url"] = "Ungültige OpenID URL"; -$a->strings["Please enter the required information."] = "Bitte trage die erforderlichen Informationen ein."; -$a->strings["Please use a shorter name."] = "Bitte verwende einen kürzeren Namen."; -$a->strings["Name too short."] = "Der Name ist zu kurz."; -$a->strings["That doesn't appear to be your full (First Last) name."] = "Das scheint nicht Dein kompletter Name (Vor- und Nachname) zu sein."; -$a->strings["Your email domain is not among those allowed on this site."] = "Die Domain Deiner E-Mail Adresse ist auf dieser Seite nicht erlaubt."; -$a->strings["Not a valid email address."] = "Keine gültige E-Mail-Adresse."; -$a->strings["Cannot use that email."] = "Konnte diese E-Mail-Adresse nicht verwenden."; -$a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"."] = "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\" und \"_\") bestehen."; -$a->strings["Nickname is already registered. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."; -$a->strings["Nickname was once registered here and may not be re-used. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."; -$a->strings["SERIOUS ERROR: Generation of security keys failed."] = "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden."; -$a->strings["An error occurred during registration. Please try again."] = "Während der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal."; -$a->strings["default"] = "Standard"; -$a->strings["An error occurred creating your default profile. Please try again."] = "Bei der Erstellung des Standardprofils ist ein Fehler aufgetreten. Bitte versuche es noch einmal."; -$a->strings["Profile Photos"] = "Profilbilder"; -$a->strings["\n\t\tDear %1\$s,\n\t\t\tThank you for registering at %2\$s. Your account is pending for approval by the administrator.\n\t"] = "\nHallo %1\$s,\n\ndanke für Deine Registrierung auf %2\$s. Dein Account wurde muss noch vom Admin des Knotens geprüft werden."; -$a->strings["Registration at %s"] = "Registrierung als %s"; -$a->strings["\n\t\tDear %1\$s,\n\t\t\tThank you for registering at %2\$s. Your account has been created.\n\t"] = "\nHallo %1\$s,\n\ndanke für Deine Registrierung auf %2\$s. Dein Account wurde eingerichtet."; -$a->strings["\n\t\tThe login details are as follows:\n\t\t\tSite Location:\t%3\$s\n\t\t\tLogin Name:\t%1\$s\n\t\t\tPassword:\t%5\$s\n\n\t\tYou may change your password from your account \"Settings\" page after logging\n\t\tin.\n\n\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\tYou may also wish to add some basic information to your default profile\n\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\tWe recommend setting your full name, adding a profile photo,\n\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\tthan that.\n\n\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\tIf you are new and do not know anybody here, they may help\n\t\tyou to make some new and interesting friends.\n\n\n\t\tThank you and welcome to %2\$s."] = "\nDie Anmelde-Details sind die folgenden:\n\tAdresse der Seite:\t%3\$s\n\tBenutzernamename:\t%1\$s\n\tPasswort:\t%5\$s\n\nDu kannst Dein Passwort unter \"Einstellungen\" ändern, sobald Du Dich\nangemeldet hast.\n\nBitte nimm Dir ein paar Minuten um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst Du ja auch einige Informationen über Dich in Deinem\nProfil veröffentlichen, damit andere Leute Dich einfacher finden können.\nBearbeite hierfür einfach Dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen Dir, Deinen kompletten Namen anzugeben und ein zu Dir\npassendes Profilbild zu wählen, damit Dich alte Bekannte wieder finden.\nAußerdem ist es nützlich, wenn Du auf Deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die Deine Interessen teilen.\n\nWir respektieren Deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn Du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nDanke für Deine Aufmerksamkeit und willkommen auf %2\$s."; -$a->strings["Registration details for %s"] = "Details der Registration von %s"; +$a->strings["View Profile"] = "Profil anschauen"; +$a->strings["Connect/Follow"] = "Verbinden/Folgen"; +$a->strings["View Status"] = "Pinnwand anschauen"; +$a->strings["View Photos"] = "Bilder anschauen"; +$a->strings["Network Posts"] = "Netzwerkbeiträge"; +$a->strings["View Contact"] = "Kontakt anzeigen"; +$a->strings["Drop Contact"] = "Kontakt löschen"; +$a->strings["Send PM"] = "Private Nachricht senden"; +$a->strings["Poke"] = "Anstupsen"; +$a->strings["Organisation"] = "Organisation"; +$a->strings["News"] = "Nachrichten"; +$a->strings["Forum"] = "Forum"; $a->strings["Post to Email"] = "An E-Mail senden"; $a->strings["Connectors disabled, since \"%s\" is enabled."] = "Konnektoren sind nicht verfügbar, da \"%s\" aktiv ist."; $a->strings["Hide your profile details from unknown viewers?"] = "Profil-Details vor unbekannten Betrachtern verbergen?"; @@ -312,6 +202,77 @@ $a->strings["CC: email addresses"] = "Cc: E-Mail-Addressen"; $a->strings["Example: bob@example.com, mary@example.com"] = "Z.B.: bob@example.com, mary@example.com"; $a->strings["Permissions"] = "Berechtigungen"; $a->strings["Close"] = "Schließen"; +$a->strings["Daily posting limit of %d posts reached. The post was rejected."] = "Das tägliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen."; +$a->strings["Weekly posting limit of %d posts reached. The post was rejected."] = "Das wöchentliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen."; +$a->strings["Monthly posting limit of %d posts reached. The post was rejected."] = "Das monatliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen."; +$a->strings["Logged out."] = "Abgemeldet."; +$a->strings["Login failed."] = "Anmeldung fehlgeschlagen."; +$a->strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Beim Versuch Dich mit der von Dir angegebenen OpenID anzumelden trat ein Problem auf. Bitte überprüfe, dass Du die OpenID richtig geschrieben hast."; +$a->strings["The error message was:"] = "Die Fehlermeldung lautete:"; +$a->strings["l F d, Y \\@ g:i A"] = "l, d. F Y\\, H:i"; +$a->strings["Starts:"] = "Beginnt:"; +$a->strings["Finishes:"] = "Endet:"; +$a->strings["Location:"] = "Ort:"; +$a->strings["Image/photo"] = "Bild/Foto"; +$a->strings["%2\$s %3\$s"] = "%2\$s %3\$s"; +$a->strings["$1 wrote:"] = "$1 hat geschrieben:"; +$a->strings["Encrypted content"] = "Verschlüsselter Inhalt"; +$a->strings["Invalid source protocol"] = "Ungültiges Quell-Protokoll"; +$a->strings["Invalid link protocol"] = "Ungültiges Link-Protokoll"; +$a->strings["Unknown | Not categorised"] = "Unbekannt | Nicht kategorisiert"; +$a->strings["Block immediately"] = "Sofort blockieren"; +$a->strings["Shady, spammer, self-marketer"] = "Zwielichtig, Spammer, Selbstdarsteller"; +$a->strings["Known to me, but no opinion"] = "Ist mir bekannt, hab aber keine Meinung"; +$a->strings["OK, probably harmless"] = "OK, wahrscheinlich harmlos"; +$a->strings["Reputable, has my trust"] = "Seriös, hat mein Vertrauen"; +$a->strings["Frequently"] = "immer wieder"; +$a->strings["Hourly"] = "Stündlich"; +$a->strings["Twice daily"] = "Zweimal täglich"; +$a->strings["Daily"] = "Täglich"; +$a->strings["Weekly"] = "Wöchentlich"; +$a->strings["Monthly"] = "Monatlich"; +$a->strings["Friendica"] = "Friendica"; +$a->strings["OStatus"] = "OStatus"; +$a->strings["RSS/Atom"] = "RSS/Atom"; +$a->strings["Email"] = "E-Mail"; +$a->strings["Diaspora"] = "Diaspora"; +$a->strings["Facebook"] = "Facebook"; +$a->strings["Zot!"] = "Zott"; +$a->strings["LinkedIn"] = "LinkedIn"; +$a->strings["XMPP/IM"] = "XMPP/Chat"; +$a->strings["MySpace"] = "MySpace"; +$a->strings["Google+"] = "Google+"; +$a->strings["pump.io"] = "pump.io"; +$a->strings["Twitter"] = "Twitter"; +$a->strings["Diaspora Connector"] = "Diaspora"; +$a->strings["GNU Social Connector"] = "GNU social Connector"; +$a->strings["pnut"] = "pnut"; +$a->strings["App.net"] = "App.net"; +$a->strings["Add New Contact"] = "Neuen Kontakt hinzufügen"; +$a->strings["Enter address or web location"] = "Adresse oder Web-Link eingeben"; +$a->strings["Example: bob@example.com, http://example.com/barbara"] = "Beispiel: bob@example.com, http://example.com/barbara"; +$a->strings["Connect"] = "Verbinden"; +$a->strings["%d invitation available"] = array( + 0 => "%d Einladung verfügbar", + 1 => "%d Einladungen verfügbar", +); +$a->strings["Find People"] = "Leute finden"; +$a->strings["Enter name or interest"] = "Name oder Interessen eingeben"; +$a->strings["Examples: Robert Morgenstein, Fishing"] = "Beispiel: Robert Morgenstein, Angeln"; +$a->strings["Find"] = "Finde"; +$a->strings["Friend Suggestions"] = "Kontaktvorschläge"; +$a->strings["Similar Interests"] = "Ähnliche Interessen"; +$a->strings["Random Profile"] = "Zufälliges Profil"; +$a->strings["Invite Friends"] = "Freunde einladen"; +$a->strings["Networks"] = "Netzwerke"; +$a->strings["All Networks"] = "Alle Netzwerke"; +$a->strings["Saved Folders"] = "Gespeicherte Ordner"; +$a->strings["Everything"] = "Alles"; +$a->strings["Categories"] = "Kategorien"; +$a->strings["%d contact in common"] = array( + 0 => "%d gemeinsamer Kontakt", + 1 => "%d gemeinsame Kontakte", +); $a->strings["%1\$s attends %2\$s's %3\$s"] = "%1\$s nimmt an %2\$ss %3\$s teil."; $a->strings["%1\$s doesn't attend %2\$s's %3\$s"] = "%1\$s nimmt nicht an %2\$ss %3\$s teil."; $a->strings["%1\$s attends maybe %2\$s's %3\$s"] = "%1\$s nimmt eventuell an %2\$ss %3\$s teil."; @@ -340,14 +301,6 @@ $a->strings["Please wait"] = "Bitte warten"; $a->strings["remove"] = "löschen"; $a->strings["Delete Selected Items"] = "Lösche die markierten Beiträge"; $a->strings["Follow Thread"] = "Folge der Unterhaltung"; -$a->strings["View Status"] = "Pinnwand anschauen"; -$a->strings["View Profile"] = "Profil anschauen"; -$a->strings["View Photos"] = "Bilder anschauen"; -$a->strings["Network Posts"] = "Netzwerkbeiträge"; -$a->strings["View Contact"] = "Kontakt anzeigen"; -$a->strings["Send PM"] = "Private Nachricht senden"; -$a->strings["Poke"] = "Anstupsen"; -$a->strings["Connect/Follow"] = "Verbinden/Folgen"; $a->strings["%s likes this."] = "%s mag das."; $a->strings["%s doesn't like this."] = "%s mag das nicht."; $a->strings["%s attends."] = "%s nimmt teil."; @@ -413,7 +366,136 @@ $a->strings["Not Attending"] = array( 0 => "Nicht teilnehmend ", 1 => "Nicht teilnehmend", ); -$a->strings["(no subject)"] = "(kein Betreff)"; +$a->strings["Miscellaneous"] = "Verschiedenes"; +$a->strings["Birthday:"] = "Geburtstag:"; +$a->strings["Age: "] = "Alter: "; +$a->strings["YYYY-MM-DD or MM-DD"] = "YYYY-MM-DD oder MM-DD"; +$a->strings["never"] = "nie"; +$a->strings["less than a second ago"] = "vor weniger als einer Sekunde"; +$a->strings["year"] = "Jahr"; +$a->strings["years"] = "Jahre"; +$a->strings["month"] = "Monat"; +$a->strings["months"] = "Monate"; +$a->strings["week"] = "Woche"; +$a->strings["weeks"] = "Wochen"; +$a->strings["day"] = "Tag"; +$a->strings["days"] = "Tage"; +$a->strings["hour"] = "Stunde"; +$a->strings["hours"] = "Stunden"; +$a->strings["minute"] = "Minute"; +$a->strings["minutes"] = "Minuten"; +$a->strings["second"] = "Sekunde"; +$a->strings["seconds"] = "Sekunden"; +$a->strings["%1\$d %2\$s ago"] = "%1\$d %2\$s her"; +$a->strings["%s's birthday"] = "%ss Geburtstag"; +$a->strings["Happy Birthday %s"] = "Herzlichen Glückwunsch %s"; +$a->strings["Cannot locate DNS info for database server '%s'"] = "Kann die DNS Informationen für den Datenbankserver '%s' nicht ermitteln."; +$a->strings["Friendica Notification"] = "Friendica-Benachrichtigung"; +$a->strings["Thank You,"] = "Danke,"; +$a->strings["%s Administrator"] = "der Administrator von %s"; +$a->strings["%1\$s, %2\$s Administrator"] = "%1\$s, %2\$s Administrator"; +$a->strings["%s "] = "%s "; +$a->strings["[Friendica:Notify] New mail received at %s"] = "[Friendica-Meldung] Neue Nachricht erhalten von %s"; +$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["%1\$s sent you %2\$s."] = "%1\$s schickte Dir %2\$s."; +$a->strings["a private message"] = "eine private Nachricht"; +$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 [url=%2\$s]a %3\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]a %3\$s[/url]"; +$a->strings["%1\$s commented on [url=%2\$s]%3\$s's %4\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]%3\$ss %4\$s[/url]"; +$a->strings["%1\$s commented on [url=%2\$s]your %3\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]Deinen %3\$s[/url]"; +$a->strings["[Friendica:Notify] Comment to conversation #%1\$d by %2\$s"] = "[Friendica-Meldung] Kommentar zum Beitrag #%1\$d von %2\$s"; +$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["[Friendica:Notify] %s posted to your profile wall"] = "[Friendica-Meldung] %s hat auf Deine Pinnwand geschrieben"; +$a->strings["%1\$s posted to your profile wall at %2\$s"] = "%1\$s schrieb auf %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["[Friendica:Notify] %s tagged you"] = "[Friendica-Meldung] %s hat Dich erwähnt"; +$a->strings["%1\$s tagged you at %2\$s"] = "%1\$s erwähnte Dich auf %2\$s"; +$a->strings["%1\$s [url=%2\$s]tagged you[/url]."] = "%1\$s [url=%2\$s]erwähnte Dich[/url]."; +$a->strings["[Friendica:Notify] %s shared a new post"] = "[Friendica Benachrichtigung] %s hat einen Beitrag geteilt"; +$a->strings["%1\$s shared a new post at %2\$s"] = "%1\$s hat einen neuen Beitrag auf %2\$s geteilt"; +$a->strings["%1\$s [url=%2\$s]shared a post[/url]."] = "%1\$s [url=%2\$s]hat einen Beitrag geteilt[/url]."; +$a->strings["[Friendica:Notify] %1\$s poked you"] = "[Friendica-Meldung] %1\$s hat Dich angestupst"; +$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["[Friendica:Notify] %s tagged your post"] = "[Friendica-Meldung] %s hat Deinen Beitrag getaggt"; +$a->strings["%1\$s tagged your post at %2\$s"] = "%1\$s erwähnte Deinen Beitrag auf %2\$s"; +$a->strings["%1\$s tagged [url=%2\$s]your post[/url]"] = "%1\$s erwähnte [url=%2\$s]Deinen Beitrag[/url]"; +$a->strings["[Friendica:Notify] Introduction received"] = "[Friendica-Meldung] Kontaktanfrage 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["[Friendica:Notify] A new person is sharing with you"] = "[Friendica Benachrichtigung] Eine neue Person teilt mit Dir"; +$a->strings["%1\$s is sharing with you at %2\$s"] = "%1\$s teilt mit Dir auf %2\$s"; +$a->strings["[Friendica:Notify] You have a new follower"] = "[Friendica Benachrichtigung] Du hast einen neuen Kontakt auf "; +$a->strings["You have a new follower at %2\$s : %1\$s"] = "Du hast einen neuen Kontakt auf %2\$s: %1\$s"; +$a->strings["[Friendica:Notify] Friend suggestion received"] = "[Friendica-Meldung] Kontaktvorschlag 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["[Friendica:Notify] Connection accepted"] = "[Friendica-Benachrichtigung] Kontaktanfrage 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 Emails 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] registration request"] = "[Friendica System:Benachrichtigung] Registrationsanfrage"; +$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:\t%1\$s\\nSite Location:\t%2\$s\\nLogin Name:\t%3\$s (%4\$s)"] = "Kompletter Name:\t%1\$s\\nURL der Seite:\t%2\$s\\nLogin Name:\t%3\$s (%4\$s)"; +$a->strings["Please visit %s to approve or reject the request."] = "Bitte besuche %s um die Anfrage zu bearbeiten."; +$a->strings["all-day"] = "ganztägig"; +$a->strings["Sun"] = "So"; +$a->strings["Mon"] = "Mo"; +$a->strings["Tue"] = "Di"; +$a->strings["Wed"] = "Mi"; +$a->strings["Thu"] = "Do"; +$a->strings["Fri"] = "Fr"; +$a->strings["Sat"] = "Sa"; +$a->strings["Sunday"] = "Sonntag"; +$a->strings["Monday"] = "Montag"; +$a->strings["Tuesday"] = "Dienstag"; +$a->strings["Wednesday"] = "Mittwoch"; +$a->strings["Thursday"] = "Donnerstag"; +$a->strings["Friday"] = "Freitag"; +$a->strings["Saturday"] = "Samstag"; +$a->strings["Jan"] = "Jan"; +$a->strings["Feb"] = "Feb"; +$a->strings["Mar"] = "März"; +$a->strings["Apr"] = "Apr"; +$a->strings["May"] = "Mai"; +$a->strings["Jun"] = "Jun"; +$a->strings["Jul"] = "Juli"; +$a->strings["Aug"] = "Aug"; +$a->strings["Sept"] = "Sep"; +$a->strings["Oct"] = "Okt"; +$a->strings["Nov"] = "Nov"; +$a->strings["Dec"] = "Dez"; +$a->strings["January"] = "Januar"; +$a->strings["February"] = "Februar"; +$a->strings["March"] = "März"; +$a->strings["April"] = "April"; +$a->strings["June"] = "Juni"; +$a->strings["July"] = "Juli"; +$a->strings["August"] = "August"; +$a->strings["September"] = "September"; +$a->strings["October"] = "Oktober"; +$a->strings["November"] = "November"; +$a->strings["December"] = "Dezember"; +$a->strings["today"] = "Heute"; +$a->strings["No events to display"] = "Keine Veranstaltung zum Anzeigen"; +$a->strings["l, F j"] = "l, F j"; +$a->strings["Edit event"] = "Veranstaltung bearbeiten"; +$a->strings["Delete event"] = "Veranstaltung löschen"; +$a->strings["link to source"] = "Link zum Originalbeitrag"; +$a->strings["Export"] = "Exportieren"; +$a->strings["Export calendar as ical"] = "Kalender als ical exportieren"; +$a->strings["Export calendar as csv"] = "Kalender als csv exportieren"; $a->strings["General Features"] = "Allgemeine Features"; $a->strings["Multiple Profiles"] = "Mehrere Profile"; $a->strings["Ability to create multiple profiles"] = "Möglichkeit mehrere Profile zu erstellen"; @@ -453,7 +535,6 @@ $a->strings["Tagging"] = "Tagging"; $a->strings["Ability to tag existing posts"] = "Möglichkeit bereits existierende Beiträge nachträglich mit Tags zu versehen."; $a->strings["Post Categories"] = "Beitragskategorien"; $a->strings["Add categories to your posts"] = "Eigene Beiträge mit Kategorien versehen"; -$a->strings["Saved Folders"] = "Gespeicherte Ordner"; $a->strings["Ability to file posts under folders"] = "Beiträge in Ordnern speichern aktivieren"; $a->strings["Dislike Posts"] = "Beiträge 'nicht mögen'"; $a->strings["Ability to dislike posts/comments"] = "Ermöglicht es Beiträge mit einem Klick 'nicht zu mögen'"; @@ -463,140 +544,30 @@ $a->strings["Mute Post Notifications"] = "Benachrichtigungen für Beiträge Stum $a->strings["Ability to mute notifications for a thread"] = "Möglichkeit Benachrichtigungen für einen Thread abbestellen zu können"; $a->strings["Advanced Profile Settings"] = "Erweiterte Profil-Einstellungen"; $a->strings["Show visitors public community forums at the Advanced Profile Page"] = "Zeige Besuchern öffentliche Gemeinschafts-Foren auf der Erweiterten Profil-Seite"; -$a->strings["Contact Photos"] = "Kontaktbilder"; -$a->strings["Miscellaneous"] = "Verschiedenes"; -$a->strings["Birthday:"] = "Geburtstag:"; -$a->strings["Age: "] = "Alter: "; -$a->strings["YYYY-MM-DD or MM-DD"] = "YYYY-MM-DD oder MM-DD"; -$a->strings["never"] = "nie"; -$a->strings["less than a second ago"] = "vor weniger als einer Sekunde"; -$a->strings["year"] = "Jahr"; -$a->strings["years"] = "Jahre"; -$a->strings["month"] = "Monat"; -$a->strings["months"] = "Monate"; -$a->strings["week"] = "Woche"; -$a->strings["weeks"] = "Wochen"; -$a->strings["day"] = "Tag"; -$a->strings["days"] = "Tage"; -$a->strings["hour"] = "Stunde"; -$a->strings["hours"] = "Stunden"; -$a->strings["minute"] = "Minute"; -$a->strings["minutes"] = "Minuten"; -$a->strings["second"] = "Sekunde"; -$a->strings["seconds"] = "Sekunden"; -$a->strings["%1\$d %2\$s ago"] = "%1\$d %2\$s her"; -$a->strings["%s's birthday"] = "%ss Geburtstag"; -$a->strings["Happy Birthday %s"] = "Herzlichen Glückwunsch %s"; -$a->strings["l F d, Y \\@ g:i A"] = "l, d. F Y\\, H:i"; -$a->strings["Starts:"] = "Beginnt:"; -$a->strings["Finishes:"] = "Endet:"; -$a->strings["Location:"] = "Ort:"; -$a->strings["Sun"] = "So"; -$a->strings["Mon"] = "Mo"; -$a->strings["Tue"] = "Di"; -$a->strings["Wed"] = "Mi"; -$a->strings["Thu"] = "Do"; -$a->strings["Fri"] = "Fr"; -$a->strings["Sat"] = "Sa"; -$a->strings["Sunday"] = "Sonntag"; -$a->strings["Monday"] = "Montag"; -$a->strings["Tuesday"] = "Dienstag"; -$a->strings["Wednesday"] = "Mittwoch"; -$a->strings["Thursday"] = "Donnerstag"; -$a->strings["Friday"] = "Freitag"; -$a->strings["Saturday"] = "Samstag"; -$a->strings["Jan"] = "Jan"; -$a->strings["Feb"] = "Feb"; -$a->strings["Mar"] = "März"; -$a->strings["Apr"] = "Apr"; -$a->strings["May"] = "Mai"; -$a->strings["Jun"] = "Jun"; -$a->strings["Jul"] = "Juli"; -$a->strings["Aug"] = "Aug"; -$a->strings["Sept"] = "Sep"; -$a->strings["Oct"] = "Okt"; -$a->strings["Nov"] = "Nov"; -$a->strings["Dec"] = "Dez"; -$a->strings["January"] = "Januar"; -$a->strings["February"] = "Februar"; -$a->strings["March"] = "März"; -$a->strings["April"] = "April"; -$a->strings["June"] = "Juni"; -$a->strings["July"] = "Juli"; -$a->strings["August"] = "August"; -$a->strings["September"] = "September"; -$a->strings["October"] = "Oktober"; -$a->strings["November"] = "November"; -$a->strings["December"] = "Dezember"; -$a->strings["today"] = "Heute"; -$a->strings["all-day"] = "ganztägig"; -$a->strings["No events to display"] = "Keine Veranstaltung zum Anzeigen"; -$a->strings["l, F j"] = "l, F j"; -$a->strings["Edit event"] = "Veranstaltung bearbeiten"; -$a->strings["link to source"] = "Link zum Originalbeitrag"; -$a->strings["Export"] = "Exportieren"; -$a->strings["Export calendar as ical"] = "Kalender als ical exportieren"; -$a->strings["Export calendar as csv"] = "Kalender als csv exportieren"; -$a->strings["%s\\'s birthday"] = "%ss Geburtstag"; -$a->strings["Unknown | Not categorised"] = "Unbekannt | Nicht kategorisiert"; -$a->strings["Block immediately"] = "Sofort blockieren"; -$a->strings["Shady, spammer, self-marketer"] = "Zwielichtig, Spammer, Selbstdarsteller"; -$a->strings["Known to me, but no opinion"] = "Ist mir bekannt, hab aber keine Meinung"; -$a->strings["OK, probably harmless"] = "OK, wahrscheinlich harmlos"; -$a->strings["Reputable, has my trust"] = "Seriös, hat mein Vertrauen"; -$a->strings["Frequently"] = "immer wieder"; -$a->strings["Hourly"] = "Stündlich"; -$a->strings["Twice daily"] = "Zweimal täglich"; -$a->strings["Daily"] = "Täglich"; -$a->strings["Weekly"] = "Wöchentlich"; -$a->strings["Monthly"] = "Monatlich"; -$a->strings["Friendica"] = "Friendica"; -$a->strings["OStatus"] = "OStatus"; -$a->strings["RSS/Atom"] = "RSS/Atom"; -$a->strings["Email"] = "E-Mail"; -$a->strings["Diaspora"] = "Diaspora"; -$a->strings["Facebook"] = "Facebook"; -$a->strings["Zot!"] = "Zott"; -$a->strings["LinkedIn"] = "LinkedIn"; -$a->strings["XMPP/IM"] = "XMPP/Chat"; -$a->strings["MySpace"] = "MySpace"; -$a->strings["Google+"] = "Google+"; -$a->strings["pump.io"] = "pump.io"; -$a->strings["Twitter"] = "Twitter"; -$a->strings["Diaspora Connector"] = "Diaspora"; -$a->strings["GNU Social"] = "GNU Social"; -$a->strings["pnut"] = "pnut"; -$a->strings["App.net"] = "App.net"; -$a->strings["Hubzilla/Redmatrix"] = "Hubzilla/Redmatrix"; -$a->strings["Add New Contact"] = "Neuen Kontakt hinzufügen"; -$a->strings["Enter address or web location"] = "Adresse oder Web-Link eingeben"; -$a->strings["Example: bob@example.com, http://example.com/barbara"] = "Beispiel: bob@example.com, http://example.com/barbara"; -$a->strings["Connect"] = "Verbinden"; -$a->strings["%d invitation available"] = array( - 0 => "%d Einladung verfügbar", - 1 => "%d Einladungen verfügbar", -); -$a->strings["Find People"] = "Leute finden"; -$a->strings["Enter name or interest"] = "Name oder Interessen eingeben"; -$a->strings["Examples: Robert Morgenstein, Fishing"] = "Beispiel: Robert Morgenstein, Angeln"; -$a->strings["Find"] = "Finde"; -$a->strings["Friend Suggestions"] = "Kontaktvorschläge"; -$a->strings["Similar Interests"] = "Ähnliche Interessen"; -$a->strings["Random Profile"] = "Zufälliges Profil"; -$a->strings["Invite Friends"] = "Freunde einladen"; -$a->strings["Networks"] = "Netzwerke"; -$a->strings["All Networks"] = "Alle Netzwerke"; -$a->strings["Everything"] = "Alles"; -$a->strings["Categories"] = "Kategorien"; -$a->strings["%d contact in common"] = array( - 0 => "%d gemeinsamer Kontakt", - 1 => "%d gemeinsame Kontakte", -); -$a->strings["Daily posting limit of %d posts reached. The post was rejected."] = "Das tägliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen."; -$a->strings["Weekly posting limit of %d posts reached. The post was rejected."] = "Das wöchentliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen."; -$a->strings["Monthly posting limit of %d posts reached. The post was rejected."] = "Das monatliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen."; -$a->strings["Sharing notification from Diaspora network"] = "Freigabe-Benachrichtigung von Diaspora"; -$a->strings["Attachments:"] = "Anhänge:"; +$a->strings["Disallowed profile URL."] = "Nicht erlaubte Profil-URL."; +$a->strings["Blocked domain"] = "Blockierte Daimain"; +$a->strings["Connect URL missing."] = "Connect-URL fehlt"; +$a->strings["This site is not configured to allow communications with other networks."] = "Diese Seite ist so konfiguriert, dass keine Kommunikation mit anderen Netzwerken erfolgen kann."; +$a->strings["No compatible communication protocols or feeds were discovered."] = "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden."; +$a->strings["The profile address specified does not provide adequate information."] = "Die angegebene Profiladresse liefert unzureichende Informationen."; +$a->strings["An author or name was not found."] = "Es wurde kein Autor oder Name gefunden."; +$a->strings["No browser URL could be matched to this address."] = "Zu dieser Adresse konnte keine passende Browser URL gefunden werden."; +$a->strings["Unable to match @-style Identity Address with a known protocol or email contact."] = "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen."; +$a->strings["Use mailto: in front of address to force email check."] = "Verwende mailto: vor der Email Adresse, um eine Überprüfung der E-Mail-Adresse zu erzwingen."; +$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde."; +$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von Dir erhalten können."; +$a->strings["Unable to retrieve contact information."] = "Konnte die Kontaktinformationen nicht empfangen."; +$a->strings["A deleted group with this name was revived. Existing item permissions may apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "Eine gelöschte Gruppe mit diesem Namen wurde wiederbelebt. Bestehende Berechtigungseinstellungen könnten auf diese Gruppe oder zukünftige Mitglieder angewandt werden. Falls Du dies nicht möchtest, erstelle bitte eine andere Gruppe mit einem anderen Namen."; +$a->strings["Default privacy group for new contacts"] = "Voreingestellte Gruppe für neue Kontakte"; +$a->strings["Everybody"] = "Alle Kontakte"; +$a->strings["edit"] = "bearbeiten"; +$a->strings["Groups"] = "Gruppen"; +$a->strings["Edit groups"] = "Gruppen bearbeiten"; +$a->strings["Edit group"] = "Gruppe bearbeiten"; +$a->strings["Create a new group"] = "Neue Gruppe erstellen"; +$a->strings["Group Name: "] = "Gruppenname:"; +$a->strings["Contacts not in any group"] = "Kontakte in keiner Gruppe"; +$a->strings["add"] = "hinzufügen"; $a->strings["Requested account is not available."] = "Das angefragte Profil ist nicht vorhanden."; $a->strings["Requested profile is not available."] = "Das angefragte Profil ist nicht vorhanden."; $a->strings["Edit profile"] = "Profil bearbeiten"; @@ -650,12 +621,60 @@ $a->strings["Profile Details"] = "Profildetails"; $a->strings["Photo Albums"] = "Fotoalben"; $a->strings["Personal Notes"] = "Persönliche Notizen"; $a->strings["Only You Can See This"] = "Nur Du kannst das sehen"; +$a->strings["view full size"] = "Volle Größe anzeigen"; +$a->strings["Embedded content"] = "Eingebetteter Inhalt"; +$a->strings["Embedding disabled"] = "Einbettungen deaktiviert"; +$a->strings["Contact Photos"] = "Kontaktbilder"; +$a->strings["Passwords do not match. Password unchanged."] = "Die Passwörter stimmen nicht überein. Das Passwort bleibt unverändert."; +$a->strings["An invitation is required."] = "Du benötigst eine Einladung."; +$a->strings["Invitation could not be verified."] = "Die Einladung konnte nicht überprüft werden."; +$a->strings["Invalid OpenID url"] = "Ungültige OpenID URL"; +$a->strings["Please enter the required information."] = "Bitte trage die erforderlichen Informationen ein."; +$a->strings["Please use a shorter name."] = "Bitte verwende einen kürzeren Namen."; +$a->strings["Name too short."] = "Der Name ist zu kurz."; +$a->strings["That doesn't appear to be your full (First Last) name."] = "Das scheint nicht Dein kompletter Name (Vor- und Nachname) zu sein."; +$a->strings["Your email domain is not among those allowed on this site."] = "Die Domain Deiner E-Mail Adresse ist auf dieser Seite nicht erlaubt."; +$a->strings["Not a valid email address."] = "Keine gültige E-Mail-Adresse."; +$a->strings["Cannot use that email."] = "Konnte diese E-Mail-Adresse nicht verwenden."; +$a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"."] = "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\" und \"_\") bestehen."; +$a->strings["Nickname is already registered. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."; +$a->strings["Nickname was once registered here and may not be re-used. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."; +$a->strings["SERIOUS ERROR: Generation of security keys failed."] = "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden."; +$a->strings["An error occurred during registration. Please try again."] = "Während der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal."; +$a->strings["default"] = "Standard"; +$a->strings["An error occurred creating your default profile. Please try again."] = "Bei der Erstellung des Standardprofils ist ein Fehler aufgetreten. Bitte versuche es noch einmal."; +$a->strings["Profile Photos"] = "Profilbilder"; +$a->strings["\n\t\tDear %1\$s,\n\t\t\tThank you for registering at %2\$s. Your account is pending for approval by the administrator.\n\t"] = "\nHallo %1\$s,\n\ndanke für Deine Registrierung auf %2\$s. Dein Account wurde muss noch vom Admin des Knotens geprüft werden."; +$a->strings["Registration at %s"] = "Registrierung als %s"; +$a->strings["\n\t\tDear %1\$s,\n\t\t\tThank you for registering at %2\$s. Your account has been created.\n\t"] = "\nHallo %1\$s,\n\ndanke für Deine Registrierung auf %2\$s. Dein Account wurde eingerichtet."; +$a->strings["\n\t\tThe login details are as follows:\n\t\t\tSite Location:\t%3\$s\n\t\t\tLogin Name:\t%1\$s\n\t\t\tPassword:\t%5\$s\n\n\t\tYou may change your password from your account \"Settings\" page after logging\n\t\tin.\n\n\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\tYou may also wish to add some basic information to your default profile\n\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\tWe recommend setting your full name, adding a profile photo,\n\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\tthan that.\n\n\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\tIf you are new and do not know anybody here, they may help\n\t\tyou to make some new and interesting friends.\n\n\n\t\tThank you and welcome to %2\$s."] = "\nDie Anmelde-Details sind die folgenden:\n\tAdresse der Seite:\t%3\$s\n\tBenutzernamename:\t%1\$s\n\tPasswort:\t%5\$s\n\nDu kannst Dein Passwort unter \"Einstellungen\" ändern, sobald Du Dich\nangemeldet hast.\n\nBitte nimm Dir ein paar Minuten um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst Du ja auch einige Informationen über Dich in Deinem\nProfil veröffentlichen, damit andere Leute Dich einfacher finden können.\nBearbeite hierfür einfach Dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen Dir, Deinen kompletten Namen anzugeben und ein zu Dir\npassendes Profilbild zu wählen, damit Dich alte Bekannte wieder finden.\nAußerdem ist es nützlich, wenn Du auf Deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die Deine Interessen teilen.\n\nWir respektieren Deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn Du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nDanke für Deine Aufmerksamkeit und willkommen auf %2\$s."; +$a->strings["Registration details for %s"] = "Details der Registration von %s"; +$a->strings["There are no tables on MyISAM."] = "Es gibt keine MyISAM Tabellen."; +$a->strings["\n\t\t\tThe friendica developers released update %s recently,\n\t\t\tbut when I tried to install it, something went terribly wrong.\n\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n\t\t\tfriendica developer if you can not help me on your own. My database might be invalid."] = "\nDie Friendica-Entwickler haben vor kurzem das Update %s veröffentlicht, aber bei der Installation ging etwas schrecklich schief.\n\nDas Problem sollte so schnell wie möglich gelöst werden, aber ich schaffe es nicht alleine. Bitte kontaktiere einen Friendica-Entwickler falls Du mir nicht alleine helfen kannst. Meine Datenbank könnte ungültig sein."; +$a->strings["The error message is\n[pre]%s[/pre]"] = "Die Fehlermeldung lautet\n[pre]%s[/pre]"; +$a->strings["\nError %d occurred during database update:\n%s\n"] = "\nFehler %d beim Update der Datenbank aufgetreten\n%s\n"; +$a->strings["Errors encountered performing database changes: "] = "Fehler beim Ändern der Datenbank aufgetreten"; +$a->strings[": Database update"] = ": Datenbank Update"; +$a->strings["%s: updating %s table."] = "%s: aktualisiere Tabelle %s"; +$a->strings["%s\\'s birthday"] = "%ss Geburtstag"; +$a->strings["Sharing notification from Diaspora network"] = "Freigabe-Benachrichtigung von Diaspora"; +$a->strings["Attachments:"] = "Anhänge:"; +$a->strings["[Name Withheld]"] = "[Name unterdrückt]"; +$a->strings["Item not found."] = "Beitrag nicht gefunden."; +$a->strings["Do you really want to delete this item?"] = "Möchtest Du wirklich dieses Item löschen?"; +$a->strings["Yes"] = "Ja"; +$a->strings["Permission denied."] = "Zugriff verweigert."; +$a->strings["Archives"] = "Archiv"; +$a->strings["%s is now following %s."] = "%s folgt nun %s"; +$a->strings["following"] = "folgen"; +$a->strings["%s stopped following %s."] = "%s hat aufgehört %s zu folgen"; +$a->strings["stopped following"] = "wird nicht mehr gefolgt"; $a->strings["newer"] = "neuer"; $a->strings["older"] = "älter"; -$a->strings["prev"] = "vorige"; $a->strings["first"] = "erste"; -$a->strings["last"] = "letzte"; +$a->strings["prev"] = "vorige"; $a->strings["next"] = "nächste"; +$a->strings["last"] = "letzte"; $a->strings["Loading more entries..."] = "lade weitere Einträge..."; $a->strings["The end"] = "Das Ende"; $a->strings["No contacts"] = "Keine Kontakte"; @@ -709,21 +728,6 @@ $a->strings["comment"] = array( ); $a->strings["post"] = "Beitrag"; $a->strings["Item filed"] = "Beitrag abgelegt"; -$a->strings["Drop Contact"] = "Kontakt löschen"; -$a->strings["Organisation"] = "Organisation"; -$a->strings["News"] = "Nachrichten"; -$a->strings["Forum"] = "Forum"; -$a->strings["[Name Withheld]"] = "[Name unterdrückt]"; -$a->strings["Item not found."] = "Beitrag nicht gefunden."; -$a->strings["Do you really want to delete this item?"] = "Möchtest Du wirklich dieses Item löschen?"; -$a->strings["Yes"] = "Ja"; -$a->strings["Permission denied."] = "Zugriff verweigert."; -$a->strings["Archives"] = "Archiv"; -$a->strings["\n\t\t\tThe friendica developers released update %s recently,\n\t\t\tbut when I tried to install it, something went terribly wrong.\n\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n\t\t\tfriendica developer if you can not help me on your own. My database might be invalid."] = "\nDie Friendica-Entwickler haben vor kurzem das Update %s veröffentlicht, aber bei der Installation ging etwas schrecklich schief.\n\nDas Problem sollte so schnell wie möglich gelöst werden, aber ich schaffe es nicht alleine. Bitte kontaktiere einen Friendica-Entwickler falls Du mir nicht alleine helfen kannst. Meine Datenbank könnte ungültig sein."; -$a->strings["The error message is\n[pre]%s[/pre]"] = "Die Fehlermeldung lautet\n[pre]%s[/pre]"; -$a->strings["Errors encountered creating database tables."] = "Fehler aufgetreten während der Erzeugung der Datenbanktabellen."; -$a->strings["Errors encountered performing database changes."] = "Es sind Fehler beim Bearbeiten der Datenbank aufgetreten."; -$a->strings["view full size"] = "Volle Größe anzeigen"; $a->strings["No friends to display."] = "Keine Kontakte zum Anzeigen."; $a->strings["Authorize application connection"] = "Verbindung der Applikation autorisieren"; $a->strings["Return to your app and insert this Securty Code:"] = "Gehe zu Deiner Anwendung zurück und trage dort folgenden Sicherheitscode ein:"; @@ -735,24 +739,101 @@ $a->strings["Applications"] = "Anwendungen"; $a->strings["No installed applications."] = "Keine Applikationen installiert."; $a->strings["Item not available."] = "Beitrag nicht verfügbar."; $a->strings["Item was not found."] = "Beitrag konnte nicht gefunden werden."; -$a->strings["Source (bbcode) text:"] = "Quelle (bbcode) Text:"; -$a->strings["Source (Diaspora) text to convert to BBcode:"] = "Eingabe (Diaspora) nach BBCode zu konvertierender Text:"; -$a->strings["Source input: "] = "Originaltext:"; -$a->strings["bb2html (raw HTML): "] = "bb2html (reines HTML): "; -$a->strings["bb2html: "] = "bb2html: "; -$a->strings["bb2html2bb: "] = "bb2html2bb: "; -$a->strings["bb2md: "] = "bb2md: "; -$a->strings["bb2md2html: "] = "bb2md2html: "; -$a->strings["bb2dia2bb: "] = "bb2dia2bb: "; -$a->strings["bb2md2html2bb: "] = "bb2md2html2bb: "; -$a->strings["Source input (Diaspora format): "] = "Originaltext (Diaspora Format): "; -$a->strings["diaspora2bb: "] = "diaspora2bb: "; $a->strings["The post was created"] = "Der Beitrag wurde angelegt"; $a->strings["No contacts in common."] = "Keine gemeinsamen Kontakte."; $a->strings["Common Friends"] = "Gemeinsame Kontakte"; -$a->strings["Public access denied."] = "Öffentlicher Zugriff verweigert."; -$a->strings["Not available."] = "Nicht verfügbar."; -$a->strings["No results."] = "Keine Ergebnisse."; +$a->strings["%d contact edited."] = array( + 0 => "%d Kontakt bearbeitet.", + 1 => "%d Kontakte bearbeitet.", +); +$a->strings["Could not access contact record."] = "Konnte nicht auf die Kontaktdaten zugreifen."; +$a->strings["Could not locate selected profile."] = "Konnte das ausgewählte Profil nicht finden."; +$a->strings["Contact updated."] = "Kontakt aktualisiert."; +$a->strings["Failed to update contact record."] = "Aktualisierung der Kontaktdaten fehlgeschlagen."; +$a->strings["Contact has been blocked"] = "Kontakt wurde blockiert"; +$a->strings["Contact has been unblocked"] = "Kontakt wurde wieder freigegeben"; +$a->strings["Contact has been ignored"] = "Kontakt wurde ignoriert"; +$a->strings["Contact has been unignored"] = "Kontakt wird nicht mehr ignoriert"; +$a->strings["Contact has been archived"] = "Kontakt wurde archiviert"; +$a->strings["Contact has been unarchived"] = "Kontakt wurde aus dem Archiv geholt"; +$a->strings["Drop contact"] = "Kontakt löschen"; +$a->strings["Do you really want to delete this contact?"] = "Möchtest Du wirklich diesen Kontakt löschen?"; +$a->strings["Contact has been removed."] = "Kontakt wurde entfernt."; +$a->strings["You are mutual friends with %s"] = "Du hast mit %s eine beidseitige Freundschaft"; +$a->strings["You are sharing with %s"] = "Du teilst mit %s"; +$a->strings["%s is sharing with you"] = "%s teilt mit Dir"; +$a->strings["Private communications are not available for this contact."] = "Private Kommunikation ist für diesen Kontakt nicht verfügbar."; +$a->strings["Never"] = "Niemals"; +$a->strings["(Update was successful)"] = "(Aktualisierung war erfolgreich)"; +$a->strings["(Update was not successful)"] = "(Aktualisierung war nicht erfolgreich)"; +$a->strings["Suggest friends"] = "Kontakte vorschlagen"; +$a->strings["Network type: %s"] = "Netzwerktyp: %s"; +$a->strings["Communications lost with this contact!"] = "Verbindungen mit diesem Kontakt verloren!"; +$a->strings["Fetch further information for feeds"] = "Weitere Informationen zu Feeds holen"; +$a->strings["Disabled"] = "Deaktiviert"; +$a->strings["Fetch information"] = "Beziehe Information"; +$a->strings["Fetch information and keywords"] = "Beziehe Information und Schlüsselworte"; +$a->strings["Contact"] = "Kontakt"; +$a->strings["Submit"] = "Senden"; +$a->strings["Profile Visibility"] = "Profil-Sichtbarkeit"; +$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Bitte wähle eines Deiner Profile das angezeigt werden soll, wenn %s Dein Profil aufruft."; +$a->strings["Contact Information / Notes"] = "Kontakt Informationen / Notizen"; +$a->strings["Edit contact notes"] = "Notizen zum Kontakt bearbeiten"; +$a->strings["Visit %s's profile [%s]"] = "Besuche %ss Profil [%s]"; +$a->strings["Block/Unblock contact"] = "Kontakt blockieren/freischalten"; +$a->strings["Ignore contact"] = "Ignoriere den Kontakt"; +$a->strings["Repair URL settings"] = "URL Einstellungen reparieren"; +$a->strings["View conversations"] = "Unterhaltungen anzeigen"; +$a->strings["Last update:"] = "Letzte Aktualisierung: "; +$a->strings["Update public posts"] = "Öffentliche Beiträge aktualisieren"; +$a->strings["Update now"] = "Jetzt aktualisieren"; +$a->strings["Unblock"] = "Entsperren"; +$a->strings["Block"] = "Sperren"; +$a->strings["Unignore"] = "Ignorieren aufheben"; +$a->strings["Ignore"] = "Ignorieren"; +$a->strings["Currently blocked"] = "Derzeit geblockt"; +$a->strings["Currently ignored"] = "Derzeit ignoriert"; +$a->strings["Currently archived"] = "Momentan archiviert"; +$a->strings["Hide this contact from others"] = "Verbirg diesen Kontakt vor Anderen"; +$a->strings["Replies/likes to your public posts may still be visible"] = "Antworten/Likes auf deine öffentlichen Beiträge könnten weiterhin sichtbar sein"; +$a->strings["Notification for new posts"] = "Benachrichtigung bei neuen Beiträgen"; +$a->strings["Send a notification of every new post of this contact"] = "Sende eine Benachrichtigung, wann immer dieser Kontakt einen neuen Beitrag schreibt."; +$a->strings["Blacklisted keywords"] = "Blacklistete Schlüsselworte "; +$a->strings["Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected"] = "Komma-Separierte Liste mit Schlüsselworten, die nicht in Hashtags konvertiert werden, wenn \"Beziehe Information und Schlüsselworte\" aktiviert wurde"; +$a->strings["Profile URL"] = "Profil URL"; +$a->strings["Actions"] = "Aktionen"; +$a->strings["Contact Settings"] = "Kontakteinstellungen"; +$a->strings["Suggestions"] = "Kontaktvorschläge"; +$a->strings["Suggest potential friends"] = "Kontakte vorschlagen"; +$a->strings["All Contacts"] = "Alle Kontakte"; +$a->strings["Show all contacts"] = "Alle Kontakte anzeigen"; +$a->strings["Unblocked"] = "Ungeblockt"; +$a->strings["Only show unblocked contacts"] = "Nur nicht-blockierte Kontakte anzeigen"; +$a->strings["Blocked"] = "Geblockt"; +$a->strings["Only show blocked contacts"] = "Nur blockierte Kontakte anzeigen"; +$a->strings["Ignored"] = "Ignoriert"; +$a->strings["Only show ignored contacts"] = "Nur ignorierte Kontakte anzeigen"; +$a->strings["Archived"] = "Archiviert"; +$a->strings["Only show archived contacts"] = "Nur archivierte Kontakte anzeigen"; +$a->strings["Hidden"] = "Verborgen"; +$a->strings["Only show hidden contacts"] = "Nur verborgene Kontakte anzeigen"; +$a->strings["Search your contacts"] = "Suche in deinen Kontakten"; +$a->strings["Results for: %s"] = "Ergebnisse für: %s"; +$a->strings["Update"] = "Aktualisierungen"; +$a->strings["Archive"] = "Archivieren"; +$a->strings["Unarchive"] = "Aus Archiv zurückholen"; +$a->strings["Batch Actions"] = "Stapelverarbeitung"; +$a->strings["View all contacts"] = "Alle Kontakte anzeigen"; +$a->strings["View all common friends"] = "Alle Kontakte anzeigen"; +$a->strings["Advanced Contact Settings"] = "Fortgeschrittene Kontakteinstellungen"; +$a->strings["Mutual Friendship"] = "Beidseitige Freundschaft"; +$a->strings["is a fan of yours"] = "ist ein Fan von dir"; +$a->strings["you are a fan of"] = "Du bist Fan von"; +$a->strings["Edit contact"] = "Kontakt bearbeiten"; +$a->strings["Toggle Blocked status"] = "Geblockt-Status ein-/ausschalten"; +$a->strings["Toggle Ignored status"] = "Ignoriert-Status ein-/ausschalten"; +$a->strings["Toggle Archive status"] = "Archiviert-Status ein-/ausschalten"; +$a->strings["Delete contact"] = "Lösche den Kontakt"; $a->strings["No such group"] = "Es gibt keine solche Gruppe"; $a->strings["Group is empty"] = "Gruppe ist leer"; $a->strings["Group: %s"] = "Gruppe: %s"; @@ -770,7 +851,6 @@ $a->strings["Share this"] = "Weitersagen"; $a->strings["share"] = "Teilen"; $a->strings["This is you"] = "Das bist Du"; $a->strings["Comment"] = "Kommentar"; -$a->strings["Submit"] = "Senden"; $a->strings["Bold"] = "Fett"; $a->strings["Italic"] = "Kursiv"; $a->strings["Underline"] = "Unterstrichen"; @@ -829,45 +909,24 @@ $a->strings["Remove"] = "Entfernen"; $a->strings["Add"] = "Hinzufügen"; $a->strings["No entries."] = "Keine Einträge."; $a->strings["%1\$s welcomes %2\$s"] = "%1\$s heißt %2\$s herzlich willkommen"; +$a->strings["Public access denied."] = "Öffentlicher Zugriff verweigert."; $a->strings["Global Directory"] = "Weltweites Verzeichnis"; $a->strings["Find on this site"] = "Auf diesem Server suchen"; $a->strings["Results for:"] = "Ergebnisse für:"; $a->strings["Site Directory"] = "Verzeichnis"; $a->strings["No entries (some entries may be hidden)."] = "Keine Einträge (einige Einträge könnten versteckt sein)."; -$a->strings["People Search - %s"] = "Personensuche - %s"; -$a->strings["Forum Search - %s"] = "Forensuche - %s"; -$a->strings["No matches"] = "Keine Übereinstimmungen"; +$a->strings["Access to this profile has been restricted."] = "Der Zugriff zu diesem Profil wurde eingeschränkt."; +$a->strings["Item has been removed."] = "Eintrag wurde entfernt."; +$a->strings["Item not found"] = "Beitrag nicht gefunden"; +$a->strings["Edit post"] = "Beitrag bearbeiten"; +$a->strings["Files"] = "Dateien"; +$a->strings["Not Found"] = "Nicht gefunden"; $a->strings["- select -"] = "- auswählen -"; -$a->strings["Submit Request"] = "Anfrage abschicken"; -$a->strings["You already added this contact."] = "Du hast den Kontakt bereits hinzugefügt."; -$a->strings["Diaspora support isn't enabled. Contact can't be added."] = "Diaspora Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden."; -$a->strings["OStatus support is disabled. Contact can't be added."] = "OStatus Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden."; -$a->strings["The network type couldn't be detected. Contact can't be added."] = "Der Netzwerktype wurde nicht erkannt. Der Kontakt kann nicht hinzugefügt werden."; -$a->strings["Please answer the following:"] = "Bitte beantworte folgendes:"; -$a->strings["Does %s know you?"] = "Kennt %s Dich?"; -$a->strings["Add a personal note:"] = "Eine persönliche Notiz beifügen:"; -$a->strings["Your Identity Address:"] = "Adresse Deines Profils:"; -$a->strings["Profile URL"] = "Profil URL"; -$a->strings["Contact added"] = "Kontakt hinzugefügt"; $a->strings["Friend suggestion sent."] = "Kontaktvorschlag gesendet."; $a->strings["Suggest Friends"] = "Kontakte vorschlagen"; $a->strings["Suggest a friend for %s"] = "Schlage %s einen Kontakt vor"; -$a->strings["Group created."] = "Gruppe erstellt."; -$a->strings["Could not create group."] = "Konnte die Gruppe nicht erstellen."; -$a->strings["Group not found."] = "Gruppe nicht gefunden."; -$a->strings["Group name changed."] = "Gruppenname geändert."; -$a->strings["Permission denied"] = "Zugriff verweigert"; -$a->strings["Save Group"] = "Gruppe speichern"; -$a->strings["Create a group of contacts/friends."] = "Eine Kontaktgruppe anlegen."; -$a->strings["Group removed."] = "Gruppe entfernt."; -$a->strings["Unable to remove group."] = "Konnte die Gruppe nicht entfernen."; -$a->strings["Group Editor"] = "Gruppeneditor"; -$a->strings["Members"] = "Mitglieder"; -$a->strings["All Contacts"] = "Alle Kontakte"; -$a->strings["Click on a contact to add or remove."] = "Klicke einen Kontakt an, um ihn hinzuzufügen oder zu entfernen"; $a->strings["No profile"] = "Kein Profil"; $a->strings["Help:"] = "Hilfe:"; -$a->strings["Not Found"] = "Nicht gefunden"; $a->strings["Page not found."] = "Seite nicht gefunden."; $a->strings["Welcome to %s"] = "Willkommen zu %s"; $a->strings["Total invitation limit exceeded."] = "Limit für Einladungen erreicht."; @@ -919,12 +978,10 @@ $a->strings["Enter your email address and submit to have your password reset. Th $a->strings["Nickname or Email: "] = "Spitzname oder E-Mail:"; $a->strings["Reset"] = "Zurücksetzen"; $a->strings["System down for maintenance"] = "System zur Wartung abgeschaltet"; -$a->strings["Manage Identities and/or Pages"] = "Verwalte Identitäten und/oder Seiten"; -$a->strings["Toggle between different identities or community/group pages which share your account details or which you have been granted \"manage\" permissions"] = "Zwischen verschiedenen Identitäten oder Gemeinschafts-/Gruppenseiten wechseln, die Deine Kontoinformationen teilen oder zu denen Du „Verwalten“-Befugnisse bekommen hast."; -$a->strings["Select an identity to manage: "] = "Wähle eine Identität zum Verwalten aus: "; $a->strings["No keywords to match. Please add keywords to your default profile."] = "Keine Schlüsselwörter zum Abgleichen gefunden. Bitte füge einige Schlüsselwörter zu Deinem Standardprofil hinzu."; $a->strings["is interested in:"] = "ist interessiert an:"; $a->strings["Profile Match"] = "Profilübereinstimmungen"; +$a->strings["No matches"] = "Keine Übereinstimmungen"; $a->strings["Mood"] = "Stimmung"; $a->strings["Set your current mood and tell your friends"] = "Wähle Deine aktuelle Stimmung und erzähle sie Deinen Kontakten"; $a->strings["Welcome to Friendica"] = "Willkommen bei Friendica"; @@ -958,14 +1015,10 @@ $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 andern Programm Features zu erhalten."; -$a->strings["Visit %s's profile [%s]"] = "Besuche %ss Profil [%s]"; -$a->strings["Edit contact"] = "Kontakt bearbeiten"; $a->strings["Contacts who are not members of a group"] = "Kontakte, die keiner Gruppe zugewiesen sind"; $a->strings["No more system notifications."] = "Keine weiteren Systembenachrichtigungen."; $a->strings["System Notifications"] = "Systembenachrichtigungen"; $a->strings["Post successful."] = "Beitrag erfolgreich veröffentlicht."; -$a->strings["OpenID protocol error. No ID returned."] = "OpenID Protokollfehler. Keine ID zurückgegeben."; -$a->strings["Account not found and OpenID registration is not permitted on this site."] = "Nutzerkonto wurde nicht gefunden und OpenID-Registrierung ist auf diesem Server nicht gestattet."; $a->strings["Subscribing to OStatus contacts"] = "OStatus Kontakten folgen"; $a->strings["No contact provided."] = "Keine Kontakte gefunden."; $a->strings["Couldn't fetch information for contact."] = "Konnte die Kontaktinformationen nicht einholen."; @@ -974,13 +1027,12 @@ $a->strings["Done"] = "Erledigt"; $a->strings["success"] = "Erfolg"; $a->strings["failed"] = "Fehlgeschlagen"; $a->strings["Keep this window open until done."] = "Lasse dieses Fenster offen, bis der Vorgang abgeschlossen ist."; +$a->strings["Not Extended"] = "Nicht erweitert."; $a->strings["Poke/Prod"] = "Anstupsen"; $a->strings["poke, prod or do other things to somebody"] = "Stupse Leute an oder mache anderes mit ihnen"; $a->strings["Recipient"] = "Empfänger"; $a->strings["Choose what you wish to do to recipient"] = "Was willst Du mit dem Empfänger machen:"; $a->strings["Make this post private"] = "Diesen Beitrag privat machen"; -$a->strings["Access to this profile has been restricted."] = "Der Zugriff zu diesem Profil wurde eingeschränkt."; -$a->strings["Tips for New Members"] = "Tipps für neue Nutzer"; $a->strings["Image uploaded but image cropping failed."] = "Bild hochgeladen, aber das Zuschneiden schlug fehl."; $a->strings["Image size reduction [%s] failed."] = "Verkleinern der Bildgröße von [%s] scheiterte."; $a->strings["Shift-reload the page or clear browser cache if the new photo does not display immediately."] = "Drücke Umschalt+Neu Laden oder leere den Browser-Cache, falls das neue Foto nicht gleich angezeigt wird."; @@ -998,16 +1050,347 @@ $a->strings["Please adjust the image cropping for optimum viewing."] = "Passe bi $a->strings["Done Editing"] = "Bearbeitung abgeschlossen"; $a->strings["Image uploaded successfully."] = "Bild erfolgreich hochgeladen."; $a->strings["Image upload failed."] = "Hochladen des Bildes gescheitert."; +$a->strings["Permission denied"] = "Zugriff verweigert"; $a->strings["Invalid profile identifier."] = "Ungültiger Profil-Bezeichner."; $a->strings["Profile Visibility Editor"] = "Editor für die Profil-Sichtbarkeit"; +$a->strings["Click on a contact to add or remove."] = "Klicke einen Kontakt an, um ihn hinzuzufügen oder zu entfernen"; $a->strings["Visible To"] = "Sichtbar für"; $a->strings["All Contacts (with secure profile access)"] = "Alle Kontakte (mit gesichertem Profilzugriff)"; +$a->strings["Account approved."] = "Konto freigegeben."; +$a->strings["Registration revoked for %s"] = "Registrierung für %s wurde zurückgezogen"; +$a->strings["Please login."] = "Bitte melde Dich an."; +$a->strings["Remove My Account"] = "Konto löschen"; +$a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Dein Konto wird endgültig gelöscht. Es gibt keine Möglichkeit, es wiederherzustellen."; +$a->strings["Please enter your password for verification:"] = "Bitte gib Dein Passwort zur Verifikation ein:"; +$a->strings["Resubscribing to OStatus contacts"] = "Erneuern der OStatus Abonements"; +$a->strings["Error"] = "Fehler"; +$a->strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s folgt %2\$s %3\$s"; +$a->strings["Do you really want to delete this suggestion?"] = "Möchtest Du wirklich diese Empfehlung löschen?"; +$a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde, versuche es bitte in 24 Stunden noch einmal."; +$a->strings["Ignore/Hide"] = "Ignorieren/Verbergen"; +$a->strings["Tag removed"] = "Tag entfernt"; +$a->strings["Remove Item Tag"] = "Gegenstands-Tag entfernen"; +$a->strings["Select a tag to remove: "] = "Wähle ein Tag zum Entfernen aus: "; +$a->strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "Die maximale Anzahl täglicher Registrierungen auf dieser Seite wurde überschritten. Bitte versuche es morgen noch einmal."; +$a->strings["Import"] = "Import"; +$a->strings["Move account"] = "Account umziehen"; +$a->strings["You can import an account from another Friendica server."] = "Du kannst einen Account von einem anderen Friendica Server importieren."; +$a->strings["You need to export your account from the old server and upload it here. We will recreate your old account here with all your contacts. We will try also to inform your friends that you moved here."] = "Du musst Deinen Account vom alten Server exportieren und hier hochladen. Wir stellen Deinen alten Account mit all Deinen Kontakten wieder her. Wir werden auch versuchen all Deine Kontakte darüber zu informieren, dass Du hierher umgezogen bist."; +$a->strings["This feature is experimental. We can't import contacts from the OStatus network (GNU Social/Statusnet) or from Diaspora"] = "Dieses Feature ist experimentell. Wir können keine Kontakte vom OStatus Netzwerk (GNU Social/Statusnet) oder von Diaspora importieren"; +$a->strings["Account file"] = "Account Datei"; +$a->strings["To export your account, go to \"Settings->Export your personal data\" and select \"Export account\""] = "Um Deinen Account zu exportieren, rufe \"Einstellungen -> Persönliche Daten exportieren\" auf und wähle \"Account exportieren\""; +$a->strings["[Embedded content - reload page to view]"] = "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]"; +$a->strings["No contacts."] = "Keine Kontakte."; +$a->strings["Access denied."] = "Zugriff verweigert."; +$a->strings["Invalid request."] = "Ungültige Anfrage"; +$a->strings["Sorry, maybe your upload is bigger than the PHP configuration allows"] = "Entschuldige, die Datei scheint größer zu sein als es die PHP Konfiguration erlaubt."; +$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 upload failed."] = "Hochladen der Datei fehlgeschlagen."; +$a->strings["Number of daily wall messages for %s exceeded. Message failed."] = "Maximale Anzahl der täglichen Pinnwand Nachrichten für %s ist überschritten. Zustellung fehlgeschlagen."; +$a->strings["No recipient selected."] = "Kein Empfänger gewählt."; +$a->strings["Unable to check your home location."] = "Konnte Deinen Heimatort nicht bestimmen."; +$a->strings["Message could not be sent."] = "Nachricht konnte nicht gesendet werden."; +$a->strings["Message collection failure."] = "Konnte Nachrichten nicht abrufen."; +$a->strings["Message sent."] = "Nachricht gesendet."; +$a->strings["No recipient."] = "Kein Empfänger."; +$a->strings["Send Private Message"] = "Private Nachricht senden"; +$a->strings["If you wish for %s to respond, please check that the privacy settings on your site allow private mail from unknown senders."] = "Wenn Du möchtest, dass %s Dir antworten kann, überprüfe Deine Privatsphären-Einstellungen und erlaube private Nachrichten von unbekannten Absendern."; +$a->strings["To:"] = "An:"; +$a->strings["Subject:"] = "Betreff:"; +$a->strings["Source (bbcode) text:"] = "Quelle (bbcode) Text:"; +$a->strings["Source (Diaspora) text to convert to BBcode:"] = "Eingabe (Diaspora) nach BBCode zu konvertierender Text:"; +$a->strings["Source input: "] = "Originaltext:"; +$a->strings["bb2html (raw HTML): "] = "bb2html (reines HTML): "; +$a->strings["bb2html: "] = "bb2html: "; +$a->strings["bb2html2bb: "] = "bb2html2bb: "; +$a->strings["bb2md: "] = "bb2md: "; +$a->strings["bb2md2html: "] = "bb2md2html: "; +$a->strings["bb2dia2bb: "] = "bb2dia2bb: "; +$a->strings["bb2md2html2bb: "] = "bb2md2html2bb: "; +$a->strings["Source input (Diaspora format): "] = "Originaltext (Diaspora Format): "; +$a->strings["diaspora2bb: "] = "diaspora2bb: "; +$a->strings["View"] = "Ansehen"; +$a->strings["Previous"] = "Vorherige"; +$a->strings["Next"] = "Nächste"; +$a->strings["list"] = "Liste"; +$a->strings["User not found"] = "Nutzer nicht gefunden"; +$a->strings["This calendar format is not supported"] = "Dieses Kalenderformat wird nicht unterstützt."; +$a->strings["No exportable data found"] = "Keine exportierbaren Daten gefunden"; +$a->strings["calendar"] = "Kalender"; +$a->strings["Not available."] = "Nicht verfügbar."; +$a->strings["No results."] = "Keine Ergebnisse."; +$a->strings["Profile not found."] = "Profil nicht gefunden."; +$a->strings["This may occasionally happen if contact was requested by both persons and it has already been approved."] = "Das kann passieren, wenn sich zwei Kontakte gegenseitig eingeladen haben und bereits einer angenommen wurde."; +$a->strings["Response from remote site was not understood."] = "Antwort der Gegenstelle unverständlich."; +$a->strings["Unexpected response from remote site: "] = "Unerwartete Antwort der Gegenstelle: "; +$a->strings["Confirmation completed successfully."] = "Bestätigung erfolgreich abgeschlossen."; +$a->strings["Remote site reported: "] = "Gegenstelle meldet: "; +$a->strings["Temporary failure. Please wait and try again."] = "Zeitweiser Fehler. Bitte warte einige Momente und versuche es dann noch einmal."; +$a->strings["Introduction failed or was revoked."] = "Kontaktanfrage schlug fehl oder wurde zurückgezogen."; +$a->strings["Unable to set contact photo."] = "Konnte das Bild des Kontakts nicht speichern."; +$a->strings["No user record found for '%s' "] = "Für '%s' wurde kein Nutzer gefunden"; +$a->strings["Our site encryption key is apparently messed up."] = "Der Verschlüsselungsschlüssel unserer Seite ist anscheinend nicht in Ordnung."; +$a->strings["Empty site URL was provided or URL could not be decrypted by us."] = "Leere URL für die Seite erhalten oder die URL konnte nicht entschlüsselt werden."; +$a->strings["Contact record was not found for you on our site."] = "Für diesen Kontakt wurde auf unserer Seite kein Eintrag gefunden."; +$a->strings["Site public key not available in contact record for URL %s."] = "Die Kontaktdaten für URL %s enthalten keinen Public Key für den Server."; +$a->strings["The ID provided by your system is a duplicate on our system. It should work if you try again."] = "Die ID, die uns Dein System angeboten hat, ist hier bereits vergeben. Bitte versuche es noch einmal."; +$a->strings["Unable to set your contact credentials on our system."] = "Deine Kontaktreferenzen konnten nicht in unserem System gespeichert werden."; +$a->strings["Unable to update your contact profile details on our system"] = "Die Updates für Dein Profil konnten nicht gespeichert werden"; +$a->strings["%1\$s has joined %2\$s"] = "%1\$s ist %2\$s beigetreten"; +$a->strings["This introduction has already been accepted."] = "Diese Kontaktanfrage wurde bereits akzeptiert."; +$a->strings["Profile location is not valid or does not contain profile information."] = "Profiladresse ist ungültig oder stellt keine Profildaten zur Verfügung."; +$a->strings["Warning: profile location has no identifiable owner name."] = "Warnung: Es konnte kein Name des Besitzers von der angegebenen Profiladresse gefunden werden."; +$a->strings["Warning: profile location has no profile photo."] = "Warnung: Es gibt kein Profilbild bei der angegebenen Profiladresse."; +$a->strings["%d required parameter was not found at the given location"] = array( + 0 => "%d benötigter Parameter wurde an der angegebenen Stelle nicht gefunden", + 1 => "%d benötigte Parameter wurden an der angegebenen Stelle nicht gefunden", +); +$a->strings["Introduction complete."] = "Kontaktanfrage abgeschlossen."; +$a->strings["Unrecoverable protocol error."] = "Nicht behebbarer Protokollfehler."; +$a->strings["Profile unavailable."] = "Profil nicht verfügbar."; +$a->strings["%s has received too many connection requests today."] = "%s hat heute zu viele Kontaktanfragen erhalten."; +$a->strings["Spam protection measures have been invoked."] = "Maßnahmen zum Spamschutz wurden ergriffen."; +$a->strings["Friends are advised to please try again in 24 hours."] = "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen."; +$a->strings["Invalid locator"] = "Ungültiger Locator"; +$a->strings["Invalid email address."] = "Ungültige E-Mail-Adresse."; +$a->strings["This account has not been configured for email. Request failed."] = "Dieses Konto ist nicht für E-Mail konfiguriert. Anfrage fehlgeschlagen."; +$a->strings["You have already introduced yourself here."] = "Du hast Dich hier bereits vorgestellt."; +$a->strings["Apparently you are already friends with %s."] = "Es scheint so, als ob Du bereits mit %s in Kontakt stehst."; +$a->strings["Invalid profile URL."] = "Ungültige Profil-URL."; +$a->strings["Your introduction has been sent."] = "Deine Kontaktanfrage wurde gesendet."; +$a->strings["Remote subscription can't be done for your network. Please subscribe directly on your system."] = "Entferntes abon­nie­ren kann für dein Netzwerk nicht durchgeführt werden. Bitte nutze direkt die Abonnieren-Funktion deines Systems. "; +$a->strings["Please login to confirm introduction."] = "Bitte melde Dich an, um die Kontaktanfrage zu bestätigen."; +$a->strings["Incorrect identity currently logged in. Please login to this profile."] = "Momentan bist Du mit einer anderen Identität angemeldet. Bitte melde Dich mit diesem Profil an."; +$a->strings["Confirm"] = "Bestätigen"; +$a->strings["Hide this contact"] = "Verberge diesen Kontakt"; +$a->strings["Welcome home %s."] = "Willkommen zurück %s."; +$a->strings["Please confirm your introduction/connection request to %s."] = "Bitte bestätige Deine Kontaktanfrage bei %s."; +$a->strings["Please enter your 'Identity Address' from one of the following supported communications networks:"] = "Bitte gib die Adresse Deines Profils in einem der unterstützten sozialen Netzwerke an:"; +$a->strings["If you are not yet a member of the free social web, follow this link to find a public Friendica site and join us today."] = "Wenn du noch kein Mitglied dieses freien sozialen Netzwerks bist, folge diesem Link um einen öffentlichen Friendica-Server zu finden und beizutreten."; +$a->strings["Friend/Connection Request"] = "Kontaktanfrage"; +$a->strings["Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca"] = "Beispiele: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca"; +$a->strings["Please answer the following:"] = "Bitte beantworte folgendes:"; +$a->strings["Does %s know you?"] = "Kennt %s Dich?"; +$a->strings["Add a personal note:"] = "Eine persönliche Notiz beifügen:"; +$a->strings["StatusNet/Federated Social Web"] = "StatusNet/Federated Social Web"; +$a->strings[" - please do not use this form. Instead, enter %s into your Diaspora search bar."] = " - bitte verwende dieses Formular nicht. Stattdessen suche nach %s in Deiner Diaspora Suchleiste."; +$a->strings["Your Identity Address:"] = "Adresse Deines Profils:"; +$a->strings["Submit Request"] = "Anfrage abschicken"; +$a->strings["People Search - %s"] = "Personensuche - %s"; +$a->strings["Forum Search - %s"] = "Forensuche - %s"; +$a->strings["Event can not end before it has started."] = "Die Veranstaltung kann nicht enden bevor sie beginnt."; +$a->strings["Event title and start time are required."] = "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden."; +$a->strings["Create New Event"] = "Neue Veranstaltung erstellen"; +$a->strings["Event details"] = "Veranstaltungsdetails"; +$a->strings["Starting date and Title are required."] = "Anfangszeitpunkt und Titel werden benötigt"; +$a->strings["Event Starts:"] = "Veranstaltungsbeginn:"; +$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["Event Finishes:"] = "Veranstaltungsende:"; +$a->strings["Adjust for viewer timezone"] = "An Zeitzone des Betrachters anpassen"; +$a->strings["Description:"] = "Beschreibung"; +$a->strings["Title:"] = "Titel:"; +$a->strings["Share this event"] = "Veranstaltung teilen"; +$a->strings["Failed to remove event"] = "Entfernen der Veranstaltung fehlgeschlagen"; +$a->strings["Event removed"] = "Veranstaltung enfternt"; +$a->strings["You already added this contact."] = "Du hast den Kontakt bereits hinzugefügt."; +$a->strings["Diaspora support isn't enabled. Contact can't be added."] = "Diaspora Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden."; +$a->strings["OStatus support is disabled. Contact can't be added."] = "OStatus Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden."; +$a->strings["The network type couldn't be detected. Contact can't be added."] = "Der Netzwerktype wurde nicht erkannt. Der Kontakt kann nicht hinzugefügt werden."; +$a->strings["Contact added"] = "Kontakt hinzugefügt"; +$a->strings["This is Friendica, version"] = "Dies ist Friendica, Version"; +$a->strings["running at web location"] = "die unter folgender Webadresse zu finden ist"; +$a->strings["Please visit Friendica.com to learn more about the Friendica project."] = "Bitte besuche Friendica.com, um mehr über das Friendica Projekt zu erfahren."; +$a->strings["Bug reports and issues: please visit"] = "Probleme oder Fehler gefunden? Bitte besuche"; +$a->strings["the bugtracker at github"] = "den Bugtracker auf github"; +$a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - dot com"] = "Vorschläge, Lob, Spenden usw.: E-Mail an \"Info\" at Friendica - dot com"; +$a->strings["Installed plugins/addons/apps:"] = "Installierte Plugins/Erweiterungen/Apps:"; +$a->strings["No installed plugins/addons/apps"] = "Keine Plugins/Erweiterungen/Apps installiert"; +$a->strings["On this server the following remote servers are blocked."] = "Auf diesem Server werden die folgenden entfernten Server blockiert."; +$a->strings["Reason for the block"] = "Begründung für die Blockierung"; +$a->strings["Group created."] = "Gruppe erstellt."; +$a->strings["Could not create group."] = "Konnte die Gruppe nicht erstellen."; +$a->strings["Group not found."] = "Gruppe nicht gefunden."; +$a->strings["Group name changed."] = "Gruppenname geändert."; +$a->strings["Save Group"] = "Gruppe speichern"; +$a->strings["Create a group of contacts/friends."] = "Eine Kontaktgruppe anlegen."; +$a->strings["Group removed."] = "Gruppe entfernt."; +$a->strings["Unable to remove group."] = "Konnte die Gruppe nicht entfernen."; +$a->strings["Delete Group"] = "Gruppe löschen"; +$a->strings["Group Editor"] = "Gruppeneditor"; +$a->strings["Edit Group Name"] = "Gruppen Name bearbeiten"; +$a->strings["Members"] = "Mitglieder"; +$a->strings["Remove Contact"] = "Kontakt löschen"; +$a->strings["Add Contact"] = "Kontakt hinzufügen"; +$a->strings["Manage Identities and/or Pages"] = "Verwalte Identitäten und/oder Seiten"; +$a->strings["Toggle between different identities or community/group pages which share your account details or which you have been granted \"manage\" permissions"] = "Zwischen verschiedenen Identitäten oder Gemeinschafts-/Gruppenseiten wechseln, die Deine Kontoinformationen teilen oder zu denen Du „Verwalten“-Befugnisse bekommen hast."; +$a->strings["Select an identity to manage: "] = "Wähle eine Identität zum Verwalten aus: "; +$a->strings["Unable to locate contact information."] = "Konnte die Kontaktinformationen nicht finden."; +$a->strings["Do you really want to delete this message?"] = "Möchtest Du wirklich diese Nachricht löschen?"; +$a->strings["Message deleted."] = "Nachricht gelöscht."; +$a->strings["Conversation removed."] = "Unterhaltung gelöscht."; +$a->strings["No messages."] = "Keine Nachrichten."; +$a->strings["Message not available."] = "Nachricht nicht verfügbar."; +$a->strings["Delete message"] = "Nachricht löschen"; +$a->strings["Delete conversation"] = "Unterhaltung löschen"; +$a->strings["No secure communications available. You may be able to respond from the sender's profile page."] = "Sichere Kommunikation ist nicht verfügbar. Eventuell kannst Du auf der Profilseite des Absenders antworten."; +$a->strings["Send Reply"] = "Antwort senden"; +$a->strings["Unknown sender - %s"] = "'Unbekannter Absender - %s"; +$a->strings["You and %s"] = "Du und %s"; +$a->strings["%s and You"] = "%s und Du"; +$a->strings["D, d M Y - g:i A"] = "D, d. M Y - g:i A"; +$a->strings["%d message"] = array( + 0 => "%d Nachricht", + 1 => "%d Nachrichten", +); +$a->strings["Remove term"] = "Begriff entfernen"; +$a->strings["Warning: This group contains %s member from a network that doesn't allow non public messages."] = array( + 0 => "Warnung: Diese Gruppe beinhaltet %s Person aus einem Netzwerk das keine nicht öffentlichen Beiträge empfangen kann.", + 1 => "Warnung: Diese Gruppe beinhaltet %s Personen aus Netzwerken die keine nicht-öffentlichen Beiträge empfangen können.", +); +$a->strings["Messages in this group won't be send to these receivers."] = "Beiträge in dieser Gruppe werden deshalb nicht an diese Personen zugestellt werden."; +$a->strings["Private messages to this person are at risk of public disclosure."] = "Private Nachrichten an diese Person könnten an die Öffentlichkeit gelangen."; +$a->strings["Invalid contact."] = "Ungültiger Kontakt."; +$a->strings["Commented Order"] = "Neueste Kommentare"; +$a->strings["Sort by Comment Date"] = "Nach Kommentardatum sortieren"; +$a->strings["Posted Order"] = "Neueste Beiträge"; +$a->strings["Sort by Post Date"] = "Nach Beitragsdatum sortieren"; +$a->strings["Posts that mention or involve you"] = "Beiträge, in denen es um Dich geht"; +$a->strings["New"] = "Neue"; +$a->strings["Activity Stream - by date"] = "Aktivitäten-Stream - nach Datum"; +$a->strings["Shared Links"] = "Geteilte Links"; +$a->strings["Interesting Links"] = "Interessante Links"; +$a->strings["Starred"] = "Markierte"; +$a->strings["Favourite Posts"] = "Favorisierte Beiträge"; +$a->strings["OpenID protocol error. No ID returned."] = "OpenID Protokollfehler. Keine ID zurückgegeben."; +$a->strings["Account not found and OpenID registration is not permitted on this site."] = "Nutzerkonto wurde nicht gefunden und OpenID-Registrierung ist auf diesem Server nicht gestattet."; +$a->strings["Recent Photos"] = "Neueste Fotos"; +$a->strings["Upload New Photos"] = "Neue Fotos hochladen"; +$a->strings["everybody"] = "jeder"; +$a->strings["Contact information unavailable"] = "Kontaktinformationen nicht verfügbar"; +$a->strings["Album not found."] = "Album nicht gefunden."; +$a->strings["Delete Album"] = "Album löschen"; +$a->strings["Do you really want to delete this photo album and all its photos?"] = "Möchtest Du wirklich dieses Foto-Album und all seine Foto löschen?"; +$a->strings["Delete Photo"] = "Foto löschen"; +$a->strings["Do you really want to delete this photo?"] = "Möchtest Du wirklich dieses Foto löschen?"; +$a->strings["%1\$s was tagged in %2\$s by %3\$s"] = "%1\$s wurde von %3\$s in %2\$s getaggt"; +$a->strings["a photo"] = "einem Foto"; +$a->strings["Image file is empty."] = "Bilddatei ist leer."; +$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["You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."] = "Du verwendest %1$.2f Mbyte von %2$.2f Mbyte des Foto-Speichers."; +$a->strings["Upload Photos"] = "Bilder hochladen"; +$a->strings["New album name: "] = "Name des neuen Albums: "; +$a->strings["or existing album name: "] = "oder existierender Albumname: "; +$a->strings["Do not show a status post for this upload"] = "Keine Status-Mitteilung für diesen Beitrag anzeigen"; +$a->strings["Show to Groups"] = "Zeige den Gruppen"; +$a->strings["Show to Contacts"] = "Zeige den Kontakten"; +$a->strings["Private Photo"] = "Privates Foto"; +$a->strings["Public Photo"] = "Öffentliches Foto"; +$a->strings["Edit Album"] = "Album bearbeiten"; +$a->strings["Show Newest First"] = "Zeige neueste zuerst"; +$a->strings["Show Oldest First"] = "Zeige älteste zuerst"; +$a->strings["View Photo"] = "Foto betrachten"; +$a->strings["Permission denied. Access to this item may be restricted."] = "Zugriff verweigert. Zugriff zu diesem Eintrag könnte eingeschränkt sein."; +$a->strings["Photo not available"] = "Foto nicht verfügbar"; +$a->strings["View photo"] = "Fotos ansehen"; +$a->strings["Edit photo"] = "Foto bearbeiten"; +$a->strings["Use as profile photo"] = "Als Profilbild verwenden"; +$a->strings["View Full Size"] = "Betrachte Originalgröße"; +$a->strings["Tags: "] = "Tags: "; +$a->strings["[Remove any tag]"] = "[Tag entfernen]"; +$a->strings["New album name"] = "Name des neuen Albums"; +$a->strings["Caption"] = "Bildunterschrift"; +$a->strings["Add a Tag"] = "Tag hinzufügen"; +$a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"; +$a->strings["Do not rotate"] = "Nicht rotieren"; +$a->strings["Rotate CW (right)"] = "Drehen US (rechts)"; +$a->strings["Rotate CCW (left)"] = "Drehen EUS (links)"; +$a->strings["Private photo"] = "Privates Foto"; +$a->strings["Public photo"] = "Öffentliches Foto"; +$a->strings["Map"] = "Karte"; +$a->strings["View Album"] = "Album betrachten"; +$a->strings["Only logged in users are permitted to perform a probing."] = "Nur eingeloggten Benutzern ist das Untersuchen von Adressen gestattet."; +$a->strings["Tips for New Members"] = "Tipps für neue Nutzer"; +$a->strings["Profile deleted."] = "Profil gelöscht."; +$a->strings["Profile-"] = "Profil-"; +$a->strings["New profile created."] = "Neues Profil angelegt."; +$a->strings["Profile unavailable to clone."] = "Profil nicht zum Duplizieren verfügbar."; +$a->strings["Profile Name is required."] = "Profilname ist erforderlich."; +$a->strings["Marital Status"] = "Familienstand"; +$a->strings["Romantic Partner"] = "Romanze"; +$a->strings["Work/Employment"] = "Arbeit / Beschäftigung"; +$a->strings["Religion"] = "Religion"; +$a->strings["Political Views"] = "Politische Ansichten"; +$a->strings["Gender"] = "Geschlecht"; +$a->strings["Sexual Preference"] = "Sexuelle Vorlieben"; +$a->strings["XMPP"] = "XMPP"; +$a->strings["Homepage"] = "Webseite"; +$a->strings["Interests"] = "Interessen"; +$a->strings["Address"] = "Adresse"; +$a->strings["Location"] = "Wohnort"; +$a->strings["Profile updated."] = "Profil aktualisiert."; +$a->strings[" and "] = " und "; +$a->strings["public profile"] = "öffentliches Profil"; +$a->strings["%1\$s changed %2\$s to “%3\$s”"] = "%1\$s hat %2\$s geändert auf “%3\$s”"; +$a->strings[" - Visit %1\$s's %2\$s"] = " – %1\$ss %2\$s besuchen"; +$a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s hat folgendes aktualisiert %2\$s, verändert wurde %3\$s."; +$a->strings["Hide contacts and friends:"] = "Kontakte und Freunde verbergen"; +$a->strings["Hide your contact/friend list from viewers of this profile?"] = "Liste der Kontakte vor Betrachtern dieses Profils verbergen?"; +$a->strings["Show more profile fields:"] = "Zeige mehr Profil-Felder:"; +$a->strings["Profile Actions"] = "Profilaktionen"; +$a->strings["Edit Profile Details"] = "Profil bearbeiten"; +$a->strings["Change Profile Photo"] = "Profilbild ändern"; +$a->strings["View this profile"] = "Dieses Profil anzeigen"; +$a->strings["Create a new profile using these settings"] = "Neues Profil anlegen und diese Einstellungen verwenden"; +$a->strings["Clone this profile"] = "Dieses Profil duplizieren"; +$a->strings["Delete this profile"] = "Dieses Profil löschen"; +$a->strings["Basic information"] = "Grundinformationen"; +$a->strings["Profile picture"] = "Profilbild"; +$a->strings["Preferences"] = "Vorlieben"; +$a->strings["Status information"] = "Status Informationen"; +$a->strings["Additional information"] = "Zusätzliche Informationen"; +$a->strings["Relation"] = "Beziehung"; +$a->strings["Your Gender:"] = "Dein Geschlecht:"; +$a->strings[" Marital Status:"] = " Beziehungsstatus:"; +$a->strings["Example: fishing photography software"] = "Beispiel: Fischen Fotografie Software"; +$a->strings["Profile Name:"] = "Profilname:"; +$a->strings["This is your public profile.
It may be visible to anybody using the internet."] = "Dies ist Dein öffentliches Profil.
Es könnte für jeden Nutzer des Internets sichtbar sein."; +$a->strings["Your Full Name:"] = "Dein kompletter Name:"; +$a->strings["Title/Description:"] = "Titel/Beschreibung:"; +$a->strings["Street Address:"] = "Adresse:"; +$a->strings["Locality/City:"] = "Wohnort:"; +$a->strings["Region/State:"] = "Region/Bundesstaat:"; +$a->strings["Postal/Zip Code:"] = "Postleitzahl:"; +$a->strings["Country:"] = "Land:"; +$a->strings["Who: (if applicable)"] = "Wer: (falls anwendbar)"; +$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Beispiele: cathy123, Cathy Williams, cathy@example.com"; +$a->strings["Since [date]:"] = "Seit [Datum]:"; +$a->strings["Tell us about yourself..."] = "Erzähle uns ein bisschen von Dir …"; +$a->strings["XMPP (Jabber) address:"] = "XMPP (Jabber) Adresse"; +$a->strings["The XMPP address will be propagated to your contacts so that they can follow you."] = "Die XMPP Adresse wird an deine Kontakte verteilt werden, so dass sie auch über XMPP mit dir in Kontakt treten können."; +$a->strings["Homepage URL:"] = "Adresse der Homepage:"; +$a->strings["Religious Views:"] = "Religiöse Ansichten:"; +$a->strings["Public Keywords:"] = "Öffentliche Schlüsselwörter:"; +$a->strings["(Used for suggesting potential friends, can be seen by others)"] = "(Wird verwendet, um potentielle Kontakte zu finden, kann von Kontakten eingesehen werden)"; +$a->strings["Private Keywords:"] = "Private Schlüsselwörter:"; +$a->strings["(Used for searching profiles, never shown to others)"] = "(Wird für die Suche nach Profilen verwendet und niemals veröffentlicht)"; +$a->strings["Musical interests"] = "Musikalische Interessen"; +$a->strings["Books, literature"] = "Bücher, Literatur"; +$a->strings["Television"] = "Fernsehen"; +$a->strings["Film/dance/culture/entertainment"] = "Filme/Tänze/Kultur/Unterhaltung"; +$a->strings["Hobbies/Interests"] = "Hobbies/Interessen"; +$a->strings["Love/romance"] = "Liebe/Romantik"; +$a->strings["Work/employment"] = "Arbeit/Anstellung"; +$a->strings["School/education"] = "Schule/Ausbildung"; +$a->strings["Contact information and Social Networks"] = "Kontaktinformationen und Soziale Netzwerke"; +$a->strings["Edit/Manage Profiles"] = "Bearbeite/Verwalte Profile"; $a->strings["Registration successful. Please check your email for further instructions."] = "Registrierung erfolgreich. Eine E-Mail mit weiteren Anweisungen wurde an Dich gesendet."; $a->strings["Failed to send email message. Here your accout details:
login: %s
password: %s

You can change your password after login."] = "Versenden der E-Mail fehlgeschlagen. Hier sind Deine Account Details:\n\nLogin: %s\nPasswort: %s\n\nDu kannst das Passwort nach dem Anmelden ändern."; $a->strings["Registration successful."] = "Registrierung erfolgreich."; $a->strings["Your registration can not be processed."] = "Deine Registrierung konnte nicht verarbeitet werden."; $a->strings["Your registration is pending approval by the site owner."] = "Deine Registrierung muss noch vom Betreiber der Seite freigegeben werden."; -$a->strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "Die maximale Anzahl täglicher Registrierungen auf dieser Seite wurde überschritten. Bitte versuche es morgen noch einmal."; $a->strings["You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "Du kannst dieses Formular auch (optional) mit Deiner OpenID ausfüllen, indem Du Deine OpenID angibst und 'Registrieren' klickst."; $a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Wenn Du nicht mit OpenID vertraut bist, lass dieses Feld bitte leer und fülle die restlichen Felder aus."; $a->strings["Your OpenID (optional): "] = "Deine OpenID (optional): "; @@ -1024,17 +1407,11 @@ $a->strings["Leave empty for an auto generated password."] = "Leer lassen um das $a->strings["Confirm:"] = "Bestätigen:"; $a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be 'nickname@\$sitename'."] = "Wähle einen Spitznamen für Dein Profil. Dieser muss mit einem Buchstaben beginnen. Die Adresse Deines Profils auf dieser Seite wird 'spitzname@\$sitename' sein."; $a->strings["Choose a nickname: "] = "Spitznamen wählen: "; -$a->strings["Import"] = "Import"; $a->strings["Import your profile to this friendica instance"] = "Importiere Dein Profil auf diese Friendica Instanz"; -$a->strings["Account approved."] = "Konto freigegeben."; -$a->strings["Registration revoked for %s"] = "Registrierung für %s wurde zurückgezogen"; -$a->strings["Please login."] = "Bitte melde Dich an."; -$a->strings["Remove My Account"] = "Konto löschen"; -$a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Dein Konto wird endgültig gelöscht. Es gibt keine Möglichkeit, es wiederherzustellen."; -$a->strings["Please enter your password for verification:"] = "Bitte gib Dein Passwort zur Verifikation ein:"; -$a->strings["Resubscribing to OStatus contacts"] = "Erneuern der OStatus Abonements"; -$a->strings["Error"] = "Fehler"; -$a->strings["everybody"] = "jeder"; +$a->strings["Only logged in users are permitted to perform a search."] = "Nur eingeloggten Benutzern ist das Suchen gestattet."; +$a->strings["Too Many Requests"] = "Zu viele Abfragen"; +$a->strings["Only one search per minute is permitted for not logged in users."] = "Es ist nur eine Suchanfrage pro Minute für nicht eingeloggte Benutzer gestattet."; +$a->strings["Items tagged with: %s"] = "Beiträge die mit %s getaggt sind"; $a->strings["Account"] = "Nutzerkonto"; $a->strings["Additional features"] = "Zusätzliche Features"; $a->strings["Display"] = "Anzeige"; @@ -1044,7 +1421,6 @@ $a->strings["Connected apps"] = "Verbundene Programme"; $a->strings["Export personal data"] = "Persönliche Daten exportieren"; $a->strings["Remove account"] = "Konto löschen"; $a->strings["Missing some important data!"] = "Wichtige Daten fehlen!"; -$a->strings["Update"] = "Aktualisierungen"; $a->strings["Failed to connect with email account using the settings provided."] = "Verbindung zum E-Mail-Konto mit den angegebenen Einstellungen nicht möglich."; $a->strings["Email settings updated."] = "E-Mail Einstellungen bearbeitet."; $a->strings["Features updated"] = "Features aktualisiert"; @@ -1152,6 +1528,7 @@ $a->strings["Private forum - approved members only"] = "Privates Forum, nur für $a->strings["OpenID:"] = "OpenID:"; $a->strings["(Optional) Allow this OpenID to login to this account."] = "(Optional) Erlaube die Anmeldung für dieses Konto mit dieser OpenID."; $a->strings["Publish your default profile in your local site directory?"] = "Darf Dein Standardprofil im Verzeichnis dieses Servers veröffentlicht werden?"; +$a->strings["Your profile may be visible in public."] = "Dein Profil könnte öffentlich abrufbar sein."; $a->strings["Publish your default profile in the global social directory?"] = "Darf Dein Standardprofil im weltweiten Verzeichnis veröffentlicht werden?"; $a->strings["Hide your contact/friend list from viewers of your default profile?"] = "Liste der Kontakte vor Betrachtern des Standardprofils verbergen?"; $a->strings["If enabled, posting public messages to Diaspora and other networks isn't possible."] = "Wenn aktiviert, ist das senden öffentliche Nachrichten zu Diaspora und anderen Netzwerken nicht möglich"; @@ -1188,8 +1565,6 @@ $a->strings["Maximum Friend Requests/Day:"] = "Maximale Anzahl vonKontaktanfrage $a->strings["(to prevent spam abuse)"] = "(um SPAM zu vermeiden)"; $a->strings["Default Post Permissions"] = "Standard-Zugriffsrechte für Beiträge"; $a->strings["(click to open/close)"] = "(klicke zum öffnen/schließen)"; -$a->strings["Show to Groups"] = "Zeige den Gruppen"; -$a->strings["Show to Contacts"] = "Zeige den Kontakten"; $a->strings["Default Private Post"] = "Privater Standardbeitrag"; $a->strings["Default Public Post"] = "Öffentlicher Standardbeitrag"; $a->strings["Default Permissions for New Posts"] = "Standardberechtigungen für neue Beiträge"; @@ -1217,289 +1592,15 @@ $a->strings["Change the behaviour of this account for special situations"] = "Ve $a->strings["Relocate"] = "Umziehen"; $a->strings["If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."] = "Wenn Du Dein Profil von einem anderen Server umgezogen hast und einige Deiner Kontakte Deine Beiträge nicht erhalten, verwende diesen Button."; $a->strings["Resend relocate message to contacts"] = "Umzugsbenachrichtigung erneut an Kontakte senden"; -$a->strings["link"] = "Link"; -$a->strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s folgt %2\$s %3\$s"; -$a->strings["Do you really want to delete this suggestion?"] = "Möchtest Du wirklich diese Empfehlung löschen?"; -$a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde, versuche es bitte in 24 Stunden noch einmal."; -$a->strings["Ignore/Hide"] = "Ignorieren/Verbergen"; -$a->strings["Tag removed"] = "Tag entfernt"; -$a->strings["Remove Item Tag"] = "Gegenstands-Tag entfernen"; -$a->strings["Select a tag to remove: "] = "Wähle ein Tag zum Entfernen aus: "; $a->strings["Export account"] = "Account exportieren"; $a->strings["Export your account info and contacts. Use this to make a backup of your account and/or to move it to another server."] = "Exportiere Deine Accountinformationen und Kontakte. Verwende dies um ein Backup Deines Accounts anzulegen und/oder damit auf einen anderen Server umzuziehen."; $a->strings["Export all"] = "Alles exportieren"; $a->strings["Export your accout info, contacts and all your items as json. Could be a very big file, and could take a lot of time. Use this to make a full backup of your account (photos are not exported)"] = "Exportiere Deine Account Informationen, Kontakte und alle Einträge als JSON Datei. Dies könnte eine sehr große Datei werden und dementsprechend viel Zeit benötigen. Verwende dies um ein komplettes Backup Deines Accounts anzulegen (Fotos werden nicht exportiert)."; -$a->strings["Move account"] = "Account umziehen"; -$a->strings["You can import an account from another Friendica server."] = "Du kannst einen Account von einem anderen Friendica Server importieren."; -$a->strings["You need to export your account from the old server and upload it here. We will recreate your old account here with all your contacts. We will try also to inform your friends that you moved here."] = "Du musst Deinen Account vom alten Server exportieren und hier hochladen. Wir stellen Deinen alten Account mit all Deinen Kontakten wieder her. Wir werden auch versuchen all Deine Kontakte darüber zu informieren, dass Du hierher umgezogen bist."; -$a->strings["This feature is experimental. We can't import contacts from the OStatus network (GNU Social/Statusnet) or from Diaspora"] = "Dieses Feature ist experimentell. Wir können keine Kontakte vom OStatus Netzwerk (GNU Social/Statusnet) oder von Diaspora importieren"; -$a->strings["Account file"] = "Account Datei"; -$a->strings["To export your account, go to \"Settings->Export your personal data\" and select \"Export account\""] = "Um Deinen Account zu exportieren, rufe \"Einstellungen -> Persönliche Daten exportieren\" auf und wähle \"Account exportieren\""; -$a->strings["[Embedded content - reload page to view]"] = "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]"; $a->strings["Do you really want to delete this video?"] = "Möchtest Du dieses Video wirklich löschen?"; $a->strings["Delete Video"] = "Video Löschen"; $a->strings["No videos selected"] = "Keine Videos ausgewählt"; -$a->strings["Access to this item is restricted."] = "Zugriff zu diesem Eintrag wurde eingeschränkt."; -$a->strings["View Album"] = "Album betrachten"; $a->strings["Recent Videos"] = "Neueste Videos"; $a->strings["Upload New Videos"] = "Neues Video hochladen"; -$a->strings["Access denied."] = "Zugriff verweigert."; -$a->strings["Invalid request."] = "Ungültige Anfrage"; -$a->strings["Sorry, maybe your upload is bigger than the PHP configuration allows"] = "Entschuldige, die Datei scheint größer zu sein als es die PHP Konfiguration erlaubt."; -$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 upload failed."] = "Hochladen der Datei fehlgeschlagen."; -$a->strings["View"] = "Ansehen"; -$a->strings["Previous"] = "Vorherige"; -$a->strings["Next"] = "Nächste"; -$a->strings["list"] = "Liste"; -$a->strings["User not found"] = "Nutzer nicht gefunden"; -$a->strings["This calendar format is not supported"] = "Dieses Kalenderformat wird nicht unterstützt."; -$a->strings["No exportable data found"] = "Keine exportierbaren Daten gefunden"; -$a->strings["calendar"] = "Kalender"; -$a->strings["%d contact edited."] = array( - 0 => "%d Kontakt bearbeitet.", - 1 => "%d Kontakte bearbeitet.", -); -$a->strings["Could not access contact record."] = "Konnte nicht auf die Kontaktdaten zugreifen."; -$a->strings["Could not locate selected profile."] = "Konnte das ausgewählte Profil nicht finden."; -$a->strings["Contact updated."] = "Kontakt aktualisiert."; -$a->strings["Failed to update contact record."] = "Aktualisierung der Kontaktdaten fehlgeschlagen."; -$a->strings["Contact has been blocked"] = "Kontakt wurde blockiert"; -$a->strings["Contact has been unblocked"] = "Kontakt wurde wieder freigegeben"; -$a->strings["Contact has been ignored"] = "Kontakt wurde ignoriert"; -$a->strings["Contact has been unignored"] = "Kontakt wird nicht mehr ignoriert"; -$a->strings["Contact has been archived"] = "Kontakt wurde archiviert"; -$a->strings["Contact has been unarchived"] = "Kontakt wurde aus dem Archiv geholt"; -$a->strings["Drop contact"] = "Kontakt löschen"; -$a->strings["Do you really want to delete this contact?"] = "Möchtest Du wirklich diesen Kontakt löschen?"; -$a->strings["Contact has been removed."] = "Kontakt wurde entfernt."; -$a->strings["You are mutual friends with %s"] = "Du hast mit %s eine beidseitige Freundschaft"; -$a->strings["You are sharing with %s"] = "Du teilst mit %s"; -$a->strings["%s is sharing with you"] = "%s teilt mit Dir"; -$a->strings["Private communications are not available for this contact."] = "Private Kommunikation ist für diesen Kontakt nicht verfügbar."; -$a->strings["Never"] = "Niemals"; -$a->strings["(Update was successful)"] = "(Aktualisierung war erfolgreich)"; -$a->strings["(Update was not successful)"] = "(Aktualisierung war nicht erfolgreich)"; -$a->strings["Suggest friends"] = "Kontakte vorschlagen"; -$a->strings["Network type: %s"] = "Netzwerktyp: %s"; -$a->strings["Communications lost with this contact!"] = "Verbindungen mit diesem Kontakt verloren!"; -$a->strings["Fetch further information for feeds"] = "Weitere Informationen zu Feeds holen"; -$a->strings["Disabled"] = "Deaktiviert"; -$a->strings["Fetch information"] = "Beziehe Information"; -$a->strings["Fetch information and keywords"] = "Beziehe Information und Schlüsselworte"; -$a->strings["Contact"] = "Kontakt"; -$a->strings["Profile Visibility"] = "Profil-Sichtbarkeit"; -$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Bitte wähle eines Deiner Profile das angezeigt werden soll, wenn %s Dein Profil aufruft."; -$a->strings["Contact Information / Notes"] = "Kontakt Informationen / Notizen"; -$a->strings["Edit contact notes"] = "Notizen zum Kontakt bearbeiten"; -$a->strings["Block/Unblock contact"] = "Kontakt blockieren/freischalten"; -$a->strings["Ignore contact"] = "Ignoriere den Kontakt"; -$a->strings["Repair URL settings"] = "URL Einstellungen reparieren"; -$a->strings["View conversations"] = "Unterhaltungen anzeigen"; -$a->strings["Last update:"] = "Letzte Aktualisierung: "; -$a->strings["Update public posts"] = "Öffentliche Beiträge aktualisieren"; -$a->strings["Update now"] = "Jetzt aktualisieren"; -$a->strings["Unblock"] = "Entsperren"; -$a->strings["Block"] = "Sperren"; -$a->strings["Unignore"] = "Ignorieren aufheben"; -$a->strings["Ignore"] = "Ignorieren"; -$a->strings["Currently blocked"] = "Derzeit geblockt"; -$a->strings["Currently ignored"] = "Derzeit ignoriert"; -$a->strings["Currently archived"] = "Momentan archiviert"; -$a->strings["Hide this contact from others"] = "Verbirg diesen Kontakt vor Anderen"; -$a->strings["Replies/likes to your public posts may still be visible"] = "Antworten/Likes auf deine öffentlichen Beiträge könnten weiterhin sichtbar sein"; -$a->strings["Notification for new posts"] = "Benachrichtigung bei neuen Beiträgen"; -$a->strings["Send a notification of every new post of this contact"] = "Sende eine Benachrichtigung, wann immer dieser Kontakt einen neuen Beitrag schreibt."; -$a->strings["Blacklisted keywords"] = "Blacklistete Schlüsselworte "; -$a->strings["Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected"] = "Komma-Separierte Liste mit Schlüsselworten, die nicht in Hashtags konvertiert werden, wenn \"Beziehe Information und Schlüsselworte\" aktiviert wurde"; -$a->strings["Actions"] = "Aktionen"; -$a->strings["Contact Settings"] = "Kontakteinstellungen"; -$a->strings["Suggestions"] = "Kontaktvorschläge"; -$a->strings["Suggest potential friends"] = "Kontakte vorschlagen"; -$a->strings["Show all contacts"] = "Alle Kontakte anzeigen"; -$a->strings["Unblocked"] = "Ungeblockt"; -$a->strings["Only show unblocked contacts"] = "Nur nicht-blockierte Kontakte anzeigen"; -$a->strings["Blocked"] = "Geblockt"; -$a->strings["Only show blocked contacts"] = "Nur blockierte Kontakte anzeigen"; -$a->strings["Ignored"] = "Ignoriert"; -$a->strings["Only show ignored contacts"] = "Nur ignorierte Kontakte anzeigen"; -$a->strings["Archived"] = "Archiviert"; -$a->strings["Only show archived contacts"] = "Nur archivierte Kontakte anzeigen"; -$a->strings["Hidden"] = "Verborgen"; -$a->strings["Only show hidden contacts"] = "Nur verborgene Kontakte anzeigen"; -$a->strings["Search your contacts"] = "Suche in deinen Kontakten"; -$a->strings["Results for: %s"] = "Ergebnisse für: %s"; -$a->strings["Archive"] = "Archivieren"; -$a->strings["Unarchive"] = "Aus Archiv zurückholen"; -$a->strings["Batch Actions"] = "Stapelverarbeitung"; -$a->strings["View all contacts"] = "Alle Kontakte anzeigen"; -$a->strings["View all common friends"] = "Alle Kontakte anzeigen"; -$a->strings["Advanced Contact Settings"] = "Fortgeschrittene Kontakteinstellungen"; -$a->strings["Mutual Friendship"] = "Beidseitige Freundschaft"; -$a->strings["is a fan of yours"] = "ist ein Fan von dir"; -$a->strings["you are a fan of"] = "Du bist Fan von"; -$a->strings["Toggle Blocked status"] = "Geblockt-Status ein-/ausschalten"; -$a->strings["Toggle Ignored status"] = "Ignoriert-Status ein-/ausschalten"; -$a->strings["Toggle Archive status"] = "Archiviert-Status ein-/ausschalten"; -$a->strings["Delete contact"] = "Lösche den Kontakt"; -$a->strings["Profile not found."] = "Profil nicht gefunden."; -$a->strings["This may occasionally happen if contact was requested by both persons and it has already been approved."] = "Das kann passieren, wenn sich zwei Kontakte gegenseitig eingeladen haben und bereits einer angenommen wurde."; -$a->strings["Response from remote site was not understood."] = "Antwort der Gegenstelle unverständlich."; -$a->strings["Unexpected response from remote site: "] = "Unerwartete Antwort der Gegenstelle: "; -$a->strings["Confirmation completed successfully."] = "Bestätigung erfolgreich abgeschlossen."; -$a->strings["Remote site reported: "] = "Gegenstelle meldet: "; -$a->strings["Temporary failure. Please wait and try again."] = "Zeitweiser Fehler. Bitte warte einige Momente und versuche es dann noch einmal."; -$a->strings["Introduction failed or was revoked."] = "Kontaktanfrage schlug fehl oder wurde zurückgezogen."; -$a->strings["Unable to set contact photo."] = "Konnte das Bild des Kontakts nicht speichern."; -$a->strings["No user record found for '%s' "] = "Für '%s' wurde kein Nutzer gefunden"; -$a->strings["Our site encryption key is apparently messed up."] = "Der Verschlüsselungsschlüssel unserer Seite ist anscheinend nicht in Ordnung."; -$a->strings["Empty site URL was provided or URL could not be decrypted by us."] = "Leere URL für die Seite erhalten oder die URL konnte nicht entschlüsselt werden."; -$a->strings["Contact record was not found for you on our site."] = "Für diesen Kontakt wurde auf unserer Seite kein Eintrag gefunden."; -$a->strings["Site public key not available in contact record for URL %s."] = "Die Kontaktdaten für URL %s enthalten keinen Public Key für den Server."; -$a->strings["The ID provided by your system is a duplicate on our system. It should work if you try again."] = "Die ID, die uns Dein System angeboten hat, ist hier bereits vergeben. Bitte versuche es noch einmal."; -$a->strings["Unable to set your contact credentials on our system."] = "Deine Kontaktreferenzen konnten nicht in unserem System gespeichert werden."; -$a->strings["Unable to update your contact profile details on our system"] = "Die Updates für Dein Profil konnten nicht gespeichert werden"; -$a->strings["%1\$s has joined %2\$s"] = "%1\$s ist %2\$s beigetreten"; -$a->strings["Item not found"] = "Beitrag nicht gefunden"; -$a->strings["Edit post"] = "Beitrag bearbeiten"; -$a->strings["Event can not end before it has started."] = "Die Veranstaltung kann nicht enden bevor sie beginnt."; -$a->strings["Event title and start time are required."] = "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden."; -$a->strings["Create New Event"] = "Neue Veranstaltung erstellen"; -$a->strings["Event details"] = "Veranstaltungsdetails"; -$a->strings["Starting date and Title are required."] = "Anfangszeitpunkt und Titel werden benötigt"; -$a->strings["Event Starts:"] = "Veranstaltungsbeginn:"; -$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["Event Finishes:"] = "Veranstaltungsende:"; -$a->strings["Adjust for viewer timezone"] = "An Zeitzone des Betrachters anpassen"; -$a->strings["Description:"] = "Beschreibung"; -$a->strings["Title:"] = "Titel:"; -$a->strings["Share this event"] = "Veranstaltung teilen"; -$a->strings["Files"] = "Dateien"; -$a->strings["This is Friendica, version"] = "Dies ist Friendica, Version"; -$a->strings["running at web location"] = "die unter folgender Webadresse zu finden ist"; -$a->strings["Please visit Friendica.com to learn more about the Friendica project."] = "Bitte besuche Friendica.com, um mehr über das Friendica Projekt zu erfahren."; -$a->strings["Bug reports and issues: please visit"] = "Probleme oder Fehler gefunden? Bitte besuche"; -$a->strings["the bugtracker at github"] = "den Bugtracker auf github"; -$a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - dot com"] = "Vorschläge, Lob, Spenden usw.: E-Mail an \"Info\" at Friendica - dot com"; -$a->strings["Installed plugins/addons/apps:"] = "Installierte Plugins/Erweiterungen/Apps:"; -$a->strings["No installed plugins/addons/apps"] = "Keine Plugins/Erweiterungen/Apps installiert"; -$a->strings["Unable to locate original post."] = "Konnte den Originalbeitrag nicht finden."; -$a->strings["Empty post discarded."] = "Leerer Beitrag wurde verworfen."; -$a->strings["System error. Post not saved."] = "Systemfehler. Beitrag konnte nicht gespeichert werden."; -$a->strings["This message was sent to you by %s, a member of the Friendica social network."] = "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica."; -$a->strings["You may visit them online at %s"] = "Du kannst sie online unter %s besuchen"; -$a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Falls Du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem Du auf diese Nachricht antwortest."; -$a->strings["%s posted an update."] = "%s hat ein Update veröffentlicht."; -$a->strings["No recipient selected."] = "Kein Empfänger gewählt."; -$a->strings["Unable to locate contact information."] = "Konnte die Kontaktinformationen nicht finden."; -$a->strings["Message could not be sent."] = "Nachricht konnte nicht gesendet werden."; -$a->strings["Message collection failure."] = "Konnte Nachrichten nicht abrufen."; -$a->strings["Message sent."] = "Nachricht gesendet."; -$a->strings["Do you really want to delete this message?"] = "Möchtest Du wirklich diese Nachricht löschen?"; -$a->strings["Message deleted."] = "Nachricht gelöscht."; -$a->strings["Conversation removed."] = "Unterhaltung gelöscht."; -$a->strings["Send Private Message"] = "Private Nachricht senden"; -$a->strings["To:"] = "An:"; -$a->strings["Subject:"] = "Betreff:"; -$a->strings["No messages."] = "Keine Nachrichten."; -$a->strings["Message not available."] = "Nachricht nicht verfügbar."; -$a->strings["Delete message"] = "Nachricht löschen"; -$a->strings["Delete conversation"] = "Unterhaltung löschen"; -$a->strings["No secure communications available. You may be able to respond from the sender's profile page."] = "Sichere Kommunikation ist nicht verfügbar. Eventuell kannst Du auf der Profilseite des Absenders antworten."; -$a->strings["Send Reply"] = "Antwort senden"; -$a->strings["Unknown sender - %s"] = "'Unbekannter Absender - %s"; -$a->strings["You and %s"] = "Du und %s"; -$a->strings["%s and You"] = "%s und Du"; -$a->strings["D, d M Y - g:i A"] = "D, d. M Y - g:i A"; -$a->strings["%d message"] = array( - 0 => "%d Nachricht", - 1 => "%d Nachrichten", -); -$a->strings["Not Extended"] = "Nicht erweitert."; -$a->strings["{0} wants to be your friend"] = "{0} möchte mit Dir in Kontakt treten"; -$a->strings["{0} sent you a message"] = "{0} schickte Dir eine Nachricht"; -$a->strings["{0} requested registration"] = "{0} möchte sich registrieren"; -$a->strings["Number of daily wall messages for %s exceeded. Message failed."] = "Maximale Anzahl der täglichen Pinnwand Nachrichten für %s ist überschritten. Zustellung fehlgeschlagen."; -$a->strings["Unable to check your home location."] = "Konnte Deinen Heimatort nicht bestimmen."; -$a->strings["No recipient."] = "Kein Empfänger."; -$a->strings["If you wish for %s to respond, please check that the privacy settings on your site allow private mail from unknown senders."] = "Wenn Du möchtest, dass %s Dir antworten kann, überprüfe Deine Privatsphären-Einstellungen und erlaube private Nachrichten von unbekannten Absendern."; -$a->strings["Recent Photos"] = "Neueste Fotos"; -$a->strings["Upload New Photos"] = "Neue Fotos hochladen"; -$a->strings["Contact information unavailable"] = "Kontaktinformationen nicht verfügbar"; -$a->strings["Album not found."] = "Album nicht gefunden."; -$a->strings["Delete Album"] = "Album löschen"; -$a->strings["Do you really want to delete this photo album and all its photos?"] = "Möchtest Du wirklich dieses Foto-Album und all seine Foto löschen?"; -$a->strings["Delete Photo"] = "Foto löschen"; -$a->strings["Do you really want to delete this photo?"] = "Möchtest Du wirklich dieses Foto löschen?"; -$a->strings["%1\$s was tagged in %2\$s by %3\$s"] = "%1\$s wurde von %3\$s in %2\$s getaggt"; -$a->strings["a photo"] = "einem Foto"; -$a->strings["Image file is empty."] = "Bilddatei ist leer."; -$a->strings["No photos selected"] = "Keine Bilder ausgewählt"; -$a->strings["You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."] = "Du verwendest %1$.2f Mbyte von %2$.2f Mbyte des Foto-Speichers."; -$a->strings["Upload Photos"] = "Bilder hochladen"; -$a->strings["New album name: "] = "Name des neuen Albums: "; -$a->strings["or existing album name: "] = "oder existierender Albumname: "; -$a->strings["Do not show a status post for this upload"] = "Keine Status-Mitteilung für diesen Beitrag anzeigen"; -$a->strings["Private Photo"] = "Privates Foto"; -$a->strings["Public Photo"] = "Öffentliches Foto"; -$a->strings["Edit Album"] = "Album bearbeiten"; -$a->strings["Show Newest First"] = "Zeige neueste zuerst"; -$a->strings["Show Oldest First"] = "Zeige älteste zuerst"; -$a->strings["View Photo"] = "Foto betrachten"; -$a->strings["Permission denied. Access to this item may be restricted."] = "Zugriff verweigert. Zugriff zu diesem Eintrag könnte eingeschränkt sein."; -$a->strings["Photo not available"] = "Foto nicht verfügbar"; -$a->strings["View photo"] = "Fotos ansehen"; -$a->strings["Edit photo"] = "Foto bearbeiten"; -$a->strings["Use as profile photo"] = "Als Profilbild verwenden"; -$a->strings["View Full Size"] = "Betrachte Originalgröße"; -$a->strings["Tags: "] = "Tags: "; -$a->strings["[Remove any tag]"] = "[Tag entfernen]"; -$a->strings["New album name"] = "Name des neuen Albums"; -$a->strings["Caption"] = "Bildunterschrift"; -$a->strings["Add a Tag"] = "Tag hinzufügen"; -$a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"; -$a->strings["Do not rotate"] = "Nicht rotieren"; -$a->strings["Rotate CW (right)"] = "Drehen US (rechts)"; -$a->strings["Rotate CCW (left)"] = "Drehen EUS (links)"; -$a->strings["Private photo"] = "Privates Foto"; -$a->strings["Public photo"] = "Öffentliches Foto"; -$a->strings["Map"] = "Karte"; -$a->strings["This introduction has already been accepted."] = "Diese Kontaktanfrage wurde bereits akzeptiert."; -$a->strings["Profile location is not valid or does not contain profile information."] = "Profiladresse ist ungültig oder stellt keine Profildaten zur Verfügung."; -$a->strings["Warning: profile location has no identifiable owner name."] = "Warnung: Es konnte kein Name des Besitzers von der angegebenen Profiladresse gefunden werden."; -$a->strings["Warning: profile location has no profile photo."] = "Warnung: Es gibt kein Profilbild bei der angegebenen Profiladresse."; -$a->strings["%d required parameter was not found at the given location"] = array( - 0 => "%d benötigter Parameter wurde an der angegebenen Stelle nicht gefunden", - 1 => "%d benötigte Parameter wurden an der angegebenen Stelle nicht gefunden", -); -$a->strings["Introduction complete."] = "Kontaktanfrage abgeschlossen."; -$a->strings["Unrecoverable protocol error."] = "Nicht behebbarer Protokollfehler."; -$a->strings["Profile unavailable."] = "Profil nicht verfügbar."; -$a->strings["%s has received too many connection requests today."] = "%s hat heute zu viele Kontaktanfragen erhalten."; -$a->strings["Spam protection measures have been invoked."] = "Maßnahmen zum Spamschutz wurden ergriffen."; -$a->strings["Friends are advised to please try again in 24 hours."] = "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen."; -$a->strings["Invalid locator"] = "Ungültiger Locator"; -$a->strings["Invalid email address."] = "Ungültige E-Mail-Adresse."; -$a->strings["This account has not been configured for email. Request failed."] = "Dieses Konto ist nicht für E-Mail konfiguriert. Anfrage fehlgeschlagen."; -$a->strings["You have already introduced yourself here."] = "Du hast Dich hier bereits vorgestellt."; -$a->strings["Apparently you are already friends with %s."] = "Es scheint so, als ob Du bereits mit %s in Kontakt stehst."; -$a->strings["Invalid profile URL."] = "Ungültige Profil-URL."; -$a->strings["Your introduction has been sent."] = "Deine Kontaktanfrage wurde gesendet."; -$a->strings["Remote subscription can't be done for your network. Please subscribe directly on your system."] = "Entferntes abon­nie­ren kann für dein Netzwerk nicht durchgeführt werden. Bitte nutze direkt die Abonnieren-Funktion deines Systems. "; -$a->strings["Please login to confirm introduction."] = "Bitte melde Dich an, um die Kontaktanfrage zu bestätigen."; -$a->strings["Incorrect identity currently logged in. Please login to this profile."] = "Momentan bist Du mit einer anderen Identität angemeldet. Bitte melde Dich mit diesem Profil an."; -$a->strings["Confirm"] = "Bestätigen"; -$a->strings["Hide this contact"] = "Verberge diesen Kontakt"; -$a->strings["Welcome home %s."] = "Willkommen zurück %s."; -$a->strings["Please confirm your introduction/connection request to %s."] = "Bitte bestätige Deine Kontaktanfrage bei %s."; -$a->strings["Please enter your 'Identity Address' from one of the following supported communications networks:"] = "Bitte gib die Adresse Deines Profils in einem der unterstützten sozialen Netzwerke an:"; -$a->strings["If you are not yet a member of the free social web, follow this link to find a public Friendica site and join us today."] = "Wenn du noch kein Mitglied dieses freien sozialen Netzwerks bist, folge diesem Link um einen öffentlichen Friendica-Server zu finden und beizutreten."; -$a->strings["Friend/Connection Request"] = "Kontaktanfrage"; -$a->strings["Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca"] = "Beispiele: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca"; -$a->strings["StatusNet/Federated Social Web"] = "StatusNet/Federated Social Web"; -$a->strings[" - please do not use this form. Instead, enter %s into your Diaspora search bar."] = " - bitte verwende dieses Formular nicht. Stattdessen suche nach %s in Deiner Diaspora Suchleiste."; $a->strings["Friendica Communications Server - Setup"] = "Friendica-Server für soziale Netzwerke – Setup"; $a->strings["Could not connect to database."] = "Verbindung zur Datenbank gescheitert."; $a->strings["Could not create table."] = "Tabelle konnte nicht angelegt werden."; @@ -1525,7 +1626,7 @@ $a->strings["Site settings"] = "Server-Einstellungen"; $a->strings["System Language:"] = "Systemsprache:"; $a->strings["Set the default language for your Friendica installation interface and to send emails."] = "Wähle die Standardsprache für deine Friendica-Installations-Oberfläche und den E-Mail-Versand"; $a->strings["Could not find a command line version of PHP in the web server PATH."] = "Konnte keine Kommandozeilenversion von PHP im PATH des Servers finden."; -$a->strings["If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron. See 'Setup the poller'"] = "Wenn Du keine Kommandozeilen-Version von PHP auf Deinem Server installiert hast, kannst Du keine Hintergrundprozesse via cron starten. Siehe 'Setup the poller'"; +$a->strings["If you don't have a command line version of PHP installed on server, you will not be able to run the background processing. See 'Setup the poller'"] = "Wenn auf deinem Server keine Kommandozeilenversion von PHP installiert ist, kannst du den Hintergrundprozess nicht einrichten. Hier findest du alternative Möglichkeiten'für das Poller Setup'"; $a->strings["PHP executable path"] = "Pfad zu PHP"; $a->strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Gib den kompletten Pfad zur ausführbaren Datei von PHP an. Du kannst dieses Feld auch frei lassen und mit der Installation fortfahren."; $a->strings["Command line PHP"] = "Kommandozeilen-PHP"; @@ -1541,9 +1642,8 @@ $a->strings["Generate encryption keys"] = "Schlüssel erzeugen"; $a->strings["libCurl PHP module"] = "PHP: libCurl-Modul"; $a->strings["GD graphics PHP module"] = "PHP: GD-Grafikmodul"; $a->strings["OpenSSL PHP module"] = "PHP: OpenSSL-Modul"; -$a->strings["mysqli PHP module"] = "PHP: mysqli-Modul"; +$a->strings["PDO or MySQLi PHP module"] = "PDO oder MySQLi PHP Modul"; $a->strings["mb_string PHP module"] = "PHP: mb_string-Modul"; -$a->strings["mcrypt PHP module"] = "PHP mcrypt Modul"; $a->strings["XML PHP module"] = "XML PHP Modul"; $a->strings["iconv module"] = "iconv module"; $a->strings["Apache mod_rewrite module"] = "Apache mod_rewrite module"; @@ -1551,13 +1651,10 @@ $a->strings["Error: Apache webserver mod-rewrite module is required but not inst $a->strings["Error: libCURL PHP module required but not installed."] = "Fehler: Das libCURL PHP Modul wird benötigt, ist aber nicht installiert."; $a->strings["Error: GD graphics PHP module with JPEG support required but not installed."] = "Fehler: Das GD-Graphikmodul für PHP mit JPEG-Unterstützung ist nicht installiert."; $a->strings["Error: openssl PHP module required but not installed."] = "Fehler: Das openssl-Modul von PHP ist nicht installiert."; -$a->strings["Error: mysqli PHP module required but not installed."] = "Fehler: Das mysqli-Modul von PHP ist nicht installiert."; +$a->strings["Error: PDO or MySQLi PHP module required but not installed."] = "Fehler: PDO oder MySQLi PHP Modul erforderlich, aber nicht installiert."; +$a->strings["Error: The MySQL driver for PDO is not installed."] = "Fehler: der MySQL Treiber für PDO ist nicht installiert"; $a->strings["Error: mb_string PHP module required but not installed."] = "Fehler: mb_string PHP Module wird benötigt ist aber nicht installiert."; -$a->strings["Error: mcrypt PHP module required but not installed."] = "Fehler: Das mcrypt Modul von PHP ist nicht installiert"; $a->strings["Error: iconv PHP module required but not installed."] = "Fehler: Das iconv-Modul von PHP ist nicht installiert."; -$a->strings["If you are using php_cli, please make sure that mcrypt module is enabled in its config file"] = "Wenn du das Modul \"php_cli\" benutzt dann versichere dich, daß das mcrypt Modul in seiner Konfigurationsdatei aktiviert ist. "; -$a->strings["Function mcrypt_create_iv() is not defined. This is needed to enable RINO2 encryption layer."] = "Die Funktion mcrypt_create_iv() ist nicht festgelegt. Dies ist notwendig um den RINO2-Encryption-Layer zu aktivieren."; -$a->strings["mcrypt_create_iv() function"] = "mcrypt_create_iv() function"; $a->strings["Error, XML PHP module required but not installed."] = "Fehler: XML PHP Modul erforderlich aber nicht installiert."; $a->strings["The web installer needs to be able to create a file called \".htconfig.php\" in the top folder of your web server and it is unable to do so."] = "Der Installationswizard muss in der Lage sein, eine Datei im Stammverzeichnis Deines Webservers anzulegen, ist allerdings derzeit nicht in der Lage, dies zu tun."; $a->strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "In den meisten Fällen ist dies ein Problem mit den Schreibrechten. Der Webserver könnte keine Schreiberlaubnis haben, selbst wenn Du sie hast."; @@ -1577,86 +1674,49 @@ $a->strings["ImageMagick supports GIF"] = "ImageMagick unterstützt GIF"; $a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text, um die Datei im Stammverzeichnis Deiner Friendica-Installation zu erzeugen."; $a->strings["

What next

"] = "

Wie geht es weiter?

"; $a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "WICHTIG: Du musst [manuell] einen Cronjob (o.ä.) für den Poller einrichten."; -$a->strings["Profile deleted."] = "Profil gelöscht."; -$a->strings["Profile-"] = "Profil-"; -$a->strings["New profile created."] = "Neues Profil angelegt."; -$a->strings["Profile unavailable to clone."] = "Profil nicht zum Duplizieren verfügbar."; -$a->strings["Profile Name is required."] = "Profilname ist erforderlich."; -$a->strings["Marital Status"] = "Familienstand"; -$a->strings["Romantic Partner"] = "Romanze"; -$a->strings["Work/Employment"] = "Arbeit / Beschäftigung"; -$a->strings["Religion"] = "Religion"; -$a->strings["Political Views"] = "Politische Ansichten"; -$a->strings["Gender"] = "Geschlecht"; -$a->strings["Sexual Preference"] = "Sexuelle Vorlieben"; -$a->strings["XMPP"] = "XMPP"; -$a->strings["Homepage"] = "Webseite"; -$a->strings["Interests"] = "Interessen"; -$a->strings["Address"] = "Adresse"; -$a->strings["Location"] = "Wohnort"; -$a->strings["Profile updated."] = "Profil aktualisiert."; -$a->strings[" and "] = " und "; -$a->strings["public profile"] = "öffentliches Profil"; -$a->strings["%1\$s changed %2\$s to “%3\$s”"] = "%1\$s hat %2\$s geändert auf “%3\$s”"; -$a->strings[" - Visit %1\$s's %2\$s"] = " – %1\$ss %2\$s besuchen"; -$a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s hat folgendes aktualisiert %2\$s, verändert wurde %3\$s."; -$a->strings["Hide contacts and friends:"] = "Kontakte und Freunde verbergen"; -$a->strings["Hide your contact/friend list from viewers of this profile?"] = "Liste der Kontakte vor Betrachtern dieses Profils verbergen?"; -$a->strings["Show more profile fields:"] = "Zeige mehr Profil-Felder:"; -$a->strings["Profile Actions"] = "Profilaktionen"; -$a->strings["Edit Profile Details"] = "Profil bearbeiten"; -$a->strings["Change Profile Photo"] = "Profilbild ändern"; -$a->strings["View this profile"] = "Dieses Profil anzeigen"; -$a->strings["Create a new profile using these settings"] = "Neues Profil anlegen und diese Einstellungen verwenden"; -$a->strings["Clone this profile"] = "Dieses Profil duplizieren"; -$a->strings["Delete this profile"] = "Dieses Profil löschen"; -$a->strings["Basic information"] = "Grundinformationen"; -$a->strings["Profile picture"] = "Profilbild"; -$a->strings["Preferences"] = "Vorlieben"; -$a->strings["Status information"] = "Status Informationen"; -$a->strings["Additional information"] = "Zusätzliche Informationen"; -$a->strings["Relation"] = "Beziehung"; -$a->strings["Your Gender:"] = "Dein Geschlecht:"; -$a->strings[" Marital Status:"] = " Beziehungsstatus:"; -$a->strings["Example: fishing photography software"] = "Beispiel: Fischen Fotografie Software"; -$a->strings["Profile Name:"] = "Profilname:"; -$a->strings["This is your public profile.
It may be visible to anybody using the internet."] = "Dies ist Dein öffentliches Profil.
Es könnte für jeden Nutzer des Internets sichtbar sein."; -$a->strings["Your Full Name:"] = "Dein kompletter Name:"; -$a->strings["Title/Description:"] = "Titel/Beschreibung:"; -$a->strings["Street Address:"] = "Adresse:"; -$a->strings["Locality/City:"] = "Wohnort:"; -$a->strings["Region/State:"] = "Region/Bundesstaat:"; -$a->strings["Postal/Zip Code:"] = "Postleitzahl:"; -$a->strings["Country:"] = "Land:"; -$a->strings["Who: (if applicable)"] = "Wer: (falls anwendbar)"; -$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Beispiele: cathy123, Cathy Williams, cathy@example.com"; -$a->strings["Since [date]:"] = "Seit [Datum]:"; -$a->strings["Tell us about yourself..."] = "Erzähle uns ein bisschen von Dir …"; -$a->strings["XMPP (Jabber) address:"] = "XMPP (Jabber) Adresse"; -$a->strings["The XMPP address will be propagated to your contacts so that they can follow you."] = "Die XMPP Adresse wird an deine Kontakte verteilt werden, so dass sie auch über XMPP mit dir in Kontakt treten können."; -$a->strings["Homepage URL:"] = "Adresse der Homepage:"; -$a->strings["Religious Views:"] = "Religiöse Ansichten:"; -$a->strings["Public Keywords:"] = "Öffentliche Schlüsselwörter:"; -$a->strings["(Used for suggesting potential friends, can be seen by others)"] = "(Wird verwendet, um potentielle Kontakte zu finden, kann von Kontakten eingesehen werden)"; -$a->strings["Private Keywords:"] = "Private Schlüsselwörter:"; -$a->strings["(Used for searching profiles, never shown to others)"] = "(Wird für die Suche nach Profilen verwendet und niemals veröffentlicht)"; -$a->strings["Musical interests"] = "Musikalische Interessen"; -$a->strings["Books, literature"] = "Bücher, Literatur"; -$a->strings["Television"] = "Fernsehen"; -$a->strings["Film/dance/culture/entertainment"] = "Filme/Tänze/Kultur/Unterhaltung"; -$a->strings["Hobbies/Interests"] = "Hobbies/Interessen"; -$a->strings["Love/romance"] = "Liebe/Romantik"; -$a->strings["Work/employment"] = "Arbeit/Anstellung"; -$a->strings["School/education"] = "Schule/Ausbildung"; -$a->strings["Contact information and Social Networks"] = "Kontaktinformationen und Soziale Netzwerke"; -$a->strings["Edit/Manage Profiles"] = "Bearbeite/Verwalte Profile"; -$a->strings["Item has been removed."] = "Eintrag wurde entfernt."; +$a->strings["Unable to locate original post."] = "Konnte den Originalbeitrag nicht finden."; +$a->strings["Empty post discarded."] = "Leerer Beitrag wurde verworfen."; +$a->strings["System error. Post not saved."] = "Systemfehler. Beitrag konnte nicht gespeichert werden."; +$a->strings["This message was sent to you by %s, a member of the Friendica social network."] = "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica."; +$a->strings["You may visit them online at %s"] = "Du kannst sie online unter %s besuchen"; +$a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Falls Du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem Du auf diese Nachricht antwortest."; +$a->strings["%s posted an update."] = "%s hat ein Update veröffentlicht."; +$a->strings["Invalid request identifier."] = "Invalid request identifier."; +$a->strings["Discard"] = "Verwerfen"; +$a->strings["Network Notifications"] = "Netzwerk Benachrichtigungen"; +$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen"; +$a->strings["Home Notifications"] = "Pinnwand Benachrichtigungen"; +$a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen"; +$a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen"; +$a->strings["Notification type: "] = "Benachrichtigungstyp: "; +$a->strings["suggested by %s"] = "vorgeschlagen von %s"; +$a->strings["Post a new friend activity"] = "Neue-Kontakt Nachricht senden"; +$a->strings["if applicable"] = "falls anwendbar"; +$a->strings["Approve"] = "Genehmigen"; +$a->strings["Claims to be known to you: "] = "Behauptet Dich zu kennen: "; +$a->strings["yes"] = "ja"; +$a->strings["no"] = "nein"; +$a->strings["Shall your connection be bidirectional or not?"] = "Soll die Verbindung beidseitig sein oder nicht?"; +$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = "Akzeptierst du %s als Kontakt, erlaubst du damit das Lesen deiner Beiträge und abonnierst selbst auch die Beiträge von %s."; +$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Abonnent akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten."; +$a->strings["Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Teilenden akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten."; +$a->strings["Friend"] = "Kontakt"; +$a->strings["Sharer"] = "Teilenden"; +$a->strings["Subscriber"] = "Abonnent"; +$a->strings["No introductions."] = "Keine Kontaktanfragen."; +$a->strings["Show unread"] = "Ungelesene anzeigen"; +$a->strings["Show all"] = "Alle anzeigen"; +$a->strings["No more %s notifications."] = "Keine weiteren %s Benachrichtigungen"; +$a->strings["{0} wants to be your friend"] = "{0} möchte mit Dir in Kontakt treten"; +$a->strings["{0} sent you a message"] = "{0} schickte Dir eine Nachricht"; +$a->strings["{0} requested registration"] = "{0} möchte sich registrieren"; $a->strings["Theme settings updated."] = "Themeneinstellungen aktualisiert."; $a->strings["Site"] = "Seite"; $a->strings["Users"] = "Nutzer"; $a->strings["Themes"] = "Themen"; $a->strings["DB updates"] = "DB Updates"; $a->strings["Inspect Queue"] = "Warteschlange Inspizieren"; +$a->strings["Server Blocklist"] = "Server Blockliste"; $a->strings["Federation Statistics"] = "Federation Statistik"; $a->strings["Logs"] = "Protokolle"; $a->strings["View Logs"] = "Protokolle anzeigen"; @@ -1665,10 +1725,27 @@ $a->strings["check webfinger"] = "Webfinger überprüfen"; $a->strings["Plugin Features"] = "Plugin Features"; $a->strings["diagnostics"] = "Diagnose"; $a->strings["User registrations waiting for confirmation"] = "Nutzeranmeldungen die auf Bestätigung warten"; +$a->strings["The blocked domain"] = "Die blockierte Domain"; +$a->strings["The reason why you blocked this domain."] = "Die Begründung warum du diese Domain blockiert hast."; +$a->strings["Delete domain"] = "Domain löschen"; +$a->strings["Check to delete this entry from the blocklist"] = "Markieren, um diesen Eintrag von der Blocklist zu entfernen"; +$a->strings["Administration"] = "Administration"; +$a->strings["This page can be used to define a black list of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server."] = "Auf dieser Seite kannst du die Liste der blockierten Domains aus dem föderalen Netzwerk verwalten, denen es untersagt ist mit deinem Knoten zu interagieren. Für jede der blockierten Domains musst du außerdem einen Grund für die Sperrung angeben."; +$a->strings["The list of blocked servers will be made publically available on the /friendica page so that your users and people investigating communication problems can find the reason easily."] = "Die Liste der blockierten Domains wird auf der /friendica Seite öffentlich einsehbar gemacht, damit deine Nutzer und Personen die Kommunikationsprobleme erkunden, die Ursachen einfach finden können."; +$a->strings["Add new entry to block list"] = "Neuen Eintrag in die Blockliste"; +$a->strings["Server Domain"] = "Domain des Servers"; +$a->strings["The domain of the new server to add to the block list. Do not include the protocol."] = "Der Domain-Name des Servers der geblockt werden soll. Gib das Protokoll nicht mit an!"; +$a->strings["Block reason"] = "Begründung der Blockierung"; +$a->strings["Add Entry"] = "Eintrag hinzufügen"; +$a->strings["Save changes to the blocklist"] = "Änderungen der Blockliste speichern"; +$a->strings["Current Entries in the Blocklist"] = "Aktuelle Einträge der Blockliste"; +$a->strings["Delete entry from blocklist"] = "Eintrag von der Blockliste entfernen"; +$a->strings["Delete entry from blocklist?"] = "Eintrag von der Blockliste entfernen?"; +$a->strings["Server added to blocklist."] = "Server zur Blockliste hinzugefügt."; +$a->strings["Site blocklist updated."] = "Blockliste aktualisiert."; $a->strings["unknown"] = "Unbekannt"; $a->strings["This page offers you some numbers to the known part of the federated social network your Friendica node is part of. These numbers are not complete but only reflect the part of the network your node is aware of."] = "Diese Seite präsentiert einige Zahlen zu dem bekannten Teil des föderalen sozialen Netzwerks, von dem deine Friendica Installation ein Teil ist. Diese Zahlen sind nicht absolut und reflektieren nur den Teil des Netzwerks, den dein Knoten kennt."; $a->strings["The Auto Discovered Contact Directory feature is not enabled, it will improve the data displayed here."] = "Die Funktion um Automatisch ein Kontaktverzeichnis erstellen ist nicht aktiv. Es wird die hier angezeigten Daten verbessern."; -$a->strings["Administration"] = "Administration"; $a->strings["Currently this node is aware of %d nodes from the following platforms:"] = "Momentan kennt dieser Knoten %d andere Knoten der folgenden Plattformen:"; $a->strings["ID"] = "ID"; $a->strings["Recipient Name"] = "Empfänger Name"; @@ -1676,7 +1753,7 @@ $a->strings["Recipient Profile"] = "Empfänger Profil"; $a->strings["Created"] = "Erstellt"; $a->strings["Last Tried"] = "Zuletzt versucht"; $a->strings["This page lists the content of the queue for outgoing postings. These are postings the initial delivery failed for. They will be resend later and eventually deleted if the delivery fails permanently."] = "Auf dieser Seite werden die in der Warteschlange eingereihten Beiträge aufgelistet. Bei diesen Beiträgen schlug die erste Zustellung fehl. Es wird später wiederholt versucht die Beiträge zuzustellen, bis sie schließlich gelöscht werden."; -$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the convert_innodb.sql in the /util directory of your Friendica installation.
"] = "Deine DB enthält einige Tabellen die noch auf MyISAM laufen. Du solltest den Engine-Type auf InnoDB umstellen, da Friendica in Zukunft einige InnoDB Features nutzen wird. Eine Anleitung zur Umstellung kannst du hier finden. Außerdem kannst du das convert_innodb.sql Skript verwenden, das du im /util Verzeichnis deiner Friendica Installation findest."; +$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php include/dbstructure.php toinnodb of your Friendica installation for an automatic conversion.
"] = "Deine DB verwendet derzeit noch MyISAM Tabellen. Du solltest die Datenbank Engine auf InnoDB umstellen, da Friendica in Zukunft InnoDB Features verwenden wird. Eine Anleitung zur Umstellung der Datenbank kannst du hier finden. Du kannst außerdem mit dem Befehl php include/dbstructure.php toinnodb auf der Kommandozeile die Umstellung automatisch vornehmen lassen."; $a->strings["You are using a MySQL version which does not support all features that Friendica uses. You should consider switching to MariaDB."] = "Du verwendets eine MySQL Version die nicht alle Features unterstützt die Friendica verwendet. Wir empfehlen dir einen Wechsel auf MariaDB, falls dies möglich ist."; $a->strings["Normal Account"] = "Normales Konto"; $a->strings["Soapbox Account"] = "Marktschreier-Konto"; @@ -1691,7 +1768,6 @@ $a->strings["Pending registrations"] = "Anstehende Anmeldungen"; $a->strings["Version"] = "Version"; $a->strings["Active plugins"] = "Aktive Plugins"; $a->strings["Can not parse base url. Must have at least ://"] = "Die Basis-URL konnte nicht analysiert werden. Sie muss mindestens aus :// bestehen"; -$a->strings["RINO2 needs mcrypt php extension to work."] = "RINO2 benötigt die PHP Extension mcrypt."; $a->strings["Site settings updated."] = "Seiteneinstellungen aktualisiert."; $a->strings["No community page"] = "Keine Gemeinschaftsseite"; $a->strings["Public postings from users of this site"] = "Öffentliche Beiträge von Nutzer_innen dieser Seite"; @@ -1736,8 +1812,6 @@ $a->strings["SSL link policy"] = "Regeln für SSL Links"; $a->strings["Determines whether generated links should be forced to use SSL"] = "Bestimmt, ob generierte Links SSL verwenden müssen"; $a->strings["Force SSL"] = "Erzwinge SSL"; $a->strings["Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops."] = "Erzinge alle Nicht-SSL Anfragen auf SSL - Achtung: auf manchen Systemen verursacht dies eine Endlosschleife."; -$a->strings["Old style 'Share'"] = "Altes \"Teilen\" Element"; -$a->strings["Deactivates the bbcode element 'share' for repeating items."] = "Deaktiviert das BBCode Element \"share\" beim Wiederholen von Beiträgen."; $a->strings["Hide help entry from navigation menu"] = "Verberge den Menüeintrag für die Hilfe im Navigationsmenü"; $a->strings["Hides the menu entry for the Help pages from the navigation menu. You can still access it calling /help directly."] = "Verbirgt den Menüeintrag für die Hilfe-Seiten im Navigationsmenü. Die Seiten können weiterhin über /help aufgerufen werden."; $a->strings["Single user instance"] = "Ein-Nutzer Instanz"; @@ -1783,8 +1857,6 @@ $a->strings["OpenID support"] = "OpenID Unterstützung"; $a->strings["OpenID support for registration and logins."] = "OpenID-Unterstützung für Registrierung und Login."; $a->strings["Fullname check"] = "Namen auf Vollständigkeit überprüfen"; $a->strings["Force users to register with a space between firstname and lastname in Full name, as an antispam measure"] = "Leerzeichen zwischen Vor- und Nachname im vollständigen Namen erzwingen, um SPAM zu vermeiden."; -$a->strings["UTF-8 Regular expressions"] = "UTF-8 Reguläre Ausdrücke"; -$a->strings["Use PHP UTF8 regular expressions"] = "PHP UTF8 Ausdrücke verwenden"; $a->strings["Community Page Style"] = "Art der Gemeinschaftsseite"; $a->strings["Type of community page to show. 'Global community' shows every public posting from an open distributed network that arrived on this server."] = "Welche Art der Gemeinschaftsseite soll verwendet werden? Globale Gemeinschaftsseite zeigt alle öffentlichen Beiträge eines offenen dezentralen Netzwerks an die auf diesem Server eintreffen."; $a->strings["Posts per user on community page"] = "Anzahl der Beiträge pro Benutzer auf der Gemeinschaftsseite"; @@ -1807,14 +1879,12 @@ $a->strings["Proxy user"] = "Proxy Nutzer"; $a->strings["Proxy URL"] = "Proxy URL"; $a->strings["Network timeout"] = "Netzwerk Wartezeit"; $a->strings["Value is in seconds. Set to 0 for unlimited (not recommended)."] = "Der Wert ist in Sekunden. Setze 0 für unbegrenzt (nicht empfohlen)."; -$a->strings["Delivery interval"] = "Zustellungsintervall"; -$a->strings["Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers."] = "Verzögere im Hintergrund laufende Auslieferungsprozesse um die angegebene Anzahl an Sekunden, um die Systemlast zu verringern. Empfehlungen: 4-5 für Shared-Hosts, 2-3 für VPS, 0-1 für große dedizierte Server."; -$a->strings["Poll interval"] = "Abfrageintervall"; -$a->strings["Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval."] = "Verzögere Hintergrundprozesse um diese Anzahl an Sekunden, um die Systemlast zu reduzieren. Bei 0 Sekunden wird das Auslieferungsintervall verwendet."; $a->strings["Maximum Load Average"] = "Maximum Load Average"; $a->strings["Maximum system load before delivery and poll processes are deferred - default 50."] = "Maximale Systemlast bevor Verteil- und Empfangsprozesse verschoben werden - Standard 50"; $a->strings["Maximum Load Average (Frontend)"] = "Maximum Load Average (Frontend)"; $a->strings["Maximum system load before the frontend quits service - default 50."] = "Maximale Systemlast bevor Vordergrundprozesse pausiert werden - Standard 50."; +$a->strings["Minimal Memory"] = "Minimaler Speicher"; +$a->strings["Minimal free memory in MB for the poller. Needs access to /proc/meminfo - default 0 (deactivated)."] = "Minimal freier Speicher in MB für den Poller. Benötigt Zugriff auf /proc/meminfo - Standard 0 (Deaktiviert)."; $a->strings["Maximum table size for optimization"] = "Maximale Tabellengröße zur Optimierung"; $a->strings["Maximum table size (in MB) for the automatic optimization - default 100 MB. Enter -1 to disable it."] = "Maximale Tabellengröße (in MB) für die automatische Optimierung - Standard 100 MB. Gib -1 für Deaktivierung ein."; $a->strings["Minimum level of fragmentation"] = "Minimaler Fragmentationsgrad"; @@ -1831,10 +1901,6 @@ $a->strings["Search the local directory"] = "Lokales Verzeichnis durchsuchen"; $a->strings["Search the local directory instead of the global directory. When searching locally, every search will be executed on the global directory in the background. This improves the search results when the search is repeated."] = "Suche im lokalen Verzeichnis anstelle des globalen Verzeichnisses durchführen. Jede Suche wird im Hintergrund auch im globalen Verzeichnis durchgeführt umd die Suchresultate zu verbessern, wenn diese Suche wiederholt wird."; $a->strings["Publish server information"] = "Server Informationen veröffentlichen"; $a->strings["If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See the-federation.info for details."] = "Wenn aktiviert, werden allgemeine Informationen über den Server und Nutzungsdaten veröffentlicht. Die Daten beinhalten den Namen sowie die Version des Servers, die Anzahl der Nutzer_innen mit öffentlichen Profilen, die Anzahl der Beiträge sowie aktivierte Protokolle und Connectoren. Für Details bitte the-federation.info aufrufen."; -$a->strings["Use MySQL full text engine"] = "Nutze MySQL full text engine"; -$a->strings["Activates the full text engine. Speeds up search - but can only search for four and more characters."] = "Aktiviert die 'full text engine'. Beschleunigt die Suche - aber es kann nur nach vier oder mehr Zeichen gesucht werden."; -$a->strings["Suppress Language"] = "Sprachinformation unterdrücken"; -$a->strings["Suppress language information in meta information about a posting."] = "Verhindert das Erzeugen der Meta-Information zur Spracherkennung eines Beitrags."; $a->strings["Suppress Tags"] = "Tags Unterdrücken"; $a->strings["Suppress showing a list of hashtags at the end of the posting."] = "Unterdrückt die Anzeige von Tags am Ende eines Beitrags."; $a->strings["Path to item cache"] = "Pfad zum Eintrag Cache"; @@ -1843,26 +1909,18 @@ $a->strings["Cache duration in seconds"] = "Cache-Dauer in Sekunden"; $a->strings["How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1."] = "Wie lange sollen die gecachedten Dateien vorgehalten werden? Grundeinstellung sind 86400 Sekunden (ein Tag). Um den Item Cache zu deaktivieren, setze diesen Wert auf -1."; $a->strings["Maximum numbers of comments per post"] = "Maximale Anzahl von Kommentaren pro Beitrag"; $a->strings["How much comments should be shown for each post? Default value is 100."] = "Wie viele Kommentare sollen pro Beitrag angezeigt werden? Standardwert sind 100."; -$a->strings["Path for lock file"] = "Pfad für die Sperrdatei"; -$a->strings["The lock file is used to avoid multiple pollers at one time. Only define a folder here."] = "Die lock-Datei wird benutzt, damit nicht mehrere poller auf einmal laufen. Definiere hier einen Dateiverzeichnis."; $a->strings["Temp path"] = "Temp Pfad"; $a->strings["If you have a restricted system where the webserver can't access the system temp path, enter another path here."] = "Solltest du ein eingeschränktes System haben, auf dem der Webserver nicht auf das temp Verzeichnis des Systems zugreifen kann, setze hier einen anderen Pfad."; $a->strings["Base path to installation"] = "Basis-Pfad zur Installation"; $a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = "Falls das System nicht den korrekten Pfad zu deiner Installation gefunden hat, gib den richtigen Pfad bitte hier ein. Du solltest hier den Pfad nur auf einem eingeschränkten System angeben müssen, bei dem du mit symbolischen Links auf dein Webverzeichnis verweist."; $a->strings["Disable picture proxy"] = "Bilder Proxy deaktivieren"; $a->strings["The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwith."] = "Der Proxy für Bilder verbessert die Leistung und Privatsphäre der Nutzer. Er sollte nicht auf Systemen verwendet werden, die nur über begrenzte Bandbreite verfügen."; -$a->strings["Enable old style pager"] = "Den Old-Style Pager aktiviren"; -$a->strings["The old style pager has page numbers but slows down massively the page speed."] = "Der Old-Style Pager zeigt Seitennummern an, verlangsamt aber auch drastisch das Laden einer Seite."; $a->strings["Only search in tags"] = "Nur in Tags suchen"; $a->strings["On large systems the text search can slow down the system extremely."] = "Auf großen Knoten kann die Volltext-Suche das System ausbremsen."; $a->strings["New base url"] = "Neue Basis-URL"; $a->strings["Change base url for this server. Sends relocate message to all DFRN contacts of all users."] = "Ändert die Basis-URL dieses Servers und sendet eine Umzugsmitteilung an alle DFRN Kontakte deiner Nutzer_innen."; $a->strings["RINO Encryption"] = "RINO Verschlüsselung"; $a->strings["Encryption layer between nodes."] = "Verschlüsselung zwischen Friendica Instanzen"; -$a->strings["Embedly API key"] = "Embedly API Schlüssel"; -$a->strings["Embedly is used to fetch additional data for web pages. This is an optional parameter."] = "Embedly wird verwendet um zusätzliche Informationen von Webseiten zu laden. Dies ist ein optionaler Parameter."; -$a->strings["Enable 'worker' background processing"] = "Aktiviere die 'Worker' Hintergrundprozesse"; -$a->strings["The worker background processing limits the number of parallel background jobs to a maximum number and respects the system load."] = "Der 'background worker' Prozess begrenzt die Zahl der Prozesse, die im Hintergrund parallel laufen und beachtet dabei die Systemlast."; $a->strings["Maximum number of parallel workers"] = "Maximale Anzahl parallel laufender Worker"; $a->strings["On shared hosters set this to 2. On larger systems, values of 10 are great. Default value is 4."] = "Wenn dein Knoten bei einem Shared Hoster ist, setzte diesen Wert auf 2. Auf größeren Systemen funktioniert ein Wert von 10 recht gut. Standardeinstellung sind 4."; $a->strings["Don't use 'proc_open' with the worker"] = "'proc_open' nicht mit den Workern verwenden"; @@ -1907,7 +1965,6 @@ $a->strings["User waiting for permanent deletion"] = "Nutzer wartet auf permanen $a->strings["Request date"] = "Anfragedatum"; $a->strings["No registrations."] = "Keine Neuanmeldungen."; $a->strings["Note from the user"] = "Hinweis vom Nutzer"; -$a->strings["Approve"] = "Genehmigen"; $a->strings["Deny"] = "Verwehren"; $a->strings["Site admin"] = "Seitenadministrator"; $a->strings["Account expired"] = "Account ist abgelaufen"; @@ -1946,56 +2003,34 @@ $a->strings["PHP logging"] = "PHP Protokollieren"; $a->strings["To enable logging of PHP errors and warnings you can add the following to the .htconfig.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them."] = "Um PHP Warnungen und Fehler zu protokollieren, kannst du die folgenden Zeilen zur .htconfig.php Datei deiner Installation hinzufügen. Den Dateinamen der Log-Datei legst du in der Zeile mit dem 'error_log' fest, Er ist relativ zum Friendica-Stammverzeichnis und muss schreibbar durch den Webserver sein. Eine \"1\" als Option für die Punkte 'log_errors' und 'display_errors' aktiviert die Funktionen zum Protokollieren bzw. Anzeigen der Fehler, eine \"0\" deaktiviert sie."; $a->strings["Lock feature %s"] = "Feature festlegen: %s"; $a->strings["Manage Additional Features"] = "Zusätzliche Features Verwalten"; -$a->strings["No contacts."] = "Keine Kontakte."; -$a->strings["Remove term"] = "Begriff entfernen"; -$a->strings["Warning: This group contains %s member from a network that doesn't allow non public messages."] = array( - 0 => "Warnung: Diese Gruppe beinhaltet %s Person aus einem Netzwerk das keine nicht öffentlichen Beiträge empfangen kann.", - 1 => "Warnung: Diese Gruppe beinhaltet %s Personen aus Netzwerken die keine nicht-öffentlichen Beiträge empfangen können.", -); -$a->strings["Messages in this group won't be send to these receivers."] = "Beiträge in dieser Gruppe werden deshalb nicht an diese Personen zugestellt werden."; -$a->strings["Private messages to this person are at risk of public disclosure."] = "Private Nachrichten an diese Person könnten an die Öffentlichkeit gelangen."; -$a->strings["Invalid contact."] = "Ungültiger Kontakt."; -$a->strings["Commented Order"] = "Neueste Kommentare"; -$a->strings["Sort by Comment Date"] = "Nach Kommentardatum sortieren"; -$a->strings["Posted Order"] = "Neueste Beiträge"; -$a->strings["Sort by Post Date"] = "Nach Beitragsdatum sortieren"; -$a->strings["Posts that mention or involve you"] = "Beiträge, in denen es um Dich geht"; -$a->strings["New"] = "Neue"; -$a->strings["Activity Stream - by date"] = "Aktivitäten-Stream - nach Datum"; -$a->strings["Shared Links"] = "Geteilte Links"; -$a->strings["Interesting Links"] = "Interessante Links"; -$a->strings["Starred"] = "Markierte"; -$a->strings["Favourite Posts"] = "Favorisierte Beiträge"; -$a->strings["Only logged in users are permitted to perform a search."] = "Nur eingeloggten Benutzern ist das Suchen gestattet."; -$a->strings["Too Many Requests"] = "Zu viele Abfragen"; -$a->strings["Only one search per minute is permitted for not logged in users."] = "Es ist nur eine Suchanfrage pro Minute für nicht eingeloggte Benutzer gestattet."; -$a->strings["Items tagged with: %s"] = "Beiträge die mit %s getaggt sind"; -$a->strings["Invalid request identifier."] = "Invalid request identifier."; -$a->strings["Discard"] = "Verwerfen"; -$a->strings["Network Notifications"] = "Netzwerk Benachrichtigungen"; -$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen"; -$a->strings["Home Notifications"] = "Pinnwand Benachrichtigungen"; -$a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen"; -$a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen"; -$a->strings["Notification type: "] = "Benachrichtigungstyp: "; -$a->strings["suggested by %s"] = "vorgeschlagen von %s"; -$a->strings["Post a new friend activity"] = "Neue-Kontakt Nachricht senden"; -$a->strings["if applicable"] = "falls anwendbar"; -$a->strings["Claims to be known to you: "] = "Behauptet Dich zu kennen: "; -$a->strings["yes"] = "ja"; -$a->strings["no"] = "nein"; -$a->strings["Shall your connection be bidirectional or not?"] = "Soll die Verbindung beidseitig sein oder nicht?"; -$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = "Akzeptierst du %s als Kontakt, erlaubst du damit das Lesen deiner Beiträge und abonnierst selbst auch die Beiträge von %s."; -$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Abonnent akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten."; -$a->strings["Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Teilenden akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten."; -$a->strings["Friend"] = "Kontakt"; -$a->strings["Sharer"] = "Teilenden"; -$a->strings["Subscriber"] = "Abonnent"; -$a->strings["No introductions."] = "Keine Kontaktanfragen."; -$a->strings["Show unread"] = "Ungelesene anzeigen"; -$a->strings["Show all"] = "Alle anzeigen"; -$a->strings["No more %s notifications."] = "Keine weiteren %s Benachrichtigungen"; $a->strings["via"] = "via"; +$a->strings["greenzero"] = "greenzero"; +$a->strings["purplezero"] = "purplezero"; +$a->strings["easterbunny"] = "easterbunny"; +$a->strings["darkzero"] = "darkzero"; +$a->strings["comix"] = "comix"; +$a->strings["slackr"] = "slackr"; +$a->strings["Variations"] = "Variationen"; +$a->strings["Default"] = "Standard"; +$a->strings["Note: "] = "Hinweis:"; +$a->strings["Check image permissions if all users are allowed to visit the image"] = "Überprüfe, dass alle Benutzer die Berechtigung haben dieses Bild anzusehen"; +$a->strings["Select scheme"] = "Schema auswählen"; +$a->strings["Navigation bar background color"] = "Hintergrundfarbe der Navigationsleiste"; +$a->strings["Navigation bar icon color "] = "Icon Farbe in der Navigationsleiste"; +$a->strings["Link color"] = "Linkfarbe"; +$a->strings["Set the background color"] = "Hintergrundfarbe festlegen"; +$a->strings["Content background transparency"] = "Transparanz des Hintergrunds von Beiträgem"; +$a->strings["Set the background image"] = "Hintergrundbild festlegen"; +$a->strings["Repeat the image"] = "Bild wiederholen"; +$a->strings["Will repeat your image to fill the background."] = "Wiederholt das Bild um den Hintergrund auszufüllen."; +$a->strings["Stretch"] = "Strecken"; +$a->strings["Will stretch to width/height of the image."] = "Streckt Breite/Höhe des Bildes."; +$a->strings["Resize fill and-clip"] = "Größe anpassen - Ausfüllen und abschneiden"; +$a->strings["Resize to fill and retain aspect ratio."] = "Größe anpassen: Ausfüllen und Seitenverhältnis beibehalten"; +$a->strings["Resize best fit"] = "Größe anpassen - Optimale Größe"; +$a->strings["Resize to best fit and retain aspect ratio."] = "Größe anpassen - Optimale Größe und Seitenverhältnisse beibehalten"; +$a->strings["Guest"] = "Gast"; +$a->strings["Visitor"] = "Besucher"; $a->strings["Alignment"] = "Ausrichtung"; $a->strings["Left"] = "Links"; $a->strings["Center"] = "Mitte"; @@ -2012,47 +2047,6 @@ $a->strings["Find Friends"] = "Kontakte finden"; $a->strings["Last users"] = "Letzte Nutzer"; $a->strings["Local Directory"] = "Lokales Verzeichnis"; $a->strings["Quick Start"] = "Schnell-Start"; -$a->strings["greenzero"] = "greenzero"; -$a->strings["purplezero"] = "purplezero"; -$a->strings["easterbunny"] = "easterbunny"; -$a->strings["darkzero"] = "darkzero"; -$a->strings["comix"] = "comix"; -$a->strings["slackr"] = "slackr"; -$a->strings["Variations"] = "Variationen"; -$a->strings["Midnight"] = "Mitternacht"; -$a->strings["Zenburn"] = "Zenburn"; -$a->strings["Bootstrap"] = "Bootstrap"; -$a->strings["Shades of Pink"] = "Shades of Pink"; -$a->strings["Lime and Orange"] = "Lime and Orange"; -$a->strings["GeoCities Retro"] = "GeoCities Retro"; -$a->strings["Background Image"] = "Hintergrundbild"; -$a->strings["The URL to a picture (e.g. from your photo album) that should be used as background image."] = "Die URL zum Bild (z.B. aus deinem Foto Album), das als Hintergrundbild verwendet werden soll."; -$a->strings["Background Color"] = "Hintergrundfarbe"; -$a->strings["HEX value for the background color. Don't include the #"] = "HEX Wert der Hintergrundfarbe, ohne das #"; -$a->strings["font size"] = "Zeichengröße"; -$a->strings["base font size for your interface"] = "Basiszeichengröße für das Interface"; -$a->strings["Display Accesskeys"] = "Accesskeys anzeigen"; -$a->strings["Diaplay the access keys assigned to some menu element in the web interface."] = "Einige Menüelemente sind über Accesskeys aufrufbar. Sollen diese angezeigt werden?"; -$a->strings["Repeat the image"] = "Bild wiederholen"; -$a->strings["Will repeat your image to fill the background."] = "Wiederholt das Bild um den Hintergrund auszufüllen."; -$a->strings["Stretch"] = "Strecken"; -$a->strings["Will stretch to width/height of the image."] = "Streckt Breite/Höhe des Bildes."; -$a->strings["Resize fill and-clip"] = "Größe anpassen - Ausfüllen und abschneiden"; -$a->strings["Resize to fill and retain aspect ratio."] = "Größe anpassen: Ausfüllen und Seitenverhältnis beibehalten"; -$a->strings["Resize best fit"] = "Größe anpassen - Optimale Größe"; -$a->strings["Resize to best fit and retain aspect ratio."] = "Größe anpassen - Optimale Größe und Seitenverhältnisse beibehalten"; -$a->strings["Default"] = "Standard"; -$a->strings["Note: "] = "Hinweis:"; -$a->strings["Check image permissions if all users are allowed to visit the image"] = "Überprüfe, dass alle Benutzer die Berechtigung haben dieses Bild anzusehen"; -$a->strings["Select scheme"] = "Schema auswählen"; -$a->strings["Navigation bar background color"] = "Hintergrundfarbe der Navigationsleiste"; -$a->strings["Navigation bar icon color "] = "Icon Farbe in der Navigationsleiste"; -$a->strings["Link color"] = "Linkfarbe"; -$a->strings["Set the background color"] = "Hintergrundfarbe festlegen"; -$a->strings["Content background transparency"] = "Transparanz des Hintergrunds von Beiträgem"; -$a->strings["Set the background image"] = "Hintergrundbild festlegen"; -$a->strings["Guest"] = "Gast"; -$a->strings["Visitor"] = "Besucher"; $a->strings["toggle mobile"] = "auf/von Mobile Ansicht wechseln"; $a->strings["Delete this item?"] = "Diesen Beitrag löschen?"; $a->strings["show fewer"] = "weniger anzeigen"; diff --git a/view/php/default.php b/view/php/default.php index e51b531b5a..5adef21a2d 100644 --- a/view/php/default.php +++ b/view/php/default.php @@ -1,19 +1,19 @@ - - - - <?php if(x($page,'title')) echo $page['title'] ?> - - - - - - -
- -
- -
- -
- - + + + + <?php if(x($page,'title')) echo $page['title'] ?> + + + + + + +
+ +
+ +
+ +
+ + diff --git a/view/php/minimal.php b/view/php/minimal.php index e93aac1125..9831ca5e55 100644 --- a/view/php/minimal.php +++ b/view/php/minimal.php @@ -1,14 +1,13 @@ - - - - <?php if(x($page,'title')) echo $page['title'] ?> - - - - -
- -
- - - + + + + <?php if(x($page,'title')) echo $page['title'] ?> + + + + +
+ +
+ + diff --git a/view/templates/admin_blocklist.tpl b/view/templates/admin_blocklist.tpl new file mode 100644 index 0000000000..1484c987e9 --- /dev/null +++ b/view/templates/admin_blocklist.tpl @@ -0,0 +1,33 @@ + +
+

{{$title}} - {{$page}}

+

{{$intro}}

+

{{$public}}

+ +

{{$addtitle}}

+
+ + {{include file="field_input.tpl" field=$newdomain}} + {{include file="field_input.tpl" field=$newreason}} +
+
+ + {{if $entries}} +

{{$currenttitle}}

+

{{$currentintro}}

+
+ + {{foreach $entries as $e}} + {{include file="field_input.tpl" field=$e.domain}} + {{include file="field_input.tpl" field=$e.reason}} + {{include file="field_checkbox.tpl" field=$e.delete}} + {{/foreach}} +
+ {{/if}} +
+ +
diff --git a/view/templates/admin_site.tpl b/view/templates/admin_site.tpl index 196bc479b5..6a3c3fbcdd 100644 --- a/view/templates/admin_site.tpl +++ b/view/templates/admin_site.tpl @@ -118,7 +118,6 @@ {{include file="field_input.tpl" field=$proxy}} {{include file="field_input.tpl" field=$proxyuser}} {{include file="field_input.tpl" field=$timeout}} - {{include file="field_input.tpl" field=$maxloadavg}} {{include file="field_input.tpl" field=$maxloadavg_frontend}} {{include file="field_input.tpl" field=$optimize_max_tablesize}} {{include file="field_input.tpl" field=$optimize_fragmentation}} @@ -146,6 +145,8 @@

{{$worker_title}}

+ {{include file="field_input.tpl" field=$maxloadavg}} + {{include file="field_input.tpl" field=$min_memory}} {{include file="field_input.tpl" field=$worker_queues}} {{include file="field_checkbox.tpl" field=$worker_dont_fork}} {{include file="field_checkbox.tpl" field=$worker_fastlane}} diff --git a/view/templates/group_drop.tpl b/view/templates/group_drop.tpl index 9b8ff98708..b9a6953d8b 100644 --- a/view/templates/group_drop.tpl +++ b/view/templates/group_drop.tpl @@ -1,10 +1,12 @@
- + +
diff --git a/view/templates/groupeditor.tpl b/view/templates/groupeditor.tpl index 86458ded2e..bde686040b 100644 --- a/view/templates/groupeditor.tpl +++ b/view/templates/groupeditor.tpl @@ -1,21 +1,61 @@ +{{* Template for the contact group list *}} + +{{* The contacts who are already members of the contact group *}}
-

{{$groupeditor.label_members}}

-
-{{if $groupeditor.members }} - {{foreach $groupeditor.members as $c}} {{$c}} {{/foreach}} -{{else}} -{{$groupeditor.group_is_empty}} -{{/if}} -
-
-
+

{{$groupeditor.label_members}}

+
+ + {{if $groupeditor.members }} + + {{foreach $groupeditor.members as $c}} + {{* If there are too many contacts we use another view mode *}} + {{if $shortmode}} + + {{else}} + {{* The normal view mode *}} +
+ + {{$c.name}} + +
+ {{/if}} + {{/foreach}} + + {{else}} + {{$groupeditor.group_is_empty}} + {{/if}} +
+ +
+
+{{* The contacts who are not members of the contact group *}}
-

{{$groupeditor.label_contacts}}

-
-{{foreach $groupeditor.contacts as $m}} {{$m}} {{/foreach}} -
-
+

{{$groupeditor.label_contacts}}

+
+ {{foreach $groupeditor.contacts as $m}} + {{* If there are too many contacts we use another view mode *}} + {{if $shortmode}} + + {{else}} + {{* The normal view mode *}} +
+ + {{$m.name}} + +
+ {{/if}} + {{/foreach}} +
+
diff --git a/view/templates/intros.tpl b/view/templates/intros.tpl index e3933e3815..2d0bf9bd06 100644 --- a/view/templates/intros.tpl +++ b/view/templates/intros.tpl @@ -14,7 +14,7 @@
- +{{if $discard}}{{/if}}
diff --git a/view/theme/duepuntozero/config.php b/view/theme/duepuntozero/config.php index 381b067167..b1ec4bae53 100644 --- a/view/theme/duepuntozero/config.php +++ b/view/theme/duepuntozero/config.php @@ -1,8 +1,11 @@ diff --git a/view/theme/duepuntozero/theme.php b/view/theme/duepuntozero/theme.php index c674a99d99..dc8f29b2fa 100644 --- a/view/theme/duepuntozero/theme.php +++ b/view/theme/duepuntozero/theme.php @@ -1,5 +1,7 @@ li:hover, -.media-list > li.selected { +.media-list > li.selected, +.media-list > li.active { border-left: 3px solid $link_color; background-color: rgba(247, 247, 247, $contentbg_transp); } @@ -2015,9 +2031,9 @@ ul.dropdown-menu li:hover { .allfriends-content-wrapper, .match-content-wrapper, .dirfind-content-wrapper, .directory-content-wrapper, .manage-content-wrapper, .notes-content-wrapper, .message-content-wrapper, .apps-content-wrapper, .photos-content-wrapper, -.admin-content-wrapper, .group-content-wrapper, .viewcontacts-content-wrapper, -.dfrn_request-content-wrapper, .friendica-content-wrapper, .credits-content-wrapper, -.nogroup-content-wrapper, .profperm-content-wrapper { +.admin-content-wrapper, .viewcontacts-content-wrapper, .dfrn_request-content-wrapper, +.friendica-content-wrapper, .credits-content-wrapper, .nogroup-content-wrapper, +.profperm-content-wrapper { min-height: calc(100vh - 150px); padding: 15px; padding-bottom: 20px; @@ -2064,6 +2080,9 @@ ul.viewcontact_wrapper > li { position: relative;*/ /*border-left: 3px solid white;*/ } +.contact-wrapper .contact-photo-wrapper button { + padding: 0; +} .contact-wrapper.media { overflow: visible; word-wrap: break-word; @@ -2094,6 +2113,9 @@ ul.viewcontact_wrapper > li { .contact-wrapper .contact-photo-overlay-content.xl { font-size: 48px; } +.contact-wrapper .contact-photo-menu { + top: auto; +} .contact-entry-desc { color: #555; @@ -2167,6 +2189,61 @@ ul li:hover .contact-wrapper .contact-action-link:hover { padding-top: 10px; } +/* group edit page */ +.group-actions { + margin-top: 20px; + margin-bottom: 10px; + font-size: 30px; +} +.group-actions button, +.group-actions a { + font-size: 18px; +} +#group-edit-wrapper { + display: none; +} +#group-update-wrapper .contact-photo-overlay { + display: none; +} +#group-update-wrapper .viewcontact_wrapper .contact-group-actions { + height: 100%; + margin-top: -10px; + display: flex; +} +#group-update-wrapper .viewcontact_wrapper .contact-action-link { + opacity: 0.8; + font-size: 20px; + line-height: 50px; +} +#group-update-wrapper .viewcontact_wrapper .contact-action-link:hover { + opacity: 1; +} +#group-update-wrapper .shortmode { + height: 53px; + overflow: hidden; +} +#group-update-wrapper .shortmode .contact-photo { + height: 32px; + width: 32px; +} +#group-update-wrapper .shortmode .media { + overflow: hidden; +} +#group-update-wrapper .shortmode .contact-entry-desc { + font-size: 12px !important; +} +#group-update-wrapper .shortmode .contact-entry-desc h4.media-heading { + margin: 0; +} +#group-update-wrapper .shortmode .contact-entry-desc h4.media-heading a { + font-size: 13px !important; + white-space: nowrap; +} +#group-update-wrapper .shortmode .contact-entry-desc .contact-entry-rel, +#group-update-wrapper .shortmode .contact-entry-desc .contact-entry-network { + display: none; +} + /* private mail */ .message-content-wrapper > li { /* we need this overwriting because we have no template file diff --git a/view/theme/frio/js/mod_group.js b/view/theme/frio/js/mod_group.js new file mode 100644 index 0000000000..bc513aca9e --- /dev/null +++ b/view/theme/frio/js/mod_group.js @@ -0,0 +1,88 @@ + +/** + * @file view/theme/frio/js/mod_group.js + * @brief The javascript for the group module + */ + + +$(document).ready(function() { + // Add an event listeners on buttons for switching the contact list view + $("body").on("click", ".group-list-switcher", function() { + switchGroupViewMode(this); + }); +}); + +/** + * @brief Change the group membership of the contacts and fetch the new grup list + * as html + * + * @param {int} gid The group ID + * @param {int} cid The contact ID + * @param {string} sec_token The security token + * + * @returns {undefined} + */ +function groupChangeMember(gid, cid, sec_token) { + $("#contact-entry-wrapper-" + cid).fadeTo("fast", 0.33); + $(".tooltip").tooltip("hide"); + $("body").css("cursor", "wait"); + + $.get('group/' + gid + '/' + cid + "?t=" + sec_token, function(data) { + // Insert the new group member list + $("#group-update-wrapper").html(data); + + // Apply the actual gropu list view mode to the new + // group list html + var activeMode = $(".group-list-switcher.active"); + switchGroupViewMode(activeMode[0]); + + $("body").css("cursor", "auto"); + }); +} + +/** + * @brief Change the group list view mode + * + * @param {object} elm The button element of the view mode switcher + * @returns {undefined} + */ +function switchGroupViewMode(elm) { + // Remove the active class from group list switcher buttons + $(".group-list-switcher").removeClass("active"); + // And add it to the active button element + $(elm).addClass("active"); + + // Add or remove the css classes for the group list with regard to the active view mode + if (elm.id === "group-list-small") { + $("#contact-group-list > li").addClass("shortmode col-lg-6 col-md-6 col-sm-6 col-xs-12"); + } else { + $("#contact-group-list > li").removeClass("shortmode col-lg-6 col-md-6 col-sm-6 col-xs-12"); + } +} + +/** + * @brief Filter the group member list for contacts + * + * @returns {undefined} + */ +function filterList() { + // Declare variables + var input, filter, ul, li, a, i; + input = document.getElementById("contacts-search"); + filter = input.value.toUpperCase(); + li = document.querySelectorAll("#contact-group-list>li"); + + // Loop through all list items, and hide those who don't match the search query + for (i = 0; i < li.length; i++) { + // Get the heading element + var mh = li[i].getElementsByClassName("media-heading")[0]; + // The first child of the heading element should contain + // the text which we want to filter + a = mh.firstChild; + if (a.innerHTML.toUpperCase().indexOf(filter) > -1) { + li[i].style.display = ""; + } else { + li[i].style.display = "none"; + } + } +} diff --git a/view/theme/frio/php/default.php b/view/theme/frio/php/default.php index c56f63d9e3..ef7e413ad8 100644 --- a/view/theme/frio/php/default.php +++ b/view/theme/frio/php/default.php @@ -15,14 +15,14 @@ <?php if(x($page,'title')) echo $page['title'] ?> - + - + - - + - + diff --git a/view/theme/frio/templates/admin_aside.tpl b/view/theme/frio/templates/admin_aside.tpl new file mode 100644 index 0000000000..ec19ec92e9 --- /dev/null +++ b/view/theme/frio/templates/admin_aside.tpl @@ -0,0 +1,85 @@ + + +
+

{{$admtxt}}

+ + + + {{if $admin.update}} + + {{/if}} +
+ +{{if $admin.plugins_admin}} +
+

{{$plugadmtxt}}

+
    + {{foreach $admin.plugins_admin as $name => $item}} + + {{/foreach}} +
+
+{{/if}} + + + + diff --git a/view/theme/frio/templates/contact_template.tpl b/view/theme/frio/templates/contact_template.tpl index 36564cf337..e1c059eddf 100644 --- a/view/theme/frio/templates/contact_template.tpl +++ b/view/theme/frio/templates/contact_template.tpl @@ -1,11 +1,11 @@ -
+
{{* This is a wrapper for the contact picture and the dropdown menu with contact relating actions *}} -