diff --git a/addon/facebook/facebook.php b/addon/facebook/facebook.php index 73518afb2d..47e7691e46 100644 --- a/addon/facebook/facebook.php +++ b/addon/facebook/facebook.php @@ -111,13 +111,13 @@ function facebook_init(&$a) { $token = substr($token,0,strpos($token,'&')); set_pconfig($uid,'facebook','access_token',$token); set_pconfig($uid,'facebook','post','1'); + set_pconfig($uid,'facebook','no_linking',1); fb_get_self($uid); fb_get_friends($uid); fb_consume_all($uid); } - // todo: is this a browser session or a server session? where do we go? } } @@ -214,7 +214,7 @@ function fb_get_friends($uid) { dbesc(($jp->nickname) ? $jp->nickname : strtolower($jp->first_name)), dbesc('https://graph.facebook.com/' . $jp->id . '/picture'), dbesc(NETWORK_FACEBOOK), - intval(REL_BUD), + intval(CONTACT_IS_FRIEND), intval(1), intval(1) ); @@ -258,6 +258,8 @@ function fb_get_friends($uid) { } } +// This is the POST method to the facebook settings page +// Content is posted to Facebook in the function facebook_post_hook() function facebook_post(&$a) { @@ -298,6 +300,8 @@ function facebook_post(&$a) { return; } +// Facebook settings form + function facebook_content(&$a) { if(! local_user()) { @@ -347,14 +351,18 @@ function facebook_content(&$a) { $o .= '
'; $post_by_default = get_pconfig(local_user(),'facebook','post_by_default'); $checked = (($post_by_default) ? ' checked="checked" ' : ''); - $o .= '' . ' ' . t('Post to Facebook by default') . '
'; + $o .= '' . ' ' . t('Post to Facebook by default') . EOL; $no_linking = get_pconfig(local_user(),'facebook','no_linking'); $checked = (($no_linking) ? '' : ' checked="checked" '); - $o .= '' . ' ' . t('Link all your Facebook friends and conversations') . '
'; - - + $o .= '' . ' ' . t('Link all your Facebook friends and conversations') . EOL ; + $hidden = (($a->user['hidewall'] || get_config('system','block_public')) ? true : false); + if(! $hidden) { + $o .= EOL; + $o .= t('Warning: Your Facebook privacy settings can not be imported.') . EOL; + $o .= t('Linked Facebook items may be publicly visible, depending on your privacy settings for this website/account.') . EOL; + } $o .= '
'; } @@ -522,6 +530,13 @@ function facebook_post_hook(&$a,&$b) { $fb_enable = (($fb_post && x($_POST,'facebook_enable')) ? intval($_POST['facebook_enable']) : 0); $fb_token = get_pconfig(local_user(),'facebook','access_token'); + // if API is used, default to the chosen settings + if($_POST['api_source'] && intval(get_pconfig(local_user(),'facebook','post_by_default'))) + $fb_enable = 1; + + + + logger('facebook: $fb_post: ' . $fb_post . ' $fb_enable: ' . $fb_enable . ' $fb_token: ' . $fb_token,LOGGER_DEBUG); // post to facebook if it's a public post and we've ticked the 'post to Facebook' box, @@ -564,7 +579,7 @@ function facebook_post_hook(&$a,&$b) { $msg = preg_replace("/\[img\](.*?)\[\/img\]/is", t('Image: ') . '$1', $msg); - if((strpos($link,$a->get_baseurl()) !== false) && (! $image)) + if((strpos($link,z_root()) !== false) && (! $image)) $image = $a->get_baseurl() . '/images/friendika-64.jpg'; $msg = trim(strip_tags(bbcode($msg))); @@ -746,6 +761,8 @@ function fb_consume_all($uid) { $access_token = get_pconfig($uid,'facebook','access_token'); if(! $access_token) return; + + $s = fetch_url('https://graph.facebook.com/me/feed?access_token=' . $access_token); if($s) { $j = json_decode($s); @@ -772,13 +789,12 @@ function fb_consume_stream($uid,$j,$wall = false) { intval($uid) ); - $user = q("SELECT `nickname` FROM `user` WHERE `uid` = %d LIMIT 1", + $user = q("SELECT `nickname`, `blockwall` FROM `user` WHERE `uid` = %d LIMIT 1", intval($uid) ); if(count($user)) $my_local_url = $a->get_baseurl() . '/profile/' . $user[0]['nickname']; - $self_id = get_pconfig($uid,'facebook','self_id'); if(! count($j->data) || (! strlen($self_id))) return; diff --git a/addon/js_upload/js_upload.php b/addon/js_upload/js_upload.php index 331548f880..1996b85040 100644 --- a/addon/js_upload/js_upload.php +++ b/addon/js_upload/js_upload.php @@ -298,10 +298,10 @@ class qqFileUploader { return array('error' => t('Uploaded file is empty')); } - if ($size > $this->sizeLimit) { +// if ($size > $this->sizeLimit) { - return array('error' => t('Uploaded file is too large')); - } +// return array('error' => t('Uploaded file is too large')); +// } $maximagesize = get_config('system','maximagesize'); diff --git a/addon/statusnet/statusnet.php b/addon/statusnet/statusnet.php index 062884b967..2f02ded54b 100644 --- a/addon/statusnet/statusnet.php +++ b/addon/statusnet/statusnet.php @@ -1,7 +1,7 @@ */ @@ -51,6 +51,57 @@ class StatusNetOAuth extends TwitterOAuth { parent::__construct($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret); $this->host = $apipath; } + /** + * Make an HTTP request + * + * @return API results + * + * Copied here from the twitteroauth library and complemented by applying the proxy settings of friendika + */ + function http($url, $method, $postfields = NULL) { + $this->http_info = array(); + $ci = curl_init(); + /* Curl settings */ + $prx = get_config('system','proxy'); + logger('Proxy SN: '.$prx); + if(strlen($prx)) { + curl_setopt($ci, CURLOPT_HTTPPROXYTUNNEL, 1); + curl_setopt($ci, CURLOPT_PROXY, $prx); + $prxusr = get_config('system','proxyuser'); + if(strlen($prxusr)) + curl_setopt($ci, CURLOPT_PROXYUSERPWD, $prxusr); + } + curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); + curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); + curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); + curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); + curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); + curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); + curl_setopt($ci, CURLOPT_HEADER, FALSE); + + switch ($method) { + case 'POST': + curl_setopt($ci, CURLOPT_POST, TRUE); + if (!empty($postfields)) { + curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); + } + break; + case 'DELETE': + curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); + if (!empty($postfields)) { + $url = "{$url}?{$postfields}"; + } + } + + curl_setopt($ci, CURLOPT_URL, $url); + $response = curl_exec($ci); + $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); + $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); + $this->url = $url; + curl_close ($ci); + return $response; + } } function statusnet_install() { @@ -276,7 +327,7 @@ function statusnet_settings(&$a,&$s) { $connection = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret); $details = $connection->get('account/verify_credentials'); $s .= '

'. t('Currently connected to: ') .''.$details->screen_name.'
'.$details->description.'

'; - $s .= '

'. t('If enabled all your public postings will be posted to the associated StatusNet account.') .'

'; + $s .= '

'. t('If enabled all your public postings can be posted to the associated StatusNet account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.') .'

'; $s .= '
'; $s .= ''; $s .= ''; @@ -322,6 +373,9 @@ function statusnet_post_hook(&$a,&$b) { $statusnet_post = get_pconfig(local_user(),'statusnet','post'); $statusnet_enable = (($statusnet_post && x($_POST,'statusnet_enable')) ? intval($_POST['statusnet_enable']) : 0); + // if API is used, default to the chosen settings + if($_POST['api_source'] && intval(get_pconfig(local_user(),'statusnet','post_by_default'))) + $statusnet_enable = 1; if($statusnet_enable && $statusnet_post) { require_once('include/bbcode.php'); @@ -402,10 +456,10 @@ function statusnet_plugin_admin(&$a, &$o){ /* empty form to add new site */ $id++; $sitesform[] = Array( - 'sitename' => Array("sitename[$id]", "Site name", "", ""), - 'apiurl' => Array("apiurl[$id]", "Api url", "", ""), - 'secret' => Array("secret[$id]", "Secret", "", ""), - 'key' => Array("key[$id]", "Key", "", ""), + 'sitename' => Array("sitename[$id]", t("Site name"), "", ""), + 'apiurl' => Array("apiurl[$id]", t("API URL"), "", ""), + 'secret' => Array("secret[$id]", t("Consumer Secret"), "", ""), + 'key' => Array("key[$id]", t("Consumer Key"), "", ""), ); diff --git a/addon/twitter/twitter.php b/addon/twitter/twitter.php index 26b324acaa..b1c8a0a897 100644 --- a/addon/twitter/twitter.php +++ b/addon/twitter/twitter.php @@ -1,7 +1,7 @@ */ @@ -87,7 +87,8 @@ function twitter_settings_post ($a,$post) { */ del_pconfig( local_user(), 'twitter', 'consumerkey' ); del_pconfig( local_user(), 'twitter', 'consumersecret' ); - del_pconfig( local_user(), 'twitter', 'post' ); + del_pconfig( local_user(), 'twitter', 'post' ); + del_pconfig( local_user(), 'twitter', 'post_by_default' ); } else { if (isset($_POST['twitter-pin'])) { // if the user supplied us with a PIN from Twitter, let the magic of OAuth happen @@ -105,11 +106,13 @@ function twitter_settings_post ($a,$post) { set_pconfig(local_user(),'twitter', 'oauthsecret', $token['oauth_token_secret']); set_pconfig(local_user(),'twitter', 'post', 1); // reload the Addon Settings page, if we don't do it see Bug #42 - header('Location: '.$a->get_baseurl().'/settings/addon'); + goaway($a->get_baseurl().'/settings/addon'); } else { // if no PIN is supplied in the POST variables, the user has changed the setting // to post a tweet for every new __public__ posting to the wall set_pconfig(local_user(),'twitter','post',intval($_POST['twitter-enable'])); + set_pconfig(local_user(),'twitter','post_by_default',intval($_POST['twitter-default'])); + info( t('Twitter settings updated.') . EOL); }} } function twitter_settings(&$a,&$s) { @@ -127,6 +130,9 @@ function twitter_settings(&$a,&$s) { $osecret = get_pconfig(local_user(), 'twitter', 'oauthsecret' ); $enabled = get_pconfig(local_user(), 'twitter', 'post'); $checked = (($enabled) ? ' checked="checked" ' : ''); + $defenabled = get_pconfig(local_user(),'twitter','post_by_default'); + $defchecked = (($defenabled) ? ' checked="checked" ' : ''); + $s .= '
'; $s .= '

'. t('Twitter Posting Settings') .'

'; @@ -172,11 +178,15 @@ function twitter_settings(&$a,&$s) { $connection = new TwitterOAuth($ckey,$csecret,$otoken,$osecret); $details = $connection->get('account/verify_credentials'); $s .= '

'. t('Currently connected to: ') .''.$details->screen_name.'
'.$details->description.'

'; - $s .= '

'. t('If enabled all your public postings will be posted to the associated Twitter account as well.') .'

'; + $s .= '

'. t('If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.') .'

'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; + $s .= '
'; + $s .= ''; + $s .= ''; $s .= '
'; + $s .= '
'; $s .= ''; $s .= ''; @@ -215,6 +225,10 @@ function twitter_post_hook(&$a,&$b) { $twitter_post = intval(get_pconfig(local_user(),'twitter','post')); $twitter_enable = (($twitter_post && x($_POST,'twitter_enable')) ? intval($_POST['twitter_enable']) : 0); + // if API is used, default to the chosen settings + if($_POST['api_source'] && intval(get_pconfig(local_user(),'twitter','post_by_default'))) + $twitter_enable = 1; + if($twitter_post && $twitter_enable) { logger('Posting to Twitter', LOGGER_DEBUG); require_once('library/twitteroauth.php'); diff --git a/boot.php b/boot.php index f4b43e4c99..39bb6a9dac 100644 --- a/boot.php +++ b/boot.php @@ -1,12 +1,19 @@ \r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); -define ( 'DOWN_ARROW', '⇩' ); + /** * @@ -48,13 +55,12 @@ define ( 'REGISTER_OPEN', 2 ); /** * relationship types - * When used in contact records, this indicates that 'uid' has - * this relationship with contact['name'] */ -define ( 'REL_VIP', 1); // other person is 'following' us -define ( 'REL_FAN', 2); // we are 'following' other person -define ( 'REL_BUD', 3); // mutual relationship +define ( 'CONTACT_IS_FOLLOWER', 1); +define ( 'CONTACT_IS_SHARING', 2); +define ( 'CONTACT_IS_FRIEND', 3); + /** * Hook array order @@ -69,10 +75,10 @@ define ( 'HOOK_FUNCTION', 2); * page/profile types * * PAGE_NORMAL is a typical personal profile account - * PAGE_SOAPBOX automatically approves all friend requests as REL_FAN, (readonly) - * PAGE_COMMUNITY automatically approves all friend requests as REL_FAN, but with + * PAGE_SOAPBOX automatically approves all friend requests as CONTACT_IS_SHARING, (readonly) + * PAGE_COMMUNITY automatically approves all friend requests as CONTACT_IS_SHARING, but with * write access to wall and comments (no email and not included in page owner's ACL lists) - * PAGE_FREELOVE automatically approves all friend requests as full friends (REL_BUD). + * PAGE_FREELOVE automatically approves all friend requests as full friends (CONTACT_IS_FRIEND). * */ @@ -199,12 +205,6 @@ function startup() { } -/* - * translation system - */ -require_once("include/pgettext.php"); - - /** * * class: App @@ -270,7 +270,8 @@ class App { 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 @@ -281,7 +282,12 @@ class App { $this->path = $path; } - set_include_path("include/$this->hostname" . PATH_SEPARATOR . 'include' . PATH_SEPARATOR . '.' ); + set_include_path( + "include/$this->hostname" . PATH_SEPARATOR + . 'include' . PATH_SEPARATOR + . 'library' . PATH_SEPARATOR + . 'library/phpsec' . PATH_SEPARATOR + . '.' ); if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'],0,2) === "q=") $this->query_string = substr($_SERVER['QUERY_STRING'],2); @@ -318,13 +324,12 @@ class App { /** * Special handling for the webfinger/lrdd host XRD file - * Just spit out the contents and exit. */ if($this->cmd === '.well-known/host-meta') { - require_once('include/hostxrd.php'); - hostxrd($this->get_baseurl()); - // NOTREACHED + $this->argc = 1; + $this->argv = array('hostxrd'); + $this->module = 'hostxrd'; } /** @@ -400,7 +405,7 @@ class App { $this->page['title'] = $this->config['sitename']; $tpl = file_get_contents('view/head.tpl'); $this->page['htmlhead'] = replace_macros($tpl,array( - '$baseurl' => $this->get_baseurl(), + '$baseurl' => $this->get_baseurl(), // FIXME for z_path!!!! '$generator' => 'Friendika' . ' ' . FRIENDIKA_VERSION, '$delitem' => t('Delete this item?'), '$comment' => t('Comment') @@ -473,39 +478,33 @@ function system_unavailable() { }} -// install and uninstall plugin -if (! function_exists('uninstall_plugin')){ -function uninstall_plugin($plugin){ - logger("Addons: uninstalling " . $plugin); - q("DELETE FROM `addon` WHERE `name` = '%s' LIMIT 1", - dbesc($plugin) - ); - @include_once('addon/' . $plugin . '/' . $plugin . '.php'); - if(function_exists($plugin . '_uninstall')) { - $func = $plugin . '_uninstall'; - $func(); - } -}} +function clean_urls() { + global $a; +// if($a->config['system']['clean_urls']) + return true; +// return false; +} + +function z_path() { + global $a; + $base = $a->get_baseurl(); + if(! clean_urls()) + $base .= '/?q='; + return $base; +} + +function z_root() { + global $a; + return $a->get_baseurl(); +} + +function absurl($path) { + if(strpos($path,'/') === 0) + return z_path() . $path; + return $path; +} -if (! function_exists('install_plugin')){ -function install_plugin($plugin){ - logger("Addons: installing " . $plugin); - $t = filemtime('addon/' . $plugin . '/' . $plugin . '.php'); - @include_once('addon/' . $plugin . '/' . $plugin . '.php'); - if(function_exists($plugin . '_install')) { - $func = $plugin . '_install'; - $func(); - - $plugin_admin = (function_exists($plugin."_plugin_admin")?1:0); - - $r = q("INSERT INTO `addon` (`name`, `installed`, `timestamp`, `plugin_admin`) VALUES ( '%s', 1, %d , %d ) ", - dbesc($plugin), - intval($t), - $plugin_admin - ); - } -}} // Primarily involved with database upgrade, but also sets the // base url for use in cmdline programs which don't have @@ -610,271 +609,19 @@ function check_config(&$a) { return; }} -// reload all updated plugins -if(! function_exists('reload_plugins')) { -function reload_plugins() { - $plugins = get_config('system','addon'); - if(strlen($plugins)) { +function get_guid($size=16) { + $exists = true; // assume by default that we don't have a unique guid + do { + $s = random_string($size); + $r = q("select id from guid where guid = '%s' limit 1", dbesc($s)); + if(! count($r)) + $exists = false; + } while($exists); + q("insert into guid ( guid ) values ( '%s' ) ", dbesc($s)); + return $s; +} - $r = q("SELECT * FROM `addon` WHERE `installed` = 1"); - if(count($r)) - $installed = $r; - else - $installed = array(); - - $parr = explode(',',$plugins); - if(count($parr)) { - foreach($parr as $pl) { - $pl = trim($pl); - - $t = filemtime('addon/' . $pl . '/' . $pl . '.php'); - foreach($installed as $i) { - if(($i['name'] == $pl) && ($i['timestamp'] != $t)) { - logger('Reloading plugin: ' . $i['name']); - @include_once('addon/' . $pl . '/' . $pl . '.php'); - - if(function_exists($pl . '_uninstall')) { - $func = $pl . '_uninstall'; - $func(); - } - if(function_exists($pl . '_install')) { - $func = $pl . '_install'; - $func(); - } - q("UPDATE `addon` SET `timestamp` = %d WHERE `id` = %d LIMIT 1", - intval($t), - intval($i['id']) - ); - } - } - } - } - } -}} - - - -// This is our template processor. -// $s is the string requiring macro substitution. -// $r is an array of key value pairs (search => replace) -// returns substituted string. -// WARNING: this is pretty basic, and doesn't properly handle search strings that are substrings of each other. -// For instance if 'test' => "foo" and 'testing' => "bar", testing could become either bar or fooing, -// depending on the order in which they were declared in the array. - -require_once("include/template_processor.php"); - -if(! function_exists('replace_macros')) { -function replace_macros($s,$r) { - global $t; - - return $t->replace($s,$r); - -}} - - -// curl wrapper. If binary flag is true, return binary -// results. - -if(! function_exists('fetch_url')) { -function fetch_url($url,$binary = false, &$redirects = 0) { - - $a = get_app(); - - $ch = curl_init($url); - if(($redirects > 8) || (! $ch)) - return false; - - curl_setopt($ch, CURLOPT_HEADER, true); - curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); - curl_setopt($ch, CURLOPT_USERAGENT, "Friendika"); - - $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'); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false)); - - $prx = get_config('system','proxy'); - if(strlen($prx)) { - 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); - } - if($binary) - curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); - - $a->set_curl_code(0); - - // don't let curl abort the entire application - // if it throws any errors. - - $s = @curl_exec($ch); - - $base = $s; - $curl_info = curl_getinfo($ch); - $http_code = $curl_info['http_code']; - - $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); - $header .= $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); - $url = trim(array_pop($matches)); - $url_parsed = @parse_url($url); - if (isset($url_parsed)) { - $redirects++; - return fetch_url($url,$binary,$redirects); - } - } - - $a->set_curl_code($http_code); - - $body = substr($s,strlen($header)); - - $a->set_curl_headers($header); - - curl_close($ch); - return($body); -}} - -// post request to $url. $params is an array of post variables. - -if(! function_exists('post_url')) { -function post_url($url,$params, $headers = null, &$redirects = 0) { - $a = get_app(); - $ch = curl_init($url); - if(($redirects > 8) || (! $ch)) - return false; - - 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_USERAGENT, "Friendika"); - - $curl_time = intval(get_config('system','curl_timeout')); - curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60)); - - if(defined('LIGHTTPD')) { - if(!is_array($headers)) { - $headers = array('Expect:'); - } else { - if(!in_array('Expect:', $headers)) { - array_push($headers, 'Expect:'); - } - } - } - if($headers) - curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); - - $check_cert = get_config('system','verifyssl'); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false)); - $prx = get_config('system','proxy'); - if(strlen($prx)) { - 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); - } - - $a->set_curl_code(0); - - // don't let curl abort the entire application - // if it throws any errors. - - $s = @curl_exec($ch); - - $base = $s; - $curl_info = curl_getinfo($ch); - $http_code = $curl_info['http_code']; - - $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); - $header .= $chunk; - $base = substr($base,strlen($chunk)); - } - - if($http_code == 301 || $http_code == 302 || $http_code == 303) { - $matches = array(); - preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); - $url = trim(array_pop($matches)); - $url_parsed = @parse_url($url); - if (isset($url_parsed)) { - $redirects++; - return post_url($url,$binary,$headers,$redirects); - } - } - $a->set_curl_code($http_code); - $body = substr($s,strlen($header)); - - $a->set_curl_headers($header); - - curl_close($ch); - return($body); -}} - -// random hash, 64 chars - -if(! function_exists('random_string')) { -function random_string() { - return(hash('sha256',uniqid(rand(),true))); -}} - -/** - * This is our primary input filter. - * - * The high bit hack only involved some old IE browser, forget which (IE5/Mac?) - * that had an XSS attack vector due to stripping the high-bit on an 8-bit character - * after cleansing, and angle chars with the high bit set could get through as markup. - * - * This is now disabled because it was interfering with some legitimate unicode sequences - * and hopefully there aren't a lot of those browsers left. - * - * Use this on any text input where angle chars are not valid or permitted - * They will be replaced with safer brackets. This may be filtered further - * if these are not allowed either. - * - */ - -if(! function_exists('notags')) { -function notags($string) { - - return(str_replace(array("<",">"), array('[',']'), $string)); - -// High-bit filter no longer used -// return(str_replace(array("<",">","\xBA","\xBC","\xBE"), array('[',']','','',''), $string)); -}} - -// use this on "body" or "content" input where angle chars shouldn't be removed, -// and allow them to be safely displayed. - -if(! function_exists('escape_tags')) { -function escape_tags($string) { - - return(htmlspecialchars($string)); -}} // wrapper for adding a login box. If $register == true provide a registration // link. This will most always depend on the value of $a->config['register_policy']. @@ -930,77 +677,6 @@ function login($register = false) { return $o; }} -// generate a string that's random, but usually pronounceable. -// used to generate initial passwords - -if(! function_exists('autoname')) { -function autoname($len) { - - $vowels = array('a','a','ai','au','e','e','e','ee','ea','i','ie','o','ou','u'); - if(mt_rand(0,5) == 4) - $vowels[] = 'y'; - - $cons = array( - 'b','bl','br', - 'c','ch','cl','cr', - 'd','dr', - 'f','fl','fr', - 'g','gh','gl','gr', - 'h', - 'j', - 'k','kh','kl','kr', - 'l', - 'm', - 'n', - 'p','ph','pl','pr', - 'qu', - 'r','rh', - 's','sc','sh','sm','sp','st', - 't','th','tr', - 'v', - 'w','wh', - 'x', - 'z','zh' - ); - - $midcons = array('ck','ct','gn','ld','lf','lm','lt','mb','mm', 'mn','mp', - 'nd','ng','nk','nt','rn','rp','rt'); - - $noend = array('bl', 'br', 'cl','cr','dr','fl','fr','gl','gr', - 'kh', 'kl','kr','mn','pl','pr','rh','tr','qu','wh'); - - $start = mt_rand(0,2); - if($start == 0) - $table = $vowels; - else - $table = $cons; - - $word = ''; - - for ($x = 0; $x < $len; $x ++) { - $r = mt_rand(0,count($table) - 1); - $word .= $table[$r]; - - if($table == $vowels) - $table = array_merge($cons,$midcons); - else - $table = $vowels; - - } - - $word = substr($word,0,$len); - - foreach($noend as $noe) { - if((strlen($word) > 2) && (substr($word,-2) == $noe)) { - $word = substr($word,0,-1); - break; - } - } - if(substr($word,-1) == 'q') - $word = substr($word,0,-1); - return $word; -}} - // Used to end the current process, after saving session state. if(! function_exists('killme')) { @@ -1017,23 +693,6 @@ function goaway($s) { killme(); }} -// Generic XML return -// Outputs a basic dfrn XML status structure to STDOUT, with a variable -// of $st and an optional text of $message and terminates the current process. - -if(! function_exists('xml_status')) { -function xml_status($st, $message = '') { - - $xml_message = ((strlen($message)) ? "\t" . xmlify($message) . "\r\n" : ''); - - if($st) - logger('xml_status returning non_zero: ' . $st . " message=" . $message); - - header( "Content-type: text/xml" ); - echo ''."\r\n"; - echo "\r\n\t$st\r\n$xml_message\r\n"; - killme(); -}} // Returns the uid of locally logged in user or false. @@ -1079,1231 +738,6 @@ function get_max_import_size() { }} -// escape text ($str) for XML transport -// returns escaped text. - -if(! function_exists('xmlify')) { -function xmlify($str) { - $buffer = ''; - - for($x = 0; $x < strlen($str); $x ++) { - $char = $str[$x]; - - switch( $char ) { - - case "\r" : - break; - case "&" : - $buffer .= '&'; - break; - case "'" : - $buffer .= '''; - break; - case "\"" : - $buffer .= '"'; - break; - case '<' : - $buffer .= '<'; - break; - case '>' : - $buffer .= '>'; - break; - case "\n" : - $buffer .= "\n"; - break; - default : - $buffer .= $char; - break; - } - } - $buffer = trim($buffer); - return($buffer); -}} - -// undo an xmlify -// pass xml escaped text ($s), returns unescaped text - -if(! function_exists('unxmlify')) { -function unxmlify($s) { - $ret = str_replace('&','&', $s); - $ret = str_replace(array('<','>','"','''),array('<','>','"',"'"),$ret); - return $ret; -}} - -// convenience wrapper, reverse the operation "bin2hex" - -if(! function_exists('hex2bin')) { -function hex2bin($s) { - if(! ctype_xdigit($s)) { - logger('hex2bin: illegal input: ' . print_r(debug_backtrace(), true)); - return($s); - } - - return(pack("H*",$s)); -}} - -// Automatic pagination. -// To use, get the count of total items. -// Then call $a->set_pager_total($number_items); -// Optionally call $a->set_pager_itemspage($n) to the number of items to display on each page -// Then call paginate($a) after the end of the display loop to insert the pager block on the page -// (assuming there are enough items to paginate). -// When using with SQL, the setting LIMIT %d, %d => $a->pager['start'],$a->pager['itemspage'] -// will limit the results to the correct items for the current page. -// The actual page handling is then accomplished at the application layer. - -if(! function_exists('paginate')) { -function paginate(&$a) { - $o = ''; - $stripped = preg_replace('/(&page=[0-9]*)/','',$a->query_string); - $stripped = str_replace('q=','',$stripped); - $stripped = trim($stripped,'/'); - $pagenum = $a->pager['page']; - $url = $a->get_baseurl() . '/' . $stripped; - - - if($a->pager['total'] > $a->pager['itemspage']) { - $o .= '
'; - if($a->pager['page'] != 1) - $o .= ''."pager['page'] - 1).'">' . t('prev') . ' '; - - $o .= "" . t('first') . " "; - - $numpages = $a->pager['total'] / $a->pager['itemspage']; - - $numstart = 1; - $numstop = $numpages; - - if($numpages > 14) { - $numstart = (($pagenum > 7) ? ($pagenum - 7) : 1); - $numstop = (($pagenum > ($numpages - 7)) ? $numpages : ($numstart + 14)); - } - - for($i = $numstart; $i <= $numstop; $i++){ - if($i == $a->pager['page']) - $o .= ''.(($i < 10) ? ' '.$i : $i); - else - $o .= "".(($i < 10) ? ' '.$i : $i).""; - $o .= ' '; - } - - if(($a->pager['total'] % $a->pager['itemspage']) != 0) { - if($i == $a->pager['page']) - $o .= ''.(($i < 10) ? ' '.$i : $i); - else - $o .= "".(($i < 10) ? ' '.$i : $i).""; - $o .= ' '; - } - - $lastpage = (($numpages > intval($numpages)) ? intval($numpages)+1 : $numpages); - $o .= "" . t('last') . " "; - - if(($a->pager['total'] - ($a->pager['itemspage'] * $a->pager['page'])) > 0) - $o .= ''."pager['page'] + 1).'">' . t('next') . ''; - $o .= '
'."\r\n"; - } - return $o; -}} - -// Turn user/group ACLs stored as angle bracketed text into arrays - -if(! function_exists('expand_acl')) { -function expand_acl($s) { - // turn string array of angle-bracketed elements into numeric array - // e.g. "<1><2><3>" => array(1,2,3); - $ret = array(); - - if(strlen($s)) { - $t = str_replace('<','',$s); - $a = explode('>',$t); - foreach($a as $aa) { - if(intval($aa)) - $ret[] = intval($aa); - } - } - return $ret; -}} - -// Used to wrap ACL elements in angle brackets for storage - -if(! function_exists('sanitise_acl')) { -function sanitise_acl(&$item) { - if(intval($item)) - $item = '<' . intval(notags(trim($item))) . '>'; - else - unset($item); -}} - -// retrieve a "family" of config variables from database to cached storage - -if(! function_exists('load_config')) { -function load_config($family) { - global $a; - $r = q("SELECT * FROM `config` WHERE `cat` = '%s'", - dbesc($family) - ); - if(count($r)) { - foreach($r as $rr) { - $k = $rr['k']; - if ($rr['cat'] === 'config') { - $a->config[$k] = $rr['v']; - } else { - $a->config[$family][$k] = $rr['v']; - } - } - } -}} - -// get a particular config variable given the family name -// and key. Returns false if not set. -// $instore is only used by the set_config function -// to determine if the key already exists in the DB -// If a key is found in the DB but doesn't exist in -// local config cache, pull it into the cache so we don't have -// to hit the DB again for this item. - -if(! function_exists('get_config')) { -function get_config($family, $key, $instore = false) { - - global $a; - - if(! $instore) { - if(isset($a->config[$family][$key])) { - if($a->config[$family][$key] === '!!') { - return false; - } - return $a->config[$family][$key]; - } - } - $ret = q("SELECT `v` FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1", - dbesc($family), - dbesc($key) - ); - if(count($ret)) { - // manage array value - $val = (preg_match("|^a:[0-9]+:{.*}$|", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']); - $a->config[$family][$key] = $val; - return $val; - } - else { - $a->config[$family][$key] = '!!'; - } - return false; -}} - -// Store a config value ($value) in the category ($family) -// under the key ($key) -// Return the value, or false if the database update failed - -if(! function_exists('set_config')) { -function set_config($family,$key,$value) { - global $a; - - // manage array value - $dbvalue = (is_array($value)?serialize($value):$value); - - if(get_config($family,$key,true) === false) { - $a->config[$family][$key] = $value; - $ret = q("INSERT INTO `config` ( `cat`, `k`, `v` ) VALUES ( '%s', '%s', '%s' ) ", - dbesc($family), - dbesc($key), - dbesc($dbvalue) - ); - if($ret) - return $value; - return $ret; - } - - $ret = q("UPDATE `config` SET `v` = '%s' WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1", - dbesc($dbvalue), - dbesc($family), - dbesc($key) - ); - - $a->config[$family][$key] = $value; - - if($ret) - return $value; - return $ret; -}} - - -if(! function_exists('load_pconfig')) { -function load_pconfig($uid,$family) { - global $a; - $r = q("SELECT * FROM `pconfig` WHERE `cat` = '%s' AND `uid` = %d", - dbesc($family), - intval($uid) - ); - if(count($r)) { - foreach($r as $rr) { - $k = $rr['k']; - $a->config[$uid][$family][$k] = $rr['v']; - } - } -}} - - - -if(! function_exists('get_pconfig')) { -function get_pconfig($uid,$family, $key, $instore = false) { - - global $a; - - if(! $instore) { - if(isset($a->config[$uid][$family][$key])) { - if($a->config[$uid][$family][$key] === '!!') { - return false; - } - return $a->config[$uid][$family][$key]; - } - } - - $ret = q("SELECT `v` FROM `pconfig` WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1", - intval($uid), - dbesc($family), - dbesc($key) - ); - - if(count($ret)) { - $a->config[$uid][$family][$key] = $ret[0]['v']; - return $ret[0]['v']; - } - else { - $a->config[$uid][$family][$key] = '!!'; - } - return false; -}} - -if(! function_exists('del_config')) { -function del_config($family,$key) { - - global $a; - if(x($a->config[$family],$key)) - unset($a->config[$family][$key]); - $ret = q("DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1", - dbesc($cat), - dbesc($key) - ); - return $ret; -}} - - - -// Same as above functions except these are for personal config storage and take an -// additional $uid argument. - -if(! function_exists('set_pconfig')) { -function set_pconfig($uid,$family,$key,$value) { - - global $a; - - if(get_pconfig($uid,$family,$key,true) === false) { - $a->config[$uid][$family][$key] = $value; - $ret = q("INSERT INTO `pconfig` ( `uid`, `cat`, `k`, `v` ) VALUES ( %d, '%s', '%s', '%s' ) ", - intval($uid), - dbesc($family), - dbesc($key), - dbesc($value) - ); - if($ret) - return $value; - return $ret; - } - $ret = q("UPDATE `pconfig` SET `v` = '%s' WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1", - dbesc($value), - intval($uid), - dbesc($family), - dbesc($key) - ); - - $a->config[$uid][$family][$key] = $value; - - if($ret) - return $value; - return $ret; -}} - -if(! function_exists('del_pconfig')) { -function del_pconfig($uid,$family,$key) { - - global $a; - if(x($a->config[$uid][$family],$key)) - unset($a->config[$uid][$family][$key]); - $ret = q("DELETE FROM `pconfig` WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1", - intval($uid), - dbesc($family), - dbesc($key) - ); - return $ret; -}} - - -// convert an XML document to a normalised, case-corrected array -// used by webfinger - -if(! function_exists('convert_xml_element_to_array')) { -function convert_xml_element_to_array($xml_element, &$recursion_depth=0) { - - // If we're getting too deep, bail out - if ($recursion_depth > 512) { - return(null); - } - - if (!is_string($xml_element) && - !is_array($xml_element) && - (get_class($xml_element) == 'SimpleXMLElement')) { - $xml_element_copy = $xml_element; - $xml_element = get_object_vars($xml_element); - } - - if (is_array($xml_element)) { - $result_array = array(); - if (count($xml_element) <= 0) { - return (trim(strval($xml_element_copy))); - } - - foreach($xml_element as $key=>$value) { - - $recursion_depth++; - $result_array[strtolower($key)] = - convert_xml_element_to_array($value, $recursion_depth); - $recursion_depth--; - } - if ($recursion_depth == 0) { - $temp_array = $result_array; - $result_array = array( - strtolower($xml_element_copy->getName()) => $temp_array, - ); - } - - return ($result_array); - - } else { - return (trim(strval($xml_element))); - } -}} - -// Given an email style address, perform webfinger lookup and -// return the resulting DFRN profile URL, or if no DFRN profile URL -// is located, returns an OStatus subscription template (prefixed -// with the string 'stat:' to identify it as on OStatus template). -// If this isn't an email style address just return $s. -// Return an empty string if email-style addresses but webfinger fails, -// or if the resultant personal XRD doesn't contain a supported -// subscription/friend-request attribute. - -if(! function_exists('webfinger_dfrn')) { -function webfinger_dfrn($s) { - if(! strstr($s,'@')) { - return $s; - } - $links = webfinger($s); - logger('webfinger_dfrn: ' . $s . ':' . print_r($links,true), LOGGER_DATA); - if(count($links)) { - foreach($links as $link) - if($link['@attributes']['rel'] === NAMESPACE_DFRN) - return $link['@attributes']['href']; - foreach($links as $link) - if($link['@attributes']['rel'] === NAMESPACE_OSTATUSSUB) - return 'stat:' . $link['@attributes']['template']; - } - return ''; -}} - -// Given an email style address, perform webfinger lookup and -// return the array of link attributes from the personal XRD file. -// On error/failure return an empty array. - - -if(! function_exists('webfinger')) { -function webfinger($s) { - $host = ''; - if(strstr($s,'@')) { - $host = substr($s,strpos($s,'@') + 1); - } - if(strlen($host)) { - $tpl = fetch_lrdd_template($host); - logger('webfinger: lrdd template: ' . $tpl); - if(strlen($tpl)) { - $pxrd = str_replace('{uri}', urlencode('acct:' . $s), $tpl); - logger('webfinger: pxrd: ' . $pxrd); - $links = fetch_xrd_links($pxrd); - if(! count($links)) { - // try with double slashes - $pxrd = str_replace('{uri}', urlencode('acct://' . $s), $tpl); - logger('webfinger: pxrd: ' . $pxrd); - $links = fetch_xrd_links($pxrd); - } - return $links; - } - } - return array(); -}} - -if(! function_exists('lrdd')) { -function lrdd($uri) { - - $a = get_app(); - - // default priority is host priority, host-meta first - - $priority = 'host'; - - // All we have is an email address. Resource-priority is irrelevant - // because our URI isn't directly resolvable. - - if(strstr($uri,'@')) { - return(webfinger($uri)); - } - - // get the host meta file - - $host = @parse_url($uri); - - if($host) { - $url = ((x($host,'scheme')) ? $host['scheme'] : 'http') . '://'; - $url .= $host['host'] . '/.well-known/host-meta' ; - } - else - return array(); - - logger('lrdd: constructed url: ' . $url); - - $xml = fetch_url($url); - $headers = $a->get_curl_headers(); - - if (! $xml) - return array(); - - logger('lrdd: host_meta: ' . $xml, LOGGER_DATA); - - $h = parse_xml_string($xml); - if(! $h) - return array(); - - $arr = convert_xml_element_to_array($h); - - if(isset($arr['xrd']['property'])) { - $property = $arr['crd']['property']; - if(! isset($property[0])) - $properties = array($property); - else - $properties = $property; - foreach($properties as $prop) - if((string) $prop['@attributes'] === 'http://lrdd.net/priority/resource') - $priority = 'resource'; - } - - // save the links in case we need them - - $links = array(); - - if(isset($arr['xrd']['link'])) { - $link = $arr['xrd']['link']; - if(! isset($link[0])) - $links = array($link); - else - $links = $link; - } - - // do we have a template or href? - - if(count($links)) { - foreach($links as $link) { - if($link['@attributes']['rel'] && attribute_contains($link['@attributes']['rel'],'lrdd')) { - if(x($link['@attributes'],'template')) - $tpl = $link['@attributes']['template']; - elseif(x($link['@attributes'],'href')) - $href = $link['@attributes']['href']; - } - } - } - - if((! isset($tpl)) || (! strpos($tpl,'{uri}'))) - $tpl = ''; - - if($priority === 'host') { - if(strlen($tpl)) - $pxrd = str_replace('{uri}', urlencode($uri), $tpl); - elseif(isset($href)) - $pxrd = $href; - if(isset($pxrd)) { - logger('lrdd: (host priority) pxrd: ' . $pxrd); - $links = fetch_xrd_links($pxrd); - return $links; - } - - $lines = explode("\n",$headers); - if(count($lines)) { - foreach($lines as $line) { - if((stristr($line,'link:')) && preg_match('/<([^>].*)>.*rel\=[\'\"]lrdd[\'\"]/',$line,$matches)) { - return(fetch_xrd_links($matches[1])); - break; - } - } - } - } - - - // priority 'resource' - - - $html = fetch_url($uri); - $headers = $a->get_curl_headers(); - logger('lrdd: headers=' . $headers, LOGGER_DEBUG); - - // don't try and parse raw xml as html - if(! strstr($html,'getElementsByTagName('link'); - foreach($items as $item) { - $x = $item->getAttribute('rel'); - if($x == "lrdd") { - $pagelink = $item->getAttribute('href'); - break; - } - } - } - } - - if(isset($pagelink)) - return(fetch_xrd_links($pagelink)); - - // next look in HTTP headers - - $lines = explode("\n",$headers); - if(count($lines)) { - foreach($lines as $line) { - // TODO alter the following regex to support multiple relations (space separated) - if((stristr($line,'link:')) && preg_match('/<([^>].*)>.*rel\=[\'\"]lrdd[\'\"]/',$line,$matches)) { - $pagelink = $matches[1]; - break; - } - // don't try and run feeds through the html5 parser - if(stristr($line,'content-type:') && ((stristr($line,'application/atom+xml')) || (stristr($line,'application/rss+xml')))) - return array(); - if(stristr($html,' 'alias' , 'href' => $alias); - } - } - - logger('fetch_xrd_links: ' . print_r($links,true), LOGGER_DATA); - - return $links; - -}} - -// Convert an ACL array to a storable string - -if(! function_exists('perms2str')) { -function perms2str($p) { - $ret = ''; - $tmp = $p; - if(is_array($tmp)) { - array_walk($tmp,'sanitise_acl'); - $ret = implode('',$tmp); - } - return $ret; -}} - -// generate a guaranteed unique (for this domain) item ID for ATOM -// safe from birthday paradox - -if(! function_exists('item_new_uri')) { -function item_new_uri($hostname,$uid) { - - do { - $dups = false; - $hash = random_string(); - - $uri = "urn:X-dfrn:" . $hostname . ':' . $uid . ':' . $hash; - - $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' LIMIT 1", - dbesc($uri)); - if(count($r)) - $dups = true; - } while($dups == true); - return $uri; -}} - -// Generate a guaranteed unique photo ID. -// safe from birthday paradox - -if(! function_exists('photo_new_resource')) { -function photo_new_resource() { - - do { - $found = false; - $resource = hash('md5',uniqid(mt_rand(),true)); - $r = q("SELECT `id` FROM `photo` WHERE `resource-id` = '%s' LIMIT 1", - dbesc($resource) - ); - if(count($r)) - $found = true; - } while($found == true); - return $resource; -}} - - -// Take a URL from the wild, prepend http:// if necessary -// and check DNS to see if it's real -// return true if it's OK, false if something is wrong with it - -if(! function_exists('validate_url')) { -function validate_url(&$url) { - if(substr($url,0,4) != 'http') - $url = 'http://' . $url; - $h = @parse_url($url); - - if(($h) && (dns_get_record($h['host'], DNS_A + DNS_CNAME + DNS_PTR))) { - return true; - } - return false; -}} - -// checks that email is an actual resolvable internet address - -if(! function_exists('validate_email')) { -function validate_email($addr) { - - if(! strpos($addr,'@')) - return false; - $h = substr($addr,strpos($addr,'@') + 1); - - if(($h) && (dns_get_record($h, DNS_A + DNS_CNAME + DNS_PTR + DNS_MX))) { - return true; - } - return false; -}} - -// Check $url against our list of allowed sites, -// wildcards allowed. If allowed_sites is unset return true; -// If url is allowed, return true. -// otherwise, return false - -if(! function_exists('allowed_url')) { -function allowed_url($url) { - - $h = @parse_url($url); - - if(! $h) { - return false; - } - - $str_allowed = get_config('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'])) - return true; - - $fnmatch = function_exists('fnmatch'); - $allowed = explode(',',$str_allowed); - - if(count($allowed)) { - foreach($allowed as $a) { - $pat = strtolower(trim($a)); - if(($fnmatch && fnmatch($pat,$host)) || ($pat == $host)) { - $found = true; - break; - } - } - } - return $found; -}} - -// check if email address is allowed to register here. -// Compare against our list (wildcards allowed). -// Returns false if not allowed, true if allowed or if -// allowed list is not configured. - -if(! function_exists('allowed_email')) { -function allowed_email($email) { - - - $domain = strtolower(substr($email,strpos($email,'@') + 1)); - if(! $domain) - return false; - - $str_allowed = get_config('system','allowed_email'); - if(! $str_allowed) - return true; - - $found = false; - - $fnmatch = function_exists('fnmatch'); - $allowed = explode(',',$str_allowed); - - if(count($allowed)) { - foreach($allowed as $a) { - $pat = strtolower(trim($a)); - if(($fnmatch && fnmatch($pat,$domain)) || ($pat == $domain)) { - $found = true; - break; - } - } - } - return $found; -}} - - - -// wrapper to load a view template, checking for alternate -// languages before falling back to the default - -// obsolete, deprecated. - -if(! function_exists('load_view_file')) { -function load_view_file($s) { - global $lang, $a; - if(! isset($lang)) - $lang = 'en'; - $b = basename($s); - $d = dirname($s); - if(file_exists("$d/$lang/$b")) - return file_get_contents("$d/$lang/$b"); - - $theme = current_theme(); - - if(file_exists("$d/theme/$theme/$b")) - return file_get_contents("$d/theme/$theme/$b"); - - return file_get_contents($s); -}} - -if(! function_exists('get_intltext_template')) { -function get_intltext_template($s) { - global $lang; - - if(! isset($lang)) - $lang = 'en'; - - if(file_exists("view/$lang/$s")) - return file_get_contents("view/$lang/$s"); - elseif(file_exists("view/en/$s")) - return file_get_contents("view/en/$s"); - else - return file_get_contents("view/$s"); -}} - -if(! function_exists('get_markup_template')) { -function get_markup_template($s) { - - $theme = current_theme(); - - if(file_exists("view/theme/$theme/$s")) - return file_get_contents("view/theme/$theme/$s"); - else - return file_get_contents("view/$s"); - -}} - - - - - -// for html,xml parsing - let's say you've got -// an attribute foobar="class1 class2 class3" -// and you want to find out if it contains 'class3'. -// you can't use a normal sub string search because you -// might match 'notclass3' and a regex to do the job is -// possible but a bit complicated. -// pass the attribute string as $attr and the attribute you -// are looking for as $s - returns true if found, otherwise false - -if(! function_exists('attribute_contains')) { -function attribute_contains($attr,$s) { - $a = explode(' ', $attr); - if(count($a) && in_array($s,$a)) - return true; - return false; -}} - -if(! function_exists('logger')) { -function logger($msg,$level = 0) { - $debugging = get_config('system','debugging'); - $loglevel = intval(get_config('system','loglevel')); - $logfile = get_config('system','logfile'); - - if((! $debugging) || (! $logfile) || ($level > $loglevel)) - return; - - @file_put_contents($logfile, datetime_convert() . ':' . session_id() . ' ' . $msg . "\n", FILE_APPEND); - return; -}} - - -if(! function_exists('activity_match')) { -function activity_match($haystack,$needle) { - if(($haystack === $needle) || ((basename($needle) === $haystack) && strstr($needle,NAMESPACE_ACTIVITY_SCHEMA))) - return true; - return false; -}} - - -// Pull out all #hashtags and @person tags from $s; -// We also get @person@domain.com - which would make -// the regex quite complicated as tags can also -// end a sentence. So we'll run through our results -// and strip the period from any tags which end with one. -// Returns array of tags found, or empty array. - - -if(! function_exists('get_tags')) { -function get_tags($s) { - $ret = array(); - - // ignore anything in a code block - - $s = preg_replace('/\[code\](.*?)\[\/code\]/sm','',$s); - - // Match full names against @tags including the space between first and last - // We will look these up afterward to see if they are full names or not recognisable. - - if(preg_match_all('/(@[^ \x0D\x0A,:?]+ [^ \x0D\x0A,:?]+)([ \x0D\x0A,:?]|$)/',$s,$match)) { - foreach($match[1] as $mtch) { - if(strstr($mtch,"]")) { - // we might be inside a bbcode color tag - leave it alone - continue; - } - if(substr($mtch,-1,1) === '.') - $ret[] = substr($mtch,0,-1); - else - $ret[] = $mtch; - } - } - - // Otherwise pull out single word tags. These can be @nickname, @first_last - // and #hash tags. - - if(preg_match_all('/([@#][^ \x0D\x0A,:?]+)([ \x0D\x0A,:?]|$)/',$s,$match)) { - foreach($match[1] as $mtch) { - if(strstr($mtch,"]")) { - // we might be inside a bbcode color tag - leave it alone - continue; - } - // ignore strictly numeric tags like #1 - if((strpos($mtch,'#') === 0) && ctype_digit(substr($mtch,1))) - continue; - if(substr($mtch,-1,1) === '.') - $ret[] = substr($mtch,0,-1); - else - $ret[] = $mtch; - } - } - return $ret; -}} - - -// quick and dirty quoted_printable encoding - -if(! function_exists('qp')) { -function qp($s) { -return str_replace ("%","=",rawurlencode($s)); -}} - - - -if(! function_exists('get_mentions')) { -function get_mentions($item) { - $o = ''; - if(! strlen($item['tag'])) - return $o; - - $arr = explode(',',$item['tag']); - foreach($arr as $x) { - $matches = null; - if(preg_match('/@\[url=([^\]]*)\]/',$x,$matches)) { - $o .= "\t\t" . '' . "\r\n"; - $o .= "\t\t" . '' . "\r\n"; - } - } - return $o; -}} - -if(! function_exists('contact_block')) { -function contact_block() { - $o = ''; - $a = get_app(); - - $shown = get_pconfig($a->profile['uid'],'system','display_friend_count'); - if(! $shown) - $shown = 24; - - if((! is_array($a->profile)) || ($a->profile['hide-friends'])) - return $o; - $r = q("SELECT COUNT(*) AS `total` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 and `pending` = 0", - intval($a->profile['uid']) - ); - if(count($r)) { - $total = intval($r[0]['total']); - } - if(! $total) { - $o .= '

' . t('No contacts') . '

'; - return $o; - } - $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 and `pending` = 0 ORDER BY RAND() LIMIT %d", - intval($a->profile['uid']), - intval($shown) - ); - if(count($r)) { - $o .= '

' . sprintf( tt('%d Contact','%d Contacts', $total),$total) . '

'; - foreach($r as $rr) { - $o .= micropro($rr,true,'mpfriend'); - } - $o .= '
'; - $o .= ''; - - } - - $arr = array('contacts' => $r, 'output' => $o); - - call_hooks('contact_block_end', $arr); - return $o; - -}} - -if(! function_exists('micropro')) { -function micropro($contact, $redirect = false, $class = '', $textmode = false) { - - if($class) - $class = ' ' . $class; - - $url = $contact['url']; - $sparkle = ''; - - if($redirect) { - $a = get_app(); - $redirect_url = $a->get_baseurl() . '/redir/' . $contact['id']; - if(local_user() && ($contact['uid'] == local_user()) && ($contact['network'] === 'dfrn')) { - $url = $redirect_url; - $sparkle = ' sparkle'; - } - } - $click = ((x($contact,'click')) ? ' onclick="' . $contact['click'] . '" ' : ''); - if($click) - $url = ''; - if($textmode) { - return '' . "\r\n"; - } - else { - return '
' . $contact['name'] 
-			. '
' . "\r\n"; - } -}} - - - -if(! function_exists('search')) { -function search($s,$id='search-box',$url='/search') { - $a = get_app(); - $o = '
'; - $o .= '
'; - $o .= ''; - $o .= ''; - $o .= '
'; - return $o; -}} - -if(! function_exists('valid_email')) { -function valid_email($x){ - if(preg_match('/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/',$x)) - return true; - return false; -}} - - -if(! function_exists('gravatar_img')) { -function gravatar_img($email) { - $size = 175; - $opt = 'identicon'; // psuedo-random geometric pattern if not found - $rating = 'pg'; - $hash = md5(trim(strtolower($email))); - - $url = 'http://www.gravatar.com/avatar/' . $hash . '.jpg' - . '?s=' . $size . '&d=' . $opt . '&r=' . $rating; - - logger('gravatar: ' . $email . ' ' . $url); - return $url; -}} - -if(! function_exists('aes_decrypt')) { -function aes_decrypt($val,$ky) -{ - $key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; - for($a=0;$a=0 and ord(substr($dec, strlen($dec)-1,1))<=16)? chr(ord( substr($dec,strlen($dec)-1,1))):null)); -}} - - -if(! function_exists('aes_encrypt')) { -function aes_encrypt($val,$ky) -{ - $key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; - for($a=0;$a$1', $s); - return($s); -}} - - -/** - * - * Function: smilies - * - * Description: - * Replaces text emoticons with graphical images - * - * @Parameter: string $s - * - * Returns string - */ - -if(! function_exists('smilies')) { -function smilies($s) { - $a = get_app(); - - return str_replace( - array( '<3', '</3', '<\\3', ':-)', ':)', ';-)', ':-(', ':(', ':-P', ':P', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O'), - array( - '<3', - '</3', - '<\\3', - ':-)', - ':)', - ';-)', - ':-(', - ':(', - ':-P', - ':P', - ':-\', - ':-x', - ':-X', - ':-D', - '8-|', - '8-O' - ), $s); -}} - /** * @@ -2395,6 +829,8 @@ function profile_load(&$a, $nickname, $profile = 0) { if(! function_exists('profile_sidebar')) { function profile_sidebar($profile) { + $a = get_app(); + $o = ''; $location = ''; $address = false; @@ -2453,6 +889,55 @@ function profile_sidebar($profile) { $location = $gender = $marital = $homepage = ''; } + $podloc = $a->get_baseurl(); + $searchable = (($profile['publish'] && $profile['net-publish']) ? 'true' : 'false' ); + $nickname = $profile['nick']; + $photo300 = $a->get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg'; + $photo100 = $a->get_baseurl() . '/photo/custom/100/' . $profile['uid'] . '.jpg'; + $photo50 = $a->get_baseurl() . '/photo/custom/50/' . $profile['uid'] . '.jpg'; + + $diaspora_vcard = <<< EOT + +
+
+
Nickname
+
+$nickname +
+
+
+
URL
+
+$podloc +
+
+
+
Photo
+
+ +
+
+
+
Photo
+
+ +
+
+
+
Photo
+
+ +
+
+
+
Searchable
+
+$searchable +
+
+
+EOT; + $tpl = get_markup_template('profile_vcard.tpl'); $o .= replace_macros($tpl, array( @@ -2465,7 +950,8 @@ function profile_sidebar($profile) { '$gender' => $gender, '$pubkey' => $pubkey, '$marital' => $marital, - '$homepage' => $homepage + '$homepage' => $homepage, + '$diaspora' => $diaspora_vcard )); @@ -2477,81 +963,6 @@ function profile_sidebar($profile) { }} -if(! function_exists('register_hook')) { -function register_hook($hook,$file,$function) { - - $r = q("SELECT * FROM `hook` WHERE `hook` = '%s' AND `file` = '%s' AND `function` = '%s' LIMIT 1", - dbesc($hook), - dbesc($file), - dbesc($function) - ); - if(count($r)) - return true; - - $r = q("INSERT INTO `hook` (`hook`, `file`, `function`) VALUES ( '%s', '%s', '%s' ) ", - dbesc($hook), - dbesc($file), - dbesc($function) - ); - return $r; -}} - -if(! function_exists('unregister_hook')) { -function unregister_hook($hook,$file,$function) { - - $r = q("DELETE FROM `hook` WHERE `hook` = '%s' AND `file` = '%s' AND `function` = '%s' LIMIT 1", - dbesc($hook), - dbesc($file), - dbesc($function) - ); - return $r; -}} - - -if(! function_exists('load_hooks')) { -function load_hooks() { - $a = get_app(); - $a->hooks = array(); - $r = q("SELECT * FROM `hook` WHERE 1"); - if(count($r)) { - foreach($r as $rr) { - $a->hooks[] = array($rr['hook'], $rr['file'], $rr['function']); - } - } -}} - - -if(! function_exists('call_hooks')) { -function call_hooks($name, &$data = null) { - $a = get_app(); - - if(count($a->hooks)) { - foreach($a->hooks as $hook) { - if($hook[HOOK_HOOK] === $name) { - @include_once($hook[HOOK_FILE]); - if(function_exists($hook[HOOK_FUNCTION])) { - $func = $hook[HOOK_FUNCTION]; - $func($a,$data); - } - } - } - } -}} - - -if(! function_exists('day_translate')) { -function day_translate($s) { - $ret = str_replace(array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'), - array( t('Monday'), t('Tuesday'), t('Wednesday'), t('Thursday'), t('Friday'), t('Saturday'), t('Sunday')), - $s); - - $ret = str_replace(array('January','February','March','April','May','June','July','August','September','October','November','December'), - array( t('January'), t('February'), t('March'), t('April'), t('May'), t('June'), t('July'), t('August'), t('September'), t('October'), t('November'), t('December')), - $ret); - - return $ret; -}} - if(! function_exists('get_birthdays')) { function get_birthdays() { @@ -2602,79 +1013,6 @@ function get_birthdays() { }} -if(! function_exists('normalise_link')) { -function normalise_link($url) { - $ret = str_replace(array('https:','//www.'), array('http:','//'), $url); - return(rtrim($ret,'/')); -}} - -/** - * - * Compare two URLs to see if they are the same, but ignore - * slight but hopefully insignificant differences such as if one - * is https and the other isn't, or if one is www.something and - * the other isn't - and also ignore case differences. - * - * Return true if the URLs match, otherwise false. - * - */ - -if(! function_exists('link_compare')) { -function link_compare($a,$b) { - if(strcasecmp(normalise_link($a),normalise_link($b)) === 0) - return true; - return false; -}} - - -if(! function_exists('prepare_body')) { -function prepare_body($item,$attach = false) { - - $s = prepare_text($item['body']); - if(! $attach) - return $s; - - $arr = explode(',',$item['attach']); - if(count($arr)) { - $s .= '
'; - foreach($arr as $r) { - $matches = false; - $icon = ''; - $cnt = preg_match('|\[attach\]href=\"(.*?)\" size=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches); - if($cnt) { - $icontype = strtolower(substr($matches[3],0,strpos($matches[3],'/'))); - switch($icontype) { - case 'video': - case 'audio': - case 'image': - case 'text': - $icon = '
'; - break; - default: - $icon = '
'; - break; - } - $title = ((strlen(trim($matches[4]))) ? escape_tags(trim($matches[4])) : escape_tags($matches[1])); - $title .= ' ' . $matches[2] . ' ' . t('bytes'); - - $s .= '' . $icon . ''; - } - } - $s .= '
'; - } - return $s; -}} - -if(! function_exists('prepare_text')) { -function prepare_text($text) { - - require_once('include/bbcode.php'); - - $s = smilies(bbcode($text)); - - return $s; -}} - /** * * Wrap calls to proc_close(proc_open()) and call hook @@ -2785,106 +1123,6 @@ function feed_birthday($uid,$tz) { return $birthday; }} -/** - * return atom link elements for all of our hubs - */ - -if(! function_exists('feed_hublinks')) { -function feed_hublinks() { - - $hub = get_config('system','huburl'); - - $hubxml = ''; - if(strlen($hub)) { - $hubs = explode(',', $hub); - if(count($hubs)) { - foreach($hubs as $h) { - $h = trim($h); - if(! strlen($h)) - continue; - $hubxml .= '' . "\n" ; - } - } - } - return $hubxml; -}} - -/* return atom link elements for salmon endpoints */ - -if(! function_exists('feed_salmonlinks')) { -function feed_salmonlinks($nick) { - - $a = get_app(); - - $salmon = '' . "\n" ; - - // old style links that status.net still needed as of 12/2010 - - $salmon .= ' ' . "\n" ; - $salmon .= ' ' . "\n" ; - return $salmon; -}} - -if(! function_exists('get_plink')) { -function get_plink($item) { - $a = get_app(); - $plink = (((x($item,'plink')) && (! $item['private'])) ? '' : ''); - return $plink; -}} - -if(! function_exists('unamp')) { -function unamp($s) { - return str_replace('&', '&', $s); -}} - - - - -if(! function_exists('lang_selector')) { -function lang_selector() { - global $lang; - $o = '
'; - $o .= ''; - return $o; -}} - - -if(! function_exists('parse_xml_string')) { -function parse_xml_string($s,$strict = true) { - if($strict) { - if(! strstr($s,'code." at ".$err->line.":".$err->column." : ".$err->message, LOGGER_DATA); - libxml_clear_errors(); - } - return $x; -}} - if(! function_exists('is_site_admin')) { function is_site_admin() { $a = get_app(); @@ -2893,84 +1131,28 @@ function is_site_admin() { return false; }} -/* - * parse plugin comment in search of plugin infos. - * like - * - * * Name: Plugin - * * Description: A plugin which plugs in - * * Version: 1.2.3 - * * Author: John - * * Author: Jane - * * - */ -if (! function_exists('get_plugin_info')){ -function get_plugin_info($plugin){ - if (!is_file("addon/$plugin/$plugin.php")) return false; - - $f = file_get_contents("addon/$plugin/$plugin.php"); - $r = preg_match("|/\*.*\*/|msU", $f, $m); - - $info=Array( - 'name' => $plugin, - 'description' => "", - 'author' => array(), - 'version' => "" +if(! function_exists('load_contact_links')) { +function load_contact_links($uid) { + + $a = get_app(); + + $ret = array(); + + if(! $uid || x($a->contacts,'empty')) + return; + + $r = q("SELECT `id`,`network`,`url`,`thumb` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 ", + intval($uid) ); - - if ($r){ - $ll = explode("\n", $m[0]); - foreach( $ll as $l ) { - $l = trim($l,"\t\n\r */"); - if ($l!=""){ - list($k,$v) = array_map("trim", explode(":",$l,2)); - $k= strtolower($k); - if ($k=="author"){ - $r=preg_match("|([^<]+)<([^>]+)>|", $v, $m); - if ($r) { - $info['author'][] = array('name'=>$m[1], 'link'=>$m[2]); - } else { - $info['author'][] = array('name'=>$v); - } - } else { - if (array_key_exists($k,$info)){ - $info[$k]=$v; - } - } - - } + if(count($r)) { + foreach($r as $rr){ + $url = normalise_link($rr['url']); + $ret[$url] = $rr; } - } - return $info; + else + $ret['empty'] = true; + $a->contacts = $ret; + return; }} - -if(! function_exists('set_nav_selected')){ -function set_nav_selected($id){ - return ''; -}} - -if(! function_exists('return_bytes')) { -function return_bytes ($size_str) { - switch (substr ($size_str, -1)) - { - case 'M': case 'm': return (int)$size_str * 1048576; - case 'K': case 'k': return (int)$size_str * 1024; - case 'G': case 'g': return (int)$size_str * 1073741824; - default: return $size_str; - } -}} - -function generate_guid() { - $found = true; - do { - $guid = substr(random_string(),0,16); - $x = q("SELECT `uid` FROM `user` WHERE `guid` = '%s' LIMIT 1", - dbesc($guid) - ); - if(! count($x)) - $found = false; - } while ($found == true ); - return $guid; -} diff --git a/database.sql b/database.sql index 50697845a3..89c4b4267c 100644 --- a/database.sql +++ b/database.sql @@ -160,6 +160,7 @@ CREATE TABLE IF NOT EXISTS `intro` ( CREATE TABLE IF NOT EXISTS `item` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `guid` char(64) NOT NULL, `uri` char(255) NOT NULL, `uid` int(10) unsigned NOT NULL DEFAULT '0', `contact-id` int(10) unsigned NOT NULL DEFAULT '0', @@ -208,6 +209,7 @@ CREATE TABLE IF NOT EXISTS `item` ( `deleted` tinyint(1) NOT NULL DEFAULT '0', `last-child` tinyint(1) unsigned NOT NULL DEFAULT '1', PRIMARY KEY (`id`), + KEY `guid` (`guid`), KEY `uri` (`uri`), KEY `uid` (`uid`), KEY `contact-id` (`contact-id`), @@ -573,3 +575,9 @@ CREATE TABLE IF NOT EXISTS `attach` ( `deny_gid` MEDIUMTEXT NOT NULL ) ENGINE = MYISAM DEFAULT CHARSET=utf8; +CREATE TABLE IF NOT EXISTS `guid` ( +`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , +`guid` CHAR( 64 ) NOT NULL , +INDEX ( `guid` ) +) ENGINE = MYISAM DEFAULT CHARSET=utf8; + diff --git a/images/diaspora.png b/images/diaspora.png new file mode 100644 index 0000000000..725fae7181 Binary files /dev/null and b/images/diaspora.png differ diff --git a/images/friendika-16.png b/images/friendika-16.png index 3793508fb2..745b7ac6c5 100644 Binary files a/images/friendika-16.png and b/images/friendika-16.png differ diff --git a/include/Scrape.php b/include/Scrape.php index 6726d0b151..bfe795e19d 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -1,6 +1,7 @@ getElementsByTagName('*'); foreach($items as $item) { if(attribute_contains($item->getAttribute('class'), 'vcard')) { @@ -179,8 +182,13 @@ function scrape_vcard($url) { if(attribute_contains($x->getAttribute('class'),'fn')) $ret['fn'] = $x->textContent; if((attribute_contains($x->getAttribute('class'),'photo')) - || (attribute_contains($x->getAttribute('class'),'avatar'))) - $ret['photo'] = $x->getAttribute('src'); + || (attribute_contains($x->getAttribute('class'),'avatar'))) { + $size = intval($x->getAttribute('width')); + if(($size > $largest_photo) || (! $largest_photo)) { + $ret['photo'] = $x->getAttribute('src'); + $largest_photo = $size; + } + } if((attribute_contains($x->getAttribute('class'),'nickname')) || (attribute_contains($x->getAttribute('class'),'uid'))) $ret['nick'] = $x->textContent; @@ -289,13 +297,24 @@ function probe_url($url) { if(! $url) return $result; - $diaspora = false; + $diaspora = false; + $diaspora_base = ''; + $diaspora_guid = ''; + $diaspora_key = ''; $email_conversant = false; $twitter = ((strpos($url,'twitter.com') !== false) ? true : false); + $at_addr = ((strpos($url,'@') !== false) ? true : false); + if(! $twitter) { - $links = lrdd($url); + + if(strpos($url,'mailto:') !== false && $at_addr) { + $url = str_replace('mailto:','',$url); + $links = array(); + } + else + $links = lrdd($url); if(count($links)) { logger('probe_url: found lrdd links: ' . print_r($links,true), LOGGER_DATA); @@ -312,8 +331,19 @@ function probe_url($url) { $hcard = unamp($link['@attributes']['href']); if($link['@attributes']['rel'] === 'http://webfinger.net/rel/profile-page') $profile = unamp($link['@attributes']['href']); - if($link['@attributes']['rel'] === 'http://joindiaspora.com/seed_location') + if($link['@attributes']['rel'] === 'http://joindiaspora.com/seed_location') { + $diaspora_base = unamp($link['@attributes']['href']); $diaspora = true; + } + if($link['@attributes']['rel'] === 'http://joindiaspora.com/guid') { + $diaspora_guid = unamp($link['@attributes']['href']); + $diaspora = true; + } + if($link['@attributes']['rel'] === 'diaspora-public-key') { + $diaspora_key = base64_decode(unamp($link['@attributes']['href'])); + $pubkey = rsatopem($diaspora_key); + $diaspora = true; + } } // Status.Net can have more than one profile URL. We need to match the profile URL @@ -411,8 +441,17 @@ function probe_url($url) { } } + if($diaspora && $diaspora_base && $diaspora_guid) { + $notify = $diaspora_base . 'receive/post/' . $diaspora_guid; + if(strpos($url,'@')) + $addr = str_replace('acct:', '', $url); + } + if($network !== NETWORK_ZOT && $network !== NETWORK_DFRN && $network !== NETWORK_MAIL) { - $network = NETWORK_OSTATUS; + if($diaspora) + $network = NETWORK_DIASPORA; + else + $network = NETWORK_OSTATUS; $priority = 0; if($hcard) { @@ -429,13 +468,6 @@ function probe_url($url) { logger('probe_url: scrape_vcard: ' . print_r($vcard,true), LOGGER_DATA); } - if(! $profile) { - if($diaspora) - $profile = $hcard; - else - $profile = $url; - } - if($twitter) { logger('twitter: setup'); $tid = basename($url); @@ -451,10 +483,18 @@ function probe_url($url) { if(x($vcard,'nick')) $vcard['fn'] = $vcard['nick']; - - if(((! isset($vcard)) && (! $poll)) || ($twitter)) { + $check_feed = false; - $feedret = scrape_feed($url); + if($twitter || ! $poll) + $check_feed = true; + if((! isset($vcard)) || (! $profile)) + $check_feed = true; + if(($at_addr) && (! count($links))) + $check_feed = false; + + if($check_feed) { + + $feedret = scrape_feed(($poll) ? $poll : $url); logger('probe_url: scrape_feed returns: ' . print_r($feedret,true), LOGGER_DATA); if(count($feedret) && ($feedret['feed_atom'] || $feedret['feed_rss'])) { $poll = ((x($feedret,'feed_atom')) ? unamp($feedret['feed_atom']) : unamp($feedret['feed_rss'])); @@ -488,6 +528,8 @@ function probe_url($url) { if(strpos($vcard['fn'],'@') !== false) $vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@')); $email = unxmlify($author->get_email()); + if(! $profile && $author->get_link()) + $profile = trim(unxmlify($author->get_link())); if(! $vcard['photo']) { $rawtags = $feed->get_feed_tags( SIMPLEPIE_NAMESPACE_ATOM_10, 'author'); if($rawtags) { @@ -508,6 +550,8 @@ function probe_url($url) { if(strpos($vcard['fn'],'@') !== false) $vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@')); $email = unxmlify($author->get_email()); + if(! $profile && $author->get_link()) + $profile = trim(unxmlify($author->get_link())); } if(! $vcard['photo']) { $rawmedia = $item->get_item_tags('http://search.yahoo.com/mrss/','thumbnail'); @@ -545,8 +589,10 @@ function probe_url($url) { if(strpos($vcard['nick'],' ')) $vcard['nick'] = trim(substr($vcard['nick'],0,strpos($vcard['nick'],' '))); } - $network = 'feed'; - $priority = 2; + if(! $network) + $network = 'feed'; + if(! $priority) + $priority = 2; } } @@ -554,8 +600,12 @@ function probe_url($url) { $a = get_app(); $vcard['photo'] = $a->get_baseurl() . '/images/default-profile.jpg' ; } + + if(! $profile) + $profile = $url; + $vcard['fn'] = notags($vcard['fn']); - $vcard['nick'] = notags($vcard['nick']); + $vcard['nick'] = str_replace(' ','',notags($vcard['nick'])); $result['name'] = $vcard['fn']; diff --git a/include/acl.js b/include/acl.js index a0a1f5dd82..82b631ee94 100644 --- a/include/acl.js +++ b/include/acl.js @@ -153,6 +153,9 @@ ACL.prototype.updateview = function(){ $('#jot-perms-icon').removeClass('lock').addClass('unlock'); $('#jot-public').show(); $('.profile-jot-net input').attr('disabled', false); + if(editor != false) { + $('#profile-jot-desc').html(ispublic); + } } else { that.showall.removeClass("selected"); @@ -160,6 +163,7 @@ ACL.prototype.updateview = function(){ $('#jot-perms-icon').removeClass('unlock').addClass('lock'); $('#jot-public').hide(); $('.profile-jot-net input').attr('disabled', 'disabled'); + $('#profile-jot-desc').html(' '); } $("#acl-list-content .acl-list-item").each(function(){ diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 99de67d649..48ba77a888 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -96,7 +96,7 @@ function contact_selector($selname, $selclass, $preselected = false, $options) { $sql_extra = ''; if($x['mutual']) { - $sql_extra .= sprintf(" AND `rel` = %d ", intval(REL_BUD)); + $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); } if(intval($x['exclude'])) @@ -163,7 +163,7 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p $sql_extra = ''; if($privmail || $celeb) { - $sql_extra .= sprintf(" AND `rel` = %d ", intval(REL_BUD)); + $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); } if($privmail) { diff --git a/include/api.php b/include/api.php index 4e5ea43bdb..7a44cf0237 100644 --- a/include/api.php +++ b/include/api.php @@ -10,10 +10,9 @@ $API = Array(); - function api_date($str){ //Wed May 23 06:01:13 +0000 2007 - return datetime_convert('UTC', 'UTC', $str, "D M d h:i:s +0000 Y" ); + return datetime_convert('UTC', 'UTC', $str, "D M d H:i:s +0000 Y" ); } @@ -111,7 +110,11 @@ if ($info['auth']===true && local_user()===false) { api_login($a); } - + + load_contact_links(local_user()); + + logger('API call for ' . $a->user['username'] . ': ' . $a->query_string); + logger('API parameters: ' . print_r($_REQUEST,true)); $type="json"; if (strpos($a->query_string, ".xml")>0) $type="xml"; if (strpos($a->query_string, ".json")>0) $type="json"; @@ -145,7 +148,26 @@ //echo "
"; var_dump($r); die();
 			}
 		}
-		return false;
+		$r = 'not implemented';
+		switch($type){
+			case "xml":
+				header ("Content-Type: text/xml");
+				return ''."\n".$r;
+				break;
+			case "json": 
+				header ("Content-Type: application/json");  
+			    return json_encode(array('error' => 'not implemented'));
+				break;
+			case "rss":
+				header ("Content-Type: application/rss+xml");
+				return ''."\n".$r;
+				break;
+			case "atom":
+				header ("Content-Type: application/atom+xml");
+				return ''."\n".$r;
+				break;
+				
+		}
 	}
 
 	/**
@@ -157,7 +179,9 @@
 		$arr['$rss'] = array(
 			'alternate' => $user_info['url'],
 			'self' => $a->get_baseurl(). "/". $a->query_string,
+			'base' => $a->get_baseurl(),
 			'updated' => api_date(null),
+			'atom_updated' => datetime_convert('UTC','UTC','now',ATOM_TIME),
 			'language' => $user_info['language'],
 			'logo'	=> $a->get_baseurl()."/images/friendika-32.png",
 		);
@@ -168,9 +192,10 @@
 	/**
 	 * Returns user info array.
 	 */
-	function api_get_user(&$a, $contact_id=Null){
+	function api_get_user(&$a, $contact_id = Null){
 		$user = null;
 		$extra_query = "";
+
 		if(!is_null($contact_id)){
 			$user=$contact_id;
 			$extra_query = "AND `contact`.`id` = %d ";
@@ -185,7 +210,7 @@
 			$extra_query = "AND `contact`.`nick` = '%s' ";
 		}
 		
-		if (is_null($user)){
+		if (is_null($user) && $a->argc > 3){
 			list($user, $null) = explode(".",$a->argv[3]);
 			if(is_numeric($user)){
 				$user = intval($user);
@@ -196,17 +221,17 @@
 			}
 		}
 		
-		if ($user==='') {
+		if (! $user) {
 			if (local_user()===false) {
 				api_login($a); return False;
 			} else {
 				$user = $_SESSION['uid'];
-				$extra_query = "AND `contact`.`uid` = %d ";
+				$extra_query = "AND `contact`.`uid` = %d AND `contact`.`self` = 1 ";
 			}
 			
 		}
 		
-
+		logger('api_user: ' . $extra_query . ' ' , $user);
 		// user info		
 		$uinfo = q("SELECT *, `contact`.`id` as `cid` FROM `contact`
 				WHERE 1
@@ -217,43 +242,135 @@
 			return False;
 		}
 		
-		// count public wall messages
-		$r = q("SELECT COUNT(`id`) as `count` FROM `item`
-				WHERE  `uid` = %d
-				AND `type`='wall' 
-				AND `allow_cid`='' AND `allow_gid`='' AND `deny_cid`='' AND `deny_gid`=''",
-				intval($uinfo[0]['uid'])
-		);
-		$countitms = $r[0]['count'];
-		
+		if($uinfo[0]['self']) {
+			$usr = q("select * from user where uid = %d limit 1",
+				intval(local_user())
+			);
+			$profile = q("select * from profile where uid = %d and `is-default` = 1 limit 1",
+				intval(local_user())
+			);
+
+			// count public wall messages
+			$r = q("SELECT COUNT(`id`) as `count` FROM `item`
+					WHERE  `uid` = %d
+					AND `type`='wall' 
+					AND `allow_cid`='' AND `allow_gid`='' AND `deny_cid`='' AND `deny_gid`=''",
+					intval($uinfo[0]['uid'])
+			);
+			$countitms = $r[0]['count'];
+		}
+		else {
+			$r = q("SELECT COUNT(`id`) as `count` FROM `item`
+					WHERE  `contact-id` = %d
+					AND `allow_cid`='' AND `allow_gid`='' AND `deny_cid`='' AND `deny_gid`=''",
+					intval($uinfo[0]['id'])
+			);
+			$countitms = $r[0]['count'];
+		}
+
 		// count friends
 		$r = q("SELECT COUNT(`id`) as `count` FROM `contact`
-				WHERE  `uid` = %d
+				WHERE  `uid` = %d AND `rel` IN ( %d, %d )
 				AND `self`=0 AND `blocked`=0", 
-				intval($uinfo[0]['uid'])
+				intval($uinfo[0]['uid']),
+				intval(CONTACT_IS_SHARING),
+				intval(CONTACT_IS_FRIEND)
 		);
 		$countfriends = $r[0]['count'];
-				
+
+		$r = q("SELECT COUNT(`id`) as `count` FROM `contact`
+				WHERE  `uid` = %d AND `rel` IN ( %d, %d )
+				AND `self`=0 AND `blocked`=0", 
+				intval($uinfo[0]['uid']),
+				intval(CONTACT_IS_FOLLOWER),
+				intval(CONTACT_IS_FRIEND)
+		);
+		$countfollowers = $r[0]['count'];
+
+		$r = q("SELECT count(`id`) as `count` FROM item where starred = 1 and uid = %d and deleted = 0",
+			intval($uinfo[0]['uid'])
+		);
+		$starred = $r[0]['count'];
+	
+
+		if(! $uinfo[0]['self']) {
+			$countfriends = 0;
+			$countfollowers = 0;
+			$starred = 0;
+		}
 
 		$ret = Array(
-			'uid' => $uinfo[0]['uid'],
-			'id' => $uinfo[0]['cid'],
+			'uid' => intval($uinfo[0]['uid']),
+			'id' => intval($uinfo[0]['cid']),
 			'name' => $uinfo[0]['name'],
-			'screen_name' => $uinfo[0]['nick'],
-			'location' => '', //$uinfo[0]['default-location'],
+			'screen_name' => (($uinfo[0]['nick']) ? $uinfo[0]['nick'] : $uinfo[0]['name']),
+			'location' => ($usr) ? $usr[0]['default-location'] : '',
 			'profile_image_url' => $uinfo[0]['micro'],
 			'url' => $uinfo[0]['url'],
 			'contact_url' => $a->get_baseurl()."/contacts/".$uinfo[0]['cid'],
-			'protected' => false,	#
-			'friends_count' => $countfriends,
+			'protected' => false,	
+			'friends_count' => intval($countfriends),
 			'created_at' => api_date($uinfo[0]['name-date']),
+			'utc_offset' => "+00:00",
+			'time_zone' => 'UTC', //$uinfo[0]['timezone'],
+			'geo_enabled' => false,
+			'statuses_count' => intval($countitms), #XXX: fix me 
+			'lang' => 'en', #XXX: fix me
+			'description' => (($profile) ? $profile[0]['pdesc'] : ''),
+			'followers_count' => intval($countfollowers),
+			'favourites_count' => intval($starred),
+			'contributors_enabled' => false,
+			'follow_request_sent' => false,
+			'profile_background_color' => 'cfe8f6',
+			'profile_text_color' => '000000',
+			'profile_link_color' => 'FF8500',
+			'profile_sidebar_fill_color' =>'AD0066',
+			'profile_sidebar_border_color' => 'AD0066',
+			'profile_background_image_url' => '',
+			'profile_background_tile' => false,
+			'profile_use_background_image' => false,
+			'notifications' => false,
+			'following' => '', #XXX: fix me
+			'verified' => true, #XXX: fix me
+			#'status' => null
+		);
+	
+		return $ret;
+		
+	}
+
+	function api_item_get_user(&$a, $item) {
+		// The author is our direct contact, in a conversation with us.
+		if(link_compare($item['url'],$item['author-link'])) {
+			return api_get_user($a,$item['cid']);
+		}
+		else {
+			// The author may be a contact of ours, but is replying to somebody else. 
+			// Figure out if we know him/her.
+			$normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']);
+            if(($normalised != 'mailbox') && (x($a->contacts[$normalised])))
+				return api_get_user($a,$a->contacts[$normalised]['id']);
+		}
+		// We don't know this person directly.
+		$ret = array(
+			'uid' => 0,
+			'id' => 0,
+			'name' => $item['author-name'],
+			'screen_name' => $item['author_name'],
+			'location' => '', //$uinfo[0]['default-location'],
+			'profile_image_url' => $item['author-avatar'],
+			'url' => $item['author-link'],
+			'contact_url' => 0,
+			'protected' => false,	#
+			'friends_count' => 0,
+			'created_at' => '',
 			'utc_offset' => 0, #XXX: fix me
 			'time_zone' => '', //$uinfo[0]['timezone'],
 			'geo_enabled' => false,
-			'statuses_count' => $countitms, #XXX: fix me 
+			'statuses_count' => 0,
 			'lang' => 'en', #XXX: fix me
 			'description' => '',
-			'followers_count' => $countfriends, #XXX: fix me
+			'followers_count' => 0,
 			'favourites_count' => 0,
 			'contributors_enabled' => false,
 			'follow_request_sent' => false,
@@ -270,9 +387,8 @@
 			'followers' => '', #XXX: fix me
 			#'status' => null
 		);
-	
-		return $ret;
-		
+
+		return $ret; 
 	}
 
 	/**
@@ -281,7 +397,7 @@
 	function api_xmlify($val){
 		if (is_bool($val)) return $val?"true":"false";
 		if (is_array($val)) return array_map('api_xmlify', $val);
-		return xmlify($val);
+		return xmlify((string) $val);
 	}
 
 	/**
@@ -289,9 +405,11 @@
 	 */
 	function api_apply_template($templatename, $type, $data){
 
+		$a = get_app();
+
 		switch($type){
-			case "rss":
 			case "atom":
+			case "rss":
 			case "xml":
 				$data = api_xmlify($data);
 				$tpl = get_markup_template("api_".$templatename."_".$type.".tpl");
@@ -323,20 +441,39 @@
 	api_register_func('api/account/verify_credentials','api_account_verify_credentials', true);
 	 	
 
+	/**
+	 * get data from $_POST or $_GET
+	 */
+	function requestdata($k){
+		if (isset($_POST[$k])){
+			return $_POST[$k];
+		}
+		if (isset($_GET[$k])){
+			return $_GET[$k];
+		}
+		return null;
+	}
 	// TODO - media uploads
-	
 	function api_statuses_update(&$a, $type) {
 		if (local_user()===false) return false;
 		$user_info = api_get_user($a);
 
 		// convert $_POST array items to the form we use for web posts.
 
-		$_POST['body'] = urldecode($_POST['status']);
-		$_POST['parent'] = $_POST['in_reply_to_status_id'];
-		if($_POST['lat'] && $_POST['long'])
-			$_POST['coord'] = sprintf("%s %s",$_POST['lat'],$_POST['long']);
+		// logger('api_post: ' . print_r($_POST,true));
+
+		$_POST['body'] = urldecode(requestdata('status'));
+
+		$parent = requestdata('in_reply_to_status_id');
+		if(ctype_digit($parent))
+			$_POST['parent'] = $parent;
+		else
+			$_POST['parent_uri'] = $parent;
+
+		if(requestdata('lat') && requestdata('long'))
+			$_POST['coord'] = sprintf("%s %s",requestdata('lat'),requestdata('long'));
 		$_POST['profile_uid'] = local_user();
-		if($_POST['parent'])
+		if(requestdata('parent'))
 			$_POST['type'] = 'net-comment';
 		else
 			$_POST['type'] = 'wall';
@@ -473,7 +610,7 @@
 		
 		$user_info = api_get_user($a);
 		// get last newtork messages
-		$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` ) ";
+//		$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` ) ";
 
 		$r = q("SELECT `item`.*, `item`.`id` AS `item_id`, 
 			`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
@@ -485,42 +622,13 @@
 			AND `contact`.`id` = `item`.`contact-id`
 			AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
 			$sql_extra
-			ORDER BY `item`.`created` DESC LIMIT %d ,%d ",
+			ORDER BY `item`.`received` DESC LIMIT %d ,%d ",
 			intval($user_info['uid']),
 			0,20
 		);
-		$ret = Array();
 
-		foreach($r as $item) {
-			$status_user = (($item['cid']==$user_info['id'])?$user_info: api_get_user($a,$item['cid']));
-			$status = array(
-				'created_at'=> api_date($item['created']),
-				'published' => datetime_convert('UTC','UTC',$item['created'],ATOM_TIME),
-				'updated'   => datetime_convert('UTC','UTC',$item['edited'],ATOM_TIME),
-				'id'		=> $item['id'],
-				'text'		=> strip_tags(bbcode($item['body'])),
-				'html'		=> bbcode($item['body']),
-				'source'    => (($item['app']) ? $item['app'] : 'web'),
-				'url'		=> ($item['plink']!=''?$item['plink']:$item['author-link']),
-				'truncated' => False,
-				'in_reply_to_status_id' => ($item['parent']!=$item['id']?$item['parent']:''),
-				'in_reply_to_user_id' => '',
-				'favorited' => false,
-				'in_reply_to_screen_name' => '',
-				'geo' => '',
-				'coordinates' => $item['coord'],
-				'place' => $item['location'],
-				'contributors' => '',
-				'annotations'  => '',
-				'entities'  => '',
-				'user' =>  $status_user ,
-				'objecttype' => $item['object-type'],
-				'verb' => $item['verb'],
-				'self' => $a->get_baseurl()."/api/statuses/show/".$ite['id'].".".$type,
-				'edit' => $a->get_baseurl()."/api/statuses/show/".$ite['id'].".".$type,				
-			);
-			$ret[]=$status;
-		};
+		$ret = api_format_items($r,$user_info);
+
 		
 		$data = array('$statuses' => $ret);
 		switch($type){
@@ -533,9 +641,130 @@
 	}
 	api_register_func('api/statuses/home_timeline','api_statuses_home_timeline', true);
 	api_register_func('api/statuses/friends_timeline','api_statuses_home_timeline', true);
-	api_register_func('api/statuses/user_timeline','api_statuses_home_timeline', true);
-	# TODO: user_timeline should be profile view
+
+
+
+	function api_statuses_user_timeline(&$a, $type){
+		if (local_user()===false) return false;
+		
+		$user_info = api_get_user($a);
+		// get last newtork messages
+//		$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` ) ";
+
+		$r = q("SELECT `item`.*, `item`.`id` AS `item_id`, 
+			`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
+			`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
+			`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
+			FROM `item`, `contact`
+			WHERE `item`.`uid` = %d
+			AND `item`.`visible` = 1 AND `item`.`deleted` = 0
+			AND `item`.`wall` = 1
+			AND `contact`.`id` = `item`.`contact-id`
+			AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
+			$sql_extra
+			ORDER BY `item`.`received` DESC LIMIT %d ,%d ",
+			intval($user_info['uid']),
+			0,20
+		);
+
+		$ret = api_format_items($r,$user_info);
+
+		
+		$data = array('$statuses' => $ret);
+		switch($type){
+			case "atom":
+			case "rss":
+				$data = api_rss_extra($a, $data, $user_info);
+		}
+				
+		return  api_apply_template("timeline", $type, $data);
+	}
+
+	api_register_func('api/statuses/user_timeline','api_statuses_user_timeline', true);
+
+
+	function api_favorites(&$a, $type){
+		if (local_user()===false) return false;
+		
+		$user_info = api_get_user($a);
+		// get last newtork messages
+//		$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` ) ";
+
+		$r = q("SELECT `item`.*, `item`.`id` AS `item_id`, 
+			`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
+			`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
+			`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
+			FROM `item`, `contact`
+			WHERE `item`.`uid` = %d
+			AND `item`.`visible` = 1 AND `item`.`deleted` = 0
+			AND `item`.`starred` = 1
+			AND `contact`.`id` = `item`.`contact-id`
+			AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
+			$sql_extra
+			ORDER BY `item`.`received` DESC LIMIT %d ,%d ",
+			intval($user_info['uid']),
+			0,20
+		);
+
+		$ret = api_format_items($r,$user_info);
+
+		
+		$data = array('$statuses' => $ret);
+		switch($type){
+			case "atom":
+			case "rss":
+				$data = api_rss_extra($a, $data, $user_info);
+		}
+				
+		return  api_apply_template("timeline", $type, $data);
+	}
+
+	api_register_func('api/favorites','api_favorites', true);
+
 	
+	function api_format_items($r,$user_info) {
+
+		//logger('api_format_items: ' . print_r($r,true));
+
+		//logger('api_format_items: ' . print_r($user_info,true));
+
+		$a = get_app();
+		$ret = Array();
+
+		foreach($r as $item) {
+			$status_user = (($item['cid']==$user_info['id'])?$user_info: api_item_get_user($a,$item));
+			$status = array(
+				'created_at'=> api_date($item['created']),
+				'published' => datetime_convert('UTC','UTC',$item['created'],ATOM_TIME),
+				'updated'   => datetime_convert('UTC','UTC',$item['edited'],ATOM_TIME),
+				'id'		=> intval($item['id']),
+				'message_id' => $item['uri'],
+				'text'		=> strip_tags(bbcode($item['body'])),
+				'statusnet_html'		=> bbcode($item['body']),
+				'source'    => (($item['app']) ? $item['app'] : 'web'),
+				'url'		=> ($item['plink']!=''?$item['plink']:$item['author-link']),
+				'truncated' => False,
+				'in_reply_to_status_id' => ($item['parent']!=$item['id']? intval($item['parent']):''),
+				'in_reply_to_user_id' => '',
+				'favorited' => $item['starred'] ? true : false,
+				'in_reply_to_screen_name' => '',
+				'geo' => '',
+				'coordinates' => $item['coord'],
+				'place' => $item['location'],
+				'contributors' => '',
+				'annotations'  => '',
+				'entities'  => '',
+				'user' =>  $status_user ,
+				'objecttype' => (($item['object-type']) ? $item['object-type'] : ACTIVITY_OBJ_NOTE),
+				'verb' => (($item['verb']) ? $item['verb'] : ACTIVITY_POST),
+				'self' => $a->get_baseurl()."/api/statuses/show/".$item['id'].".".$type,
+				'edit' => $a->get_baseurl()."/api/statuses/show/".$item['id'].".".$type,				
+			);
+			$ret[]=$status;
+		};
+		return $ret;
+	}
+
 
 	function api_account_rate_limit_status(&$a,$type) {
 
@@ -550,3 +779,93 @@
 
 	}
 	api_register_func('api/account/rate_limit_status','api_account_rate_limit_status',true);
+
+
+	function api_statusnet_config(&$a,$type) {
+		$name = $a->config['sitename'];
+		$server = $a->get_hostname();
+		$logo = $a->get_baseurl() . '/images/friendika-64.png';
+		$email = $a->config['admin_email'];
+		$closed = (($a->config['register_policy'] == REGISTER_CLOSED) ? 'true' : 'false');
+		$private = (($a->config['system']['block_public']) ? 'true' : 'false');
+		$textlimit = (string) (($a->config['max_import_size']) ? $a->config['max_import_size'] : 200000);
+		if($a->config['api_import_size'])
+			$texlimit = string($a->config['api_import_size']);
+		$ssl = (($a->config['system']['have_ssl']) ? 'true' : 'false');
+		$sslserver = (($ssl === 'true') ? str_replace('http:','https:',$a->get_baseurl()) : '');
+
+		$config = array(
+			'site' => array('name' => $name,'server' => $server, 'theme' => 'default', 'path' => '',
+				'logo' => $logo, 'fancy' => 'true', 'language' => 'en', 'email' => $email, 'broughtby' => '',
+				'broughtbyurl' => '', 'timezone' => 'UTC', 'closed' => $closed, 'inviteonly' => 'false',
+				'private' => $private, 'textlimit' => $textlimit, 'sslserver' => $sslserver, 'ssl' => $ssl,
+				'shorturllength' => '30'
+			),
+		);  
+
+		return api_apply_template('config', $type, array('$config' => $config));
+
+	}
+	api_register_func('api/statusnet/config','api_statusnet_config',false);
+
+
+	function api_statusnet_version(&$a,$type) {
+
+		// liar
+
+		if($type === 'xml') {
+			header("Content-type: application/xml");
+			echo '' . "\r\n" . '0.9.7' . "\r\n";
+			killme();
+		}
+		elseif($type === 'json') {
+			header("Content-type: application/json");
+			echo '"0.9.7"';
+			killme();
+		}
+	}
+	api_register_func('api/statusnet/version','api_statusnet_version',false);
+
+
+	function api_ff_ids(&$a,$type,$qtype) {
+		if(! local_user())
+			return false;
+
+		if($qtype == 'friends')
+			$sql_extra = sprintf(" AND ( `rel` = %d OR `rel` = %d ) ", intval(CONTACT_IS_SHARING), intval(CONTACT_IS_FRIEND));
+		if($qtype == 'followers')
+			$sql_extra = sprintf(" AND ( `rel` = %d OR `rel` = %d ) ", intval(CONTACT_IS_FOLLOWER), intval(CONTACT_IS_FRIEND));
+ 
+
+		$r = q("SELECT id FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 $sql_extra",
+			intval(local_user())
+		);
+
+		if(is_array($r)) {
+			if($type === 'xml') {
+				header("Content-type: application/xml");
+				echo '' . "\r\n" . '' . "\r\n";
+				foreach($r as $rr)
+					echo '' . $rr['id'] . '' . "\r\n";
+				echo '' . "\r\n";
+				killme();
+			}
+			elseif($type === 'json') {
+				$ret = array();
+				header("Content-type: application/json");
+				foreach($r as $rr) $ret[] = $rr['id'];
+				echo json_encode($ret);
+				killme();
+			}
+		}
+	}
+
+	function api_friends_ids(&$a,$type) {
+		api_ff_ids($a,$type,'friends');
+	}
+	function api_followers_ids(&$a,$type) {
+		api_ff_ids($a,$type,'followers');
+	}
+	api_register_func('api/friends/ids','api_friends_ids',true);
+	api_register_func('api/followers/ids','api_followers_ids',true);
+
diff --git a/include/attach.php b/include/attach.php
index ca53081d93..4001d2af13 100644
--- a/include/attach.php
+++ b/include/attach.php
@@ -1,7 +1,7 @@
  'application/vnd.oasis.opendocument.spreadsheet',
 	);
 
-	if(strpos($filename,'.') !== false) {
-		$ext = strtolower(array_pop(explode('.',$filename)));
+	$dot = strpos($filename,'.');
+	if($dot !== false) {
+		$ext = strtolower(substr($filename,$dot+1));
 		if (array_key_exists($ext, $mime_types)) {
 			return $mime_types[$ext];
 		}
@@ -76,5 +77,5 @@ function mime_content_type($filename) {
 	else {
 		return 'application/octet-stream';
 	}
-}}
+}
 
diff --git a/include/auth.php b/include/auth.php
index d1eb9d131c..768af626fb 100644
--- a/include/auth.php
+++ b/include/auth.php
@@ -25,7 +25,7 @@ if((isset($_SESSION)) && (x($_SESSION,'authenticated')) && ((! (x($_POST,'auth-p
 
 		nuke_session();
 		info( t('Logged out.') . EOL);
-		goaway($a->get_baseurl());
+		goaway(z_root());
 	}
 
 	if(x($_SESSION,'visitor_id') && (! x($_SESSION,'uid'))) {
@@ -45,7 +45,7 @@ if((isset($_SESSION)) && (x($_SESSION,'authenticated')) && ((! (x($_POST,'auth-p
 		// extra paranoia - if the IP changed, log them out
 		if($check && ($_SESSION['addr'] != $_SERVER['REMOTE_ADDR'])) {
 			nuke_session();
-			goaway($a->get_baseurl());
+			goaway(z_root());
 		}
 
 		$r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
@@ -54,7 +54,7 @@ if((isset($_SESSION)) && (x($_SESSION,'authenticated')) && ((! (x($_POST,'auth-p
 
 		if(! count($r)) {
 			nuke_session();
-			goaway($a->get_baseurl());
+			goaway(z_root());
 		}
 
 		// initialise user environment
@@ -118,7 +118,7 @@ else {
 			if(($noid) || (strpos($temp_string,'@')) || (! validate_url($temp_string))) {
 				$a = get_app();
 				notice( t('Login failed.') . EOL);
-				goaway($a->get_baseurl());
+				goaway(z_root());
 				// NOTREACHED
 			}
 
@@ -143,7 +143,7 @@ else {
 				if($a->config['register_policy'] == REGISTER_CLOSED) {
 					$a = get_app();
 					notice( t('Login failed.') . EOL);
-					goaway($a->get_baseurl());
+					goaway(z_root());
 					// NOTREACHED
 				}
 				// new account
@@ -196,7 +196,7 @@ else {
 		if((! $record) || (! count($record))) {
 			logger('authenticate: failed login attempt: ' . trim($_POST['openid_url'])); 
 			notice( t('Login failed.') . EOL );
-			goaway($a->get_baseurl());
+			goaway(z_root());
   		}
 
 		$_SESSION['uid'] = $record['uid'];
diff --git a/include/config.php b/include/config.php
new file mode 100644
index 0000000000..f565ab1178
--- /dev/null
+++ b/include/config.php
@@ -0,0 +1,218 @@
+config[$k] = $rr['v'];
+			} else {
+				$a->config[$family][$k] = $rr['v'];
+			}
+		}
+	}
+}}
+
+// get a particular config variable given the family name
+// and key. Returns false if not set.
+// $instore is only used by the set_config function
+// to determine if the key already exists in the DB
+// If a key is found in the DB but doesn't exist in
+// local config cache, pull it into the cache so we don't have
+// to hit the DB again for this item.
+
+if(! function_exists('get_config')) {
+function get_config($family, $key, $instore = false) {
+
+	global $a;
+
+	if(! $instore) {
+		if(isset($a->config[$family][$key])) {
+			if($a->config[$family][$key] === '!!') {
+				return false;
+			}
+			return $a->config[$family][$key];
+		}
+	}
+	$ret = q("SELECT `v` FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1",
+		dbesc($family),
+		dbesc($key)
+	);
+	if(count($ret)) {
+		// manage array value
+		$val = (preg_match("|^a:[0-9]+:{.*}$|", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']);
+		$a->config[$family][$key] = $val;
+		return $val;
+	}
+	else {
+		$a->config[$family][$key] = '!!';
+	}
+	return false;
+}}
+
+// Store a config value ($value) in the category ($family)
+// under the key ($key)
+// Return the value, or false if the database update failed
+
+if(! function_exists('set_config')) {
+function set_config($family,$key,$value) {
+	global $a;
+	
+	// manage array value
+	$dbvalue = (is_array($value)?serialize($value):$value);
+
+	if(get_config($family,$key,true) === false) {
+		$a->config[$family][$key] = $value;
+		$ret = q("INSERT INTO `config` ( `cat`, `k`, `v` ) VALUES ( '%s', '%s', '%s' ) ",
+			dbesc($family),
+			dbesc($key),
+			dbesc($dbvalue)
+		);
+		if($ret) 
+			return $value;
+		return $ret;
+	}
+	
+	$ret = q("UPDATE `config` SET `v` = '%s' WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1",
+		dbesc($dbvalue),
+		dbesc($family),
+		dbesc($key)
+	);
+
+	$a->config[$family][$key] = $value;
+
+	if($ret)
+		return $value;
+	return $ret;
+}}
+
+
+if(! function_exists('load_pconfig')) {
+function load_pconfig($uid,$family) {
+	global $a;
+	$r = q("SELECT * FROM `pconfig` WHERE `cat` = '%s' AND `uid` = %d",
+		dbesc($family),
+		intval($uid)
+	);
+	if(count($r)) {
+		foreach($r as $rr) {
+			$k = $rr['k'];
+			$a->config[$uid][$family][$k] = $rr['v'];
+		}
+	}
+}}
+
+
+
+if(! function_exists('get_pconfig')) {
+function get_pconfig($uid,$family, $key, $instore = false) {
+
+	global $a;
+
+	if(! $instore) {
+		if(isset($a->config[$uid][$family][$key])) {
+			if($a->config[$uid][$family][$key] === '!!') {
+				return false;
+			}
+			return $a->config[$uid][$family][$key];
+		}
+	}
+
+	$ret = q("SELECT `v` FROM `pconfig` WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1",
+		intval($uid),
+		dbesc($family),
+		dbesc($key)
+	);
+
+	if(count($ret)) {
+		$a->config[$uid][$family][$key] = $ret[0]['v'];
+		return $ret[0]['v'];
+	}
+	else {
+		$a->config[$uid][$family][$key] = '!!';
+	}
+	return false;
+}}
+
+if(! function_exists('del_config')) {
+function del_config($family,$key) {
+
+	global $a;
+	if(x($a->config[$family],$key))
+		unset($a->config[$family][$key]);
+	$ret = q("DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1",
+		dbesc($cat),
+		dbesc($key)
+	);
+	return $ret;
+}}
+
+
+
+// Same as above functions except these are for personal config storage and take an
+// additional $uid argument.
+
+if(! function_exists('set_pconfig')) {
+function set_pconfig($uid,$family,$key,$value) {
+
+	global $a;
+
+	if(get_pconfig($uid,$family,$key,true) === false) {
+		$a->config[$uid][$family][$key] = $value;
+		$ret = q("INSERT INTO `pconfig` ( `uid`, `cat`, `k`, `v` ) VALUES ( %d, '%s', '%s', '%s' ) ",
+			intval($uid),
+			dbesc($family),
+			dbesc($key),
+			dbesc($value)
+		);
+		if($ret) 
+			return $value;
+		return $ret;
+	}
+	$ret = q("UPDATE `pconfig` SET `v` = '%s' WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1",
+		dbesc($value),
+		intval($uid),
+		dbesc($family),
+		dbesc($key)
+	);
+
+	$a->config[$uid][$family][$key] = $value;
+
+	if($ret)
+		return $value;
+	return $ret;
+}}
+
+if(! function_exists('del_pconfig')) {
+function del_pconfig($uid,$family,$key) {
+
+	global $a;
+	if(x($a->config[$uid][$family],$key))
+		unset($a->config[$uid][$family][$key]);
+	$ret = q("DELETE FROM `pconfig` WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1",
+		intval($uid),
+		dbesc($family),
+		dbesc($key)
+	);
+	return $ret;
+}}
diff --git a/include/conversation.php b/include/conversation.php
index 82a107c07c..0d901a3c06 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -283,14 +283,14 @@ function conversation(&$a, $items, $mode, $update) {
 				continue;
 
 			$toplevelpost = (($item['id'] == $item['parent']) ? true : false);
-
+			$toplevelprivate = false;
 
 			// Take care of author collapsing and comment collapsing
 			// If a single author has more than 3 consecutive top-level posts, squash the remaining ones.
 			// If there are more than two comments, squash all but the last 2.
-
+		
 			if($toplevelpost) {
-
+				$toplevelprivate = (($toplevelpost && $item['private']) ? true : false);
 				$item_writeable = (($item['writable'] || $item['self']) ? true : false);
 
 				if($blowhard == $item['cid'] && (! $item['self']) && ($mode != 'profile') && ($mode != 'notes')) {
@@ -312,9 +312,12 @@ function conversation(&$a, $items, $mode, $update) {
 				$comments_seen = 0;
 				$comments_collapsed = false;
 			}
-			else
+			else {
+				// prevent private email from leaking into public conversation
+				if((! $toplevelpost) && (! toplevelprivate) && ($item['private']) && ($profile_owner != local_user()))
+					continue;
 				$comments_seen ++;
-
+			}	
 
 			$override_comment_box = ((($page_writeable) && ($item_writeable)) ? true : false);
 			$show_comment_box = ((($page_writeable) && ($item_writeable) && ($comments_seen == $comments[$item['parent']])) ? true : false);
@@ -347,7 +350,7 @@ function conversation(&$a, $items, $mode, $update) {
 
 			if(($toplevelpost) && (! $item['self']) && ($mode !== 'profile')) {
 
-				if($item['type'] === 'wall') {
+				if($item['wall']) {
 
 					// On the network page, I am the owner. On the display page it will be the profile owner.
 					// This will have been stored in $a->page_contact by our calling page.
@@ -359,7 +362,7 @@ function conversation(&$a, $items, $mode, $update) {
 					$template = $wallwall;
 					$commentww = 'ww';	
 				}
-				if(($item['type'] === 'remote') && (strlen($item['owner-link'])) && ($item['owner-link'] != $item['author-link'])) {
+				if((! $item['wall']) && (strlen($item['owner-link'])) && ($item['owner-link'] != $item['author-link'])) {
 
 					// Could be anybody. 
 
@@ -444,7 +447,7 @@ function conversation(&$a, $items, $mode, $update) {
 				$profile_link = '';
 
 			$normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']);
-			if(($normalised != 'mailbox') && (x($a->contacts[$normalised])))
+			if(($normalised != 'mailbox') && (x($a->contacts,$normalised)))
 				$profile_avatar = $a->contacts[$normalised]['thumb'];
 			else
 				$profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $thumb);
@@ -533,33 +536,6 @@ function conversation(&$a, $items, $mode, $update) {
 	return $o;
 } 
 
-
-if(! function_exists('load_contact_links')) {
-function load_contact_links($uid) {
-
-	$a = get_app();
-
-	$ret = array();
-
-	if(! $uid || x($a->contacts,'empty'))
-		return;
-
-	$r = q("SELECT `id`,`network`,`url`,`thumb` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 ",
-			intval($uid)
-	);
-	if(count($r)) {
-		foreach($r as $rr){
-			$url = normalise_link($rr['url']);
-			$ret[$url] = $rr;
-		}
-	}
-	else 
-		$ret['empty'] = true;	
-	$a->contacts = $ret;
-	return;		
-}}
-
-
 function best_link_url($item,&$sparkle) {
 
 	$a = get_app();
diff --git a/include/cronhooks.php b/include/cronhooks.php
new file mode 100644
index 0000000000..37541f013e
--- /dev/null
+++ b/include/cronhooks.php
@@ -0,0 +1,43 @@
+set_baseurl(get_config('system','url'));
+
+	load_hooks();
+
+	logger('cronhooks: start');
+	
+
+	$d = datetime_convert();
+
+	call_hooks('cron', $d);
+
+	return;
+}
+
+if (array_search(__file__,get_included_files())===0){
+  cronhooks_run($argv,$argc);
+  killme();
+}
diff --git a/include/crypto.php b/include/crypto.php
new file mode 100644
index 0000000000..1ab9e7b25f
--- /dev/null
+++ b/include/crypto.php
@@ -0,0 +1,184 @@
+=')) {
+		openssl_sign($data,$sig,$key,'sha256');
+    }
+    else {
+		if(strlen($key) < 1024 || extension_loaded('gmp')) {
+			require_once('library/phpsec/Crypt/RSA.php');
+			$rsa = new CRYPT_RSA();
+			$rsa->signatureMode = CRYPT_RSA_SIGNATURE_PKCS1;
+			$rsa->setHash('sha256');
+			$rsa->loadKey($key);
+			$sig = $rsa->sign($data);
+		}
+		else {
+			logger('rsa_sign: insecure algorithm used. Please upgrade PHP to 5.3');
+			openssl_private_encrypt(hex2bin('3031300d060960864801650304020105000420') . hash('sha256',$data,true), $sig, $key);
+		}
+	}
+	return $sig;
+}
+
+function rsa_verify($data,$sig,$key) {
+
+	if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
+		$verify = openssl_verify($data,$sig,$key,'sha256');
+    }
+    else {
+		if(strlen($key) <= 300 || extension_loaded('gmp')) {
+			require_once('library/phpsec/Crypt/RSA.php');
+			$rsa = new CRYPT_RSA();
+			$rsa->signatureMode = CRYPT_RSA_SIGNATURE_PKCS1;
+			$rsa->setHash('sha256');
+			$rsa->loadKey($key);
+			$verify = $rsa->verify($data,$sig);
+		}
+		else {
+			// fallback sha256 verify for PHP < 5.3 and large key lengths
+			$rawsig = '';
+        	openssl_public_decrypt($sig,$rawsig,$key);
+	        $verify = (($rawsig && substr($rawsig,-32) === hash('sha256',$data,true)) ? true : false);
+    	}
+	}
+	return $verify;
+}
+
+
+function DerToPem($Der, $Private=false)
+{
+    //Encode:
+    $Der = base64_encode($Der);
+    //Split lines:
+    $lines = str_split($Der, 65);
+    $body = implode("\n", $lines);
+    //Get title:
+    $title = $Private? 'RSA PRIVATE KEY' : 'PUBLIC KEY';
+    //Add wrapping:
+    $result = "-----BEGIN {$title}-----\n";
+    $result .= $body . "\n";
+    $result .= "-----END {$title}-----\n";
+ 
+    return $result;
+}
+
+function DerToRsa($Der)
+{
+    //Encode:
+    $Der = base64_encode($Der);
+    //Split lines:
+    $lines = str_split($Der, 65);
+    $body = implode("\n", $lines);
+    //Get title:
+    $title = 'RSA PUBLIC KEY';
+    //Add wrapping:
+    $result = "-----BEGIN {$title}-----\n";
+    $result .= $body . "\n";
+    $result .= "-----END {$title}-----\n";
+ 
+    return $result;
+}
+
+
+function pkcs8_encode($Modulus,$PublicExponent) {
+	//Encode key sequence
+	$modulus = new ASNValue(ASNValue::TAG_INTEGER);
+	$modulus->SetIntBuffer($Modulus);
+	$publicExponent = new ASNValue(ASNValue::TAG_INTEGER);
+	$publicExponent->SetIntBuffer($PublicExponent);
+	$keySequenceItems = array($modulus, $publicExponent);
+	$keySequence = new ASNValue(ASNValue::TAG_SEQUENCE);
+	$keySequence->SetSequence($keySequenceItems);
+	//Encode bit string
+	$bitStringValue = $keySequence->Encode();
+	$bitStringValue = chr(0x00) . $bitStringValue; //Add unused bits byte
+	$bitString = new ASNValue(ASNValue::TAG_BITSTRING);
+	$bitString->Value = $bitStringValue;
+	//Encode body
+	$bodyValue = "\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x01\x05\x00" . $bitString->Encode();
+	$body = new ASNValue(ASNValue::TAG_SEQUENCE);
+	$body->Value = $bodyValue;
+	//Get DER encoded public key:
+	$PublicDER = $body->Encode();
+	return $PublicDER;
+}
+
+
+function pkcs1_encode($Modulus,$PublicExponent) {
+	//Encode key sequence
+	$modulus = new ASNValue(ASNValue::TAG_INTEGER);
+	$modulus->SetIntBuffer($Modulus);
+	$publicExponent = new ASNValue(ASNValue::TAG_INTEGER);
+	$publicExponent->SetIntBuffer($PublicExponent);
+	$keySequenceItems = array($modulus, $publicExponent);
+	$keySequence = new ASNValue(ASNValue::TAG_SEQUENCE);
+	$keySequence->SetSequence($keySequenceItems);
+	//Encode bit string
+	$bitStringValue = $keySequence->Encode();
+	return $bitStringValue;
+}
+
+
+function metopem($m,$e) {
+	$der = pkcs8_encode($m,$e);
+	$key = DerToPem($der,false);
+	return $key;
+}	
+
+
+function pubrsatome($key,&$m,&$e) {
+	require_once('library/asn1.php');
+	require_once('include/salmon.php');
+
+	$lines = explode("\n",$key);
+	unset($lines[0]);
+	unset($lines[count($lines)]);
+	$x = base64_decode(implode('',$lines));
+
+	$r = ASN_BASE::parseASNString($x);
+
+	$m = base64url_decode($r[0]->asnData[0]->asnData);
+	$e = base64url_decode($r[0]->asnData[1]->asnData);
+}
+
+
+function rsatopem($key) {
+	pubrsatome($key,$m,$e);
+	return(metopem($m,$e));
+}
+
+function pemtorsa($key) {
+	pemtome($key,$m,$e);
+	return(metorsa($m,$e));
+}
+
+function pemtome($key,&$m,&$e) {
+	require_once('include/salmon.php');
+	$lines = explode("\n",$key);
+	unset($lines[0]);
+	unset($lines[count($lines)]);
+	$x = base64_decode(implode('',$lines));
+
+	$r = ASN_BASE::parseASNString($x);
+
+	$m = base64url_decode($r[0]->asnData[1]->asnData[0]->asnData[0]->asnData);
+	$e = base64url_decode($r[0]->asnData[1]->asnData[0]->asnData[1]->asnData);
+}
+
+function metorsa($m,$e) {
+	$der = pkcs1_encode($m,$e);
+	$key = DerToRsa($der);
+	return $key;
+}	
+
+function salmon_key($pubkey) {
+	pemtome($pubkey,$m,$e);
+	return 'RSA' . '.' . base64url_encode($m,true) . '.' . base64url_encode($e,true) ;
+}
diff --git a/include/datetime.php b/include/datetime.php
index a056eaa60e..3033b88afc 100644
--- a/include/datetime.php
+++ b/include/datetime.php
@@ -84,12 +84,47 @@ function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d
 function dob($dob) {
 	list($year,$month,$day) = sscanf($dob,'%4d-%2d-%2d');
 	$y = datetime_convert('UTC',date_default_timezone_get(),'now','Y');
-	$o = datesel('',1920,$y,true,$year,$month,$day);
+	$f = get_config('system','birthday_input_format');
+	if(! $f)
+		$f = 'ymd';
+	$o = datesel($f,'',1920,$y,true,$year,$month,$day);
+	return $o;
+}
+
+
+function datesel_format($f) {
+
+	$o = '';
+
+	if(strlen($f)) {
+		for($x = 0; $x < strlen($f); $x ++) {
+			switch($f[$x]) {
+				case 'y':
+					if(strlen($o))
+						$o .= '-';
+					$o .= t('year');					
+					break;
+				case 'm':
+					if(strlen($o))
+						$o .= '-';
+					$o .= t('month');					
+					break;
+				case 'd':
+					if(strlen($o))
+						$o .= '-';
+					$o .= t('day');
+					break;
+				default:
+					break;
+			}
+		}
+	}
 	return $o;
 }
 
 
 // returns a date selector.
+// $f           = format string, e.g. 'ymd' or 'mdy'
 // $pre         = prefix (if needed) for HTML name and class fields
 // $ymin        = first year shown in selector dropdown
 // $ymax        = last year shown in selector dropdown
@@ -99,40 +134,52 @@ function dob($dob) {
 // $d           = already selected day
 
 if(! function_exists('datesel')) {
-function datesel($pre,$ymin,$ymax,$allow_blank,$y,$m,$d) {
+function datesel($f,$pre,$ymin,$ymax,$allow_blank,$y,$m,$d) {
 
 	$o = '';
-	$o .= "";
+				if($allow_blank) {
+					$sel = (($y == '0000') ? " selected=\"selected\" " : "");
+					$o .= "";
+				}
+
+				if($ymax > $ymin) {
+					for($x = $ymax; $x >= $ymin; $x --) {
+						$sel = (($x == $y) ? " selected=\"selected\" " : "");
+						$o .= "";
+					}
+				}
+				else {
+					for($x = $ymax; $x <= $ymin; $x ++) {
+						$sel = (($x == $y) ? " selected=\"selected\" " : "");
+						$o .= "";
+					}
+				}
+			}
+			elseif($f[$z] == 'm') {
   
-	$o .= "    ";
diff --git a/include/diaspora.php b/include/diaspora.php
new file mode 100644
index 0000000000..e089e3f040
--- /dev/null
+++ b/include/diaspora.php
@@ -0,0 +1,815 @@
+get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
+
+	$padded_data = pkcs5_pad($msg,16);
+	$inner_encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $inner_aes_key, $padded_data, MCRYPT_MODE_CBC, $inner_iv);
+
+	$b64_data = base64_encode($inner_encrypted);
+
+
+	$b64url_data = base64url_encode($b64_data);
+	$b64url_stripped = str_replace(array("\n","\r"," ","\t"),array('','','',''),$b64url_data);
+    $lines = str_split($b64url_stripped,60);
+    $data = implode("\n",$lines);
+	$data = $data . (($data[-1] != "\n") ? "\n" : '') ;
+	$type = 'application/atom+xml';
+	$encoding = 'base64url';
+	$alg = 'RSA-SHA256';
+
+	$signable_data = $data  . '.' . base64url_encode($type) . "\n" . '.' 
+		. base64url_encode($encoding) . "\n" . '.' . base64url_encode($alg) . "\n";
+
+	$signature = rsa_sign($signable_data,$prvkey);
+	$sig = base64url_encode($signature);
+
+$decrypted_header = <<< EOT
+
+  $b_inner_iv
+  $b_inner_aes_key
+  
+    {$user['username']}
+    $handle
+  
+
+EOT;
+
+	$decrypted_header = pkcs5_pad($decrypted_header,16);
+
+	$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $outer_aes_key, $decrypted_header, MCRYPT_MODE_CBC, $outer_iv);
+
+	$outer_json = json_encode(array('iv' => $b_outer_iv,'key' => $b_outer_aes_key));
+	$encrypted_outer_key_bundle = '';
+	openssl_public_encrypt($outer_json,$encrypted_outer_key_bundle,$pubkey);
+	
+	$b64_encrypted_outer_key_bundle = base64_encode($encrypted_outer_key_bundle);
+	$encrypted_header_json_object = json_encode(array('aes_key' => base64_encode($encrypted_outer_key_bundle), 
+		'ciphertext' => base64_encode($ciphertext)));
+	$encrypted_header = '' . base64_encode($encrypted_header_json_object) . '';
+
+$magic_env = <<< EOT
+
+
+  $encrypted_header
+  
+    base64url
+    RSA-SHA256
+    $data
+    $sig
+  
+
+EOT;
+
+	return $magic_env;
+
+}
+
+/**
+ *
+ * diaspora_decode($importer,$xml)
+ *   array $importer -> from user table
+ *   string $xml -> urldecoded Diaspora salmon 
+ *
+ * Returns array
+ * 'message' -> decoded Diaspora XML message
+ * 'author' -> author diaspora handle
+ * 'key' -> author public key (converted to pkcs#8)
+ *
+ * Author and key are used elsewhere to save a lookup for verifying replies and likes
+ */
+
+
+function diaspora_decode($importer,$xml) {
+
+	$basedom = parse_xml_string($xml);
+
+	$atom = $basedom->children(NAMESPACE_ATOM1);
+
+	// Diaspora devs: This is kind of sucky - 'encrypted_header' does not belong in the atom namespace
+
+	$encrypted_header = json_decode(base64_decode($atom->encrypted_header));
+	
+	$encrypted_aes_key_bundle = base64_decode($encrypted_header->aes_key);
+	$ciphertext = base64_decode($encrypted_header->ciphertext);
+
+	$outer_key_bundle = '';
+	openssl_private_decrypt($encrypted_aes_key_bundle,$outer_key_bundle,$importer['prvkey']);
+
+	$j_outer_key_bundle = json_decode($outer_key_bundle);
+
+	$outer_iv = base64_decode($j_outer_key_bundle->iv);
+	$outer_key = base64_decode($j_outer_key_bundle->key);
+
+	$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $outer_key, $ciphertext, MCRYPT_MODE_CBC, $outer_iv);
+
+	$decrypted = pkcs5_unpad($decrypted);
+
+	/**
+	 * $decrypted now contains something like
+	 *
+	 *  
+	 *     8e+G2+ET8l5BPuW0sVTnQw==
+	 *     UvSMb4puPeB14STkcDWq+4QE302Edu15oaprAQSkLKU=
+	 *     
+	 *       Ryan Hughes
+	 *       acct:galaxor@diaspora.pirateship.org
+	 *     
+	 *  
+	 */
+
+	logger('decrypted: ' . $decrypted);
+	$idom = parse_xml_string($decrypted,false);
+
+	$inner_iv = base64_decode($idom->iv);
+	$inner_aes_key = base64_decode($idom->aes_key);
+
+	$author_link = str_replace('acct:','',$idom->author->uri);
+
+	$dom = $basedom->children(NAMESPACE_SALMON_ME);
+
+	// figure out where in the DOM tree our data is hiding
+
+	if($dom->provenance->data)
+		$base = $dom->provenance;
+	elseif($dom->env->data)
+		$base = $dom->env;
+	elseif($dom->data)
+		$base = $dom;
+	
+	if(! $base) {
+		logger('mod-diaspora: unable to locate salmon data in xml ');
+		http_status_exit(400);
+	}
+
+
+	// Stash the signature away for now. We have to find their key or it won't be good for anything.
+	$signature = base64url_decode($base->sig);
+
+	// unpack the  data
+
+	// strip whitespace so our data element will return to one big base64 blob
+	$data = str_replace(array(" ","\t","\r","\n"),array("","","",""),$base->data);
+
+	// Add back the 60 char linefeeds
+
+	// Diaspora devs: This completely violates the entire principle of salmon magic signatures,
+	// which was to have a message signing format that was completely ambivalent to linefeeds 
+	// and transport whitespace mangling, and base64 wrapping rules. Guess what? PHP and Ruby 
+	// use different linelengths for base64 output. 
+
+    $lines = str_split($data,60);
+    $data = implode("\n",$lines);
+
+
+	// stash away some other stuff for later
+
+	$type = $base->data[0]->attributes()->type[0];
+	$keyhash = $base->sig[0]->attributes()->keyhash[0];
+	$encoding = $base->encoding;
+	$alg = $base->alg;
+
+	// Diaspora devs: I can't even begin to tell you how sucky this is. Read the freaking spec.
+
+	$signed_data = $data  . (($data[-1] != "\n") ? "\n" : '') . '.' . base64url_encode($type) . "\n" . '.' . base64url_encode($encoding) . "\n" . '.' . base64url_encode($alg) . "\n";
+
+
+	// decode the data
+	$data = base64url_decode($data);
+
+	// Now pull out the inner encrypted blob
+
+	$inner_encrypted = base64_decode($data);
+
+	$inner_decrypted = 
+	$inner_decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $inner_aes_key, $inner_encrypted, MCRYPT_MODE_CBC, $inner_iv);
+
+	$inner_decrypted = pkcs5_unpad($inner_decrypted);
+
+	if(! $author_link) {
+		logger('mod-diaspora: Could not retrieve author URI.');
+		http_status_exit(400);
+	}
+
+	// Once we have the author URI, go to the web and try to find their public key
+	// *** or look it up locally ***
+
+	logger('mod-diaspora: Fetching key for ' . $author_link );
+
+	// Get diaspora public key (pkcs#1) and convert to pkcs#8
+
+ 	$key = get_diaspora_key($author_link);
+
+	if(! $key) {
+		logger('mod-diaspora: Could not retrieve author key.');
+		http_status_exit(400);
+	}
+
+	$verify = rsa_verify($signed_data,$signature,$key);
+
+	if(! $verify) {
+		logger('mod-diaspora: Message did not verify. Discarding.');
+		http_status_exit(400);
+	}
+
+	logger('mod-diaspora: Message verified.');
+
+	return array('message' => $inner_decrypted, 'author' => $author_link, 'key' => $key);
+
+}
+
+function diaspora_get_contact_by_handle($uid,$handle) {
+	$r = q("SELECT * FROM `contact` WHERE `network` = '%s' AND `uid` = %d AND `addr` = '%s' LIMIT 1",
+		dbesc(NETWORK_DIASPORA),
+		intval($uid),
+		dbesc($handle)
+	);
+	if($r && count($r))
+		return $r[0];
+	return false;
+}
+
+function find_person_by_handle($handle) {
+		// we don't care about the uid, we just want to save an expensive webfinger probe
+		$r = q("select * from contact where network = '%s' and addr = '%s' LIMIT 1",
+			dbesc(NETWORK_DIASPORA),
+			dbesc($handle)
+		);
+		if(count($r))
+			return $r[0];
+		$r = probe_url($handle);
+		// need to cached this, perhaps in fcontact
+		if(count($r))
+			return ($r);
+		return false;
+}
+
+function diaspora_request($importer,$xml) {
+
+	$sender_handle = unxmlify($xml->sender_handle);
+	$recipient_handle = unxmlify($xml->recipient_handle);
+
+	if(! $sender_handle || ! $recipient_handle)
+		return;
+	 
+	$contact = diaspora_get_contact_by_handle($importer['uid'],$sender_handle);
+
+
+	if($contact) {
+
+		// perhaps we were already sharing with this person. Now they're sharing with us.
+		// That makes us friends.
+
+		if($contact['rel'] == CONTACT_IS_FOLLOWER) {
+			q("UPDATE `contact` SET `rel` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1",
+				intval(CONTACT_IS_FRIEND),
+				intval($contact['id']),
+				intval($importer['uid'])
+			);
+		}
+		// send notification?
+		return;
+	}
+	
+	require_once('include/Scrape.php');
+	$ret = probe_url($sender_handle);
+
+	if((! count($ret)) || ($ret['network'] != NETWORK_DIASPORA)) {
+		logger('diaspora_request: Cannot resolve diaspora handle ' . $sender_handle . ' for ' . $recipient_handle);
+		return;
+	}
+
+	$r = q("INSERT INTO `contact` (`uid`, `network`,`addr`,`created`,`url`,`name`,`nick`,`photo`,`pubkey`,`notify`,`poll`,`blocked`,`priority`)
+		VALUES ( %d, '%s', '%s', '%s','%s','%s','%s','%s','%s','%s','%s',%d,%d) ",
+		intval($importer['uid']),
+		dbesc($ret['network']),
+		dbesc($ret['addr']),
+		datetime_convert(),
+		dbesc($ret['url']),
+		dbesc($ret['name']),
+		dbesc($ret['nick']),
+		dbesc($ret['photo']),
+		dbesc($ret['pubkey']),
+		dbesc($ret['notify']),
+		dbesc($ret['poll']),
+		1,
+		2
+	);
+		 
+	// find the contact record we just created
+
+	$contact_record = diaspora_get_contact_by_handle($importer['uid'],$sender_handle);
+
+	$hash = random_string() . (string) time();   // Generate a confirm_key
+	
+	if($contact_record) {
+		$ret = q("INSERT INTO `intro` ( `uid`, `contact-id`, `blocked`, `knowyou`, `note`, `hash`, `datetime`,`blocked`)
+			VALUES ( %d, %d, 1, %d, '%s', '%s', '%s', 0 )",
+			intval($importer['uid']),
+			intval($contact_record['id']),
+			0,
+			dbesc( t('Sharing notification from Diaspora network')),
+			dbesc($hash),
+			dbesc(datetime_convert())
+		);
+	}
+
+	return;
+}
+
+function diaspora_post($importer,$xml) {
+
+	$guid = notags(unxmlify($xml->guid));
+	$diaspora_handle = notags(unxmlify($xml->diaspora_handle));
+
+	$contact = diaspora_get_contact_by_handle($importer['uid'],$diaspora_handle);
+	if(! $contact)
+		return;
+
+	if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) { 
+		logger('diaspora_post: Ignoring this author.');
+		http_status_exit(202);
+		// NOTREACHED
+	}
+
+	$message_id = $diaspora_handle . ':' . $guid;
+	$r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `guid` = '%s' LIMIT 1",
+		intval($importer['uid']),
+		dbesc($message_id),
+		dbesc($guid)
+	);
+	if(count($r))
+		return;
+
+    // allocate a guid on our system - we aren't fixing any collisions.
+	// we're ignoring them
+
+	$g = q("select * from guid where guid = '%s' limit 1",
+		dbesc($guid)
+	);
+	if(! count($g)) {
+		q("insert into guid ( guid ) values ( '%s' )",
+			dbesc($guid)
+		);
+	}
+
+	$created = unxmlify($xml->created_at);
+	$private = ((unxmlify($xml->public) == 'false') ? 1 : 0);
+
+	$body = unxmlify($xml->raw_message);
+
+	require_once('library/HTMLPurifier.auto.php');
+	require_once('include/html2bbcode.php');
+
+	$maxlen = get_max_import_size();
+	if($maxlen && (strlen($body) > $maxlen))
+		$body = substr($body,0, $maxlen);
+
+	if((strpos($body,'<') !== false) || (strpos($body,'>') !== false)) {
+
+		$body = preg_replace('#]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?#s',
+			'[youtube]$1[/youtube]', $body);
+
+		$body = preg_replace('#].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?#s',
+			'[youtube]$1[/youtube]', $body);
+
+		$body = oembed_html2bbcode($body);
+
+		$config = HTMLPurifier_Config::createDefault();
+		$config->set('Cache.DefinitionImpl', null);
+		$purifier = new HTMLPurifier($config);
+		$body = $purifier->purify($body);
+
+		$body = html2bbcode($body);
+	}
+
+	$datarray = array();
+	$datarray['uid'] = $importer['uid'];
+	$datarray['contact-id'] = $contact['id'];
+	$datarray['wall'] = 0;
+	$datarray['guid'] = $guid;
+	$datarray['uri'] = $datarray['parent-uri'] = $message_id;
+	$datarray['created'] = $datarray['edited'] = datetime_convert('UTC','UTC',$created);
+	$datarray['private'] = $private;
+	$datarray['parent'] = 0;
+	$datarray['owner-name'] = $contact['name'];
+	$datarray['owner-link'] = $contact['url'];
+	$datarray['owner-avatar'] = $contact['thumb'];
+	$datarray['author-name'] = $contact['name'];
+	$datarray['author-link'] = $contact['url'];
+	$datarray['author-avatar'] = $contact['thumb'];
+	$datarray['body'] = $body;
+
+	item_store($datarray);
+
+	return;
+
+}
+
+function diaspora_comment($importer,$xml,$msg) {
+
+	$guid = notags(unxmlify($xml->guid));
+	$parent_guid = notags(unxmlify($xml->parent_guid));
+	$diaspora_handle = notags(unxmlify($xml->diaspora_handle));
+	$target_type = notags(unxmlify($xml->target_type));
+	$text = unxmlify($xml->text);
+	$author_signature = notags(unxmlify($xml->author_signature));
+
+	$parent_author_signature = (($xml->parent_author_signature) ? notags(unxmlify($xml->parent_author_signature)) : '');
+
+	$text = $xml->text;
+
+	$contact = diaspora_get_contact_by_handle($importer['uid'],$msg['author']);
+	if(! $contact)
+		return;
+
+	if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) { 
+		logger('diaspora_comment: Ignoring this author.');
+		http_status_exit(202);
+		// NOTREACHED
+	}
+
+	$r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1",
+		intval($importer['uid']),
+		dbesc($parent_guid)
+	);
+	if(! count($r)) {
+		logger('diaspora_comment: parent item not found: ' . $guid);
+		return;
+	}
+	$parent_item = $r[0];
+
+	$author_signed_data = $guid . ';' . $parent_guid . ';' . $text . ';' . $diaspora_handle;
+
+	$author_signature = base64_decode($author_signature);
+
+	if(stricmp($diaspora_handle,$msg['author']) == 0) {
+		$person = $contact;
+		$key = $msg['key'];
+	}
+	else {
+		$person = find_person_by_handle($diaspora_handle);	
+
+		if(is_array($person) && x($person,'pubkey'))
+			$key = $person['pubkey'];
+		else {
+			logger('diaspora_comment: unable to find author details');
+			return;
+		}
+	}
+
+	if(! rsa_verify($author_signed_data,$author_signature,$key)) {
+		logger('diaspora_comment: verification failed.');
+		return;
+	}
+
+	if($parent_author_signature) {
+		$owner_signed_data = $guid . ';' . $parent_guid . ';' . $text . ';' . $msg['author'];
+
+		$parent_author_signature = base64_decode($parent_author_signature);
+
+		$key = $msg['key'];
+
+		if(! rsa_verify($owner_signed_data,$parent_author_signature,$key)) {
+			logger('diaspora_comment: owner verification failed.');
+			return;
+		}
+	}
+
+	// Phew! Everything checks out. Now create an item.
+
+	require_once('library/HTMLPurifier.auto.php');
+	require_once('include/html2bbcode.php');
+
+	$body = $text;
+
+	$maxlen = get_max_import_size();
+	if($maxlen && (strlen($body) > $maxlen))
+		$body = substr($body,0, $maxlen);
+
+	if((strpos($body,'<') !== false) || (strpos($body,'>') !== false)) {
+
+		$body = preg_replace('#]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?#s',
+			'[youtube]$1[/youtube]', $body);
+
+		$body = preg_replace('#].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?#s',
+			'[youtube]$1[/youtube]', $body);
+
+		$body = oembed_html2bbcode($body);
+
+		$config = HTMLPurifier_Config::createDefault();
+		$config->set('Cache.DefinitionImpl', null);
+		$purifier = new HTMLPurifier($config);
+		$body = $purifier->purify($body);
+
+		$body = html2bbcode($body);
+	}
+
+	$message_id = $diaspora_handle . ':' . $guid;
+
+	$datarray = array();
+	$datarray['uid'] = $importer['uid'];
+	$datarray['contact-id'] = $contact['id'];
+	$datarray['wall'] = $parent_item['wall'];
+	$datarray['gravity'] = GRAVITY_COMMENT;
+	$datarray['guid'] = $guid;
+	$datarray['uri'] = $message_id;
+	$datarray['parent-uri'] = $parent_item['uri'];
+
+	// No timestamps for comments? OK, we'll the use current time.
+	$datarray['created'] = $datarray['edited'] = datetime_convert();
+	$datarray['private'] = $parent_item['private'];
+
+	$datarray['owner-name'] = $contact['name'];
+	$datarray['owner-link'] = $contact['url'];
+	$datarray['owner-avatar'] = $contact['thumb'];
+
+	$datarray['author-name'] = $person['name'];
+	$datarray['author-link'] = $person['url'];
+	$datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']);
+	$datarray['body'] = $body;
+
+	item_store($datarray);
+
+	return;
+
+}
+
+function diaspora_like($importer,$xml,$msg) {
+
+	$guid = notags(unxmlify($xml->guid));
+	$parent_guid = notags(unxmlify($xml->parent_guid));
+	$diaspora_handle = notags(unxmlify($xml->diaspora_handle));
+	$target_type = notags(unxmlify($xml->target_type));
+	$positive = notags(unxmlify($xml->positive));
+	$author_signature = notags(unxmlify($xml->author_signature));
+
+	$parent_author_signature = (($xml->parent_author_signature) ? notags(unxmlify($xml->parent_author_signature)) : '');
+
+	// likes on comments not supported here and likes on photos not supported by Diaspora
+
+	if($target_type !== 'Post')
+		return;
+
+	$contact = diaspora_get_contact_by_handle($importer['uid'],$msg['author']);
+	if(! $contact)
+		return;
+
+	if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) { 
+		logger('diaspora_like: Ignoring this author.');
+		http_status_exit(202);
+		// NOTREACHED
+	}
+
+	$r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1",
+		intval($importer['uid']),
+		dbesc($parent_guid)
+	);
+	if(! count($r)) {
+		logger('diaspora_like: parent item not found: ' . $guid);
+		return;
+	}
+
+	$parent_item = $r[0];
+
+	$r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '$s' LIMIT 1",
+		intval($importer['uid']),
+		dbesc($guid)
+	);
+	if(count($r)) {
+		if($positive === 'true') {
+			logger('diaspora_like: duplicate like: ' . $guid);
+			return;
+		} 
+		if($positive === 'false') {
+			q("UPDATE `item` SET `deleted` = 1 WHERE `id` = %d AND `uid` = %d LIMIT 1",
+				intval($r[0]['id']),
+				intval($importer['uid'])
+			);
+			// FIXME
+			//  send notification via proc_run()
+			return;
+		}
+	}
+	if($positive === 'false') {
+		logger('diaspora_like: unlike received with no corresponding like');
+		return;	
+	}
+
+	$author_signed_data = $guid . ';' . $parent_guid . ';' . $target_type . ';' . $positive . ';' . $diaspora_handle;
+
+	$author_signature = base64_decode($author_signature);
+
+	if(stricmp($diaspora_handle,$msg['author']) == 0) {
+		$person = $contact;
+		$key = $msg['key'];
+	}
+	else {
+		$person = find_person_by_handle($diaspora_handle);	
+		if(is_array($person) && x($person,'pubkey'))
+			$key = $person['pubkey'];
+		else {
+			logger('diaspora_comment: unable to find author details');
+			return;
+		}
+	}
+
+	if(! rsa_verify($author_signed_data,$author_signature,$key)) {
+		logger('diaspora_like: verification failed.');
+		return;
+	}
+
+	if($parent_author_signature) {
+		$owner_signed_data = $guid . ';' . $parent_guid . ';' . $target_type . ';' . $positive . ';' . $msg['author'];
+
+		$parent_author_signature = base64_decode($parent_author_signature);
+
+		$key = $msg['key'];
+
+		if(! rsa_verify($owner_signed_data,$parent_author_signature,$key)) {
+			logger('diaspora_like: owner verification failed.');
+			return;
+		}
+	}
+
+	// Phew! Everything checks out. Now create an item.
+
+	$uri = $diaspora_handle . ':' . $guid;
+
+	$activity = ACTIVITY_LIKE;
+	$post_type = (($parent_item['resource-id']) ? t('photo') : t('status'));
+	$objtype = (($parent_item['resource-id']) ? ACTIVITY_OBJ_PHOTO : ACTIVITY_OBJ_NOTE ); 
+	$link = xmlify('' . "\n") ;
+	$body = $parent_item['body'];
+
+	$obj = <<< EOT
+
+	
+		$objtype
+		1
+		{$parent_item['uri']}
+		$link
+		
+		$body
+	
+EOT;
+	$bodyverb = t('%1$s likes %2$s\'s %3$s');
+
+	$arr = array();
+
+	$arr['uri'] = $uri;
+	$arr['uid'] = $importer['uid'];
+	$arr['contact-id'] = $contact['id'];
+	$arr['type'] = 'activity';
+	$arr['wall'] = $parent_item['wall'];
+	$arr['gravity'] = GRAVITY_LIKE;
+	$arr['parent'] = $parent_item['id'];
+	$arr['parent-uri'] = $parent_item['uri'];
+
+	$datarray['owner-name'] = $contact['name'];
+	$datarray['owner-link'] = $contact['url'];
+	$datarray['owner-avatar'] = $contact['thumb'];
+
+	$datarray['author-name'] = $person['name'];
+	$datarray['author-link'] = $person['url'];
+	$datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']);
+	
+	$ulink = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]';
+	$alink = '[url=' . $parent_item['author-link'] . ']' . $parent_item['author-name'] . '[/url]';
+	$plink = '[url=' . $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $parent_item['id'] . ']' . $post_type . '[/url]';
+	$arr['body'] =  sprintf( $bodyverb, $ulink, $alink, $plink );
+
+	$arr['private'] = $parent_item['private'];
+	$arr['verb'] = $activity;
+	$arr['object-type'] = $objtype;
+	$arr['object'] = $obj;
+	$arr['visible'] = 1;
+	$arr['unseen'] = 1;
+	$arr['last-child'] = 0;
+
+	$post_id = item_store($arr);	
+
+
+	// FIXME send notification
+
+
+}
+
+function diaspora_retraction($importer,$xml) {
+
+	$guid = notags(unxmlify($xml->guid));
+	$diaspora_handle = notags(unxmlify($xml->diaspora_handle));
+
+	$contact = diaspora_get_contact_by_handle($importer['uid'],$diaspora_handle);
+	if(! $contact)
+		return;
+
+//	if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) { 
+//		logger('diaspora_retraction: Ignoring this author.');
+//		http_status_exit(202);
+//		// NOTREACHED
+//	}
+
+
+
+}
+
+function diaspora_share($me,$contact) {
+	$a = get_app();
+	$myaddr = $me['nickname'] . '@' .  substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
+	$theiraddr = $contact['addr'];
+
+	$tpl = get_markup_template('diaspora_share.tpl');
+	$msg = replace_macros($tpl, array(
+		'$sender' => myaddr,
+		'$recipient' => $theiraddr
+	));
+
+	$slap = 'xml=' . urlencode(diaspora_msg_build($msg,$me,$contact,$me['prvkey'],$contact['pubkey']));
+
+	post_url($contact['notify'],$slap);
+	$return_code = $a->get_curl_code();
+	return $return_code;
+}
+
+function diaspora_send_status($item,$owner,$contact) {
+
+	$a = get_app();
+	$myaddr = $owner['nickname'] . '@' .  substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
+	$theiraddr = $contact['addr'];
+	require_once('include/bbcode.php');
+
+	$body = xmlify(bbcode($item['body']));
+	$public = (($item['private']) ? 'false' : 'true');
+
+	require_once('include/datetime.php');
+	$created = datetime_convert('UTC','UTC',$item['created'],'Y-m-d h:i:s \U\T\C');
+
+	$tpl = get_markup_template('diaspora_post.tpl');
+	$msg = replace_macros($tpl, array(
+		'$body' => $body,
+		'$guid' => $item['guid'],
+		'$handle' => xmlify($myaddr),
+		'$public' => $public,
+		'$created' => $created
+	));
+
+	logger('diaspora_send_status: base message: ' . $msg, LOGGER_DATA);
+
+	$slap = 'xml=' . urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey']));
+
+	post_url($contact['notify'],$slap);
+	$return_code = $a->get_curl_code();
+	logger('diaspora_send_status: returns: ' . $return_code);
+	return $return_code;
+}
+
diff --git a/include/event.php b/include/event.php
index aab195d245..99f685d0bd 100644
--- a/include/event.php
+++ b/include/event.php
@@ -197,6 +197,7 @@ function event_store($arr) {
 	$arr['type']    = (($arr['type']) ? $arr['type'] : 'event' );	
 	$arr['cid']     = ((intval($arr['cid'])) ? intval($arr['cid']) : 0);
 	$arr['uri']     = (x($arr,'uri') ? $arr['uri'] : item_new_uri($a->get_hostname(),$arr['uid']));
+	$arr['private'] = ((x($arr,'private')) ? intval($arr['private']) : 0);
 
 	if($arr['cid'])
 		$c = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
@@ -275,7 +276,7 @@ function event_store($arr) {
 			$object .= '' . "\n";
 
 
-			q("UPDATE `item` SET `body` = '%s', `object` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `edited` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1",
+			q("UPDATE `item` SET `body` = '%s', `object` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `edited` = '%s', `private` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1",
 				dbesc(format_event_bbcode($arr)),
 				dbesc($object),
 				dbesc($arr['allow_cid']),
@@ -283,6 +284,7 @@ function event_store($arr) {
 				dbesc($arr['deny_cid']),
 				dbesc($arr['deny_gid']),
 				dbesc($arr['edited']),
+				intval($arr['private']),
 				intval($r[0]['id']),
 				intval($arr['uid'])
 			);
@@ -341,10 +343,11 @@ function event_store($arr) {
 		$item_arr['author-link']   = $contact['url'];
 		$item_arr['author-avatar'] = $contact['thumb'];
 		$item_arr['title']         = '';
-		$item_arr['allow_cid']     = $str_contact_allow;
-		$item_arr['allow_gid']     = $str_group_allow;
-		$item_arr['deny_cid']      = $str_contact_deny;
-		$item_arr['deny_gid']      = $str_group_deny;
+		$item_arr['allow_cid']     = $arr['allow_cid'];
+		$item_arr['allow_gid']     = $arr['allow_gid'];
+		$item_arr['deny_cid']      = $arr['deny_cid'];
+		$item_arr['deny_gid']      = $arr['deny_gid'];
+		$item_arr['private']       = $arr['private'];
 		$item_arr['last-child']    = 1;
 		$item_arr['visible']       = 1;
 		$item_arr['verb']          = ACTIVITY_POST;
diff --git a/include/group.php b/include/group.php
index e16c900d90..1ebae7b7b0 100644
--- a/include/group.php
+++ b/include/group.php
@@ -136,7 +136,7 @@ function group_public_members($gid) {
 
 
 
-function group_side($every="contacts",$each="group",$edit = false, $group_id = 0) {
+function group_side($every="contacts",$each="group",$edit = false, $group_id = 0, $cid = 0) {
 
 	$o = '';
 
@@ -160,10 +160,19 @@ EOT;
 	$r = q("SELECT * FROM `group` WHERE `deleted` = 0 AND `uid` = %d ORDER BY `name` ASC",
 		intval($_SESSION['uid'])
 	);
+	if($cid) {
+		$member_of = groups_containing(local_user(),$cid);
+	} 
+
 	if(count($r)) {
 		foreach($r as $rr) {
 			$selected = (($group_id == $rr['id']) ? ' class="group-selected" ' : '');
-			$o .= '	\r\n";
+			$o .= '	\r\n";
 		}
 	}
 	$o .= "	\r\n	
"; @@ -204,3 +213,18 @@ function member_of($c) { } +function groups_containing($uid,$c) { + + $r = q("SELECT `gid` FROM `group_member` WHERE `uid` = %d AND `group_member`.`contact-id` = %d ", + intval($uid), + intval($c) + ); + + $ret = array(); + if(count($r)) { + foreach($r as $rr) + $ret[] = $rr['gid']; + } + + return $ret; +} \ No newline at end of file diff --git a/include/items.php b/include/items.php index 6593647bac..ec519ad9bf 100644 --- a/include/items.php +++ b/include/items.php @@ -6,7 +6,6 @@ require_once('include/salmon.php'); function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) { - // default permissions - anonymous user if(! strlen($owner_nick)) @@ -113,7 +112,7 @@ function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) $items = $r; - $feed_template = get_markup_template('atom_feed.tpl'); + $feed_template = get_markup_template(($dfrn_id) ? 'atom_feed_dfrn.tpl' : 'atom_feed.tpl'); $atom = ''; @@ -154,6 +153,9 @@ function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) if($dfrn_id === '') { $type = 'html'; + // catch any email that's in a public conversation and make sure it doesn't leak + if($item['private']) + continue; } else { $type = 'text'; @@ -485,7 +487,6 @@ function get_atom_elements($feed,$item) { if((x($res,'verb')) && ($res['verb'] === 'http://ostatus.org/schema/1.0/unfollow')) $res['verb'] = ACTIVITY_UNFOLLOW; - $cats = $item->get_categories(); if($cats) { $tag_arr = array(); @@ -520,7 +521,7 @@ function get_atom_elements($feed,$item) { if(! $type) $type = 'application/octet-stream'; - $att_arr[] = '[attach]href="' . $link . '" size="' . $len . '" type="' . $type . '" title="' . $title . '"[/attach]'; + $att_arr[] = '[attach]href="' . $link . '" length="' . $len . '" type="' . $type . '" title="' . $title . '"[/attach]'; } $res['attach'] = implode(',', $att_arr); } @@ -720,6 +721,13 @@ function item_store($arr,$force_parent = false) { if($r[0]['uri'] != $r[0]['parent-uri']) { $arr['thr-parent'] = $arr['parent-uri']; $arr['parent-uri'] = $r[0]['parent-uri']; + $z = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `parent-uri` = '%s' AND `uid` = %d LIMIT 1", + dbesc($r[0]['parent-uri']), + dbesc($r[0]['parent-uri']), + intval($arr['uid']) + ); + if($z && count($z)) + $r = $z; } $parent_id = $r[0]['id']; @@ -749,6 +757,8 @@ function item_store($arr,$force_parent = false) { } } + $arr['guid'] = get_guid(); + call_hooks('post_remote',$arr); dbesc_array($arr); @@ -917,7 +927,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) { $postvars['dissolve'] = '1'; - if((($contact['rel']) && ($contact['rel'] != REL_FAN) && (! $contact['blocked'])) || ($owner['page-flags'] == PAGE_COMMUNITY)) { + if((($contact['rel']) && ($contact['rel'] != CONTACT_IS_SHARING) && (! $contact['blocked'])) || ($owner['page-flags'] == PAGE_COMMUNITY)) { $postvars['data'] = $atom; $postvars['perm'] = 'rw'; } @@ -997,6 +1007,11 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $secure_fee require_once('library/simplepie/simplepie.inc'); + if(! strlen($xml)) { + logger('consume_feed: empty input'); + return; + } + $feed = new SimplePie(); $feed->set_raw_data($xml); if($datedir) @@ -1023,7 +1038,9 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $secure_fee if(count($hubs)) $hub = implode(',', $hubs); - $rawtags = $feed->get_feed_tags( SIMPLEPIE_NAMESPACE_ATOM_10, 'author'); + $rawtags = $feed->get_feed_tags( NAMESPACE_DFRN, 'owner'); + if(! $rawtags) + $rawtags = $feed->get_feed_tags( SIMPLEPIE_NAMESPACE_ATOM_10, 'author'); if($rawtags) { $elems = $rawtags[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]; if($elems['name'][0]['attribs'][NAMESPACE_DFRN]['updated']) { @@ -1349,6 +1366,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $secure_fee $ev['uid'] = $importer['uid']; $ev['uri'] = $item_id; $ev['edited'] = $datarray['edited']; + $ev['private'] = $datarray['private']; if(is_array($contact)) $ev['cid'] = $contact['id']; @@ -1444,9 +1462,9 @@ function new_follower($importer,$contact,$datarray,$item) { $nick = $rawtag[0]['child'][NAMESPACE_POCO]['preferredUsername'][0]['data']; if(is_array($contact)) { - if($contact['network'] == 'stat' && $contact['rel'] == REL_FAN) { + if($contact['network'] == 'stat' && $contact['rel'] == CONTACT_IS_SHARING) { $r = q("UPDATE `contact` SET `rel` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1", - intval(REL_BUD), + intval(CONTACT_IS_FRIEND), intval($contact['id']), intval($importer['uid']) ); @@ -1468,12 +1486,12 @@ function new_follower($importer,$contact,$datarray,$item) { dbesc($nick), dbesc($photo), dbesc('stat'), - intval(REL_VIP) + intval(CONTACT_IS_FOLLOWER) ); $r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `url` = '%s' AND `pending` = 1 AND `rel` = %d LIMIT 1", intval($importer['uid']), dbesc($url), - intval(REL_VIP) + intval(CONTACT_IS_FOLLOWER) ); if(count($r)) $contact_record = $r[0]; @@ -1518,9 +1536,9 @@ function new_follower($importer,$contact,$datarray,$item) { function lose_follower($importer,$contact,$datarray,$item) { - if(($contact['rel'] == REL_BUD) || ($contact['rel'] == REL_FAN)) { + if(($contact['rel'] == CONTACT_IS_FRIEND) || ($contact['rel'] == CONTACT_IS_SHARING)) { q("UPDATE `contact` SET `rel` = %d WHERE `id` = %d LIMIT 1", - intval(REL_FAN), + intval(CONTACT_IS_SHARING), intval($contact['id']) ); } @@ -1726,11 +1744,11 @@ function item_getfeedattach($item) { if(count($arr)) { foreach($arr as $r) { $matches = false; - $cnt = preg_match('|\[attach\]href=\"(.*?)\" size=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches); + $cnt = preg_match('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches); if($cnt) { $ret .= ' 8) || (! $ch)) + return false; + + curl_setopt($ch, CURLOPT_HEADER, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); + curl_setopt($ch, CURLOPT_USERAGENT, "Friendika"); + + if(intval($timeout)) { + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); + } + else { + $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'); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false)); + + $prx = get_config('system','proxy'); + if(strlen($prx)) { + 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); + } + if($binary) + curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); + + $a->set_curl_code(0); + + // don't let curl abort the entire application + // if it throws any errors. + + $s = @curl_exec($ch); + + $base = $s; + $curl_info = curl_getinfo($ch); + $http_code = $curl_info['http_code']; + + $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); + $header .= $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); + $url = trim(array_pop($matches)); + $url_parsed = @parse_url($url); + if (isset($url_parsed)) { + $redirects++; + return fetch_url($url,$binary,$redirects,$timeout); + } + } + + $a->set_curl_code($http_code); + + $body = substr($s,strlen($header)); + + $a->set_curl_headers($header); + + curl_close($ch); + return($body); +}} + +// post request to $url. $params is an array of post variables. + +if(! function_exists('post_url')) { +function post_url($url,$params, $headers = null, &$redirects = 0, $timeout = 0) { + $a = get_app(); + $ch = curl_init($url); + if(($redirects > 8) || (! $ch)) + return false; + + 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_USERAGENT, "Friendika"); + + if(intval($timeout)) { + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); + } + else { + $curl_time = intval(get_config('system','curl_timeout')); + curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60)); + } + + if(defined('LIGHTTPD')) { + if(!is_array($headers)) { + $headers = array('Expect:'); + } else { + if(!in_array('Expect:', $headers)) { + array_push($headers, 'Expect:'); + } + } + } + if($headers) + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + + $check_cert = get_config('system','verifyssl'); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false)); + $prx = get_config('system','proxy'); + if(strlen($prx)) { + 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); + } + + $a->set_curl_code(0); + + // don't let curl abort the entire application + // if it throws any errors. + + $s = @curl_exec($ch); + + $base = $s; + $curl_info = curl_getinfo($ch); + $http_code = $curl_info['http_code']; + + $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); + $header .= $chunk; + $base = substr($base,strlen($chunk)); + } + + if($http_code == 301 || $http_code == 302 || $http_code == 303) { + $matches = array(); + preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); + $url = trim(array_pop($matches)); + $url_parsed = @parse_url($url); + if (isset($url_parsed)) { + $redirects++; + return post_url($url,$params,$headers,$redirects,$timeout); + } + } + $a->set_curl_code($http_code); + $body = substr($s,strlen($header)); + + $a->set_curl_headers($header); + + curl_close($ch); + return($body); +}} + +// Generic XML return +// Outputs a basic dfrn XML status structure to STDOUT, with a variable +// of $st and an optional text of $message and terminates the current process. + +if(! function_exists('xml_status')) { +function xml_status($st, $message = '') { + + $xml_message = ((strlen($message)) ? "\t" . xmlify($message) . "\r\n" : ''); + + if($st) + logger('xml_status returning non_zero: ' . $st . " message=" . $message); + + header( "Content-type: text/xml" ); + echo ''."\r\n"; + echo "\r\n\t$st\r\n$xml_message\r\n"; + killme(); +}} + + +if(! function_exists('http_status_exit')) { +function http_status_exit($val) { + + if($val >= 400) + $err = 'Error'; + if($val >= 200 && $val < 300) + $err = 'OK'; + + logger('http_status_exit ' . $val); + header($_SERVER["SERVER_PROTOCOL"] . ' ' . $val . ' ' . $err); + killme(); + +}} + + +// convert an XML document to a normalised, case-corrected array +// used by webfinger + +if(! function_exists('convert_xml_element_to_array')) { +function convert_xml_element_to_array($xml_element, &$recursion_depth=0) { + + // If we're getting too deep, bail out + if ($recursion_depth > 512) { + return(null); + } + + if (!is_string($xml_element) && + !is_array($xml_element) && + (get_class($xml_element) == 'SimpleXMLElement')) { + $xml_element_copy = $xml_element; + $xml_element = get_object_vars($xml_element); + } + + if (is_array($xml_element)) { + $result_array = array(); + if (count($xml_element) <= 0) { + return (trim(strval($xml_element_copy))); + } + + foreach($xml_element as $key=>$value) { + + $recursion_depth++; + $result_array[strtolower($key)] = + convert_xml_element_to_array($value, $recursion_depth); + $recursion_depth--; + } + if ($recursion_depth == 0) { + $temp_array = $result_array; + $result_array = array( + strtolower($xml_element_copy->getName()) => $temp_array, + ); + } + + return ($result_array); + + } else { + return (trim(strval($xml_element))); + } +}} + +// Given an email style address, perform webfinger lookup and +// return the resulting DFRN profile URL, or if no DFRN profile URL +// is located, returns an OStatus subscription template (prefixed +// with the string 'stat:' to identify it as on OStatus template). +// If this isn't an email style address just return $s. +// Return an empty string if email-style addresses but webfinger fails, +// or if the resultant personal XRD doesn't contain a supported +// subscription/friend-request attribute. + +if(! function_exists('webfinger_dfrn')) { +function webfinger_dfrn($s) { + if(! strstr($s,'@')) { + return $s; + } + $links = webfinger($s); + logger('webfinger_dfrn: ' . $s . ':' . print_r($links,true), LOGGER_DATA); + if(count($links)) { + foreach($links as $link) + if($link['@attributes']['rel'] === NAMESPACE_DFRN) + return $link['@attributes']['href']; + foreach($links as $link) + if($link['@attributes']['rel'] === NAMESPACE_OSTATUSSUB) + return 'stat:' . $link['@attributes']['template']; + } + return ''; +}} + +// Given an email style address, perform webfinger lookup and +// return the array of link attributes from the personal XRD file. +// On error/failure return an empty array. + + +if(! function_exists('webfinger')) { +function webfinger($s) { + $host = ''; + if(strstr($s,'@')) { + $host = substr($s,strpos($s,'@') + 1); + } + if(strlen($host)) { + $tpl = fetch_lrdd_template($host); + logger('webfinger: lrdd template: ' . $tpl); + if(strlen($tpl)) { + $pxrd = str_replace('{uri}', urlencode('acct:' . $s), $tpl); + logger('webfinger: pxrd: ' . $pxrd); + $links = fetch_xrd_links($pxrd); + if(! count($links)) { + // try with double slashes + $pxrd = str_replace('{uri}', urlencode('acct://' . $s), $tpl); + logger('webfinger: pxrd: ' . $pxrd); + $links = fetch_xrd_links($pxrd); + } + return $links; + } + } + return array(); +}} + +if(! function_exists('lrdd')) { +function lrdd($uri) { + + $a = get_app(); + + // default priority is host priority, host-meta first + + $priority = 'host'; + + // All we have is an email address. Resource-priority is irrelevant + // because our URI isn't directly resolvable. + + if(strstr($uri,'@')) { + return(webfinger($uri)); + } + + // get the host meta file + + $host = @parse_url($uri); + + if($host) { + $url = ((x($host,'scheme')) ? $host['scheme'] : 'http') . '://'; + $url .= $host['host'] . '/.well-known/host-meta' ; + } + else + return array(); + + logger('lrdd: constructed url: ' . $url); + + $xml = fetch_url($url); + $headers = $a->get_curl_headers(); + + if (! $xml) + return array(); + + logger('lrdd: host_meta: ' . $xml, LOGGER_DATA); + + $h = parse_xml_string($xml); + if(! $h) + return array(); + + $arr = convert_xml_element_to_array($h); + + if(isset($arr['xrd']['property'])) { + $property = $arr['crd']['property']; + if(! isset($property[0])) + $properties = array($property); + else + $properties = $property; + foreach($properties as $prop) + if((string) $prop['@attributes'] === 'http://lrdd.net/priority/resource') + $priority = 'resource'; + } + + // save the links in case we need them + + $links = array(); + + if(isset($arr['xrd']['link'])) { + $link = $arr['xrd']['link']; + if(! isset($link[0])) + $links = array($link); + else + $links = $link; + } + + // do we have a template or href? + + if(count($links)) { + foreach($links as $link) { + if($link['@attributes']['rel'] && attribute_contains($link['@attributes']['rel'],'lrdd')) { + if(x($link['@attributes'],'template')) + $tpl = $link['@attributes']['template']; + elseif(x($link['@attributes'],'href')) + $href = $link['@attributes']['href']; + } + } + } + + if((! isset($tpl)) || (! strpos($tpl,'{uri}'))) + $tpl = ''; + + if($priority === 'host') { + if(strlen($tpl)) + $pxrd = str_replace('{uri}', urlencode($uri), $tpl); + elseif(isset($href)) + $pxrd = $href; + if(isset($pxrd)) { + logger('lrdd: (host priority) pxrd: ' . $pxrd); + $links = fetch_xrd_links($pxrd); + return $links; + } + + $lines = explode("\n",$headers); + if(count($lines)) { + foreach($lines as $line) { + if((stristr($line,'link:')) && preg_match('/<([^>].*)>.*rel\=[\'\"]lrdd[\'\"]/',$line,$matches)) { + return(fetch_xrd_links($matches[1])); + break; + } + } + } + } + + + // priority 'resource' + + + $html = fetch_url($uri); + $headers = $a->get_curl_headers(); + logger('lrdd: headers=' . $headers, LOGGER_DEBUG); + + // don't try and parse raw xml as html + if(! strstr($html,'getElementsByTagName('link'); + foreach($items as $item) { + $x = $item->getAttribute('rel'); + if($x == "lrdd") { + $pagelink = $item->getAttribute('href'); + break; + } + } + } + } + + if(isset($pagelink)) + return(fetch_xrd_links($pagelink)); + + // next look in HTTP headers + + $lines = explode("\n",$headers); + if(count($lines)) { + foreach($lines as $line) { + // TODO alter the following regex to support multiple relations (space separated) + if((stristr($line,'link:')) && preg_match('/<([^>].*)>.*rel\=[\'\"]lrdd[\'\"]/',$line,$matches)) { + $pagelink = $matches[1]; + break; + } + // don't try and run feeds through the html5 parser + if(stristr($line,'content-type:') && ((stristr($line,'application/atom+xml')) || (stristr($line,'application/rss+xml')))) + return array(); + if(stristr($html,' 'alias' , 'href' => $alias); + } + } + } + + logger('fetch_xrd_links: ' . print_r($links,true), LOGGER_DATA); + + return $links; + +}} + + +// Take a URL from the wild, prepend http:// if necessary +// and check DNS to see if it's real +// return true if it's OK, false if something is wrong with it + +if(! function_exists('validate_url')) { +function validate_url(&$url) { + if(substr($url,0,4) != 'http') + $url = 'http://' . $url; + $h = @parse_url($url); + + if(($h) && (dns_get_record($h['host'], DNS_A + DNS_CNAME + DNS_PTR))) { + return true; + } + return false; +}} + +// checks that email is an actual resolvable internet address + +if(! function_exists('validate_email')) { +function validate_email($addr) { + + if(! strpos($addr,'@')) + return false; + $h = substr($addr,strpos($addr,'@') + 1); + + if(($h) && (dns_get_record($h, DNS_A + DNS_CNAME + DNS_PTR + DNS_MX))) { + return true; + } + return false; +}} + +// Check $url against our list of allowed sites, +// wildcards allowed. If allowed_sites is unset return true; +// If url is allowed, return true. +// otherwise, return false + +if(! function_exists('allowed_url')) { +function allowed_url($url) { + + $h = @parse_url($url); + + if(! $h) { + return false; + } + + $str_allowed = get_config('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'])) + return true; + + $fnmatch = function_exists('fnmatch'); + $allowed = explode(',',$str_allowed); + + if(count($allowed)) { + foreach($allowed as $a) { + $pat = strtolower(trim($a)); + if(($fnmatch && fnmatch($pat,$host)) || ($pat == $host)) { + $found = true; + break; + } + } + } + return $found; +}} + +// check if email address is allowed to register here. +// Compare against our list (wildcards allowed). +// Returns false if not allowed, true if allowed or if +// allowed list is not configured. + +if(! function_exists('allowed_email')) { +function allowed_email($email) { + + + $domain = strtolower(substr($email,strpos($email,'@') + 1)); + if(! $domain) + return false; + + $str_allowed = get_config('system','allowed_email'); + if(! $str_allowed) + return true; + + $found = false; + + $fnmatch = function_exists('fnmatch'); + $allowed = explode(',',$str_allowed); + + if(count($allowed)) { + foreach($allowed as $a) { + $pat = strtolower(trim($a)); + if(($fnmatch && fnmatch($pat,$domain)) || ($pat == $domain)) { + $found = true; + break; + } + } + } + return $found; +}} + + +if(! function_exists('gravatar_img')) { +function gravatar_img($email) { + $size = 175; + $opt = 'identicon'; // psuedo-random geometric pattern if not found + $rating = 'pg'; + $hash = md5(trim(strtolower($email))); + + $url = 'http://www.gravatar.com/avatar/' . $hash . '.jpg' + . '?s=' . $size . '&d=' . $opt . '&r=' . $rating; + + logger('gravatar: ' . $email . ' ' . $url); + return $url; +}} + + +if(! function_exists('parse_xml_string')) { +function parse_xml_string($s,$strict = true) { + if($strict) { + if(! strstr($s,'code." at ".$err->line.":".$err->column." : ".$err->message, LOGGER_DATA); + libxml_clear_errors(); + } + return $x; +}} diff --git a/include/notifier.php b/include/notifier.php index 59e5737622..15fb385346 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -50,8 +50,10 @@ function notifier_run($argv, $argc){ $recipients = array(); $url_recipients = array(); - if($cmd === 'mail') { + $normal_mode = true; + if($cmd === 'mail') { + $normal_mode = false; $message = q("SELECT * FROM `mail` WHERE `id` = %d LIMIT 1", intval($item_id) ); @@ -64,6 +66,7 @@ function notifier_run($argv, $argc){ } elseif($cmd === 'expire') { + $normal_mode = false; $expire = true; $items = q("SELECT * FROM `item` WHERE `uid` = %d AND `wall` = 1 AND `deleted` = 1 AND `changed` > UTC_TIMESTAMP - INTERVAL 10 MINUTE", @@ -75,6 +78,7 @@ function notifier_run($argv, $argc){ return; } elseif($cmd === 'suggest') { + $normal_mode = false; $suggest = q("SELECT * FROM `fsuggest` WHERE `id` = %d LIMIT 1", intval($item_id) ); @@ -95,7 +99,7 @@ function notifier_run($argv, $argc){ return; } - $parent_item = $r[0]; + $target_item = $r[0]; $parent_id = intval($r[0]['parent']); $uid = $r[0]['uid']; $updated = $r[0]['edited']; @@ -119,7 +123,8 @@ function notifier_run($argv, $argc){ $top_level = true; } - $r = q("SELECT `contact`.*, `user`.`timezone`, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`, + $r = q("SELECT `contact`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey`, + `user`.`timezone`, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`, `user`.`page-flags`, `user`.`prvnets` FROM `contact` LEFT JOIN `user` ON `user`.`uid` = `contact`.`uid` WHERE `contact`.`uid` = %d AND `contact`.`self` = 1 LIMIT 1", @@ -145,7 +150,7 @@ function notifier_run($argv, $argc){ $parent = $items[0]; - if($parent['type'] === 'remote' && (! $expire)) { + if($parent['wall'] == 0 && (! $expire)) { // local followup to remote post $followup = true; $notify_hub = false; // not public @@ -289,6 +294,11 @@ function notifier_run($argv, $argc){ if(! $item['parent']) continue; + // private emails may be in included in public conversations. Filter them. + + if(($notify_hub) && $item['private']) + continue; + $contact = get_item_contact($item,$contacts); if(! $contact) continue; @@ -311,9 +321,9 @@ function notifier_run($argv, $argc){ $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1); if(! $mail_disabled) { - if((! strlen($parent_item['allow_cid'])) && (! strlen($parent_item['allow_gid'])) - && (! strlen($parent_item['deny_cid'])) && (! strlen($parent_item['deny_gid'])) - && (intval($parent_item['pubmail']))) { + if((! strlen($target_item['allow_cid'])) && (! strlen($target_item['allow_gid'])) + && (! strlen($target_item['deny_cid'])) && (! strlen($target_item['deny_gid'])) + && (intval($target_item['pubmail']))) { $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `network` = '%s'", intval($uid), dbesc(NETWORK_MAIL) @@ -346,7 +356,7 @@ function notifier_run($argv, $argc){ $deliver_status = 0; switch($contact['network']) { - case 'dfrn': + case NETWORK_DFRN: logger('notifier: dfrndelivery: ' . $contact['name']); $deliver_status = dfrn_deliver($owner,$contact,$atom); @@ -364,7 +374,7 @@ function notifier_run($argv, $argc){ ); } break; - case 'stat': + case NETWORK_OSTATUS: // Do not send to otatus if we are not configured to send to public networks if($owner['prvnets']) @@ -414,7 +424,7 @@ function notifier_run($argv, $argc){ } break; - case 'mail': + case NETWORK_MAIL: if(get_config('system','dfrn_only')) break; @@ -491,9 +501,34 @@ function notifier_run($argv, $argc){ mail($addr, $subject, $message, $headers); } break; - case 'feed': - case 'face': - case 'dspr': + case NETWORK_DIASPORA: + if(get_config('system','dfrn_only') || (! get_config('diaspora_enabled')) || (! $normal_mode)) + break; + + if($target_item['deleted']) { + // diaspora delete, (check for like) + + break; + } + elseif($followup) { + // send to owner to relay + + break; + } + elseif($target_item['parent'] != $target_item['id']) { + // we are the relay + + break; + } + elseif($top_level) { + diaspora_send_status($target_item,$owner,$contact); + break; + } + + break; + + case NETWORK_FEED: + case NETWORK_FACEBOOK: if(get_config('system','dfrn_only')) break; default: @@ -504,7 +539,7 @@ function notifier_run($argv, $argc){ // send additional slaps to mentioned remote tags (@foo@example.com) - if($slap && count($url_recipients) && $followup && $notify_hub && (! $expire)) { + if($slap && count($url_recipients) && ($followup || $top_level) && $notify_hub && (! $expire)) { if(! get_config('system','dfrn_only')) { foreach($url_recipients as $url) { if($url) { @@ -542,7 +577,7 @@ function notifier_run($argv, $argc){ * */ - $max_allowed = ((get_config('system','maxpubdeliver') === false) ? 150 : intval(get_config('system','maxpubdeliver'))); + $max_allowed = ((get_config('system','maxpubdeliver') === false) ? 999 : intval(get_config('system','maxpubdeliver'))); /** * @@ -552,10 +587,10 @@ function notifier_run($argv, $argc){ */ $r = q("SELECT `id`, `name` FROM `contact` - WHERE `network` = 'dfrn' AND `uid` = %d AND `blocked` = 0 AND `pending` = 0 + WHERE `network` = NETWORK_DFRN AND `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `rel` != %d ", intval($owner['uid']), - intval(REL_FAN) + intval(CONTACT_IS_SHARING) ); if((count($r)) && (($max_allowed == 0) || (count($r) < $max_allowed))) { diff --git a/include/oembed.php b/include/oembed.php index 06a37d8e48..06f71a3b32 100644 --- a/include/oembed.php +++ b/include/oembed.php @@ -7,6 +7,7 @@ function oembed_replacecb($matches){ function oembed_fetch_url($embedurl){ + $r = q("SELECT v FROM `cache` WHERE k='%s'", dbesc($embedurl)); @@ -16,7 +17,10 @@ function oembed_fetch_url($embedurl){ $txt = ""; // try oembed autodiscovery - $html_text = fetch_url($embedurl); + $redirects = 0; + $html_text = fetch_url($embedurl, false, $redirects, 15); + if(! $html_text) + return; $dom = @DOMDocument::loadHTML($html_text); if ($dom){ $xpath = new DOMXPath($dom); diff --git a/include/plugin.php b/include/plugin.php new file mode 100644 index 0000000000..9f2832981a --- /dev/null +++ b/include/plugin.php @@ -0,0 +1,199 @@ +hooks = array(); + $r = q("SELECT * FROM `hook` WHERE 1"); + if(count($r)) { + foreach($r as $rr) { + $a->hooks[] = array($rr['hook'], $rr['file'], $rr['function']); + } + } +}} + + +if(! function_exists('call_hooks')) { +function call_hooks($name, &$data = null) { + $a = get_app(); + + if(count($a->hooks)) { + foreach($a->hooks as $hook) { + if($hook[HOOK_HOOK] === $name) { + @include_once($hook[HOOK_FILE]); + if(function_exists($hook[HOOK_FUNCTION])) { + $func = $hook[HOOK_FUNCTION]; + $func($a,$data); + } + } + } + } +}} + + +/* + * parse plugin comment in search of plugin infos. + * like + * + * * Name: Plugin + * * Description: A plugin which plugs in + * * Version: 1.2.3 + * * Author: John + * * Author: Jane + * * + */ + +if (! function_exists('get_plugin_info')){ +function get_plugin_info($plugin){ + if (!is_file("addon/$plugin/$plugin.php")) return false; + + $f = file_get_contents("addon/$plugin/$plugin.php"); + $r = preg_match("|/\*.*\*/|msU", $f, $m); + + $info=Array( + 'name' => $plugin, + 'description' => "", + 'author' => array(), + 'version' => "" + ); + + if ($r){ + $ll = explode("\n", $m[0]); + foreach( $ll as $l ) { + $l = trim($l,"\t\n\r */"); + if ($l!=""){ + list($k,$v) = array_map("trim", explode(":",$l,2)); + $k= strtolower($k); + if ($k=="author"){ + $r=preg_match("|([^<]+)<([^>]+)>|", $v, $m); + if ($r) { + $info['author'][] = array('name'=>$m[1], 'link'=>$m[2]); + } else { + $info['author'][] = array('name'=>$v); + } + } else { + if (array_key_exists($k,$info)){ + $info[$k]=$v; + } + } + + } + } + + } + return $info; +}} + diff --git a/include/poller.php b/include/poller.php index 569eb59d1c..651736a99a 100644 --- a/include/poller.php +++ b/include/poller.php @@ -80,15 +80,14 @@ function poller_run($argv, $argc){ $d = datetime_convert(); if(! $restart) - call_hooks('cron', $d); - + proc_run('php','include/cronhooks.php'); $contacts = q("SELECT `id` FROM `contact` WHERE ( `rel` = %d OR `rel` = %d ) AND `poll` != '' $sql_extra AND `self` = 0 AND `blocked` = 0 AND `readonly` = 0 ORDER BY RAND()", - intval(REL_FAN), - intval(REL_BUD) + intval(CONTACT_IS_SHARING), + intval(CONTACT_IS_FRIEND) ); if(! count($contacts)) { @@ -101,7 +100,7 @@ function poller_run($argv, $argc){ intval($c['id']) ); - if(! count($res)) + if((! $res) || (! count($res))) continue; foreach($res as $contact) { @@ -312,7 +311,7 @@ function poller_run($argv, $argc){ // Will only do this once per notify-enabled OStatus contact // or if relationship changes - $stat_writeable = ((($contact['notify']) && ($contact['rel'] == REL_VIP || $contact['rel'] == REL_BUD)) ? 1 : 0); + $stat_writeable = ((($contact['notify']) && ($contact['rel'] == CONTACT_IS_FOLLOWER || $contact['rel'] == CONTACT_IS_FRIEND)) ? 1 : 0); if($stat_writeable != $contact['writable']) { q("UPDATE `contact` SET `writable` = %d WHERE `id` = %d LIMIT 1", @@ -323,7 +322,7 @@ function poller_run($argv, $argc){ // Are we allowed to import from this person? - if($contact['rel'] == REL_VIP || $contact['blocked'] || $contact['readonly']) + if($contact['rel'] == CONTACT_IS_FOLLOWER || $contact['blocked'] || $contact['readonly']) continue; $xml = fetch_url($contact['poll']); @@ -421,6 +420,10 @@ function poller_run($argv, $argc){ $datarray['contact-id'] = $contact['id']; if($datarray['parent-uri'] === $datarray['uri']) $datarray['private'] = 1; + if(! get_pconfig($importer_uid,'system','allow_public_email_replies')) { + $datarray['private'] = 1; + $datarray['allow_cid'] = '<' . $contact['id'] . '>'; + } $datarray['author-name'] = $contact['name']; $datarray['author-link'] = 'mailbox'; $datarray['author-avatar'] = $contact['photo']; @@ -440,7 +443,8 @@ function poller_run($argv, $argc){ } } elseif($contact['network'] === NETWORK_FACEBOOK) { - // TODO: work in progress + // This is picked up by the Facebook plugin on a cron hook. + // Ignored here. } if($xml) { @@ -463,7 +467,7 @@ function poller_run($argv, $argc){ consume_feed($xml,$importer,$contact,$hub,1); - if((strlen($hub)) && ($hub_update) && (($contact['rel'] == REL_BUD) || (($contact['network'] === NETWORK_OSTATUS) && (! $contact['readonly'])))) { + if((strlen($hub)) && ($hub_update) && (($contact['rel'] == CONTACT_IS_FRIEND) || (($contact['network'] === NETWORK_OSTATUS) && (! $contact['readonly'])))) { logger('poller: subscribing to hub(s) : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']); $hubs = explode(',', $hub); if(count($hubs)) { diff --git a/include/salmon.php b/include/salmon.php index 473432f259..4043b4f1d9 100644 --- a/include/salmon.php +++ b/include/salmon.php @@ -1,53 +1,8 @@ asnData[1]->asnData[0]->asnData[0]->asnData; - $e = $r[0]->asnData[1]->asnData[0]->asnData[1]->asnData; +require_once('include/crypto.php'); - return 'RSA' . '.' . $m . '.' . $e ; -} - - -function base64url_encode($s, $strip_padding = false) { - - $s = strtr(base64_encode($s),'+/','-_'); - - if($strip_padding) - $s = str_replace('=','',$s); - - return $s; -} - -function base64url_decode($s) { - -/* - * // Placeholder for new rev of salmon which strips base64 padding. - * // PHP base64_decode handles the un-padded input without requiring this step - * // Uncomment if you find you need it. - * - * $l = strlen($s); - * if(! strpos($s,'=')) { - * $m = $l % 4; - * if($m == 2) - * $s .= '=='; - * if($m == 3) - * $s .= '='; - * } - * - */ - - return base64_decode(strtr($s,'-_','+/')); -} function get_salmon_key($uri,$keyhash) { $ret = array(); @@ -141,28 +96,20 @@ EOT; $data_type = 'application/atom+xml'; $encoding = 'base64url'; $algorithm = 'RSA-SHA256'; - $keyhash = base64url_encode(hash('sha256',salmon_key($owner['spubkey']))); - - // Setup RSA stuff to PKCS#1 sign the data - - set_include_path(get_include_path() . PATH_SEPARATOR . 'library/phpsec'); - - require_once('library/phpsec/Crypt/RSA.php'); - - $rsa = new CRYPT_RSA(); - $rsa->signatureMode = CRYPT_RSA_SIGNATURE_PKCS1; - $rsa->setHash('sha256'); - $rsa->loadKey($owner['sprvkey']); + $keyhash = base64url_encode(hash('sha256',salmon_key($owner['spubkey'])),true); // precomputed base64url encoding of data_type, encoding, algorithm concatenated with periods $precomputed = '.YXBwbGljYXRpb24vYXRvbSt4bWw=.YmFzZTY0dXJs.UlNBLVNIQTI1Ng=='; - $signature = base64url_encode($rsa->sign($data . $precomputed)); + $signature = base64url_encode(rsa_sign(str_replace('=','',$data . $precomputed),true),$owner['sprvkey']); - $signature2 = base64url_encode($rsa->sign($data)); + $signature2 = base64url_encode(rsa_sign($data . $precomputed),$owner['sprvkey']); + + $signature3 = base64url_encode(rsa_sign($data),$owner['sprvkey']); $salmon_tpl = get_markup_template('magicsig.tpl'); + $salmon = replace_macros($salmon_tpl,array( '$data' => $data, '$encoding' => $encoding, @@ -184,11 +131,11 @@ EOT; if($return_code > 299) { - logger('slapper: compliant salmon failed. Falling back to status.net hack'); + logger('slapper: compliant salmon failed. Falling back to status.net hack2'); // Entirely likely that their salmon implementation is // non-compliant. Let's try once more, this time only signing - // the data, without the precomputed blob + // the data, without stripping '=' chars $salmon = replace_macros($salmon_tpl,array( '$data' => $data, @@ -205,6 +152,30 @@ EOT; )); $return_code = $a->get_curl_code(); + + if($return_code > 299) { + + logger('slapper: compliant salmon failed. Falling back to status.net hack3'); + + // Entirely likely that their salmon implementation is + // non-compliant. Let's try once more, this time only signing + // the data, without the precomputed blob + + $salmon = replace_macros($salmon_tpl,array( + '$data' => $data, + '$encoding' => $encoding, + '$algorithm' => $algorithm, + '$keyhash' => $keyhash, + '$signature' => $signature3 + )); + + // slap them + post_url($url,$salmon, array( + 'Content-type: application/magic-envelope+xml', + 'Content-length: ' . strlen($salmon) + )); + $return_code = $a->get_curl_code(); + } } logger('slapper returned ' . $return_code); if(! $return_code) diff --git a/include/security.php b/include/security.php index 789e47db28..6fbdd697f7 100644 --- a/include/security.php +++ b/include/security.php @@ -28,8 +28,8 @@ function can_write_wall(&$a,$owner) { AND `user`.`blockwall` = 0 AND `readonly` = 0 AND ( `contact`.`rel` IN ( %d , %d ) OR `user`.`page-flags` = %d ) LIMIT 1", intval($owner), intval(remote_user()), - intval(REL_VIP), - intval(REL_BUD), + intval(CONTACT_IS_FOLLOWER), + intval(CONTACT_IS_FRIEND), intval(PAGE_COMMUNITY) ); if(count($r)) { diff --git a/include/text.php b/include/text.php new file mode 100644 index 0000000000..803bf0e510 --- /dev/null +++ b/include/text.php @@ -0,0 +1,954 @@ + replace) +// returns substituted string. +// WARNING: this is pretty basic, and doesn't properly handle search strings that are substrings of each other. +// For instance if 'test' => "foo" and 'testing' => "bar", testing could become either bar or fooing, +// depending on the order in which they were declared in the array. + +require_once("include/template_processor.php"); + +if(! function_exists('replace_macros')) { +function replace_macros($s,$r) { + global $t; + + return $t->replace($s,$r); + +}} + + +// random string, there are 86 characters max in text mode, 128 for hex +// output is urlsafe + +define('RANDOM_STRING_HEX', 0x00 ); +define('RANDOM_STRING_TEXT', 0x01 ); + +if(! function_exists('random_string')) { +function random_string($size = 64,$type = RANDOM_STRING_HEX) { + // generate a bit of entropy and run it through the whirlpool + $s = hash('whirlpool', (string) rand() . uniqid(rand(),true) . (string) rand(),(($type == RANDOM_STRING_TEXT) ? true : false)); + $s = (($type == RANDOM_STRING_TEXT) ? str_replace("\n","",base64url_encode($s,true)) : $s); + return(substr($s,0,$size)); +}} + +/** + * This is our primary input filter. + * + * The high bit hack only involved some old IE browser, forget which (IE5/Mac?) + * that had an XSS attack vector due to stripping the high-bit on an 8-bit character + * after cleansing, and angle chars with the high bit set could get through as markup. + * + * This is now disabled because it was interfering with some legitimate unicode sequences + * and hopefully there aren't a lot of those browsers left. + * + * Use this on any text input where angle chars are not valid or permitted + * They will be replaced with safer brackets. This may be filtered further + * if these are not allowed either. + * + */ + +if(! function_exists('notags')) { +function notags($string) { + + return(str_replace(array("<",">"), array('[',']'), $string)); + +// High-bit filter no longer used +// return(str_replace(array("<",">","\xBA","\xBC","\xBE"), array('[',']','','',''), $string)); +}} + +// use this on "body" or "content" input where angle chars shouldn't be removed, +// and allow them to be safely displayed. + +if(! function_exists('escape_tags')) { +function escape_tags($string) { + + return(htmlspecialchars($string)); +}} + + +// generate a string that's random, but usually pronounceable. +// used to generate initial passwords + +if(! function_exists('autoname')) { +function autoname($len) { + + $vowels = array('a','a','ai','au','e','e','e','ee','ea','i','ie','o','ou','u'); + if(mt_rand(0,5) == 4) + $vowels[] = 'y'; + + $cons = array( + 'b','bl','br', + 'c','ch','cl','cr', + 'd','dr', + 'f','fl','fr', + 'g','gh','gl','gr', + 'h', + 'j', + 'k','kh','kl','kr', + 'l', + 'm', + 'n', + 'p','ph','pl','pr', + 'qu', + 'r','rh', + 's','sc','sh','sm','sp','st', + 't','th','tr', + 'v', + 'w','wh', + 'x', + 'z','zh' + ); + + $midcons = array('ck','ct','gn','ld','lf','lm','lt','mb','mm', 'mn','mp', + 'nd','ng','nk','nt','rn','rp','rt'); + + $noend = array('bl', 'br', 'cl','cr','dr','fl','fr','gl','gr', + 'kh', 'kl','kr','mn','pl','pr','rh','tr','qu','wh'); + + $start = mt_rand(0,2); + if($start == 0) + $table = $vowels; + else + $table = $cons; + + $word = ''; + + for ($x = 0; $x < $len; $x ++) { + $r = mt_rand(0,count($table) - 1); + $word .= $table[$r]; + + if($table == $vowels) + $table = array_merge($cons,$midcons); + else + $table = $vowels; + + } + + $word = substr($word,0,$len); + + foreach($noend as $noe) { + if((strlen($word) > 2) && (substr($word,-2) == $noe)) { + $word = substr($word,0,-1); + break; + } + } + if(substr($word,-1) == 'q') + $word = substr($word,0,-1); + return $word; +}} + + +// escape text ($str) for XML transport +// returns escaped text. + +if(! function_exists('xmlify')) { +function xmlify($str) { + $buffer = ''; + + for($x = 0; $x < strlen($str); $x ++) { + $char = $str[$x]; + + switch( $char ) { + + case "\r" : + break; + case "&" : + $buffer .= '&'; + break; + case "'" : + $buffer .= '''; + break; + case "\"" : + $buffer .= '"'; + break; + case '<' : + $buffer .= '<'; + break; + case '>' : + $buffer .= '>'; + break; + case "\n" : + $buffer .= "\n"; + break; + default : + $buffer .= $char; + break; + } + } + $buffer = trim($buffer); + return($buffer); +}} + +// undo an xmlify +// pass xml escaped text ($s), returns unescaped text + +if(! function_exists('unxmlify')) { +function unxmlify($s) { + $ret = str_replace('&','&', $s); + $ret = str_replace(array('<','>','"','''),array('<','>','"',"'"),$ret); + return $ret; +}} + +// convenience wrapper, reverse the operation "bin2hex" + +if(! function_exists('hex2bin')) { +function hex2bin($s) { + if(! ctype_xdigit($s)) { + logger('hex2bin: illegal input: ' . print_r(debug_backtrace(), true)); + return($s); + } + + return(pack("H*",$s)); +}} + +// Automatic pagination. +// To use, get the count of total items. +// Then call $a->set_pager_total($number_items); +// Optionally call $a->set_pager_itemspage($n) to the number of items to display on each page +// Then call paginate($a) after the end of the display loop to insert the pager block on the page +// (assuming there are enough items to paginate). +// When using with SQL, the setting LIMIT %d, %d => $a->pager['start'],$a->pager['itemspage'] +// will limit the results to the correct items for the current page. +// The actual page handling is then accomplished at the application layer. + +if(! function_exists('paginate')) { +function paginate(&$a) { + $o = ''; + $stripped = preg_replace('/(&page=[0-9]*)/','',$a->query_string); + $stripped = str_replace('q=','',$stripped); + $stripped = trim($stripped,'/'); + $pagenum = $a->pager['page']; + $url = $a->get_baseurl() . '/' . $stripped; + + + if($a->pager['total'] > $a->pager['itemspage']) { + $o .= '
'; + if($a->pager['page'] != 1) + $o .= ''."pager['page'] - 1).'">' . t('prev') . ' '; + + $o .= "" . t('first') . " "; + + $numpages = $a->pager['total'] / $a->pager['itemspage']; + + $numstart = 1; + $numstop = $numpages; + + if($numpages > 14) { + $numstart = (($pagenum > 7) ? ($pagenum - 7) : 1); + $numstop = (($pagenum > ($numpages - 7)) ? $numpages : ($numstart + 14)); + } + + for($i = $numstart; $i <= $numstop; $i++){ + if($i == $a->pager['page']) + $o .= ''.(($i < 10) ? ' '.$i : $i); + else + $o .= "".(($i < 10) ? ' '.$i : $i).""; + $o .= ' '; + } + + if(($a->pager['total'] % $a->pager['itemspage']) != 0) { + if($i == $a->pager['page']) + $o .= ''.(($i < 10) ? ' '.$i : $i); + else + $o .= "".(($i < 10) ? ' '.$i : $i).""; + $o .= ' '; + } + + $lastpage = (($numpages > intval($numpages)) ? intval($numpages)+1 : $numpages); + $o .= "" . t('last') . " "; + + if(($a->pager['total'] - ($a->pager['itemspage'] * $a->pager['page'])) > 0) + $o .= ''."pager['page'] + 1).'">' . t('next') . ''; + $o .= '
'."\r\n"; + } + return $o; +}} + +// Turn user/group ACLs stored as angle bracketed text into arrays + +if(! function_exists('expand_acl')) { +function expand_acl($s) { + // turn string array of angle-bracketed elements into numeric array + // e.g. "<1><2><3>" => array(1,2,3); + $ret = array(); + + if(strlen($s)) { + $t = str_replace('<','',$s); + $a = explode('>',$t); + foreach($a as $aa) { + if(intval($aa)) + $ret[] = intval($aa); + } + } + return $ret; +}} + +// Used to wrap ACL elements in angle brackets for storage + +if(! function_exists('sanitise_acl')) { +function sanitise_acl(&$item) { + if(intval($item)) + $item = '<' . intval(notags(trim($item))) . '>'; + else + unset($item); +}} + + +// Convert an ACL array to a storable string + +if(! function_exists('perms2str')) { +function perms2str($p) { + $ret = ''; + $tmp = $p; + if(is_array($tmp)) { + array_walk($tmp,'sanitise_acl'); + $ret = implode('',$tmp); + } + return $ret; +}} + +// generate a guaranteed unique (for this domain) item ID for ATOM +// safe from birthday paradox + +if(! function_exists('item_new_uri')) { +function item_new_uri($hostname,$uid) { + + do { + $dups = false; + $hash = random_string(); + + $uri = "urn:X-dfrn:" . $hostname . ':' . $uid . ':' . $hash; + + $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' LIMIT 1", + dbesc($uri)); + if(count($r)) + $dups = true; + } while($dups == true); + return $uri; +}} + +// Generate a guaranteed unique photo ID. +// safe from birthday paradox + +if(! function_exists('photo_new_resource')) { +function photo_new_resource() { + + do { + $found = false; + $resource = hash('md5',uniqid(mt_rand(),true)); + $r = q("SELECT `id` FROM `photo` WHERE `resource-id` = '%s' LIMIT 1", + dbesc($resource) + ); + if(count($r)) + $found = true; + } while($found == true); + return $resource; +}} + + +// wrapper to load a view template, checking for alternate +// languages before falling back to the default + +// obsolete, deprecated. + +if(! function_exists('load_view_file')) { +function load_view_file($s) { + global $lang, $a; + if(! isset($lang)) + $lang = 'en'; + $b = basename($s); + $d = dirname($s); + if(file_exists("$d/$lang/$b")) + return file_get_contents("$d/$lang/$b"); + + $theme = current_theme(); + + if(file_exists("$d/theme/$theme/$b")) + return file_get_contents("$d/theme/$theme/$b"); + + return file_get_contents($s); +}} + +if(! function_exists('get_intltext_template')) { +function get_intltext_template($s) { + global $lang; + + if(! isset($lang)) + $lang = 'en'; + + if(file_exists("view/$lang/$s")) + return file_get_contents("view/$lang/$s"); + elseif(file_exists("view/en/$s")) + return file_get_contents("view/en/$s"); + else + return file_get_contents("view/$s"); +}} + +if(! function_exists('get_markup_template')) { +function get_markup_template($s) { + + $theme = current_theme(); + + if(file_exists("view/theme/$theme/$s")) + return file_get_contents("view/theme/$theme/$s"); + else + return file_get_contents("view/$s"); + +}} + + + + + +// for html,xml parsing - let's say you've got +// an attribute foobar="class1 class2 class3" +// and you want to find out if it contains 'class3'. +// you can't use a normal sub string search because you +// might match 'notclass3' and a regex to do the job is +// possible but a bit complicated. +// pass the attribute string as $attr and the attribute you +// are looking for as $s - returns true if found, otherwise false + +if(! function_exists('attribute_contains')) { +function attribute_contains($attr,$s) { + $a = explode(' ', $attr); + if(count($a) && in_array($s,$a)) + return true; + return false; +}} + +if(! function_exists('logger')) { +function logger($msg,$level = 0) { + $debugging = get_config('system','debugging'); + $loglevel = intval(get_config('system','loglevel')); + $logfile = get_config('system','logfile'); + + if((! $debugging) || (! $logfile) || ($level > $loglevel)) + return; + + @file_put_contents($logfile, datetime_convert() . ':' . session_id() . ' ' . $msg . "\n", FILE_APPEND); + return; +}} + + +if(! function_exists('activity_match')) { +function activity_match($haystack,$needle) { + if(($haystack === $needle) || ((basename($needle) === $haystack) && strstr($needle,NAMESPACE_ACTIVITY_SCHEMA))) + return true; + return false; +}} + + +// Pull out all #hashtags and @person tags from $s; +// We also get @person@domain.com - which would make +// the regex quite complicated as tags can also +// end a sentence. So we'll run through our results +// and strip the period from any tags which end with one. +// Returns array of tags found, or empty array. + + +if(! function_exists('get_tags')) { +function get_tags($s) { + $ret = array(); + + // ignore anything in a code block + + $s = preg_replace('/\[code\](.*?)\[\/code\]/sm','',$s); + + // Match full names against @tags including the space between first and last + // We will look these up afterward to see if they are full names or not recognisable. + + if(preg_match_all('/(@[^ \x0D\x0A,:?]+ [^ \x0D\x0A,:?]+)([ \x0D\x0A,:?]|$)/',$s,$match)) { + foreach($match[1] as $mtch) { + if(strstr($mtch,"]")) { + // we might be inside a bbcode color tag - leave it alone + continue; + } + if(substr($mtch,-1,1) === '.') + $ret[] = substr($mtch,0,-1); + else + $ret[] = $mtch; + } + } + + // Otherwise pull out single word tags. These can be @nickname, @first_last + // and #hash tags. + + if(preg_match_all('/([@#][^ \x0D\x0A,:?]+)([ \x0D\x0A,:?]|$)/',$s,$match)) { + foreach($match[1] as $mtch) { + if(strstr($mtch,"]")) { + // we might be inside a bbcode color tag - leave it alone + continue; + } + // ignore strictly numeric tags like #1 + if((strpos($mtch,'#') === 0) && ctype_digit(substr($mtch,1))) + continue; + if(substr($mtch,-1,1) === '.') + $ret[] = substr($mtch,0,-1); + else + $ret[] = $mtch; + } + } + return $ret; +}} + + +// quick and dirty quoted_printable encoding + +if(! function_exists('qp')) { +function qp($s) { +return str_replace ("%","=",rawurlencode($s)); +}} + + + +if(! function_exists('get_mentions')) { +function get_mentions($item) { + $o = ''; + if(! strlen($item['tag'])) + return $o; + + $arr = explode(',',$item['tag']); + foreach($arr as $x) { + $matches = null; + if(preg_match('/@\[url=([^\]]*)\]/',$x,$matches)) { + $o .= "\t\t" . '' . "\r\n"; + $o .= "\t\t" . '' . "\r\n"; + } + } + return $o; +}} + +if(! function_exists('contact_block')) { +function contact_block() { + $o = ''; + $a = get_app(); + + $shown = get_pconfig($a->profile['uid'],'system','display_friend_count'); + if(! $shown) + $shown = 24; + + if((! is_array($a->profile)) || ($a->profile['hide-friends'])) + return $o; + $r = q("SELECT COUNT(*) AS `total` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 and `pending` = 0", + intval($a->profile['uid']) + ); + if(count($r)) { + $total = intval($r[0]['total']); + } + if(! $total) { + $o .= '

' . t('No contacts') . '

'; + return $o; + } + $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 and `pending` = 0 ORDER BY RAND() LIMIT %d", + intval($a->profile['uid']), + intval($shown) + ); + if(count($r)) { + $o .= '

' . sprintf( tt('%d Contact','%d Contacts', $total),$total) . '

'; + foreach($r as $rr) { + $o .= micropro($rr,true,'mpfriend'); + } + $o .= '
'; + $o .= ''; + + } + + $arr = array('contacts' => $r, 'output' => $o); + + call_hooks('contact_block_end', $arr); + return $o; + +}} + +if(! function_exists('micropro')) { +function micropro($contact, $redirect = false, $class = '', $textmode = false) { + + if($class) + $class = ' ' . $class; + + $url = $contact['url']; + $sparkle = ''; + + if($redirect) { + $a = get_app(); + $redirect_url = $a->get_baseurl() . '/redir/' . $contact['id']; + if(local_user() && ($contact['uid'] == local_user()) && ($contact['network'] === 'dfrn')) { + $url = $redirect_url; + $sparkle = ' sparkle'; + } + } + $click = ((x($contact,'click')) ? ' onclick="' . $contact['click'] . '" ' : ''); + if($click) + $url = ''; + if($textmode) { + return '' . "\r\n"; + } + else { + return '
' . $contact['name'] 
+			. '
' . "\r\n"; + } +}} + + + +if(! function_exists('search')) { +function search($s,$id='search-box',$url='/search') { + $a = get_app(); + $o = '
'; + $o .= '
'; + $o .= ''; + $o .= ''; + $o .= '
'; + return $o; +}} + +if(! function_exists('valid_email')) { +function valid_email($x){ + if(preg_match('/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/',$x)) + return true; + return false; +}} + + +if(! function_exists('aes_decrypt')) { +function aes_decrypt($val,$ky) +{ + $key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; + for($a=0;$a=0 and ord(substr($dec, strlen($dec)-1,1))<=16)? chr(ord( substr($dec,strlen($dec)-1,1))):null)); +}} + + +if(! function_exists('aes_encrypt')) { +function aes_encrypt($val,$ky) +{ + $key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; + for($a=0;$a$1', $s); + return($s); +}} + + +/** + * + * Function: smilies + * + * Description: + * Replaces text emoticons with graphical images + * + * @Parameter: string $s + * + * Returns string + */ + +if(! function_exists('smilies')) { +function smilies($s) { + $a = get_app(); + + return str_replace( + array( '<3', '</3', '<\\3', ':-)', ':)', ';-)', ':-(', ':(', ':-P', ':P', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O', + '~friendika', 'Diaspora*' ), + array( + '<3', + '</3', + '<\\3', + ':-)', + ':)', + ';-)', + ':-(', + ':(', + ':-P', + ':P', + ':-\', + ':-x', + ':-X', + ':-D', + '8-|', + '8-O', + '~friendika ~friendika', + 'DiasporaDiaspora*', + + ), $s); +}} + + + +if(! function_exists('day_translate')) { +function day_translate($s) { + $ret = str_replace(array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'), + array( t('Monday'), t('Tuesday'), t('Wednesday'), t('Thursday'), t('Friday'), t('Saturday'), t('Sunday')), + $s); + + $ret = str_replace(array('January','February','March','April','May','June','July','August','September','October','November','December'), + array( t('January'), t('February'), t('March'), t('April'), t('May'), t('June'), t('July'), t('August'), t('September'), t('October'), t('November'), t('December')), + $ret); + + return $ret; +}} + + +if(! function_exists('normalise_link')) { +function normalise_link($url) { + $ret = str_replace(array('https:','//www.'), array('http:','//'), $url); + return(rtrim($ret,'/')); +}} + +/** + * + * Compare two URLs to see if they are the same, but ignore + * slight but hopefully insignificant differences such as if one + * is https and the other isn't, or if one is www.something and + * the other isn't - and also ignore case differences. + * + * Return true if the URLs match, otherwise false. + * + */ + +if(! function_exists('link_compare')) { +function link_compare($a,$b) { + if(strcasecmp(normalise_link($a),normalise_link($b)) === 0) + return true; + return false; +}} + +// Given an item array, convert the body element from bbcode to html and add smilie icons. +// If attach is true, also add icons for item attachments + + +if(! function_exists('prepare_body')) { +function prepare_body($item,$attach = false) { + + $s = prepare_text($item['body']); + if(! $attach) + return $s; + + $arr = explode(',',$item['attach']); + if(count($arr)) { + $s .= '
'; + foreach($arr as $r) { + $matches = false; + $icon = ''; + $cnt = preg_match('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches); + if($cnt) { + $icontype = strtolower(substr($matches[3],0,strpos($matches[3],'/'))); + switch($icontype) { + case 'video': + case 'audio': + case 'image': + case 'text': + $icon = '
'; + break; + default: + $icon = '
'; + break; + } + $title = ((strlen(trim($matches[4]))) ? escape_tags(trim($matches[4])) : escape_tags($matches[1])); + $title .= ' ' . $matches[2] . ' ' . t('bytes'); + + $s .= '' . $icon . ''; + } + } + $s .= '
'; + } + return $s; +}} + + +// Given a text string, convert from bbcode to html and add smilie icons. + +if(! function_exists('prepare_text')) { +function prepare_text($text) { + + require_once('include/bbcode.php'); + + $s = smilies(bbcode($text)); + + return $s; +}} + + +/** + * return atom link elements for all of our hubs + */ + +if(! function_exists('feed_hublinks')) { +function feed_hublinks() { + + $hub = get_config('system','huburl'); + + $hubxml = ''; + if(strlen($hub)) { + $hubs = explode(',', $hub); + if(count($hubs)) { + foreach($hubs as $h) { + $h = trim($h); + if(! strlen($h)) + continue; + $hubxml .= '' . "\n" ; + } + } + } + return $hubxml; +}} + +/* return atom link elements for salmon endpoints */ + +if(! function_exists('feed_salmonlinks')) { +function feed_salmonlinks($nick) { + + $a = get_app(); + + $salmon = '' . "\n" ; + + // old style links that status.net still needed as of 12/2010 + + $salmon .= ' ' . "\n" ; + $salmon .= ' ' . "\n" ; + return $salmon; +}} + +if(! function_exists('get_plink')) { +function get_plink($item) { + $a = get_app(); + $plink = (((x($item,'plink')) && (! $item['private'])) ? '' : ''); + return $plink; +}} + +if(! function_exists('unamp')) { +function unamp($s) { + return str_replace('&', '&', $s); +}} + + + + +if(! function_exists('lang_selector')) { +function lang_selector() { + global $lang; + $o = '
'; + $o .= ''; + return $o; +}} + + +if(! function_exists('return_bytes')) { +function return_bytes ($size_str) { + switch (substr ($size_str, -1)) + { + case 'M': case 'm': return (int)$size_str * 1048576; + case 'K': case 'k': return (int)$size_str * 1024; + case 'G': case 'g': return (int)$size_str * 1073741824; + default: return $size_str; + } +}} + +function generate_user_guid() { + $found = true; + do { + $guid = random_string(16); + $x = q("SELECT `uid` FROM `user` WHERE `guid` = '%s' LIMIT 1", + dbesc($guid) + ); + if(! count($x)) + $found = false; + } while ($found == true ); + return $guid; +} + + +function pkcs5_pad ($text, $blocksize) +{ + $pad = $blocksize - (strlen($text) % $blocksize); + return $text . str_repeat(chr($pad), $pad); +} + +function pkcs5_unpad($text) +{ + $pad = ord($text{strlen($text)-1}); + if ($pad > strlen($text)) return false; + if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false; + return substr($text, 0, -1 * $pad); +} + + +function base64url_encode($s, $strip_padding = false) { + + $s = strtr(base64_encode($s),'+/','-_'); + + if($strip_padding) + $s = str_replace('=','',$s); + + return $s; +} + +function base64url_decode($s) { + +/* + * // Placeholder for new rev of salmon which strips base64 padding. + * // PHP base64_decode handles the un-padded input without requiring this step + * // Uncomment if you find you need it. + * + * $l = strlen($s); + * if(! strpos($s,'=')) { + * $m = $l % 4; + * if($m == 2) + * $s .= '=='; + * if($m == 3) + * $s .= '='; + * } + * + */ + + return base64_decode(strtr($s,'-_','+/')); +} + +function cc_license() { +return '
' . t('Shared content is covered by the Creative Commons Attribution 3.0 license.') . '
'; +} diff --git a/index.php b/index.php index 3e72baddc5..80e8ca3b02 100644 --- a/index.php +++ b/index.php @@ -194,12 +194,18 @@ if(strlen($a->module)) { */ if(! $a->module_loaded) { + + // Stupid browser tried to pre-fetch our ACL img template. Don't log the event or return anything - just quietly exit. + if((x($_SERVER,'QUERY_STRING')) && strpos($_SERVER['QUERY_STRING'],'{0}') !== false) { + killme(); + } + if((x($_SERVER,'QUERY_STRING')) && ($_SERVER['QUERY_STRING'] === 'q=internal_error.html') && isset($dreamhost_error_hack)) { logger('index.php: dreamhost_error_hack invoked. Original URI =' . $_SERVER['REQUEST_URI']); goaway($a->get_baseurl() . $_SERVER['REQUEST_URI']); } - logger('index.php: page not found: ' . $_SERVER['REQUEST_URI'] . ' QUERY: ' . $_SERVER['QUERY_STRING'], LOGGER_DEBUG); + logger('index.php: page not found: ' . $_SERVER['REQUEST_URI'] . ' ADDRESS: ' . $_SERVER['REMOTE_ADDR'] . ' QUERY: ' . $_SERVER['QUERY_STRING'], LOGGER_DEBUG); header($_SERVER["SERVER_PROTOCOL"] . ' 404 ' . t('Not Found')); notice( t('Page not found.' ) . EOL); } diff --git a/library/ASNValue.class.php b/library/ASNValue.class.php new file mode 100644 index 0000000000..7a3c5d20ef --- /dev/null +++ b/library/ASNValue.class.php @@ -0,0 +1,169 @@ +Tag = $Tag; + $this->Value = $Value; + } + + function Encode() + { + //Write type + $result = chr($this->Tag); + + //Write size + $size = strlen($this->Value); + if ($size < 127) { + //Write size as is + $result .= chr($size); + } + else { + //Prepare length sequence + $sizeBuf = self::IntToBin($size); + + //Write length sequence + $firstByte = 0x80 + strlen($sizeBuf); + $result .= chr($firstByte) . $sizeBuf; + } + + //Write value + $result .= $this->Value; + + return $result; + } + + function Decode(&$Buffer) + { + //Read type + $this->Tag = self::ReadByte($Buffer); + + //Read first byte + $firstByte = self::ReadByte($Buffer); + + if ($firstByte < 127) { + $size = $firstByte; + } + else if ($firstByte > 127) { + $sizeLen = $firstByte - 0x80; + //Read length sequence + $size = self::BinToInt(self::ReadBytes($Buffer, $sizeLen)); + } + else { + throw new Exception("Invalid ASN length value"); + } + + $this->Value = self::ReadBytes($Buffer, $size); + } + + protected static function ReadBytes(&$Buffer, $Length) + { + $result = substr($Buffer, 0, $Length); + $Buffer = substr($Buffer, $Length); + + return $result; + } + + protected static function ReadByte(&$Buffer) + { + return ord(self::ReadBytes($Buffer, 1)); + } + + protected static function BinToInt($Bin) + { + $len = strlen($Bin); + $result = 0; + for ($i=0; $i<$len; $i++) { + $curByte = self::ReadByte($Bin); + $result += $curByte << (($len-$i-1)*8); + } + + return $result; + } + + protected static function IntToBin($Int) + { + $result = ''; + do { + $curByte = $Int % 256; + $result .= chr($curByte); + + $Int = ($Int - $curByte) / 256; + } while ($Int > 0); + + $result = strrev($result); + + return $result; + } + + function SetIntBuffer($Value) + { + if (strlen($Value) > 1) { + $firstByte = ord($Value{0}); + if ($firstByte & 0x80) { //first bit set + $Value = chr(0x00) . $Value; + } + } + + $this->Value = $Value; + } + + function GetIntBuffer() + { + $result = $this->Value; + if (ord($result{0}) == 0x00) { + $result = substr($result, 1); + } + + return $result; + } + + function SetInt($Value) + { + $Value = self::IntToBin($Value); + + $this->SetIntBuffer($Value); + } + + function GetInt() + { + $result = $this->GetIntBuffer(); + $result = self::BinToInt($result); + + return $result; + } + + function SetSequence($Values) + { + $result = ''; + foreach ($Values as $item) { + $result .= $item->Encode(); + } + + $this->Value = $result; + } + + function GetSequence() + { + $result = array(); + $seq = $this->Value; + while (strlen($seq)) { + $val = new ASNValue(); + $val->Decode($seq); + $result[] = $val; + } + + return $result; + } +} diff --git a/library/asn1.php b/library/asn1.php index 713978e8c1..e84398bf62 100644 --- a/library/asn1.php +++ b/library/asn1.php @@ -187,7 +187,6 @@ class ASN_BASE { return new ASN_BOOLEAN((bool)$data); case ASN_INTEGER: return new ASN_INTEGER(strtr(base64_encode($data),'+/','-_')); -// return new ASN_INTEGER(ord($data)); case ASN_BIT_STR: return new ASN_BIT_STR(self::parseASNString($data, $level+1, $maxLevels)); case ASN_OCTET_STR: @@ -290,9 +289,3 @@ class ASN_BASE { } - -function accum($s) { - $result = strtr(base64_encode($s),'+/=','-_,'); - return $result; -} - diff --git a/library/simplepie/simplepie.inc b/library/simplepie/simplepie.inc index c3ba02b7db..8a2739f525 100644 --- a/library/simplepie/simplepie.inc +++ b/library/simplepie/simplepie.inc @@ -5517,6 +5517,7 @@ class SimplePie_Item $type = null; $url = null; $width = null; + $title = $title_parent; $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); if (isset($link['attribs']['']['type'])) @@ -5527,9 +5528,13 @@ class SimplePie_Item { $length = ceil($link['attribs']['']['length']); } + if (isset($link['attribs']['']['title'])) + { + $title = $this->sanitize($link['attribs']['']['title'], SIMPLEPIE_CONSTRUCT_TEXT); + } // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor - $this->data['enclosures'][] = new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); + $this->data['enclosures'][] = new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title, $width); } } diff --git a/mod/admin.php b/mod/admin.php index f7dde7bcbe..1a926443f8 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -192,8 +192,8 @@ function admin_page_site_post(&$a){ $no_community_page = !((x($_POST,'no_community_page')) ? True : False); $verifyssl = ((x($_POST,'verifyssl')) ? True : False); - $proxyuser = ((x($_POST,'proxyuser')) ? notags(trim($_POST['global_search_url'])) : ''); - $proxy = ((x($_POST,'proxy')) ? notags(trim($_POST['global_search_url'])) : ''); + $proxyuser = ((x($_POST,'proxyuser')) ? notags(trim($_POST['proxyuser'])) : ''); + $proxy = ((x($_POST,'proxy')) ? notags(trim($_POST['proxy'])) : ''); $timeout = ((x($_POST,'timeout')) ? intval(trim($_POST['timeout'])) : 60); $dfrn_only = ((x($_POST,'dfrn_only')) ? True : False); $ostatus_disabled = !((x($_POST,'ostatus_disabled')) ? True : False); @@ -234,7 +234,7 @@ function admin_page_site_post(&$a){ set_config('system','no_gravatar', $no_gravatar); set_config('system','no_regfullname', $no_regfullname); set_config('system','no_community_page', $no_community_page); - set_config('system','proxy', $no_utf); + set_config('system','no_utf', $no_utf); set_config('system','verifyssl', $verifyssl); set_config('system','proxyuser', $proxyuser); set_config('system','proxy', $proxy); @@ -322,7 +322,7 @@ function admin_page_site(&$a) { '$no_openid' => array('no_openid', t("OpenID support"), !get_config('system','no_openid'), "OpenID support for registration and logins."), '$no_gravatar' => array('no_gravatar', t("Gravatar support"), !get_config('system','no_gravatar'), "Search new user's photo on Gravatar."), '$no_regfullname' => array('no_regfullname', t("Fullname check"), !get_config('system','no_regfullname'), "Force users to register with a space between firstname and lastname in Full name, as an antispam measure"), - '$no_utf' => array('no_utf', t("UTF-8 Regular expressions"), !get_config('system','proxy'), "Use PHP UTF8 regular expressions"), + '$no_utf' => array('no_utf', t("UTF-8 Regular expressions"), !get_config('system','no_utf'), "Use PHP UTF8 regular expressions"), '$no_community_page' => array('no_community_page', t("Show Community Page"), !get_config('system','no_community_page'), "Display a Community page showing all recent public postings on this site."), '$ostatus_disabled' => array('ostatus_disabled', t("Enable OStatus support"), !get_config('system','ostatus_disable'), "Provide built-in OStatus \x28identi.ca, status.net, etc.\x29 compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed."), '$dfrn_only' => array('dfrn_only', t('Only allow Friendika contacts'), get_config('system','dfrn_only'), "All contacts must use Friendika protocols. All other built-in communication protocols disabled."), diff --git a/mod/contactgroup.php b/mod/contactgroup.php new file mode 100644 index 0000000000..bf81afe079 --- /dev/null +++ b/mod/contactgroup.php @@ -0,0 +1,50 @@ +argc > 2) && intval($a->argv[1]) && intval($a->argv[2])) { + $r = q("SELECT `id` FROM `contact` WHERE `id` = %d AND `uid` = %d and `self` = 0 and `blocked` = 0 AND `pending` = 0 LIMIT 1", + intval($a->argv[2]), + intval(local_user()) + ); + if(count($r)) + $change = intval($a->argv[2]); + } + + if(($a->argc > 1) && (intval($a->argv[1]))) { + + $r = q("SELECT * FROM `group` WHERE `id` = %d AND `uid` = %d AND `deleted` = 0 LIMIT 1", + intval($a->argv[1]), + intval(local_user()) + ); + if(! count($r)) { + killme(); + } + + $group = $r[0]; + $members = group_get_members($group['id']); + $preselected = array(); + 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); + } + } + } + + killme(); +} \ No newline at end of file diff --git a/mod/contacts.php b/mod/contacts.php index 1fa07688c1..f8b9a743f1 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -6,10 +6,22 @@ function contacts_init(&$a) { if(! local_user()) return; + $contact_id = 0; + if(($a->argc == 2) && intval($a->argv[1])) { + $contact_id = intval($a->argv[1]); + $r = q("SELECT * FROM `contact` WHERE `uid` = %d and `id` = %d LIMIT 1", + intval(local_user()), + intval($contact_id) + ); + if(! count($r)) { + $contact_id = 0; + } + } + require_once('include/group.php'); if(! x($a->page,'aside')) $a->page['aside'] = ''; - $a->page['aside'] .= group_side(); + $a->page['aside'] .= group_side('contacts','group',false,0,$contact_id); $inv = ''; @@ -237,16 +249,16 @@ function contacts_content(&$a) { $tpl = get_markup_template("contact_edit.tpl"); switch($r[0]['rel']) { - case REL_BUD: + case CONTACT_IS_FRIEND: $dir_icon = 'images/lrarrow.gif'; $alt_text = t('Mutual Friendship'); break; - case REL_VIP; + case CONTACT_IS_FOLLOWER; $dir_icon = 'images/larrow.gif'; $alt_text = t('is a fan of yours'); break; - case REL_FAN; + case CONTACT_IS_SHARING; $dir_icon = 'images/rarrow.gif'; $alt_text = t('you are a fan of'); break; @@ -264,13 +276,6 @@ function contacts_content(&$a) { } $grps = ''; - $member_of = member_of($r[0]['id']); - if(is_array($member_of) && count($member_of)) { - $grps = t('Member of: ') . EOL . ''; - } $insecure = '

' . t('Privacy Unavailable') . ' ' . t('Private communications are not available for this contact.') . '

'; @@ -314,7 +319,7 @@ function contacts_content(&$a) { '$contact_id' => $r[0]['id'], '$block_text' => (($r[0]['blocked']) ? t('Unblock this contact') : t('Block this contact') ), '$ignore_text' => (($r[0]['readonly']) ? t('Unignore this contact') : t('Ignore this contact') ), - '$insecure' => (($r[0]['network'] !== NETWORK_DFRN && $r[0]['network'] !== NETWORK_MAIL && $r[0]['network'] !== NETWORK_FACEBOOK) ? $insecure : ''), + '$insecure' => (($r[0]['network'] !== NETWORK_DFRN && $r[0]['network'] !== NETWORK_MAIL && $r[0]['network'] !== NETWORK_FACEBOOK && $r[0]['network'] !== NETWORK_DIASPORA) ? $insecure : ''), '$info' => $r[0]['info'], '$blocked' => (($r[0]['blocked']) ? '
' . t('Currently blocked') . '
' : ''), '$ignored' => (($r[0]['readonly']) ? '
' . t('Currently ignored') . '
' : ''), @@ -363,7 +368,7 @@ function contacts_content(&$a) { $search = dbesc($search.'*'); $sql_extra .= ((strlen($search)) ? " AND MATCH `name` AGAINST ('$search' IN BOOLEAN MODE) " : ""); - $sql_extra2 = ((($sort_type > 0) && ($sort_type <= REL_BUD)) ? sprintf(" AND `rel` = %d ",intval($sort_type)) : ''); + $sql_extra2 = ((($sort_type > 0) && ($sort_type <= CONTACT_IS_FRIEND)) ? sprintf(" AND `rel` = %d ",intval($sort_type)) : ''); $r = q("SELECT COUNT(*) AS `total` FROM `contact` @@ -387,15 +392,15 @@ function contacts_content(&$a) { continue; switch($rr['rel']) { - case REL_BUD: + case CONTACT_IS_FRIEND: $dir_icon = 'images/lrarrow.gif'; $alt_text = t('Mutual Friendship'); break; - case REL_VIP; + case CONTACT_IS_FOLLOWER; $dir_icon = 'images/larrow.gif'; $alt_text = t('is a fan of yours'); break; - case REL_FAN; + case CONTACT_IS_SHARING; $dir_icon = 'images/rarrow.gif'; $alt_text = t('you are a fan of'); break; diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php index e2094b1f31..4088178c03 100644 --- a/mod/dfrn_confirm.php +++ b/mod/dfrn_confirm.php @@ -123,9 +123,12 @@ function dfrn_confirm_post(&$a,$handsfree = null) { $dfrn_confirm = $contact['confirm']; $aes_allow = $contact['aes_allow']; - $network = ((strlen($contact['issued-id'])) ? 'dfrn' : 'stat'); + $network = ((strlen($contact['issued-id'])) ? NETWORK_DFRN : NETWORK_OSTATUS); - if($network === 'dfrn') { + if($contact['network']) + $network = $contact['network']; + + if($network === NETWORK_DFRN) { /** * @@ -298,19 +301,19 @@ function dfrn_confirm_post(&$a,$handsfree = null) { * */ - require_once("Photo.php"); + require_once('include/Photo.php'); $photos = import_profile_photo($contact['photo'],$uid,$contact_id); logger('dfrn_confirm: confirm - imported photos'); - if($network === 'dfrn') { + if($network === NETWORK_DFRN) { - $new_relation = REL_VIP; - if(($relation == REL_FAN) || ($duplex)) - $new_relation = REL_BUD; + $new_relation = CONTACT_IS_FOLLOWER; + if(($relation == CONTACT_IS_SHARING) || ($duplex)) + $new_relation = CONTACT_IS_FRIEND; - if(($relation == REL_FAN) && ($duplex)) + if(($relation == CONTACT_IS_SHARING) && ($duplex)) $duplex = 0; $r = q("UPDATE `contact` SET `photo` = '%s', @@ -337,21 +340,29 @@ function dfrn_confirm_post(&$a,$handsfree = null) { ); } else { - // $network !== 'dfrn' - $notify = ''; - $poll = ''; + // $network !== NETWORK_DFRN - $arr = lrdd($contact['url']); - if(count($arr)) { - foreach($arr as $link) { - if($link['@attributes']['rel'] === 'salmon') - $notify = $link['@attributes']['href']; - if($link['@attributes']['rel'] === NAMESPACE_FEED) - $poll = $link['@attributes']['href']; + $network = (($contact['network']) ? $contact['network'] : NETWORK_OSTATUS); + $notify = (($contact['notify']) ? $contact['notify'] : ''); + $poll = (($contact['poll']) ? $contact['poll'] : ''); + + if((! $contact['notify']) || (! $contact['poll'])) { + $arr = lrdd($contact['url']); + if(count($arr)) { + foreach($arr as $link) { + if($link['@attributes']['rel'] === 'salmon') + $notify = $link['@attributes']['href']; + if($link['@attributes']['rel'] === NAMESPACE_FEED) + $poll = $link['@attributes']['href']; + } } } + $new_relation = $contact['rel']; + if($network === NETWORK_DIASPORA && $duplex) + $new_relation = CONTACT_IS_FRIEND; + $r = q("DELETE FROM `intro` WHERE `id` = %d AND `uid` = %d LIMIT 1", intval($intro_id), intval($uid) @@ -368,7 +379,8 @@ function dfrn_confirm_post(&$a,$handsfree = null) { `poll` = '%s', `blocked` = 0, `pending` = 0, - `network` = 'stat' + `network` = '%s', + `rel` = %d WHERE `id` = %d LIMIT 1 ", dbesc($photos[0]), @@ -379,6 +391,8 @@ function dfrn_confirm_post(&$a,$handsfree = null) { dbesc(datetime_convert()), dbesc($notify), dbesc($poll), + dbesc($network), + intval($new_relation), intval($contact_id) ); } @@ -401,7 +415,13 @@ function dfrn_confirm_post(&$a,$handsfree = null) { $r = q("SELECT `hide-friends` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1", intval($uid) ); - if((count($r)) && ($r[0]['hide-friends'] == 0) && (is_array($contact)) && isset($new_relation) && ($new_relation == REL_BUD)) { + if((count($r)) && ($r[0]['hide-friends'] == 0) && (is_array($contact)) && isset($new_relation) && ($new_relation == CONTACT_IS_FRIEND)) { + + if($r[0]['network'] === NETWORK_DIASPORA) { + require_once('include/diaspora.php'); + $ret = diaspora_share($user[0],$r[0]); + logger('mod_follow: diaspora_share returns: ' . $ret); + } require_once('include/items.php'); @@ -528,12 +548,22 @@ function dfrn_confirm_post(&$a,$handsfree = null) { dbesc($decrypted_source_url), intval($local_uid) ); - if(! count($ret)) { - // this is either a bogus confirmation (?) or we deleted the original introduction. - $message = t('Contact record was not found for you on our site.'); - xml_status(3,$message); - return; // NOTREACHED + if(strstr($decrypted_source_url,'http:')) + $newurl = str_replace('http:','https:',$decrypted_source_url); + else + $newurl = str_replace('https:','http:',$decrypted_source_url); + + $ret = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1", + dbesc($newurl), + intval($local_uid) + ); + if(! count($r)) { + // this is either a bogus confirmation (?) or we deleted the original introduction. + $message = t('Contact record was not found for you on our site.'); + xml_status(3,$message); + return; // NOTREACHED + } } $relation = $ret[0]['rel']; @@ -592,11 +622,11 @@ function dfrn_confirm_post(&$a,$handsfree = null) { logger('dfrn_confirm: request - photos imported'); - $new_relation = REL_FAN; - if(($relation == REL_VIP) || ($duplex)) - $new_relation = REL_BUD; + $new_relation = CONTACT_IS_SHARING; + if(($relation == CONTACT_IS_FOLLOWER) || ($duplex)) + $new_relation = CONTACT_IS_FRIEND; - if(($relation == REL_VIP) && ($duplex)) + if(($relation == CONTACT_IS_FOLLOWER) && ($duplex)) $duplex = 0; $r = q("UPDATE `contact` SET @@ -639,7 +669,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) { if((count($r)) && ($r[0]['notify-flags'] & NOTIFY_CONFIRM)) { push_lang($r[0]['language']); - $tpl = (($new_relation == REL_BUD) + $tpl = (($new_relation == CONTACT_IS_FRIEND) ? get_intltext_template('friend_complete_eml.tpl') : get_intltext_template('intro_complete_eml.tpl')); @@ -672,7 +702,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) { // somebody arrived here by mistake or they are fishing. Send them to the homepage. - goaway($a->get_baseurl()); + goaway(z_root()); // NOTREACHED } diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index 0dc96f8a76..f284b8b389 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -704,6 +704,7 @@ function dfrn_notify_post(&$a) { $ev['uid'] = $importer['uid']; $ev['uri'] = $item_id; $ev['edited'] = $datarray['edited']; + $ev['private'] = $datarray['private']; $r = q("SELECT * FROM `event` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($item_id), diff --git a/mod/dfrn_poll.php b/mod/dfrn_poll.php index 76803ef1b4..09f198b814 100644 --- a/mod/dfrn_poll.php +++ b/mod/dfrn_poll.php @@ -61,7 +61,7 @@ function dfrn_poll_init(&$a) { $my_id = '0:' . $dfrn_id; break; default: - goaway($a->get_baseurl()); + goaway(z_root()); break; // NOTREACHED } @@ -100,7 +100,7 @@ function dfrn_poll_init(&$a) { $profile = $r[0]['nickname']; goaway((strlen($destination_url)) ? $destination_url : $a->get_baseurl() . '/profile/' . $profile); } - goaway($a->get_baseurl()); + goaway(z_root()); } @@ -297,7 +297,7 @@ function dfrn_poll_post(&$a) { $my_id = '0:' . $dfrn_id; break; default: - goaway($a->get_baseurl()); + goaway(z_root()); break; // NOTREACHED } @@ -420,7 +420,7 @@ function dfrn_poll_content(&$a) { $my_id = '0:' . $dfrn_id; break; default: - goaway($a->get_baseurl()); + goaway(z_root()); break; // NOTREACHED } diff --git a/mod/dfrn_request.php b/mod/dfrn_request.php index c9811fa60c..79070604b7 100644 --- a/mod/dfrn_request.php +++ b/mod/dfrn_request.php @@ -48,7 +48,7 @@ function dfrn_request_post(&$a) { if($_POST['cancel']) { - goaway($a->get_baseurl()); + goaway(z_root()); } @@ -190,7 +190,7 @@ function dfrn_request_post(&$a) { // invalid/bogus request notice( t('Unrecoverable protocol error.') . EOL ); - goaway($a->get_baseurl()); + goaway(z_root()); return; // NOTREACHED } @@ -309,7 +309,7 @@ function dfrn_request_post(&$a) { notice( t('You have already introduced yourself here.') . EOL ); return; } - elseif($ret[0]['rel'] == REL_BUD) { + elseif($ret[0]['rel'] == CONTACT_IS_FRIEND) { notice( sprintf( t('Apparently you are already friends with %s.'), $a->profile['name']) . EOL); return; } @@ -445,7 +445,7 @@ function dfrn_request_post(&$a) { * * OStatus network * Check contact existence - * Try and scrape together enough information to create a contact record, with us as REL_VIP + * Try and scrape together enough information to create a contact record, with us as CONTACT_IS_FOLLOWER * Substitute our user's feed URL into $url template * Send the subscriber home to subscribe * @@ -602,7 +602,7 @@ function dfrn_request_content(&$a) { $myaddr = $a->get_baseurl() . '/profile/' . $a->user['nickname']; } else { - $myaddr = $a->user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3 ); + $myaddr = $a->user['nickname'] . '@' . substr(z_root(), strpos(z_root(),'://') + 3 ); } } elseif(x($_GET,'addr')) { diff --git a/mod/display.php b/mod/display.php index 159ff57edf..52a84e755e 100644 --- a/mod/display.php +++ b/mod/display.php @@ -114,7 +114,7 @@ function display_content(&$a) { } - $o .= '
' . t('Shared content is covered by the Creative Commons Attribution 3.0 license.') . '
'; + $o .= cc_license(); return $o; } diff --git a/mod/events.php b/mod/events.php index b0b54601fd..27ca698307 100644 --- a/mod/events.php +++ b/mod/events.php @@ -297,6 +297,12 @@ function events_content(&$a) { $fhour = ((x($orig_event)) ? datetime_convert('UTC', $tz, $fdt, 'H') : 0); $fminute = ((x($orig_event)) ? datetime_convert('UTC', $tz, $fdt, 'i') : 0); + $f = get_config('system','event_input_format'); + if(! $f) + $f = 'ymd'; + + $dateformat = datesel_format($f); + $timeformat = t('hour:minute'); require_once('include/acl_selectors.php'); @@ -306,14 +312,14 @@ function events_content(&$a) { '$cid' => $cid, '$uri' => $uri, '$e_text' => t('Event details'), - '$e_desc' => t('Format is year-month-day hour:minute. Starting date and Description are required.'), + '$e_desc' => sprintf( t('Format is %s %s. Starting date and Description are required.'),$dateformat,$timeformat), '$s_text' => t('Event Starts:') . ' * ', - '$s_dsel' => datesel('start',$syear+5,$syear,false,$syear,$smonth,$sday), + '$s_dsel' => datesel($f,'start',$syear+5,$syear,false,$syear,$smonth,$sday), '$s_tsel' => timesel('start',$shour,$sminute), '$n_text' => t('Finish date/time is not known or not relevant'), '$n_checked' => $n_checked, '$f_text' => t('Event Finishes:'), - '$f_dsel' => datesel('finish',$fyear+5,$fyear,false,$fyear,$fmonth,$fday), + '$f_dsel' => datesel($f,'finish',$fyear+5,$fyear,false,$fyear,$fmonth,$fday), '$f_tsel' => timesel('finish',$fhour,$fminute), '$a_text' => t('Adjust for viewer timezone'), '$a_checked' => $a_checked, diff --git a/mod/follow.php b/mod/follow.php index 830399ff5c..14b2ea46c1 100644 --- a/mod/follow.php +++ b/mod/follow.php @@ -58,7 +58,7 @@ function follow_post(&$a) { } if($ret['network'] === NETWORK_OSTATUS && get_config('system','ostatus_disabled')) { - notice( t('Communication options with this network have been restricted.') . EOL); + notice( t('The profile address specified belongs to a network which has been disabled on this site.') . EOL); $ret['notify'] = ''; } @@ -71,6 +71,9 @@ function follow_post(&$a) { $writeable = 1; } + if($ret['network'] === NETWORK_DIASPORA) + $writeable = 1; + // check if we already have a contact // the poll url is more reliable than the profile url, as we may have // indirect links or webfinger links @@ -82,15 +85,20 @@ function follow_post(&$a) { if(count($r)) { // update contact - if($r[0]['rel'] == REL_VIP) { + if($r[0]['rel'] == CONTACT_IS_FOLLOWER || ($network === NETWORK_DIASPORA && $r[0]['rel'] == CONTACT_IS_SHARING)) { q("UPDATE `contact` SET `rel` = %d , `readonly` = 0 WHERE `id` = %d AND `uid` = %d LIMIT 1", - intval(REL_BUD), + intval(CONTACT_IS_FRIEND), intval($r[0]['id']), intval(local_user()) ); } } else { + + $new_relation = (($ret['network'] === NETWORK_MAIL) ? CONTACT_IS_FRIEND : CONTACT_IS_SHARING); + if($ret['network'] === NETWORK_DIASPORA) + $new_relation = CONTACT_IS_FOLLOWER; + // create contact record $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `addr`, `alias`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `rel`, `priority`, `writable`, `blocked`, `readonly`, `pending` ) @@ -106,7 +114,7 @@ function follow_post(&$a) { dbesc($ret['nick']), dbesc($ret['photo']), dbesc($ret['network']), - intval(($ret['network'] === NETWORK_MAIL) ? REL_BUD : REL_FAN), + intval($new_relation), intval($ret['priority']), intval($writeable) ); @@ -175,10 +183,16 @@ function follow_post(&$a) { intval(local_user()) ); - - if((count($r)) && (x($contact,'notify')) && (strlen($contact['notify']))) { - require_once('include/salmon.php'); - slapper($r[0],$contact['notify'],$slap); + if(count($r)) { + if(($contact['network'] == NETWORK_OSTATUS) && (strlen($contact['notify']))) { + require_once('include/salmon.php'); + slapper($r[0],$contact['notify'],$slap); + } + if($contact['network'] == NETWORK_DIASPORA) { + require_once('include/diaspora.php'); + $ret = diaspora_share($a->user,$r[0]); + logger('mod_follow: diaspora_share returns: ' . $ret); + } } goaway($_SESSION['return_url']); diff --git a/mod/friendika.php b/mod/friendika.php index 753a9f478f..d0e709c753 100644 --- a/mod/friendika.php +++ b/mod/friendika.php @@ -16,7 +16,7 @@ function friendika_init(&$a) { $data = Array( 'version' => FRIENDIKA_VERSION, - 'url' => $a->get_baseurl(), + 'url' => z_root(), 'plugins' => $a->plugins, 'register_policy' => $register_policy[$a->config['register_policy']], 'admin' => $admin, @@ -40,7 +40,7 @@ function friendika_content(&$a) { $o .= '

'; $o .= t('This is Friendika version') . ' ' . FRIENDIKA_VERSION . ' '; - $o .= t('running at web location') . ' ' . $a->get_baseurl() . '

'; + $o .= t('running at web location') . ' ' . z_root() . '

'; $o .= t('Shared content within the Friendika network is provided under the Creative Commons Attribution 3.0 license') . '

'; diff --git a/mod/hcard.php b/mod/hcard.php new file mode 100644 index 0000000000..5505ca08e6 --- /dev/null +++ b/mod/hcard.php @@ -0,0 +1,50 @@ +argc > 1) + $which = $a->argv[1]; + else { + notice( t('No profile') . EOL ); + $a->error = 404; + return; + } + + $profile = 0; + if((local_user()) && ($a->argc > 2) && ($a->argv[2] === 'view')) { + $which = $a->user['nickname']; + $profile = $a->argv[1]; + } + + profile_load($a,$which,$profile); + + if((x($a->profile,'page-flags')) && ($a->profile['page-flags'] == PAGE_COMMUNITY)) { + $a->page['htmlhead'] .= ''; + } + if(x($a->profile,'openidserver')) + $a->page['htmlhead'] .= '' . "\r\n"; + if(x($a->profile,'openid')) { + $delegate = ((strstr($a->profile['openid'],'://')) ? $a->profile['openid'] : 'http://' . $a->profile['openid']); + $a->page['htmlhead'] .= '' . "\r\n"; + } + + $keywords = ((x($a->profile,'pub_keywords')) ? $a->profile['pub_keywords'] : ''); + $keywords = str_replace(array(',',' ',',,'),array(' ',',',','),$keywords); + if(strlen($keywords)) + $a->page['htmlhead'] .= '' . "\r\n" ; + + $a->page['htmlhead'] .= '' . "\r\n" ; + $a->page['htmlhead'] .= '' . "\r\n" ; + $uri = urlencode('acct:' . $a->profile['nickname'] . '@' . $a->get_hostname() . (($a->path) ? '/' . $a->path : '')); + $a->page['htmlhead'] .= '' . "\r\n"; + header('Link: <' . $a->get_baseurl() . '/xrd/?uri=' . $uri . '>; rel="lrdd"; type="application/xrd+xml"', false); + + $dfrn_pages = array('request', 'confirm', 'notify', 'poll'); + foreach($dfrn_pages as $dfrn) + $a->page['htmlhead'] .= "get_baseurl()."/dfrn_{$dfrn}/{$which}\" />\r\n"; + +} + diff --git a/mod/help.php b/mod/help.php index 561f5381f8..495b4ccc22 100644 --- a/mod/help.php +++ b/mod/help.php @@ -9,7 +9,9 @@ function load_doc_file($s) { $d = dirname($s); if(file_exists("$d/$lang/$b")) return file_get_contents("$d/$lang/$b"); - return file_get_contents($s); + if(file_exists($s)) + return file_get_contents($s); + return ''; }} @@ -31,7 +33,12 @@ function help_content(&$a) { $a->page['title'] = t('Help'); } - + if(! strlen($text)) { + header($_SERVER["SERVER_PROTOCOL"] . ' 404 ' . t('Not Found')); + notice( t('Page not found.' ) . EOL); + return; + } + return Markdown($text); } \ No newline at end of file diff --git a/include/hostxrd.php b/mod/hostxrd.php similarity index 61% rename from include/hostxrd.php rename to mod/hostxrd.php index 7040f927d6..c7861d26d0 100644 --- a/include/hostxrd.php +++ b/mod/hostxrd.php @@ -1,11 +1,10 @@ t('Friendika Social Network'), '$lbl_02' => t('Installation'), - '$lbl_03' => t('In order to install Friendika we need to know how to contact your database.'), + '$lbl_03' => t('In order to install Friendika we need to know how to connect to your database.'), '$lbl_04' => t('Please contact your hosting provider or site administrator if you have questions about these settings.'), - '$lbl_05' => t('The database you specify below must already exist. If it does not, please create it before continuing.'), + '$lbl_05' => t('The database you specify below should already exist. If it does not, please create it before continuing.'), '$lbl_06' => t('Database Server Name'), '$lbl_07' => t('Database Login Name'), '$lbl_08' => t('Database Login Password'), '$lbl_09' => t('Database Name'), '$lbl_10' => t('Please select a default timezone for your website'), - '$lbl_11' => t('Site administrator email address. Your account email address will need match this.'), + '$lbl_11' => t('Site administrator email address. Your account email address must match this in order to use the web admin panel.'), '$baseurl' => $a->get_baseurl(), '$tzselect' => ((x($_POST,'timezone')) ? select_timezone($_POST['timezone']) : select_timezone()), '$submit' => t('Submit'), diff --git a/mod/item.php b/mod/item.php index f6f665a189..ef0b232d56 100644 --- a/mod/item.php +++ b/mod/item.php @@ -6,6 +6,8 @@ * text stuff. This function handles status, wall-to-wall status, * local comments, and remote coments - that are posted on this site * (as opposed to being delivered in a feed). + * Also processed here are posts and comments coming through the + * statusnet/twitter API. * All of these become an "item" which is our basic unit of * information. * Posts that originate externally or do not fall into the above @@ -33,22 +35,61 @@ function item_post(&$a) { call_hooks('post_local_start', $_POST); + $api_source = ((x($_POST,'api_source') && $_POST['api_source']) ? true : false); + + /** + * Is this a reply to something? + */ + $parent = ((x($_POST,'parent')) ? intval($_POST['parent']) : 0); + $parent_uri = ((x($_POST,'parent_uri')) ? trim($_POST['parent_uri']) : ''); $parent_item = null; $parent_contact = null; + $thr_parent = ''; + $parid = 0; + $r = false; - if($parent) { - $r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1", - intval($parent) - ); - if(! count($r)) { + if($parent || $parent_uri) { + + if(! x($_POST,'type')) + $_POST['type'] = 'net-comment'; + + if($parent) { + $r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1", + intval($parent) + ); + } + elseif($parent_uri && local_user()) { + // This is coming from an API source, and we are logged in + $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + dbesc($parent_uri), + intval(local_user()) + ); + } + // if this isn't the real parent of the conversation, find it + if($r !== false && count($r)) { + $parid = $r[0]['parent']; + if($r[0]['id'] != $r[0]['parent']) { + $r = q("SELECT * FROM `item` WHERE `id` = `parent` AND `parent` = %d LIMIT 1", + intval($parid) + ); + } + } + + if(($r === false) || (! count($r))) { notice( t('Unable to locate original post.') . EOL); if(x($_POST,'return')) goaway($a->get_baseurl() . "/" . $_POST['return'] ); killme(); } $parent_item = $r[0]; + $parent = $r[0]['id']; + + // multi-level threading - preserve the info but re-parent to our single level threading + if(($parid) && ($parid != $parent)) + $thr_parent = $parent_uri; + if($parent_item['contact-id'] && $uid) { $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", intval($parent_item['contact-id']), @@ -59,6 +100,8 @@ function item_post(&$a) { } } + if($parent) logger('mod_post: parent=' . $parent); + $profile_uid = ((x($_POST,'profile_uid')) ? intval($_POST['profile_uid']) : 0); $post_id = ((x($_POST['post_id'])) ? intval($_POST['post_id']) : 0); $app = ((x($_POST['source'])) ? strip_tags($_POST['source']) : ''); @@ -135,6 +178,20 @@ function item_post(&$a) { $pubmail_enable = ((x($_POST,'pubmail_enable') && intval($_POST['pubmail_enable']) && (! $private)) ? 1 : 0); + // if using the API, we won't see pubmail_enable - figure out if it should be set + + if($api_source && $profile_uid && $profile_uid == local_user() && (! $private)) { + $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1); + if(! $mail_disabled) { + $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1", + intval(local_user()) + ); + if(count($r) && intval($r[0]['pubmail'])) + $pubmail_enabled = true; + } + } + + if(! strlen($body)) { info( t('Empty post discarded.') . EOL ); if(x($_POST,'return')) @@ -180,6 +237,8 @@ function item_post(&$a) { $contact_record = $r[0]; } + + $post_type = notags(trim($_POST['type'])); if($post_type === 'net-comment') { @@ -259,6 +318,10 @@ function item_post(&$a) { if(count($r)) { $r = q("UPDATE `attach` SET `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1", + dbesc($str_contact_allow), + dbesc($str_group_allow), + dbesc($str_contact_deny), + dbesc($str_group_deny), intval($profile_uid), intval($attach) ); @@ -391,7 +454,7 @@ function item_post(&$a) { if(count($r)) { if(strlen($attachments)) $attachments .= ','; - $attachments .= '[attach]href="' . $a->get_baseurl() . '/attach/' . $r[0]['id'] . '" size="' . $r[0]['filesize'] . '" type="' . $r[0]['filetype'] . '" title="' . (($r[0]['filename']) ? $r[0]['filename'] : ' ') . '"[/attach]'; + $attachments .= '[attach]href="' . $a->get_baseurl() . '/attach/' . $r[0]['id'] . '" length="' . $r[0]['filesize'] . '" type="' . $r[0]['filetype'] . '" title="' . (($r[0]['filename']) ? $r[0]['filename'] : '') . '"[/attach]'; } $body = str_replace($match[1],'',$body); } @@ -443,6 +506,7 @@ function item_post(&$a) { $datarray['private'] = $private; $datarray['pubmail'] = $pubmail_enable; $datarray['attach'] = $attachments; + $datarray['thr-parent'] = $thr_parent; /** * These fields are for the convenience of plugins... @@ -456,6 +520,9 @@ function item_post(&$a) { if($orig_post) $datarray['edit'] = true; + else + $datarray['guid'] = get_guid(); + call_hooks('post_local',$datarray); @@ -479,10 +546,11 @@ function item_post(&$a) { $post_id = 0; - $r = q("INSERT INTO `item` (`uid`,`type`,`wall`,`gravity`,`contact-id`,`owner-name`,`owner-link`,`owner-avatar`, - `author-name`, `author-link`, `author-avatar`, `created`, `edited`, `received`, `changed`, `uri`, `title`, `body`, `app`, `location`, `coord`, + $r = q("INSERT INTO `item` (`guid`, `uid`,`type`,`wall`,`gravity`,`contact-id`,`owner-name`,`owner-link`,`owner-avatar`, + `author-name`, `author-link`, `author-avatar`, `created`, `edited`, `received`, `changed`, `uri`, `thr-parent`, `title`, `body`, `app`, `location`, `coord`, `tag`, `inform`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail`, `attach` ) - VALUES( %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s' )", + VALUES( '%s', %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s' )", + dbesc($datarray['guid']), intval($datarray['uid']), dbesc($datarray['type']), intval($datarray['wall']), @@ -499,6 +567,7 @@ function item_post(&$a) { dbesc($datarray['received']), dbesc($datarray['changed']), dbesc($datarray['uri']), + dbesc($datarray['thr-parent']), dbesc($datarray['title']), dbesc($datarray['body']), dbesc($datarray['app']), @@ -731,12 +800,16 @@ function item_post(&$a) { } logger('post_complete'); + + // figure out how to return, depending on from whence we came + + if($api_source) + return; + if((x($_POST,'return')) && strlen($_POST['return'])) { logger('return: ' . $_POST['return']); goaway($a->get_baseurl() . "/" . $_POST['return'] ); } - if($_POST['api_source']) - return; $json = array('success' => 1); if(x($_POST,'jsreload') && strlen($_POST['jsreload'])) $json['reload'] = $a->get_baseurl() . '/' . $_POST['jsreload']; diff --git a/mod/login.php b/mod/login.php index 58af42d744..10b4d3001d 100644 --- a/mod/login.php +++ b/mod/login.php @@ -3,6 +3,8 @@ function login_content(&$a) { if(x($_SESSION,'theme')) unset($_SESSION['theme']); + if(local_user()) + goaway(z_root()); return login(($a->config['register_policy'] == REGISTER_CLOSED) ? false : true); } \ No newline at end of file diff --git a/mod/lostpass.php b/mod/lostpass.php index 3453a0db43..b71398fa4b 100644 --- a/mod/lostpass.php +++ b/mod/lostpass.php @@ -5,7 +5,7 @@ function lostpass_post(&$a) { $email = notags(trim($_POST['login-name'])); if(! $email) - goaway($a->get_baseurl()); + goaway(z_root()); $r = q("SELECT * FROM `user` WHERE ( `email` = '%s' OR `nickname` = '%s' ) AND `verified` = 1 AND `blocked` = 0 LIMIT 1", dbesc($email), @@ -14,7 +14,7 @@ function lostpass_post(&$a) { if(! count($r)) { notice( t('No valid account found.') . EOL); - goaway($a->get_baseurl()); + goaway(z_root()); } $uid = $r[0]['uid']; @@ -46,7 +46,7 @@ function lostpass_post(&$a) { . 'Content-transfer-encoding: 8bit' ); - goaway($a->get_baseurl()); + goaway(z_root()); } @@ -62,7 +62,7 @@ function lostpass_content(&$a) { ); if(! count($r)) { notice( t("Request could not be verified. \x28You may have previously submitted it.\x29 Password reset failed.") . EOL); - goaway($a->get_baseurl()); + goaway(z_root()); return; } $uid = $r[0]['uid']; diff --git a/mod/network.php b/mod/network.php index 8d377fa0e2..7cac7b858a 100644 --- a/mod/network.php +++ b/mod/network.php @@ -297,9 +297,8 @@ function network_content(&$a, $update = 0) { $o .= conversation($a,$r,$mode,$update); if(! $update) { - $o .= paginate($a); - $o .= '

' . t('Shared content is covered by the Creative Commons Attribution 3.0 license.') . '
'; + $o .= cc_license(); } return $o; diff --git a/mod/notifications.php b/mod/notifications.php index 6f9ece1848..920d0d82d4 100644 --- a/mod/notifications.php +++ b/mod/notifications.php @@ -3,7 +3,7 @@ function notifications_post(&$a) { if(! local_user()) { - goaway($a->get_baseurl()); + goaway(z_root()); } $request_id = (($a->argc > 1) ? $a->argv[1] : 0); @@ -60,7 +60,7 @@ function notifications_content(&$a) { if(! local_user()) { notice( t('Permission denied.') . EOL); - goaway($a->get_baseurl()); + return; } $o = ''; @@ -122,23 +122,25 @@ function notifications_content(&$a) { continue; } - $friend_selected = (($rr['network'] !== 'stat') ? ' checked="checked" ' : ' disabled '); - $fan_selected = (($rr['network'] === 'stat') ? ' checked="checked" disabled ' : ''); + $friend_selected = (($rr['network'] !== NETWORK_OSTATUS) ? ' checked="checked" ' : ' disabled '); + $fan_selected = (($rr['network'] === NETWORK_OSTATUS) ? ' checked="checked" disabled ' : ''); $dfrn_tpl = get_markup_template('netfriend.tpl'); $knowyou = ''; $dfrn_text = ''; - if($rr['network'] !== 'stat') { - $knowyou = t('Claims to be known to you: ') . (($rr['knowyou']) ? t('yes') : t('no')); - + if($rr['network'] === NETWORK_DFRN || $rr['network'] === NETWORK_DIASPORA) { + if($rr['network'] === NETWORK_DFRN) + $knowyou = t('Claims to be known to you: ') . (($rr['knowyou']) ? t('yes') : t('no')); + else + $knowyou = ''; $dfrn_text = replace_macros($dfrn_tpl,array( '$intro_id' => $rr['intro_id'], '$friend_selected' => $friend_selected, '$fan_selected' => $fan_selected, '$approve_as' => t('Approve as: '), '$as_friend' => t('Friend'), - '$as_fan' => t('Fan/Admirer') + '$as_fan' => (($rr['network'] == NETWORK_DIASPORA) ? t('Sharer') : t('Fan/Admirer')) )); } @@ -146,7 +148,7 @@ function notifications_content(&$a) { $o .= replace_macros($tpl,array( '$str_notifytype' => t('Notification type: '), - '$notify_type' => (($rr['network'] !== 'stat') ? t('Friend/Connect Request') : t('New Follower')), + '$notify_type' => (($rr['network'] !== NETWORK_OSTATUS) ? t('Friend/Connect Request') : t('New Follower')), '$dfrn_text' => $dfrn_text, '$dfrn_id' => $rr['issued-id'], '$uid' => $_SESSION['uid'], diff --git a/mod/openid.php b/mod/openid.php index 537d84ce38..6fbd013b8d 100644 --- a/mod/openid.php +++ b/mod/openid.php @@ -8,7 +8,7 @@ function openid_content(&$a) { $noid = get_config('system','no_openid'); if($noid) - goaway($a->get_baseurl()); + goaway(z_root()); if((x($_GET,'openid_mode')) && (x($_SESSION,'openid'))) { $openid = new LightOpenID; @@ -49,7 +49,7 @@ function openid_content(&$a) { if($a->config['register_policy'] != REGISTER_CLOSED) goaway($a->get_baseurl() . '/register' . $args); else - goaway($a->get_baseurl()); + goaway(z_root()); // NOTREACHED } @@ -60,7 +60,7 @@ function openid_content(&$a) { ); if(! count($r)) { notice( t('Login failed.') . EOL ); - goaway($a->get_baseurl()); + goaway(z_root()); } unset($_SESSION['openid']); @@ -116,10 +116,10 @@ function openid_content(&$a) { if(($a->module !== 'home') && isset($_SESSION['return_url'])) goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); else - goaway($a->get_baseurl()); + goaway(z_root()); } } notice( t('Login failed.') . EOL); - goaway($a->get_baseurl()); + goaway(z_root()); // NOTREACHED } diff --git a/mod/parse_url.php b/mod/parse_url.php index 46c6b46e97..9bb0bc4640 100644 --- a/mod/parse_url.php +++ b/mod/parse_url.php @@ -116,7 +116,7 @@ function parse_url_content(&$a) { } if(strlen($text)) { - $text = '

' . $text; + $text = '

' . $text . '

'; } echo sprintf($template,$url,($title) ? $title : $url,$text); diff --git a/mod/photo.php b/mod/photo.php index 9809aa418d..3994620f89 100644 --- a/mod/photo.php +++ b/mod/photo.php @@ -5,6 +5,11 @@ require_once('include/security.php'); function photo_init(&$a) { switch($a->argc) { + case 4: + $person = $a->argv[3]; + $customres = intval($a->argv[2]); + $type = $a->argv[1]; + break; case 3: $person = $a->argv[2]; $type = $a->argv[1]; @@ -29,6 +34,7 @@ function photo_init(&$a) { switch($type) { case 'profile': + case 'custom': $resolution = 4; break; case 'micro': @@ -113,8 +119,17 @@ function photo_init(&$a) { // NOTREACHED } + if(intval($customres) && $customres > 0 && $customres < 500) { + require_once('include/Photo.php'); + $ph = new Photo($data); + if($ph->is_valid()) { + $ph->scaleImageSquare($customres); + $data = $ph->imageString(); + } + } + header("Content-type: image/jpeg"); echo $data; killme(); // NOTREACHED -} \ No newline at end of file +} diff --git a/mod/photos.php b/mod/photos.php index 4a72bb6807..cb13b76036 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -903,7 +903,7 @@ function photos_content(&$a) { $album = hex2bin($datum); $r = q("SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` = '%s' - $sql_extra GROUP BY `resource-id`", + AND `scale` <= 4 $sql_extra GROUP BY `resource-id`", intval($owner_uid), dbesc($album) ); @@ -913,7 +913,7 @@ function photos_content(&$a) { } $r = q("SELECT `resource-id`, `id`, `filename`, max(`scale`) AS `scale`, `desc` FROM `photo` WHERE `uid` = %d AND `album` = '%s' - $sql_extra GROUP BY `resource-id` ORDER BY `created` DESC LIMIT %d , %d", + AND `scale` <= 4 $sql_extra GROUP BY `resource-id` ORDER BY `created` DESC LIMIT %d , %d", intval($owner_uid), dbesc($album), intval($a->pager['start']), diff --git a/mod/probe.php b/mod/probe.php new file mode 100644 index 0000000000..c95db291b3 --- /dev/null +++ b/mod/probe.php @@ -0,0 +1,24 @@ +Probe Diagnostic'; + + $o .= '
'; + $o .= 'Lookup address: '; + $o .= '
'; + + $o .= '

'; + + if(x($_GET,'addr')) { + + $addr = trim($_GET['addr']); + $res = probe_url($addr); + $o .= '
';
+		$o .= str_replace("\n",'
',print_r($res,true)); + $o .= '
'; + } + return $o; +} diff --git a/mod/profile.php b/mod/profile.php index 7e47c91bb0..b309ea6470 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -21,7 +21,7 @@ function profile_init(&$a) { profile_load($a,$which,$profile); - if((x($a->profile,'page-flags')) && ($a->profile['page-flags'] & PAGE_COMMUNITY)) { + if((x($a->profile,'page-flags')) && ($a->profile['page-flags'] == PAGE_COMMUNITY)) { $a->page['htmlhead'] .= ''; } if(x($a->profile,'openidserver')) @@ -236,9 +236,8 @@ function profile_content(&$a, $update = 0) { $o .= conversation($a,$r,'profile',$update); if(! $update) { - $o .= paginate($a); - $o .= '
' . t('Shared content is covered by the Creative Commons Attribution 3.0 license.') . '
'; + $o .= cc_license(); } return $o; diff --git a/mod/profiles.php b/mod/profiles.php index 7041249e24..9b0a2970b5 100644 --- a/mod/profiles.php +++ b/mod/profiles.php @@ -361,6 +361,9 @@ function profiles_content(&$a) { $a->page['htmlhead'] .= replace_macros($tpl, array('$baseurl' => $a->get_baseurl())); $a->page['htmlhead'] .= ""; + $f = get_config('system','birthday_input_format'); + if(! $f) + $f = 'ymd'; $is_default = (($r[0]['is-default']) ? 1 : 0); $tpl = get_markup_template("profile_edit.tpl"); @@ -375,7 +378,7 @@ function profiles_content(&$a) { '$lbl_fullname' => t('Your Full Name:'), '$lbl_title' => t('Title/Description:'), '$lbl_gender' => t('Your Gender:'), - '$lbl_bd' => t("Birthday \x28y/m/d\x29:"), + '$lbl_bd' => sprintf( t("Birthday \x28%s\x29:"),datesel_format($f)), '$lbl_address' => t('Street Address:'), '$lbl_city' => t('Locality/City:'), '$lbl_zip' => t('Postal/Zip Code:'), @@ -466,7 +469,7 @@ function profiles_content(&$a) { '$id' => $rr['id'], '$alt' => t('Profile Image'), '$profile_name' => $rr['profile-name'], - '$visible' => (($rr['is-default']) ? '' . t('Visible to everybody') . '' + '$visible' => (($rr['is-default']) ? '' . t('visible to everybody') . '' : '' . t('Edit visibility') . '') )); } diff --git a/mod/pubsub.php b/mod/pubsub.php index edb0a7fe16..d6e3d378fc 100644 --- a/mod/pubsub.php +++ b/mod/pubsub.php @@ -111,8 +111,8 @@ function pubsub_post(&$a) { AND ( `rel` = %d OR `rel` = %d ) AND `blocked` = 0 AND `readonly` = 0 LIMIT 1", intval($contact_id), intval($importer['uid']), - intval(REL_FAN), - intval(REL_BUD) + intval(CONTACT_IS_SHARING), + intval(CONTACT_IS_FRIEND) ); if(! count($r)) { diff --git a/mod/receive.php b/mod/receive.php index 6fb68e1545..19c1639671 100644 --- a/mod/receive.php +++ b/mod/receive.php @@ -6,25 +6,14 @@ require_once('include/salmon.php'); -require_once('library/simplepie/simplepie.inc'); - -function receive_return($val) { - - if($val >= 400) - $err = 'Error'; - if($val >= 200 && $val < 300) - $err = 'OK'; - - logger('mod-diaspora returns ' . $val); - header($_SERVER["SERVER_PROTOCOL"] . ' ' . $val . ' ' . $err); - killme(); - -} +require_once('include/crypto.php'); +require_once('include/diaspora.php'); + function receive_post(&$a) { if($a->argc != 3 || $a->argv[1] !== 'users') - receive_return(500); + http_status_exit(500); $guid = $a->argv[2]; @@ -32,183 +21,51 @@ function receive_post(&$a) { dbesc($guid) ); if(! count($r)) - salmon_return(500); + http_status_exit(500); $importer = $r[0]; - $xml = $_POST['xml']; + // It is an application/x-www-form-urlencoded + + $xml = urldecode($_POST['xml']); logger('mod-diaspora: new salmon ' . $xml, LOGGER_DATA); if(! $xml) - receive_return(500); + http_status_exit(500); - // parse the xml + $msg = diaspora_decode($importer,$xml); - $dom = simplexml_load_string($xml,'SimpleXMLElement',0,NAMESPACE_SALMON_ME); + logger('mod-diaspora: decoded msg: ' . print_r($msg,true), LOGGER_DATA); - // figure out where in the DOM tree our data is hiding + if(! is_array($msg)) + http_status_exit(500); - if($dom->provenance->data) - $base = $dom->provenance; - elseif($dom->env->data) - $base = $dom->env; - elseif($dom->data) - $base = $dom; - - if(! $base) { - logger('mod-diaspora: unable to locate salmon data in xml '); - receive_return(400); + + $parsed_xml = parse_xml_string($msg['message'],false); + + $xmlbase = $parsed_xml->post; + + if($xmlbase->request) { + diaspora_request($importer,$xmlbase->request); + } + elseif($xmlbase->status_message) { + diaspora_post($importer,$xmlbase->status_message); + } + elseif($xmlbase->comment) { + diaspora_comment($importer,$xmlbase->comment,$msg); + } + elseif($xmlbase->like) { + diaspora_like($importer,$xmlbase->like,$msg); + } + elseif($xmlbase->retraction) { + diaspora_retraction($importer,$xmlbase->retraction,$msg); + } + else { + logger('mod-diaspora: unknown message type: ' . print_r($xmlbase,true)); } - // Stash the signature away for now. We have to find their key or it won't be good for anything. - $signature = base64url_decode($base->sig); - - // unpack the data - - // strip whitespace so our data element will return to one big base64 blob - $data = str_replace(array(" ","\t","\r","\n"),array("","","",""),$base->data); - - // stash away some other stuff for later - - $type = $base->data[0]->attributes()->type[0]; - $keyhash = $base->sig[0]->attributes()->keyhash[0]; - $encoding = $base->encoding; - $alg = $base->alg; - - $signed_data = $data . '.' . base64url_encode($type) . '.' . base64url_encode($encoding) . '.' . base64url_encode($alg); - - // decode the data - $data = base64url_decode($data); - - // Remove the xml declaration - $data = preg_replace('/\<\?xml[^\?].*\?\>/','',$data); - - // Create a fake feed wrapper so simplepie doesn't choke - - $tpl = get_markup_template('fake_feed.tpl'); - - $base = substr($data,strpos($data,''; - - logger('mod-diaspora: Processed feed: ' . $feedxml); - - // Now parse it like a normal atom feed to scrape out the author URI - - $feed = new SimplePie(); - $feed->set_raw_data($feedxml); - $feed->enable_order_by_date(false); - $feed->init(); - - logger('mod-diaspora: Feed parsed.'); - - if($feed->get_item_quantity()) { - foreach($feed->get_items() as $item) { - $author = $item->get_author(); - $author_link = unxmlify($author->get_link()); - break; - } - } - - if(! $author_link) { - logger('mod-diaspora: Could not retrieve author URI.'); - receive_return(400); - } - - // Once we have the author URI, go to the web and try to find their public key - - logger('mod-salmon: Fetching key for ' . $author_link ); - - - $key = get_salmon_key($author_link,$keyhash); - - if(! $key) { - logger('mod-salmon: Could not retrieve author key.'); - receive_return(400); - } - - // Setup RSA stuff to verify the signature - - set_include_path(get_include_path() . PATH_SEPARATOR . 'library' . PATH_SEPARATOR . 'phpsec'); - - require_once('library/phpsec/Crypt/RSA.php'); - - $key_info = explode('.',$key); - - $m = base64url_decode($key_info[1]); - $e = base64url_decode($key_info[2]); - - logger('mod-salmon: key details: ' . print_r($key_info,true)); - - $rsa = new CRYPT_RSA(); - $rsa->signatureMode = CRYPT_RSA_SIGNATURE_PKCS1; - $rsa->setHash('sha256'); - - $rsa->modulus = new Math_BigInteger($m, 256); - $rsa->k = strlen($rsa->modulus->toBytes()); - $rsa->exponent = new Math_BigInteger($e, 256); - - $verify = $rsa->verify($signed_data,$signature); - - if(! $verify) { - logger('mod-diaspora: Message did not verify. Discarding.'); - receive_return(400); - } - - logger('mod-diaspora: Message verified.'); - - /* decrypt the sucker */ - /* - // TODO - */ - - /* - * - * If we reached this point, the message is good. Now let's figure out if the author is allowed to send us stuff. - * - */ - - $r = q("SELECT * FROM `contact` WHERE `network` = 'dspr' AND ( `url` = '%s' OR `alias` = '%s') - AND `uid` = %d LIMIT 1", - dbesc($author_link), - dbesc($author_link), - intval($importer['uid']) - ); - if(! count($r)) { - logger('mod-diaspora: Author unknown to us.'); - } - - // is this a follower? Or have we ignored the person? - // If so we can not accept this post. - - if((count($r)) && (($r[0]['readonly']) || ($r[0]['rel'] == REL_VIP) || ($r[0]['blocked']))) { - logger('mod-diaspora: Ignoring this author.'); - receive_return(202); - // NOTREACHED - } - - require_once('include/items.php'); - - // Placeholder for hub discovery. We shouldn't find any hubs - // since we supplied the fake feed header - and it doesn't have any. - - $hub = ''; - - /** - * - * anti-spam measure: consume_feed will accept a follow activity from - * this person (and nothing else) if there is no existing contact record. - * - */ - - $contact_rec = ((count($r)) ? $r[0] : null); - - consume_feed($feedxml,$importer,$contact_rec,$hub); - - receive_return(200); + http_status_exit(200); + // NOTREACHED } - - - diff --git a/mod/redir.php b/mod/redir.php index 8d0c8f4b3a..eb9702b041 100644 --- a/mod/redir.php +++ b/mod/redir.php @@ -3,7 +3,7 @@ function redir_init(&$a) { if((! local_user()) || (! ($a->argc == 2)) || (! intval($a->argv[1]))) - goaway($a->get_baseurl()); + goaway(z_root()); $cid = $a->argv[1]; $url = ((x($_GET,'url')) ? $_GET['url'] : ''); @@ -13,7 +13,7 @@ function redir_init(&$a) { ); if((! count($r)) || ($r[0]['network'] !== 'dfrn')) - goaway($a->get_baseurl()); + goaway(z_root()); $dfrn_id = $orig_id = (($r[0]['issued-id']) ? $r[0]['issued-id'] : $r[0]['dfrn-id']); diff --git a/mod/register.php b/mod/register.php index 0906395d2d..5fceebd4bd 100644 --- a/mod/register.php +++ b/mod/register.php @@ -201,7 +201,7 @@ function register_post(&$a) { $r = q("INSERT INTO `user` ( `guid`, `username`, `password`, `email`, `openid`, `nickname`, `pubkey`, `prvkey`, `spubkey`, `sprvkey`, `register_date`, `verified`, `blocked` ) VALUES ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d )", - dbesc(generate_guid()), + dbesc(generate_user_guid()), dbesc($username), dbesc($new_password_encoded), dbesc($email), @@ -373,7 +373,7 @@ function register_post(&$a) { if($res) { info( t('Registration successful. Please check your email for further instructions.') . EOL ) ; - goaway($a->get_baseurl()); + goaway(z_root()); } else { notice( t('Failed to send email message. Here is the message that failed.') . $email_tpl . EOL ); @@ -382,7 +382,7 @@ function register_post(&$a) { elseif($a->config['register_policy'] == REGISTER_APPROVE) { if(! strlen($a->config['admin_email'])) { notice( t('Your registration can not be processed.') . EOL); - goaway($a->get_baseurl()); + goaway(z_root()); } $hash = random_string(); @@ -428,7 +428,7 @@ function register_post(&$a) { if($res) { info( t('Your registration is pending approval by the site owner.') . EOL ) ; - goaway($a->get_baseurl()); + goaway(z_root()); } } @@ -501,7 +501,7 @@ function register_content(&$a) { } - $license = t('Shared content is covered by the Creative Commons Attribution 3.0 license.'); + $license = cc_license(); $o = get_markup_template("register.tpl"); diff --git a/mod/removeme.php b/mod/removeme.php index 6a56963b6c..c181ee6ea1 100644 --- a/mod/removeme.php +++ b/mod/removeme.php @@ -29,7 +29,7 @@ function removeme_post(&$a) { function removeme_content(&$a) { if(! local_user()) - goaway($a->get_baseurl()); + goaway(z_root()); $hash = random_string(); diff --git a/mod/salmon.php b/mod/salmon.php index 56ac071b06..0264e820db 100644 --- a/mod/salmon.php +++ b/mod/salmon.php @@ -5,6 +5,7 @@ // complicated process to try and sort out. require_once('include/salmon.php'); +require_once('include/crypto.php'); require_once('library/simplepie/simplepie.inc'); function salmon_return($val) { @@ -33,7 +34,7 @@ function salmon_post(&$a) { dbesc($nick) ); if(! count($r)) - salmon_return(500); + http_status_exit(500); $importer = $r[0]; @@ -52,7 +53,7 @@ function salmon_post(&$a) { if(! $base) { logger('mod-salmon: unable to locate salmon data in xml '); - salmon_return(400); + http_status_exit(400); } // Stash the signature away for now. We have to find their key or it won't be good for anything. @@ -72,12 +73,16 @@ function salmon_post(&$a) { $encoding = $base->encoding; $alg = $base->alg; - // If we're talking to status.net or one of their ilk, they aren't following the magic envelope spec - // and only signed the data element. We'll be nice and let them validate anyway. + // Salmon magic signatures have evolved and there is no way of knowing ahead of time which + // flavour we have. We'll try and verify it regardless. $stnet_signed_data = $data; + $signed_data = $data . '.' . base64url_encode($type) . '.' . base64url_encode($encoding) . '.' . base64url_encode($alg); + $compliant_format = str_replace('=','',$signed_data); + + // decode the data $data = base64url_decode($data); @@ -113,7 +118,7 @@ function salmon_post(&$a) { if(! $author_link) { logger('mod-salmon: Could not retrieve author URI.'); - salmon_return(400); + http_status_exit(400); } // Once we have the author URI, go to the web and try to find their public key @@ -125,44 +130,35 @@ function salmon_post(&$a) { if(! $key) { logger('mod-salmon: Could not retrieve author key.'); - salmon_return(400); + http_status_exit(400); } - // Setup RSA stuff to verify the signature - - set_include_path(get_include_path() . PATH_SEPARATOR . 'library/phpsec'); - - require_once('library/phpsec/Crypt/RSA.php'); - $key_info = explode('.',$key); $m = base64url_decode($key_info[1]); $e = base64url_decode($key_info[2]); - logger('mod-salmon: key details: ' . print_r($key_info,true)); + logger('mod-salmon: key details: ' . print_r($key_info,true), LOGGER_DEBUG); - $rsa = new CRYPT_RSA(); - $rsa->signatureMode = CRYPT_RSA_SIGNATURE_PKCS1; - $rsa->setHash('sha256'); - - $rsa->modulus = new Math_BigInteger($m, 256); - $rsa->k = strlen($rsa->modulus->toBytes()); - $rsa->exponent = new Math_BigInteger($e, 256); + $pubkey = metopem($m,$e); // We should have everything we need now. Let's see if it verifies. - // If it fails with the proper data format, try again using just the data - // (e.g. status.net) - $verify = $rsa->verify($signed_data,$signature); + $verify = rsa_verify($compliant_format,$signature,$pubkey); if(! $verify) { - logger('mod-salmon: message did not verify using protocol. Trying statusnet hack.'); - $verify = $rsa->verify($stnet_signed_data,$signature); + logger('mod-salmon: message did not verify using protocol. Trying padding hack.'); + $verify = rsa_verify($signed_data,$signature,$pubkey); + } + + if(! $verify) { + logger('mod-salmon: message did not verify using padding. Trying old statusnet hack.'); + $verify = rsa_verify($stnet_signed_data,$signature,$pubkey); } if(! $verify) { logger('mod-salmon: Message did not verify. Discarding.'); - salmon_return(400); + http_status_exit(400); } logger('mod-salmon: Message verified.'); @@ -187,9 +183,9 @@ function salmon_post(&$a) { // is this a follower? Or have we ignored the person? // If so we can not accept this post. - if((count($r)) && (($r[0]['readonly']) || ($r[0]['rel'] == REL_VIP) || ($r[0]['blocked']))) { + if((count($r)) && (($r[0]['readonly']) || ($r[0]['rel'] == CONTACT_IS_FOLLOWER) || ($r[0]['blocked']))) { logger('mod-salmon: Ignoring this author.'); - salmon_return(202); + http_status_exit(202); // NOTREACHED } @@ -211,7 +207,7 @@ function salmon_post(&$a) { consume_feed($feedxml,$importer,$contact_rec,$hub); - salmon_return(200); + http_status_exit(200); } diff --git a/mod/search.php b/mod/search.php index 9b465c0e52..88ff9bbb73 100644 --- a/mod/search.php +++ b/mod/search.php @@ -91,6 +91,7 @@ function search_content(&$a) { $o .= conversation($a,$r,'search',false); $o .= paginate($a); + $o .= cc_license(); return $o; } diff --git a/mod/wall_attach.php b/mod/wall_attach.php index f18fd10b74..ef6554df39 100644 --- a/mod/wall_attach.php +++ b/mod/wall_attach.php @@ -60,11 +60,11 @@ function wall_attach_post(&$a) { } $filedata = @file_get_contents($src); - - $mimetype = mime_content_type($src); + $mimetype = z_mime_content_type($filename); + if((! strlen($mimetype)) || ($mimetype === 'application/octet-stream') && function_exists('mime_content_type')) + $mimetype = mime_content_type($filename); $hash = random_string(); $created = datetime_convert(); - $r = q("INSERT INTO `attach` ( `uid`, `hash`, `filename`, `filetype`, `filesize`, `data`, `created`, `edited`, `allow_cid`, `allow_gid`,`deny_cid`, `deny_gid` ) VALUES ( %d, '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ", intval($page_owner_uid), diff --git a/mod/webfinger.php b/mod/webfinger.php index f6d6026b40..74bd2c9543 100644 --- a/mod/webfinger.php +++ b/mod/webfinger.php @@ -23,4 +23,4 @@ function webfinger_content(&$a) { $o .= ''; } return $o; -} \ No newline at end of file +} diff --git a/mod/xrd.php b/mod/xrd.php index accc2f68ef..fcec74336e 100644 --- a/mod/xrd.php +++ b/mod/xrd.php @@ -1,8 +1,8 @@ $a->get_baseurl(), '$dspr_guid' => $r[0]['guid'], - '$dspr_key' => base64_encode($r[0]['pubkey']) + '$dspr_key' => base64_encode(pemtorsa($r[0]['pubkey'])) )); } else $dspr = ''; - $tpl = file_get_contents('view/xrd_person.tpl'); $o = replace_macros($tpl, array( '$accturi' => $uri, '$profile_url' => $a->get_baseurl() . '/profile/' . $r[0]['nickname'], + '$hcard_url' => $a->get_baseurl() . '/hcard/' . $r[0]['nickname'], '$atom' => $a->get_baseurl() . '/dfrn_poll/' . $r[0]['nickname'], '$photo' => $a->get_baseurl() . '/photo/profile/' . $r[0]['uid'] . '.jpg', '$dspr' => $dspr, @@ -58,7 +56,7 @@ function xrd_content(&$a) { $arr = array('user' => $r[0], 'xml' => $o); call_hooks('personal_xrd', $arr); - echo $o; + echo $arr['xml']; killme(); } diff --git a/update.php b/update.php index 9c55f15cf5..256ab48e81 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ \n" "Language-Team: LANGUAGE \n" @@ -30,26 +30,27 @@ msgid "Contact update failed." msgstr "" #: ../../mod/crepair.php:54 ../../mod/wall_attach.php:43 -#: ../../mod/photos.php:89 ../../mod/photos.php:802 ../../mod/editpost.php:10 -#: ../../mod/install.php:93 ../../mod/notifications.php:56 -#: ../../mod/contacts.php:106 ../../mod/settings.php:15 -#: ../../mod/settings.php:20 ../../mod/settings.php:251 -#: ../../mod/manage.php:75 ../../mod/network.php:6 ../../mod/notes.php:20 -#: ../../mod/attach.php:64 ../../mod/group.php:19 +#: ../../mod/fsuggest.php:78 ../../mod/events.php:102 ../../mod/photos.php:122 +#: ../../mod/photos.php:849 ../../mod/editpost.php:10 ../../mod/install.php:96 +#: ../../mod/notifications.php:62 ../../mod/contacts.php:132 +#: ../../mod/settings.php:41 ../../mod/settings.php:46 +#: ../../mod/settings.php:305 ../../mod/manage.php:75 ../../mod/network.php:6 +#: ../../mod/notes.php:20 ../../mod/attach.php:33 ../../mod/group.php:19 #: ../../mod/viewcontacts.php:21 ../../mod/register.php:27 -#: ../../mod/regmod.php:18 ../../mod/item.php:57 ../../mod/item.php:801 +#: ../../mod/regmod.php:111 ../../mod/item.php:110 #: ../../mod/profile_photo.php:19 ../../mod/profile_photo.php:133 #: ../../mod/profile_photo.php:144 ../../mod/profile_photo.php:155 -#: ../../mod/message.php:8 ../../mod/message.php:116 +#: ../../mod/message.php:8 ../../mod/message.php:116 ../../mod/admin.php:10 #: ../../mod/wall_upload.php:42 ../../mod/follow.php:8 -#: ../../mod/display.php:138 ../../mod/profiles.php:7 -#: ../../mod/profiles.php:230 ../../mod/invite.php:13 ../../mod/invite.php:54 -#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:242 -#: ../../index.php:256 +#: ../../mod/display.php:108 ../../mod/profiles.php:7 +#: ../../mod/profiles.php:226 ../../mod/invite.php:13 ../../mod/invite.php:81 +#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:308 +#: ../../include/items.php:1930 ../../index.php:266 msgid "Permission denied." msgstr "" -#: ../../mod/crepair.php:68 ../../mod/contacts.php:214 +#: ../../mod/crepair.php:68 ../../mod/fsuggest.php:20 +#: ../../mod/fsuggest.php:92 ../../mod/contacts.php:240 #: ../../mod/dfrn_confirm.php:114 msgid "Contact not found." msgstr "" @@ -70,7 +71,7 @@ msgid "" "uncertain what to do on this page." msgstr "" -#: ../../mod/crepair.php:85 +#: ../../mod/crepair.php:85 ../../mod/admin.php:464 ../../mod/admin.php:473 msgid "Name" msgstr "" @@ -98,20 +99,25 @@ msgstr "" msgid "Poll/Feed URL" msgstr "" -#: ../../mod/crepair.php:100 ../../mod/photos.php:830 ../../mod/photos.php:887 -#: ../../mod/photos.php:1095 ../../mod/photos.php:1135 -#: ../../mod/photos.php:1174 ../../mod/photos.php:1205 -#: ../../mod/install.php:133 ../../mod/contacts.php:264 -#: ../../mod/settings.php:426 ../../mod/manage.php:106 ../../mod/group.php:76 -#: ../../mod/group.php:159 ../../mod/profiles.php:383 ../../mod/invite.php:68 -#: ../../addon/facebook/facebook.php:289 -#: ../../addon/randplace/randplace.php:179 ../../addon/oembed/oembed.php:49 -#: ../../addon/statusnet/statusnet.php:216 -#: ../../addon/statusnet/statusnet.php:230 -#: ../../addon/statusnet/statusnet.php:256 -#: ../../addon/statusnet/statusnet.php:263 -#: ../../addon/statusnet/statusnet.php:285 ../../addon/twitter/twitter.php:156 -#: ../../addon/twitter/twitter.php:175 ../../include/conversation.php:383 +#: ../../mod/crepair.php:100 ../../mod/fsuggest.php:107 +#: ../../mod/events.php:333 ../../mod/photos.php:877 ../../mod/photos.php:934 +#: ../../mod/photos.php:1144 ../../mod/photos.php:1184 +#: ../../mod/photos.php:1223 ../../mod/photos.php:1254 +#: ../../mod/install.php:137 ../../mod/contacts.php:296 +#: ../../mod/settings.php:482 ../../mod/manage.php:106 ../../mod/group.php:84 +#: ../../mod/group.php:167 ../../mod/admin.php:298 ../../mod/admin.php:461 +#: ../../mod/admin.php:587 ../../mod/admin.php:652 ../../mod/profiles.php:372 +#: ../../mod/invite.php:106 ../../addon/facebook/facebook.php:366 +#: ../../addon/randplace/randplace.php:178 +#: ../../addon/impressum/impressum.php:69 ../../addon/oembed/oembed.php:41 +#: ../../addon/statusnet/statusnet.php:274 +#: ../../addon/statusnet/statusnet.php:288 +#: ../../addon/statusnet/statusnet.php:314 +#: ../../addon/statusnet/statusnet.php:321 +#: ../../addon/statusnet/statusnet.php:343 +#: ../../addon/statusnet/statusnet.php:468 ../../addon/piwik/piwik.php:76 +#: ../../addon/twitter/twitter.php:171 ../../addon/twitter/twitter.php:194 +#: ../../addon/twitter/twitter.php:280 ../../include/conversation.php:409 msgid "Submit" msgstr "" @@ -132,8 +138,112 @@ msgstr "" msgid "File upload failed." msgstr "" +#: ../../mod/fsuggest.php:63 +msgid "Friend suggestion sent." +msgstr "" + +#: ../../mod/fsuggest.php:97 +msgid "Suggest Friends" +msgstr "" + +#: ../../mod/fsuggest.php:99 +#, php-format +msgid "Suggest a friend for %s" +msgstr "" + +#: ../../mod/events.php:112 ../../mod/photos.php:834 ../../mod/notes.php:46 +#: ../../mod/profile.php:116 +msgid "Status" +msgstr "" + +#: ../../mod/events.php:113 ../../mod/photos.php:835 ../../mod/notes.php:47 +#: ../../mod/profperm.php:103 ../../mod/profile.php:117 +#: ../../include/profile_advanced.php:7 +msgid "Profile" +msgstr "" + +#: ../../mod/events.php:114 ../../mod/photos.php:836 ../../mod/notes.php:48 +#: ../../mod/profile.php:118 +msgid "Photos" +msgstr "" + +#: ../../mod/events.php:115 ../../mod/events.php:120 ../../mod/photos.php:837 +#: ../../mod/notes.php:49 ../../mod/profile.php:119 +msgid "Events" +msgstr "" + +#: ../../mod/events.php:116 ../../mod/photos.php:838 ../../mod/notes.php:50 +#: ../../mod/notes.php:55 ../../mod/profile.php:120 +msgid "Personal Notes" +msgstr "" + +#: ../../mod/events.php:210 +msgid "Create New Event" +msgstr "" + +#: ../../mod/events.php:213 +msgid "Previous" +msgstr "" + +#: ../../mod/events.php:216 +msgid "Next" +msgstr "" + +#: ../../mod/events.php:223 +msgid "l, F j" +msgstr "" + +#: ../../mod/events.php:235 +msgid "Edit event" +msgstr "" + +#: ../../mod/events.php:237 ../../include/text.php:846 +msgid "link to source" +msgstr "" + +#: ../../mod/events.php:305 +msgid "hour:minute" +msgstr "" + +#: ../../mod/events.php:314 +msgid "Event details" +msgstr "" + +#: ../../mod/events.php:315 +#, php-format +msgid "Format is %s %s. Starting date and Description are required." +msgstr "" + +#: ../../mod/events.php:316 +msgid "Event Starts:" +msgstr "" + +#: ../../mod/events.php:319 +msgid "Finish date/time is not known or not relevant" +msgstr "" + +#: ../../mod/events.php:321 +msgid "Event Finishes:" +msgstr "" + +#: ../../mod/events.php:324 +msgid "Adjust for viewer timezone" +msgstr "" + +#: ../../mod/events.php:326 +msgid "Description:" +msgstr "" + +#: ../../mod/events.php:328 ../../include/event.php:37 ../../boot.php:868 +msgid "Location:" +msgstr "" + +#: ../../mod/events.php:330 +msgid "Share this event" +msgstr "" + #: ../../mod/tagrm.php:11 ../../mod/tagrm.php:94 -#: ../../mod/dfrn_request.php:644 ../../addon/js_upload/js_upload.php:41 +#: ../../mod/dfrn_request.php:644 ../../addon/js_upload/js_upload.php:45 msgid "Cancel" msgstr "" @@ -158,204 +268,225 @@ msgstr "" msgid "%s welcomes %s" msgstr "" -#: ../../mod/photos.php:34 +#: ../../mod/photos.php:37 msgid "Photo Albums" msgstr "" -#: ../../mod/photos.php:38 ../../mod/photos.php:110 ../../mod/photos.php:810 -#: ../../mod/photos.php:879 ../../mod/photos.php:894 ../../mod/photos.php:1282 -#: ../../mod/photos.php:1293 ../../include/Photo.php:233 -#: ../../include/Photo.php:240 ../../include/Photo.php:247 -#: ../../include/items.php:1041 ../../include/items.php:1044 -#: ../../include/items.php:1047 +#: ../../mod/photos.php:45 ../../mod/photos.php:143 ../../mod/photos.php:857 +#: ../../mod/photos.php:926 ../../mod/photos.php:941 ../../mod/photos.php:1332 +#: ../../mod/photos.php:1344 msgid "Contact Photos" msgstr "" -#: ../../mod/photos.php:99 +#: ../../mod/photos.php:57 ../../mod/settings.php:9 +msgid "everybody" +msgstr "" + +#: ../../mod/photos.php:132 msgid "Contact information unavailable" msgstr "" -#: ../../mod/photos.php:110 ../../mod/photos.php:535 ../../mod/photos.php:879 -#: ../../mod/photos.php:894 ../../mod/register.php:290 -#: ../../mod/register.php:297 ../../mod/register.php:304 +#: ../../mod/photos.php:143 ../../mod/photos.php:577 ../../mod/photos.php:926 +#: ../../mod/photos.php:941 ../../mod/register.php:316 +#: ../../mod/register.php:323 ../../mod/register.php:330 #: ../../mod/profile_photo.php:58 ../../mod/profile_photo.php:65 #: ../../mod/profile_photo.php:72 ../../mod/profile_photo.php:160 #: ../../mod/profile_photo.php:236 ../../mod/profile_photo.php:245 msgid "Profile Photos" msgstr "" -#: ../../mod/photos.php:120 +#: ../../mod/photos.php:153 msgid "Album not found." msgstr "" -#: ../../mod/photos.php:138 ../../mod/photos.php:888 +#: ../../mod/photos.php:171 ../../mod/photos.php:935 msgid "Delete Album" msgstr "" -#: ../../mod/photos.php:201 ../../mod/photos.php:1096 +#: ../../mod/photos.php:234 ../../mod/photos.php:1145 msgid "Delete Photo" msgstr "" -#: ../../mod/photos.php:473 +#: ../../mod/photos.php:508 msgid "was tagged in a" msgstr "" -#: ../../mod/photos.php:473 ../../mod/like.php:110 -#: ../../include/conversation.php:20 +#: ../../mod/photos.php:508 ../../mod/like.php:110 +#: ../../include/diaspora.php:446 ../../include/conversation.php:31 msgid "photo" msgstr "" -#: ../../mod/photos.php:473 +#: ../../mod/photos.php:508 msgid "by" msgstr "" -#: ../../mod/photos.php:563 ../../addon/js_upload/js_upload.php:306 +#: ../../mod/photos.php:608 ../../addon/js_upload/js_upload.php:310 msgid "Image exceeds size limit of " msgstr "" -#: ../../mod/photos.php:577 ../../mod/profile_photo.php:118 +#: ../../mod/photos.php:616 +msgid "Image file is empty." +msgstr "" + +#: ../../mod/photos.php:630 ../../mod/profile_photo.php:118 #: ../../mod/wall_upload.php:65 msgid "Unable to process image." msgstr "" -#: ../../mod/photos.php:597 ../../mod/profile_photo.php:241 -#: ../../mod/wall_upload.php:82 +#: ../../mod/photos.php:650 ../../mod/profile_photo.php:241 +#: ../../mod/wall_upload.php:84 msgid "Image upload failed." msgstr "" -#: ../../mod/photos.php:680 ../../mod/dfrn_request.php:591 -#: ../../mod/viewcontacts.php:16 ../../mod/display.php:7 -#: ../../mod/search.php:13 ../../mod/directory.php:20 +#: ../../mod/photos.php:733 ../../mod/community.php:9 +#: ../../mod/dfrn_request.php:591 ../../mod/viewcontacts.php:16 +#: ../../mod/display.php:7 ../../mod/search.php:13 ../../mod/directory.php:20 msgid "Public access denied." msgstr "" -#: ../../mod/photos.php:690 +#: ../../mod/photos.php:743 msgid "No photos selected" msgstr "" -#: ../../mod/photos.php:837 +#: ../../mod/photos.php:820 +msgid "Access to this item is restricted." +msgstr "" + +#: ../../mod/photos.php:884 msgid "Upload Photos" msgstr "" -#: ../../mod/photos.php:840 ../../mod/photos.php:883 +#: ../../mod/photos.php:887 ../../mod/photos.php:930 msgid "New album name: " msgstr "" -#: ../../mod/photos.php:841 +#: ../../mod/photos.php:888 msgid "or existing album name: " msgstr "" -#: ../../mod/photos.php:843 ../../mod/photos.php:1091 +#: ../../mod/photos.php:890 ../../mod/photos.php:1140 msgid "Permissions" msgstr "" -#: ../../mod/photos.php:898 +#: ../../mod/photos.php:945 msgid "Edit Album" msgstr "" -#: ../../mod/photos.php:908 ../../mod/photos.php:1311 +#: ../../mod/photos.php:955 ../../mod/photos.php:1362 msgid "View Photo" msgstr "" -#: ../../mod/photos.php:937 +#: ../../mod/photos.php:984 msgid "Photo not available" msgstr "" -#: ../../mod/photos.php:986 +#: ../../mod/photos.php:1033 msgid "Edit photo" msgstr "" -#: ../../mod/photos.php:987 +#: ../../mod/photos.php:1034 msgid "Use as profile photo" msgstr "" -#: ../../mod/photos.php:993 ../../include/conversation.php:316 +#: ../../mod/photos.php:1040 ../../include/conversation.php:342 msgid "Private Message" msgstr "" -#: ../../mod/photos.php:1000 -msgid "<< Prev" -msgstr "" - -#: ../../mod/photos.php:1004 +#: ../../mod/photos.php:1051 msgid "View Full Size" msgstr "" -#: ../../mod/photos.php:1009 -msgid "Next >>" -msgstr "" - -#: ../../mod/photos.php:1071 +#: ../../mod/photos.php:1119 msgid "Tags: " msgstr "" -#: ../../mod/photos.php:1074 +#: ../../mod/photos.php:1122 msgid "[Remove any tag]" msgstr "" -#: ../../mod/photos.php:1084 +#: ../../mod/photos.php:1133 msgid "New album name" msgstr "" -#: ../../mod/photos.php:1087 +#: ../../mod/photos.php:1136 msgid "Caption" msgstr "" -#: ../../mod/photos.php:1089 +#: ../../mod/photos.php:1138 msgid "Add a Tag" msgstr "" -#: ../../mod/photos.php:1093 +#: ../../mod/photos.php:1142 msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "" -#: ../../mod/photos.php:1113 ../../include/conversation.php:364 +#: ../../mod/photos.php:1162 ../../include/conversation.php:390 msgid "I like this (toggle)" msgstr "" -#: ../../mod/photos.php:1114 ../../include/conversation.php:365 +#: ../../mod/photos.php:1163 ../../include/conversation.php:391 msgid "I don't like this (toggle)" msgstr "" -#: ../../mod/photos.php:1115 ../../include/conversation.php:366 -#: ../../include/conversation.php:731 +#: ../../mod/photos.php:1164 ../../include/conversation.php:392 +#: ../../include/conversation.php:746 msgid "Share" msgstr "" -#: ../../mod/photos.php:1116 ../../mod/editpost.php:97 +#: ../../mod/photos.php:1165 ../../mod/editpost.php:99 #: ../../mod/message.php:190 ../../mod/message.php:324 -#: ../../include/conversation.php:367 ../../include/conversation.php:741 +#: ../../include/conversation.php:393 ../../include/conversation.php:756 msgid "Please wait" msgstr "" -#: ../../mod/photos.php:1132 ../../mod/photos.php:1171 -#: ../../mod/photos.php:1202 ../../include/conversation.php:380 +#: ../../mod/photos.php:1181 ../../mod/photos.php:1220 +#: ../../mod/photos.php:1251 ../../include/conversation.php:406 msgid "This is you" msgstr "" -#: ../../mod/photos.php:1134 ../../mod/photos.php:1173 -#: ../../mod/photos.php:1204 ../../include/conversation.php:382 -#: ../../boot.php:386 +#: ../../mod/photos.php:1183 ../../mod/photos.php:1222 +#: ../../mod/photos.php:1253 ../../include/conversation.php:408 +#: ../../boot.php:411 msgid "Comment" msgstr "" -#: ../../mod/photos.php:1232 ../../mod/group.php:146 -#: ../../include/conversation.php:179 ../../include/conversation.php:393 +#: ../../mod/photos.php:1281 ../../mod/group.php:154 ../../mod/admin.php:468 +#: ../../include/conversation.php:427 msgid "Delete" msgstr "" -#: ../../mod/photos.php:1298 +#: ../../mod/photos.php:1349 msgid "Recent Photos" msgstr "" -#: ../../mod/photos.php:1302 +#: ../../mod/photos.php:1353 msgid "Upload New Photos" msgstr "" -#: ../../mod/photos.php:1315 +#: ../../mod/photos.php:1366 msgid "View Album" msgstr "" +#: ../../mod/community.php:14 +msgid "Not available." +msgstr "" + +#: ../../mod/community.php:26 ../../include/nav.php:79 +msgid "Community" +msgstr "" + +#: ../../mod/community.php:56 ../../mod/search.php:65 +msgid "No results." +msgstr "" + +#: ../../mod/community.php:83 ../../mod/network.php:302 +#: ../../mod/register.php:504 ../../mod/profile.php:241 +#: ../../mod/display.php:117 +msgid "" +"Shared content is covered by the Creative Commons Attribution 3.0 license." +msgstr "" + #: ../../mod/editpost.php:17 ../../mod/editpost.php:27 msgid "Item not found" msgstr "" @@ -364,62 +495,62 @@ msgstr "" msgid "Edit post" msgstr "" -#: ../../mod/editpost.php:75 ../../include/conversation.php:717 +#: ../../mod/editpost.php:75 ../../include/conversation.php:732 msgid "Post to Email" msgstr "" -#: ../../mod/editpost.php:88 ../../include/group.php:169 -#: ../../include/conversation.php:391 +#: ../../mod/editpost.php:90 ../../include/group.php:171 +#: ../../include/group.php:172 ../../include/conversation.php:417 msgid "Edit" msgstr "" -#: ../../mod/editpost.php:89 ../../mod/message.php:188 -#: ../../mod/message.php:322 ../../include/conversation.php:732 +#: ../../mod/editpost.php:91 ../../mod/message.php:188 +#: ../../mod/message.php:322 ../../include/conversation.php:747 msgid "Upload photo" msgstr "" -#: ../../mod/editpost.php:90 ../../include/conversation.php:733 +#: ../../mod/editpost.php:92 ../../include/conversation.php:748 msgid "Attach file" msgstr "" -#: ../../mod/editpost.php:91 ../../mod/message.php:189 -#: ../../mod/message.php:323 ../../include/conversation.php:734 +#: ../../mod/editpost.php:93 ../../mod/message.php:189 +#: ../../mod/message.php:323 ../../include/conversation.php:749 msgid "Insert web link" msgstr "" -#: ../../mod/editpost.php:92 ../../include/conversation.php:735 +#: ../../mod/editpost.php:94 ../../include/conversation.php:750 msgid "Insert YouTube video" msgstr "" -#: ../../mod/editpost.php:93 ../../include/conversation.php:736 +#: ../../mod/editpost.php:95 ../../include/conversation.php:751 msgid "Insert Vorbis [.ogg] video" msgstr "" -#: ../../mod/editpost.php:94 ../../include/conversation.php:737 +#: ../../mod/editpost.php:96 ../../include/conversation.php:752 msgid "Insert Vorbis [.ogg] audio" msgstr "" -#: ../../mod/editpost.php:95 ../../include/conversation.php:738 +#: ../../mod/editpost.php:97 ../../include/conversation.php:753 msgid "Set your location" msgstr "" -#: ../../mod/editpost.php:96 ../../include/conversation.php:739 +#: ../../mod/editpost.php:98 ../../include/conversation.php:754 msgid "Clear browser location" msgstr "" -#: ../../mod/editpost.php:98 ../../include/conversation.php:742 +#: ../../mod/editpost.php:100 ../../include/conversation.php:757 msgid "Permission settings" msgstr "" -#: ../../mod/editpost.php:106 ../../include/conversation.php:750 +#: ../../mod/editpost.php:108 ../../include/conversation.php:765 msgid "CC: email addresses" msgstr "" -#: ../../mod/editpost.php:107 ../../include/conversation.php:751 +#: ../../mod/editpost.php:109 ../../include/conversation.php:766 msgid "Public post" msgstr "" -#: ../../mod/editpost.php:109 ../../include/conversation.php:753 +#: ../../mod/editpost.php:111 ../../include/conversation.php:768 msgid "Example: bob@example.com, mary@example.com" msgstr "" @@ -496,7 +627,7 @@ msgstr "" msgid "Disallowed profile URL." msgstr "" -#: ../../mod/dfrn_request.php:406 ../../mod/contacts.php:90 +#: ../../mod/dfrn_request.php:406 ../../mod/contacts.php:116 msgid "Failed to update contact record." msgstr "" @@ -528,7 +659,7 @@ msgstr "" msgid "Confirm" msgstr "" -#: ../../mod/dfrn_request.php:542 ../../include/items.php:1440 +#: ../../mod/dfrn_request.php:542 ../../include/items.php:1519 msgid "[Name Withheld]" msgstr "" @@ -536,11 +667,11 @@ msgstr "" msgid "Introduction received at " msgstr "" -#: ../../mod/dfrn_request.php:551 ../../mod/lostpass.php:40 -#: ../../mod/lostpass.php:102 ../../mod/register.php:335 -#: ../../mod/register.php:385 ../../mod/regmod.php:98 -#: ../../mod/dfrn_notify.php:191 ../../mod/dfrn_notify.php:443 -#: ../../mod/dfrn_confirm.php:658 ../../include/items.php:1449 +#: ../../mod/dfrn_request.php:551 ../../mod/lostpass.php:44 +#: ../../mod/lostpass.php:106 ../../mod/register.php:369 +#: ../../mod/register.php:423 ../../mod/regmod.php:54 +#: ../../mod/dfrn_notify.php:291 ../../mod/dfrn_notify.php:547 +#: ../../mod/dfrn_confirm.php:674 ../../include/items.php:1528 msgid "Administrator" msgstr "" @@ -559,18 +690,21 @@ msgid "Please answer the following:" msgstr "" #: ../../mod/dfrn_request.php:633 -msgid "Does $name know you?" +#, php-format +msgid "Does %s know you?" msgstr "" -#: ../../mod/dfrn_request.php:634 ../../mod/settings.php:350 -#: ../../mod/settings.php:362 ../../mod/register.php:459 -#: ../../mod/profiles.php:358 ../../mod/profiles.php:367 +#: ../../mod/dfrn_request.php:634 ../../mod/settings.php:415 +#: ../../mod/settings.php:421 ../../mod/settings.php:429 +#: ../../mod/settings.php:433 ../../mod/register.php:498 +#: ../../mod/profiles.php:354 msgid "Yes" msgstr "" -#: ../../mod/dfrn_request.php:635 ../../mod/settings.php:351 -#: ../../mod/settings.php:363 ../../mod/register.php:460 -#: ../../mod/profiles.php:359 ../../mod/profiles.php:368 +#: ../../mod/dfrn_request.php:635 ../../mod/settings.php:415 +#: ../../mod/settings.php:421 ../../mod/settings.php:429 +#: ../../mod/settings.php:433 ../../mod/register.php:499 +#: ../../mod/profiles.php:355 msgid "No" msgstr "" @@ -608,188 +742,208 @@ msgstr "" msgid "Submit Request" msgstr "" -#: ../../mod/install.php:33 +#: ../../mod/install.php:34 msgid "Could not create/connect to database." msgstr "" -#: ../../mod/install.php:38 +#: ../../mod/install.php:39 msgid "Connected to database." msgstr "" -#: ../../mod/install.php:72 +#: ../../mod/install.php:75 msgid "Proceed with Installation" msgstr "" -#: ../../mod/install.php:74 +#: ../../mod/install.php:77 msgid "Your Friendika site database has been installed." msgstr "" -#: ../../mod/install.php:75 +#: ../../mod/install.php:78 msgid "" "IMPORTANT: You will need to [manually] setup a scheduled task for the poller." msgstr "" -#: ../../mod/install.php:76 ../../mod/install.php:86 ../../mod/install.php:199 +#: ../../mod/install.php:79 ../../mod/install.php:89 ../../mod/install.php:207 msgid "Please see the file \"INSTALL.txt\"." msgstr "" -#: ../../mod/install.php:78 +#: ../../mod/install.php:81 msgid "Proceed to registration" msgstr "" -#: ../../mod/install.php:84 +#: ../../mod/install.php:87 msgid "Database import failed." msgstr "" -#: ../../mod/install.php:85 +#: ../../mod/install.php:88 msgid "" "You may need to import the file \"database.sql\" manually using phpmyadmin " "or mysql." msgstr "" -#: ../../mod/install.php:98 +#: ../../mod/install.php:101 msgid "Welcome to Friendika." msgstr "" -#: ../../mod/install.php:121 +#: ../../mod/install.php:124 msgid "Friendika Social Network" msgstr "" -#: ../../mod/install.php:122 +#: ../../mod/install.php:125 msgid "Installation" msgstr "" -#: ../../mod/install.php:123 +#: ../../mod/install.php:126 msgid "" -"In order to install Friendika we need to know how to contact your database." +"In order to install Friendika we need to know how to connect to your " +"database." msgstr "" -#: ../../mod/install.php:124 +#: ../../mod/install.php:127 msgid "" "Please contact your hosting provider or site administrator if you have " "questions about these settings." msgstr "" -#: ../../mod/install.php:125 +#: ../../mod/install.php:128 msgid "" -"The database you specify below must already exist. If it does not, please " +"The database you specify below should already exist. If it does not, please " "create it before continuing." msgstr "" -#: ../../mod/install.php:126 +#: ../../mod/install.php:129 msgid "Database Server Name" msgstr "" -#: ../../mod/install.php:127 +#: ../../mod/install.php:130 msgid "Database Login Name" msgstr "" -#: ../../mod/install.php:128 +#: ../../mod/install.php:131 msgid "Database Login Password" msgstr "" -#: ../../mod/install.php:129 +#: ../../mod/install.php:132 msgid "Database Name" msgstr "" -#: ../../mod/install.php:130 +#: ../../mod/install.php:133 msgid "Please select a default timezone for your website" msgstr "" -#: ../../mod/install.php:148 +#: ../../mod/install.php:134 +msgid "" +"Site administrator email address. Your account email address must match this " +"in order to use the web admin panel." +msgstr "" + +#: ../../mod/install.php:153 msgid "Could not find a command line version of PHP in the web server PATH." msgstr "" -#: ../../mod/install.php:149 +#: ../../mod/install.php:154 msgid "" "This is required. Please adjust the configuration file .htconfig.php " "accordingly." msgstr "" -#: ../../mod/install.php:156 +#: ../../mod/install.php:161 msgid "" "The command line version of PHP on your system does not have " "\"register_argc_argv\" enabled." msgstr "" -#: ../../mod/install.php:157 +#: ../../mod/install.php:162 msgid "This is required for message delivery to work." msgstr "" -#: ../../mod/install.php:179 +#: ../../mod/install.php:184 msgid "" "Error: the \"openssl_pkey_new\" function on this system is not able to " "generate encryption keys" msgstr "" -#: ../../mod/install.php:180 +#: ../../mod/install.php:185 msgid "" "If running under Windows, please see \"http://www.php.net/manual/en/openssl." "installation.php\"." msgstr "" -#: ../../mod/install.php:189 +#: ../../mod/install.php:194 msgid "" "Error: Apache webserver mod-rewrite module is required but not installed." msgstr "" -#: ../../mod/install.php:191 +#: ../../mod/install.php:196 msgid "Error: libCURL PHP module required but not installed." msgstr "" -#: ../../mod/install.php:193 +#: ../../mod/install.php:198 msgid "" "Error: GD graphics PHP module with JPEG support required but not installed." msgstr "" -#: ../../mod/install.php:195 +#: ../../mod/install.php:200 msgid "Error: openssl PHP module required but not installed." msgstr "" -#: ../../mod/install.php:197 +#: ../../mod/install.php:202 msgid "Error: mysqli PHP module required but not installed." msgstr "" -#: ../../mod/install.php:208 +#: ../../mod/install.php:204 +msgid "Error: mb_string PHP module required but not installed." +msgstr "" + +#: ../../mod/install.php:216 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:209 +#: ../../mod/install.php:217 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:210 +#: ../../mod/install.php:218 msgid "" "Please check with your site documentation or support people to see if this " "situation can be corrected." msgstr "" -#: ../../mod/install.php:211 +#: ../../mod/install.php:219 msgid "" "If not, you may be required to perform a manual installation. Please see the " "file \"INSTALL.txt\" for instructions." msgstr "" -#: ../../mod/install.php:220 +#: ../../mod/install.php:228 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:235 +#: ../../mod/install.php:243 msgid "Errors encountered creating database tables." msgstr "" +#: ../../mod/update_community.php:18 ../../mod/update_network.php:22 +#: ../../mod/update_profile.php:41 +msgid "[Embedded content - reload page to view]" +msgstr "" + #: ../../mod/match.php:10 msgid "Profile Match" msgstr "" -#: ../../mod/match.php:50 +#: ../../mod/match.php:18 +msgid "No keywords to match. Please add keywords to your default profile." +msgstr "" + +#: ../../mod/match.php:54 msgid "No matches" msgstr "" @@ -806,628 +960,669 @@ msgstr "" msgid "Welcome to %s" msgstr "" -#: ../../mod/notifications.php:28 +#: ../../mod/notifications.php:26 msgid "Invalid request identifier." msgstr "" -#: ../../mod/notifications.php:31 ../../mod/notifications.php:133 +#: ../../mod/notifications.php:35 ../../mod/notifications.php:118 +#: ../../mod/notifications.php:162 msgid "Discard" msgstr "" -#: ../../mod/notifications.php:41 ../../mod/notifications.php:132 +#: ../../mod/notifications.php:47 ../../mod/notifications.php:117 +#: ../../mod/notifications.php:161 msgid "Ignore" msgstr "" -#: ../../mod/notifications.php:68 +#: ../../mod/notifications.php:74 msgid "Pending Friend/Connect Notifications" msgstr "" -#: ../../mod/notifications.php:72 +#: ../../mod/notifications.php:78 msgid "Show Ignored Requests" msgstr "" -#: ../../mod/notifications.php:72 +#: ../../mod/notifications.php:78 msgid "Hide Ignored Requests" msgstr "" -#: ../../mod/notifications.php:104 -msgid "Claims to be known to you: " -msgstr "" - -#: ../../mod/notifications.php:104 -msgid "yes" -msgstr "" - -#: ../../mod/notifications.php:104 -msgid "no" -msgstr "" - -#: ../../mod/notifications.php:110 -msgid "Approve as: " -msgstr "" - -#: ../../mod/notifications.php:111 -msgid "Friend" -msgstr "" - -#: ../../mod/notifications.php:112 -msgid "Fan/Admirer" -msgstr "" - -#: ../../mod/notifications.php:119 +#: ../../mod/notifications.php:105 ../../mod/notifications.php:148 msgid "Notification type: " msgstr "" -#: ../../mod/notifications.php:120 -msgid "Friend/Connect Request" +#: ../../mod/notifications.php:106 +msgid "Friend Suggestion" msgstr "" -#: ../../mod/notifications.php:120 -msgid "New Follower" +#: ../../mod/notifications.php:108 +#, php-format +msgid "suggested by %s" msgstr "" -#: ../../mod/notifications.php:130 ../../mod/notifications.php:153 +#: ../../mod/notifications.php:114 ../../mod/notifications.php:159 +#: ../../mod/admin.php:466 msgid "Approve" msgstr "" +#: ../../mod/notifications.php:133 +msgid "Claims to be known to you: " +msgstr "" + +#: ../../mod/notifications.php:133 +msgid "yes" +msgstr "" + +#: ../../mod/notifications.php:133 +msgid "no" +msgstr "" + #: ../../mod/notifications.php:139 +msgid "Approve as: " +msgstr "" + +#: ../../mod/notifications.php:140 +msgid "Friend" +msgstr "" + +#: ../../mod/notifications.php:141 +msgid "Fan/Admirer" +msgstr "" + +#: ../../mod/notifications.php:149 +msgid "Friend/Connect Request" +msgstr "" + +#: ../../mod/notifications.php:149 +msgid "New Follower" +msgstr "" + +#: ../../mod/notifications.php:168 msgid "No notifications." msgstr "" -#: ../../mod/notifications.php:143 -msgid "User registrations waiting for confirm" -msgstr "" - -#: ../../mod/notifications.php:154 -msgid "Deny" -msgstr "" - -#: ../../mod/notifications.php:159 -msgid "No registrations." -msgstr "" - -#: ../../mod/contacts.php:12 +#: ../../mod/contacts.php:26 msgid "Invite Friends" msgstr "" -#: ../../mod/contacts.php:15 +#: ../../mod/contacts.php:32 +#, php-format +msgid "%d invitation available" +msgid_plural "%d invitations available" +msgstr[0] "" +msgstr[1] "" + +#: ../../mod/contacts.php:41 msgid "Find People With Shared Interests" msgstr "" -#: ../../mod/contacts.php:19 +#: ../../mod/contacts.php:45 msgid "Connect/Follow" msgstr "" -#: ../../mod/contacts.php:20 +#: ../../mod/contacts.php:46 msgid "Example: bob@example.com, http://example.com/barbara" msgstr "" -#: ../../mod/contacts.php:21 +#: ../../mod/contacts.php:47 msgid "Follow" msgstr "" -#: ../../mod/contacts.php:43 ../../mod/contacts.php:124 +#: ../../mod/contacts.php:69 ../../mod/contacts.php:150 msgid "Could not access contact record." msgstr "" -#: ../../mod/contacts.php:57 +#: ../../mod/contacts.php:83 msgid "Could not locate selected profile." msgstr "" -#: ../../mod/contacts.php:88 +#: ../../mod/contacts.php:114 msgid "Contact updated." msgstr "" -#: ../../mod/contacts.php:146 +#: ../../mod/contacts.php:172 msgid "Contact has been blocked" msgstr "" -#: ../../mod/contacts.php:146 +#: ../../mod/contacts.php:172 msgid "Contact has been unblocked" msgstr "" -#: ../../mod/contacts.php:160 +#: ../../mod/contacts.php:186 msgid "Contact has been ignored" msgstr "" -#: ../../mod/contacts.php:160 +#: ../../mod/contacts.php:186 msgid "Contact has been unignored" msgstr "" -#: ../../mod/contacts.php:181 +#: ../../mod/contacts.php:207 msgid "stopped following" msgstr "" -#: ../../mod/contacts.php:200 +#: ../../mod/contacts.php:226 msgid "Contact has been removed." msgstr "" -#: ../../mod/contacts.php:228 ../../mod/contacts.php:363 +#: ../../mod/contacts.php:254 ../../mod/contacts.php:397 msgid "Mutual Friendship" msgstr "" -#: ../../mod/contacts.php:232 ../../mod/contacts.php:367 +#: ../../mod/contacts.php:258 ../../mod/contacts.php:401 msgid "is a fan of yours" msgstr "" -#: ../../mod/contacts.php:237 ../../mod/contacts.php:371 +#: ../../mod/contacts.php:263 ../../mod/contacts.php:405 msgid "you are a fan of" msgstr "" -#: ../../mod/contacts.php:252 +#: ../../mod/contacts.php:280 msgid "Privacy Unavailable" msgstr "" -#: ../../mod/contacts.php:253 +#: ../../mod/contacts.php:281 msgid "Private communications are not available for this contact." msgstr "" -#: ../../mod/contacts.php:256 +#: ../../mod/contacts.php:284 msgid "Never" msgstr "" -#: ../../mod/contacts.php:260 +#: ../../mod/contacts.php:288 msgid "(Update was successful)" msgstr "" -#: ../../mod/contacts.php:260 +#: ../../mod/contacts.php:288 msgid "(Update was not successful)" msgstr "" -#: ../../mod/contacts.php:263 +#: ../../mod/contacts.php:291 +msgid "Suggest friends" +msgstr "" + +#: ../../mod/contacts.php:295 msgid "Contact Editor" msgstr "" -#: ../../mod/contacts.php:265 +#: ../../mod/contacts.php:297 msgid "Profile Visibility" msgstr "" -#: ../../mod/contacts.php:266 +#: ../../mod/contacts.php:298 #, php-format msgid "" "Please choose the profile you would like to display to %s when viewing your " "profile securely." msgstr "" -#: ../../mod/contacts.php:267 +#: ../../mod/contacts.php:299 msgid "Contact Information / Notes" msgstr "" -#: ../../mod/contacts.php:268 +#: ../../mod/contacts.php:300 msgid "Online Reputation" msgstr "" -#: ../../mod/contacts.php:269 +#: ../../mod/contacts.php:301 msgid "" "Occasionally your friends may wish to inquire about this person's online " "legitimacy." msgstr "" -#: ../../mod/contacts.php:270 +#: ../../mod/contacts.php:302 msgid "" "You may help them choose whether or not to interact with this person by " "providing a reputation to guide them." msgstr "" -#: ../../mod/contacts.php:271 +#: ../../mod/contacts.php:303 msgid "" "Please take a moment to elaborate on this selection if you feel it could be " "helpful to others." msgstr "" -#: ../../mod/contacts.php:272 -msgid "Visit $name's profile" +#: ../../mod/contacts.php:304 ../../mod/contacts.php:421 +#: ../../mod/viewcontacts.php:61 +#, php-format +msgid "Visit %s's profile [%s]" msgstr "" -#: ../../mod/contacts.php:273 +#: ../../mod/contacts.php:305 msgid "Block/Unblock contact" msgstr "" -#: ../../mod/contacts.php:274 +#: ../../mod/contacts.php:306 msgid "Ignore contact" msgstr "" -#: ../../mod/contacts.php:275 +#: ../../mod/contacts.php:307 msgid "Repair contact URL settings" msgstr "" -#: ../../mod/contacts.php:276 +#: ../../mod/contacts.php:308 msgid "Repair contact URL settings (WARNING: Advanced)" msgstr "" -#: ../../mod/contacts.php:277 +#: ../../mod/contacts.php:309 msgid "View conversations" msgstr "" -#: ../../mod/contacts.php:278 +#: ../../mod/contacts.php:312 msgid "Delete contact" msgstr "" -#: ../../mod/contacts.php:280 +#: ../../mod/contacts.php:314 msgid "Last updated: " msgstr "" -#: ../../mod/contacts.php:281 +#: ../../mod/contacts.php:315 msgid "Update public posts: " msgstr "" -#: ../../mod/contacts.php:283 +#: ../../mod/contacts.php:317 ../../mod/admin.php:701 msgid "Update now" msgstr "" -#: ../../mod/contacts.php:286 +#: ../../mod/contacts.php:320 msgid "Unblock this contact" msgstr "" -#: ../../mod/contacts.php:286 +#: ../../mod/contacts.php:320 msgid "Block this contact" msgstr "" -#: ../../mod/contacts.php:287 +#: ../../mod/contacts.php:321 msgid "Unignore this contact" msgstr "" -#: ../../mod/contacts.php:287 +#: ../../mod/contacts.php:321 msgid "Ignore this contact" msgstr "" -#: ../../mod/contacts.php:290 +#: ../../mod/contacts.php:324 msgid "Currently blocked" msgstr "" -#: ../../mod/contacts.php:291 +#: ../../mod/contacts.php:325 msgid "Currently ignored" msgstr "" -#: ../../mod/contacts.php:322 ../../include/nav.php:109 -#: ../../include/acl_selectors.php:141 ../../include/acl_selectors.php:156 +#: ../../mod/contacts.php:356 ../../include/nav.php:110 msgid "Contacts" msgstr "" -#: ../../mod/contacts.php:324 +#: ../../mod/contacts.php:358 msgid "Show Blocked Connections" msgstr "" -#: ../../mod/contacts.php:324 +#: ../../mod/contacts.php:358 msgid "Hide Blocked Connections" msgstr "" -#: ../../mod/contacts.php:326 ../../mod/directory.php:55 +#: ../../mod/contacts.php:360 ../../mod/directory.php:55 msgid "Finding: " msgstr "" -#: ../../mod/contacts.php:327 ../../mod/directory.php:57 +#: ../../mod/contacts.php:361 ../../mod/directory.php:57 msgid "Find" msgstr "" -#: ../../mod/contacts.php:387 ../../mod/viewcontacts.php:52 -msgid "Visit $username's profile" -msgstr "" - -#: ../../mod/contacts.php:388 ../../include/conversation.php:597 +#: ../../mod/contacts.php:422 ../../include/conversation.php:612 msgid "Edit contact" msgstr "" -#: ../../mod/lostpass.php:27 +#: ../../mod/lostpass.php:16 +msgid "No valid account found." +msgstr "" + +#: ../../mod/lostpass.php:31 msgid "Password reset request issued. Check your email." msgstr "" -#: ../../mod/lostpass.php:38 +#: ../../mod/lostpass.php:42 #, php-format msgid "Password reset requested at %s" msgstr "" -#: ../../mod/lostpass.php:60 +#: ../../mod/lostpass.php:64 msgid "" "Request could not be verified. (You may have previously submitted it.) " "Password reset failed." msgstr "" -#: ../../mod/lostpass.php:78 ../../boot.php:852 +#: ../../mod/lostpass.php:82 ../../boot.php:654 msgid "Password Reset" msgstr "" -#: ../../mod/lostpass.php:79 +#: ../../mod/lostpass.php:83 msgid "Your password has been reset as requested." msgstr "" -#: ../../mod/lostpass.php:80 +#: ../../mod/lostpass.php:84 msgid "Your new password is" msgstr "" -#: ../../mod/lostpass.php:81 +#: ../../mod/lostpass.php:85 msgid "Save or copy your new password - and then" msgstr "" -#: ../../mod/lostpass.php:82 +#: ../../mod/lostpass.php:86 msgid "click here to login" msgstr "" -#: ../../mod/lostpass.php:83 +#: ../../mod/lostpass.php:87 msgid "" "Your password may be changed from the Settings page after " "successful login." msgstr "" -#: ../../mod/lostpass.php:114 +#: ../../mod/lostpass.php:118 msgid "Forgot your Password?" msgstr "" -#: ../../mod/lostpass.php:115 +#: ../../mod/lostpass.php:119 msgid "" "Enter your email address and submit to have your password reset. Then check " "your email for further instructions." msgstr "" -#: ../../mod/lostpass.php:116 +#: ../../mod/lostpass.php:120 msgid "Nickname or Email: " msgstr "" -#: ../../mod/lostpass.php:117 +#: ../../mod/lostpass.php:121 msgid "Reset" msgstr "" -#: ../../mod/settings.php:38 +#: ../../mod/settings.php:64 msgid "Passwords do not match. Password unchanged." msgstr "" -#: ../../mod/settings.php:43 +#: ../../mod/settings.php:69 msgid "Empty passwords are not allowed. Password unchanged." msgstr "" -#: ../../mod/settings.php:54 +#: ../../mod/settings.php:80 msgid "Password changed." msgstr "" -#: ../../mod/settings.php:56 +#: ../../mod/settings.php:82 msgid "Password update failed. Please try again." msgstr "" -#: ../../mod/settings.php:138 +#: ../../mod/settings.php:161 +msgid "Failed to connect with email account using the settings provided." +msgstr "" + +#: ../../mod/settings.php:188 msgid " Please use a shorter name." msgstr "" -#: ../../mod/settings.php:140 +#: ../../mod/settings.php:190 msgid " Name too short." msgstr "" -#: ../../mod/settings.php:146 +#: ../../mod/settings.php:196 msgid " Not valid email." msgstr "" -#: ../../mod/settings.php:148 +#: ../../mod/settings.php:198 msgid " Cannot change to that email." msgstr "" -#: ../../mod/settings.php:206 +#: ../../mod/settings.php:257 ../../addon/facebook/facebook.php:297 +#: ../../addon/impressum/impressum.php:64 ../../addon/piwik/piwik.php:89 +#: ../../addon/twitter/twitter.php:275 msgid "Settings updated." msgstr "" -#: ../../mod/settings.php:256 ../../mod/settings.php:418 -#: ../../addon/widgets/widgets.php:123 -msgid "Plugin Settings" +#: ../../mod/settings.php:311 ../../include/nav.php:108 +msgid "Account settings" msgstr "" -#: ../../mod/settings.php:257 ../../mod/settings.php:417 -msgid "Account Settings" +#: ../../mod/settings.php:312 +msgid "Plugin settings" msgstr "" -#: ../../mod/settings.php:263 +#: ../../mod/settings.php:322 msgid "No Plugin settings configured" msgstr "" -#: ../../mod/settings.php:323 +#: ../../mod/settings.php:329 ../../addon/widgets/widgets.php:122 +msgid "Plugin Settings" +msgstr "" + +#: ../../mod/settings.php:382 ../../mod/admin.php:133 ../../mod/admin.php:443 msgid "Normal Account" msgstr "" -#: ../../mod/settings.php:324 +#: ../../mod/settings.php:383 msgid "This account is a normal personal profile" msgstr "" -#: ../../mod/settings.php:325 +#: ../../mod/settings.php:386 ../../mod/admin.php:134 ../../mod/admin.php:444 msgid "Soapbox Account" msgstr "" -#: ../../mod/settings.php:326 +#: ../../mod/settings.php:387 msgid "Automatically approve all connection/friend requests as read-only fans" msgstr "" -#: ../../mod/settings.php:327 +#: ../../mod/settings.php:390 ../../mod/admin.php:135 ../../mod/admin.php:445 msgid "Community/Celebrity Account" msgstr "" -#: ../../mod/settings.php:328 +#: ../../mod/settings.php:391 msgid "Automatically approve all connection/friend requests as read-write fans" msgstr "" -#: ../../mod/settings.php:329 +#: ../../mod/settings.php:394 ../../mod/admin.php:136 ../../mod/admin.php:446 msgid "Automatic Friend Account" msgstr "" -#: ../../mod/settings.php:330 +#: ../../mod/settings.php:395 msgid "Automatically approve all connection/friend requests as friends" msgstr "" -#: ../../mod/settings.php:339 -msgid "OpenID: " +#: ../../mod/settings.php:405 +msgid "OpenID:" msgstr "" -#: ../../mod/settings.php:339 -msgid " (Optional) Allow this OpenID to login to this account." +#: ../../mod/settings.php:405 +msgid "(Optional) Allow this OpenID to login to this account." msgstr "" -#: ../../mod/settings.php:349 -msgid "Publish your default profile in site directory?" -msgstr "" - -#: ../../mod/settings.php:361 -msgid "Publish your default profile in global social directory?" -msgstr "" - -#: ../../mod/settings.php:377 -msgid "Profile is not published." -msgstr "" - -#: ../../mod/settings.php:398 ../../mod/profile_photo.php:196 -msgid "or" -msgstr "" - -#: ../../mod/settings.php:403 -msgid "Your Identity Address is" -msgstr "" - -#: ../../mod/settings.php:413 -msgid "Export Personal Data" -msgstr "" - -#: ../../mod/settings.php:419 -msgid "Basic Settings" -msgstr "" - -#: ../../mod/settings.php:420 ../../include/profile_advanced.php:10 -msgid "Full Name:" +#: ../../mod/settings.php:415 +msgid "Publish your default profile in your local site directory?" msgstr "" #: ../../mod/settings.php:421 -msgid "Email Address:" -msgstr "" - -#: ../../mod/settings.php:422 -msgid "Your Timezone:" -msgstr "" - -#: ../../mod/settings.php:423 -msgid "Default Post Location:" -msgstr "" - -#: ../../mod/settings.php:424 -msgid "Use Browser Location:" -msgstr "" - -#: ../../mod/settings.php:425 -msgid "Display Theme:" -msgstr "" - -#: ../../mod/settings.php:427 -msgid "Security and Privacy Settings" -msgstr "" - -#: ../../mod/settings.php:428 -msgid "Maximum Friend Requests/Day:" +msgid "Publish your default profile in the global social directory?" msgstr "" #: ../../mod/settings.php:429 -msgid "(to prevent spam abuse)" -msgstr "" - -#: ../../mod/settings.php:430 -msgid "Allow friends to post to your profile page:" -msgstr "" - -#: ../../mod/settings.php:431 -msgid "Automatically expire (delete) posts older than" -msgstr "" - -#: ../../mod/settings.php:432 ../../include/datetime.php:154 -msgid "days" +msgid "Hide your contact/friend list from viewers of your default profile?" msgstr "" #: ../../mod/settings.php:433 -msgid "Notification Settings" -msgstr "" - -#: ../../mod/settings.php:434 -msgid "Send a notification email when:" -msgstr "" - -#: ../../mod/settings.php:435 -msgid "You receive an introduction" -msgstr "" - -#: ../../mod/settings.php:436 -msgid "Your introductions are confirmed" -msgstr "" - -#: ../../mod/settings.php:437 -msgid "Someone writes on your profile wall" -msgstr "" - -#: ../../mod/settings.php:438 -msgid "Someone writes a followup comment" -msgstr "" - -#: ../../mod/settings.php:439 -msgid "You receive a private message" -msgstr "" - -#: ../../mod/settings.php:440 -msgid "Password Settings" -msgstr "" - -#: ../../mod/settings.php:441 -msgid "Leave password fields blank unless changing" +msgid "Hide profile details and all your messages from unknown viewers?" msgstr "" #: ../../mod/settings.php:442 +msgid "Profile is not published." +msgstr "" + +#: ../../mod/settings.php:461 ../../mod/profile_photo.php:196 +msgid "or" +msgstr "" + +#: ../../mod/settings.php:466 +msgid "Your Identity Address is" +msgstr "" + +#: ../../mod/settings.php:480 +msgid "Account Settings" +msgstr "" + +#: ../../mod/settings.php:487 +msgid "Export Personal Data" +msgstr "" + +#: ../../mod/settings.php:490 +msgid "Password Settings" +msgstr "" + +#: ../../mod/settings.php:491 msgid "New Password:" msgstr "" -#: ../../mod/settings.php:443 +#: ../../mod/settings.php:492 msgid "Confirm:" msgstr "" -#: ../../mod/settings.php:444 -msgid "Advanced Page Settings" +#: ../../mod/settings.php:492 +msgid "Leave password fields blank unless changing" msgstr "" -#: ../../mod/settings.php:459 +#: ../../mod/settings.php:496 +msgid "Basic Settings" +msgstr "" + +#: ../../mod/settings.php:497 ../../include/profile_advanced.php:10 +msgid "Full Name:" +msgstr "" + +#: ../../mod/settings.php:498 +msgid "Email Address:" +msgstr "" + +#: ../../mod/settings.php:499 +msgid "Your Timezone:" +msgstr "" + +#: ../../mod/settings.php:500 +msgid "Default Post Location:" +msgstr "" + +#: ../../mod/settings.php:501 +msgid "Use Browser Location:" +msgstr "" + +#: ../../mod/settings.php:502 +msgid "Display Theme:" +msgstr "" + +#: ../../mod/settings.php:506 +msgid "Security and Privacy Settings" +msgstr "" + +#: ../../mod/settings.php:508 +msgid "Maximum Friend Requests/Day:" +msgstr "" + +#: ../../mod/settings.php:508 +msgid "(to prevent spam abuse)" +msgstr "" + +#: ../../mod/settings.php:509 msgid "Default Post Permissions" msgstr "" -#: ../../mod/settings.php:460 +#: ../../mod/settings.php:510 msgid "(click to open/close)" msgstr "" -#: ../../mod/settings.php:473 +#: ../../mod/settings.php:514 +msgid "Allow friends to post to your profile page:" +msgstr "" + +#: ../../mod/settings.php:515 +msgid "Automatically expire posts after days:" +msgstr "" + +#: ../../mod/settings.php:515 +msgid "If empty, posts will not expire. Expired posts will be deleted" +msgstr "" + +#: ../../mod/settings.php:524 +msgid "Notification Settings" +msgstr "" + +#: ../../mod/settings.php:525 +msgid "Send a notification email when:" +msgstr "" + +#: ../../mod/settings.php:526 +msgid "You receive an introduction" +msgstr "" + +#: ../../mod/settings.php:527 +msgid "Your introductions are confirmed" +msgstr "" + +#: ../../mod/settings.php:528 +msgid "Someone writes on your profile wall" +msgstr "" + +#: ../../mod/settings.php:529 +msgid "Someone writes a followup comment" +msgstr "" + +#: ../../mod/settings.php:530 +msgid "You receive a private message" +msgstr "" + +#: ../../mod/settings.php:534 msgid "Email/Mailbox Setup" msgstr "" -#: ../../mod/settings.php:474 +#: ../../mod/settings.php:535 msgid "" "If you wish to communicate with email contacts using this service " "(optional), please specify how to connect to your mailbox." msgstr "" -#: ../../mod/settings.php:475 +#: ../../mod/settings.php:536 +msgid "Last successful email check:" +msgstr "" + +#: ../../mod/settings.php:537 +msgid "Email access is disabled on this site." +msgstr "" + +#: ../../mod/settings.php:538 msgid "IMAP server name:" msgstr "" -#: ../../mod/settings.php:477 +#: ../../mod/settings.php:539 msgid "IMAP port:" msgstr "" -#: ../../mod/settings.php:479 -msgid "Security (TLS or SSL):" +#: ../../mod/settings.php:540 +msgid "Security:" msgstr "" -#: ../../mod/settings.php:481 +#: ../../mod/settings.php:540 +msgid "None" +msgstr "" + +#: ../../mod/settings.php:541 msgid "Email login name:" msgstr "" -#: ../../mod/settings.php:483 +#: ../../mod/settings.php:542 msgid "Email password:" msgstr "" -#: ../../mod/settings.php:484 -msgid "Reply-to address (Optional):" +#: ../../mod/settings.php:543 +msgid "Reply-to address:" msgstr "" -#: ../../mod/settings.php:486 +#: ../../mod/settings.php:544 msgid "Send public posts to all email contacts:" msgstr "" -#: ../../mod/settings.php:488 -msgid "Email access is disabled on this site." +#: ../../mod/settings.php:549 +msgid "Advanced Page Settings" msgstr "" #: ../../mod/manage.php:37 @@ -1449,15 +1644,23 @@ msgstr "" msgid "Select an identity to manage: " msgstr "" -#: ../../mod/network.php:18 -msgid "Normal View" +#: ../../mod/network.php:27 +msgid "View Conversations" msgstr "" -#: ../../mod/network.php:20 -msgid "New Item View" +#: ../../mod/network.php:29 +msgid "View New Items" msgstr "" -#: ../../mod/network.php:64 +#: ../../mod/network.php:35 +msgid "View Any Items" +msgstr "" + +#: ../../mod/network.php:43 +msgid "View Starred Items" +msgstr "" + +#: ../../mod/network.php:94 #, php-format msgid "Warning: This group contains %s member from an insecure network." msgid_plural "" @@ -1465,54 +1668,131 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: ../../mod/network.php:67 +#: ../../mod/network.php:97 msgid "Private messages to this group are at risk of public disclosure." msgstr "" -#: ../../mod/network.php:129 +#: ../../mod/network.php:164 msgid "No such group" msgstr "" -#: ../../mod/network.php:140 +#: ../../mod/network.php:175 msgid "Group is empty" msgstr "" -#: ../../mod/network.php:144 +#: ../../mod/network.php:180 msgid "Group: " msgstr "" -#: ../../mod/network.php:154 +#: ../../mod/network.php:190 msgid "Contact: " msgstr "" -#: ../../mod/network.php:156 +#: ../../mod/network.php:192 msgid "Private messages to this person are at risk of public disclosure." msgstr "" -#: ../../mod/network.php:161 +#: ../../mod/network.php:197 msgid "Invalid contact." msgstr "" -#: ../../mod/network.php:262 ../../mod/register.php:465 -#: ../../mod/profile.php:265 ../../mod/display.php:147 -msgid "" -"Shared content is covered by the Creative Commons Attribution 3.0 license." -msgstr "" - -#: ../../mod/notes.php:41 ../../mod/apps.php:8 -msgid "Private Notes" -msgstr "" - -#: ../../mod/notes.php:60 +#: ../../mod/notes.php:74 msgid "Save" msgstr "" -#: ../../mod/attach.php:6 +#: ../../mod/newmember.php:6 +msgid "Welcome to Friendika" +msgstr "" + +#: ../../mod/newmember.php:8 +msgid "New Member Checklist" +msgstr "" + +#: ../../mod/newmember.php:12 +msgid "" +"We would like to offer some tips and links to help make your experience " +"enjoyable. Click any item to visit the relevant page." +msgstr "" + +#: ../../mod/newmember.php:16 +msgid "" +"On your Settings page - change your initial password. Also make a " +"note of your Identity Address. This will be useful in making friends." +msgstr "" + +#: ../../mod/newmember.php:18 +msgid "" +"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." +msgstr "" + +#: ../../mod/newmember.php:20 +msgid "" +"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." +msgstr "" + +#: ../../mod/newmember.php:23 +msgid "" +"Authorise the Facebook Connector if you currently have a Facebook account " +"and we will (optionally) import all your Facebook friends and conversations." +msgstr "" + +#: ../../mod/newmember.php:28 +msgid "" +"Enter your email access information on your Settings page if you wish to " +"import and interact with friends or mailing lists from your email INBOX" +msgstr "" + +#: ../../mod/newmember.php:30 +msgid "" +"Edit your default profile to your liking. Review the " +"settings for hiding your list of friends and hiding the profile from unknown " +"visitors." +msgstr "" + +#: ../../mod/newmember.php:32 +msgid "" +"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." +msgstr "" + +#: ../../mod/newmember.php:34 +msgid "" +"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 Connect dialog." +msgstr "" + +#: ../../mod/newmember.php:36 +msgid "" +"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." +msgstr "" + +#: ../../mod/newmember.php:38 +msgid "" +"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." +msgstr "" + +#: ../../mod/newmember.php:40 +msgid "" +"Our help pages may be consulted for detail on other program " +"features and resources." +msgstr "" + +#: ../../mod/attach.php:8 msgid "Item not available." msgstr "" -#: ../../mod/attach.php:16 +#: ../../mod/attach.php:20 msgid "Item was not found." msgstr "" @@ -1524,7 +1804,7 @@ msgstr "" msgid "Could not create group." msgstr "" -#: ../../mod/group.php:43 ../../mod/group.php:115 +#: ../../mod/group.php:43 ../../mod/group.php:123 msgid "Group not found." msgstr "" @@ -1532,64 +1812,59 @@ msgstr "" msgid "Group name changed." msgstr "" -#: ../../mod/group.php:67 ../../mod/profperm.php:19 ../../index.php:255 +#: ../../mod/group.php:67 ../../mod/profperm.php:19 ../../index.php:265 msgid "Permission denied" msgstr "" -#: ../../mod/group.php:74 +#: ../../mod/group.php:82 msgid "Create a group of contacts/friends." msgstr "" -#: ../../mod/group.php:75 ../../mod/group.php:158 +#: ../../mod/group.php:83 ../../mod/group.php:166 msgid "Group Name: " msgstr "" -#: ../../mod/group.php:90 +#: ../../mod/group.php:98 msgid "Group removed." msgstr "" -#: ../../mod/group.php:92 +#: ../../mod/group.php:100 msgid "Unable to remove group." msgstr "" -#: ../../mod/group.php:156 ../../mod/profperm.php:96 +#: ../../mod/group.php:164 ../../mod/profperm.php:105 msgid "Click on a contact to add or remove." msgstr "" -#: ../../mod/group.php:157 +#: ../../mod/group.php:165 msgid "Group Editor" msgstr "" -#: ../../mod/group.php:172 +#: ../../mod/group.php:180 msgid "Members" msgstr "" -#: ../../mod/group.php:186 +#: ../../mod/group.php:195 msgid "All Contacts" msgstr "" -#: ../../mod/profperm.php:25 ../../mod/profperm.php:46 +#: ../../mod/profperm.php:25 ../../mod/profperm.php:55 msgid "Invalid profile identifier." msgstr "" -#: ../../mod/profperm.php:92 +#: ../../mod/profperm.php:101 msgid "Profile Visibility Editor" msgstr "" -#: ../../mod/profperm.php:94 ../../mod/profile.php:116 -#: ../../include/profile_advanced.php:7 -msgid "Profile" -msgstr "" - -#: ../../mod/profperm.php:105 +#: ../../mod/profperm.php:114 msgid "Visible To" msgstr "" -#: ../../mod/profperm.php:116 +#: ../../mod/profperm.php:128 msgid "All Contacts (with secure profile access)" msgstr "" -#: ../../mod/viewcontacts.php:25 ../../boot.php:2059 +#: ../../mod/viewcontacts.php:25 ../../include/text.php:555 msgid "View Contacts" msgstr "" @@ -1597,272 +1872,282 @@ msgstr "" msgid "No contacts." msgstr "" -#: ../../mod/register.php:49 +#: ../../mod/register.php:53 +msgid "An invitation is required." +msgstr "" + +#: ../../mod/register.php:58 +msgid "Invitation could not be verified." +msgstr "" + +#: ../../mod/register.php:66 msgid "Invalid OpenID url" msgstr "" -#: ../../mod/register.php:64 +#: ../../mod/register.php:81 msgid "Please enter the required information." msgstr "" -#: ../../mod/register.php:76 +#: ../../mod/register.php:95 msgid "Please use a shorter name." msgstr "" -#: ../../mod/register.php:78 +#: ../../mod/register.php:97 msgid "Name too short." msgstr "" -#: ../../mod/register.php:93 +#: ../../mod/register.php:112 msgid "That doesn't appear to be your full (First Last) name." msgstr "" -#: ../../mod/register.php:97 +#: ../../mod/register.php:117 msgid "Your email domain is not among those allowed on this site." msgstr "" -#: ../../mod/register.php:100 +#: ../../mod/register.php:120 msgid "Not a valid email address." msgstr "" -#: ../../mod/register.php:106 +#: ../../mod/register.php:130 msgid "Cannot use that email." msgstr "" -#: ../../mod/register.php:111 +#: ../../mod/register.php:136 msgid "" "Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and " "must also begin with a letter." msgstr "" -#: ../../mod/register.php:117 ../../mod/register.php:217 +#: ../../mod/register.php:142 ../../mod/register.php:243 msgid "Nickname is already registered. Please choose another." msgstr "" -#: ../../mod/register.php:136 +#: ../../mod/register.php:161 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "" -#: ../../mod/register.php:203 +#: ../../mod/register.php:229 msgid "An error occurred during registration. Please try again." msgstr "" -#: ../../mod/register.php:239 +#: ../../mod/register.php:265 msgid "An error occurred creating your default profile. Please try again." msgstr "" -#: ../../mod/register.php:333 ../../mod/regmod.php:96 +#: ../../mod/register.php:367 ../../mod/regmod.php:52 #, php-format msgid "Registration details for %s" msgstr "" -#: ../../mod/register.php:341 +#: ../../mod/register.php:375 msgid "" "Registration successful. Please check your email for further instructions." msgstr "" -#: ../../mod/register.php:345 +#: ../../mod/register.php:379 msgid "Failed to send email message. Here is the message that failed." msgstr "" -#: ../../mod/register.php:350 +#: ../../mod/register.php:384 msgid "Your registration can not be processed." msgstr "" -#: ../../mod/register.php:383 +#: ../../mod/register.php:421 #, php-format msgid "Registration request at %s" msgstr "" -#: ../../mod/register.php:392 +#: ../../mod/register.php:430 msgid "Your registration is pending approval by the site owner." msgstr "" -#: ../../mod/register.php:440 +#: ../../mod/register.php:479 msgid "" "You may (optionally) fill in this form via OpenID by supplying your OpenID " "and clicking 'Register'." msgstr "" -#: ../../mod/register.php:441 +#: ../../mod/register.php:480 msgid "" "If you are not familiar with OpenID, please leave that field blank and fill " "in the rest of the items." msgstr "" -#: ../../mod/register.php:442 +#: ../../mod/register.php:481 msgid "Your OpenID (optional): " msgstr "" -#: ../../mod/register.php:456 +#: ../../mod/register.php:495 msgid "Include your profile in member directory?" msgstr "" -#: ../../mod/register.php:472 +#: ../../mod/register.php:511 +msgid "Membership on this site is by invitation only." +msgstr "" + +#: ../../mod/register.php:512 +msgid "Your invitation ID: " +msgstr "" + +#: ../../mod/register.php:515 ../../mod/admin.php:299 msgid "Registration" msgstr "" -#: ../../mod/register.php:480 +#: ../../mod/register.php:523 msgid "Your Full Name (e.g. Joe Smith): " msgstr "" -#: ../../mod/register.php:481 +#: ../../mod/register.php:524 msgid "Your Email Address: " msgstr "" -#: ../../mod/register.php:482 +#: ../../mod/register.php:525 msgid "" "Choose a profile nickname. This must begin with a text character. Your " "profile address on this site will then be 'nickname@$sitename'." msgstr "" -#: ../../mod/register.php:483 +#: ../../mod/register.php:526 msgid "Choose a nickname: " msgstr "" -#: ../../mod/register.php:486 ../../include/nav.php:59 ../../boot.php:835 +#: ../../mod/register.php:529 ../../include/nav.php:59 ../../boot.php:637 msgid "Register" msgstr "" -#: ../../mod/like.php:110 ../../addon/facebook/facebook.php:774 -#: ../../include/conversation.php:20 +#: ../../mod/like.php:110 ../../addon/facebook/facebook.php:954 +#: ../../include/diaspora.php:446 ../../include/conversation.php:26 +#: ../../include/conversation.php:35 msgid "status" msgstr "" -#: ../../mod/like.php:127 ../../addon/facebook/facebook.php:778 -#: ../../include/conversation.php:25 +#: ../../mod/like.php:127 ../../addon/facebook/facebook.php:958 +#: ../../include/diaspora.php:463 ../../include/conversation.php:43 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "" -#: ../../mod/like.php:129 ../../include/conversation.php:28 +#: ../../mod/like.php:129 ../../include/diaspora.php:465 +#: ../../include/conversation.php:46 #, php-format msgid "%1$s doesn't like %2$s's %3$s" msgstr "" -#: ../../mod/friendika.php:43 +#: ../../mod/friendika.php:42 msgid "This is Friendika version" msgstr "" -#: ../../mod/friendika.php:44 +#: ../../mod/friendika.php:43 msgid "running at web location" msgstr "" -#: ../../mod/friendika.php:46 +#: ../../mod/friendika.php:45 msgid "" "Shared content within the Friendika network is provided under the Creative Commons Attribution " "3.0 license" msgstr "" -#: ../../mod/friendika.php:48 +#: ../../mod/friendika.php:47 msgid "" "Please visit Project.Friendika.com to learn more about the Friendika project." msgstr "" -#: ../../mod/friendika.php:50 +#: ../../mod/friendika.php:49 msgid "Bug reports and issues: please visit" msgstr "" -#: ../../mod/friendika.php:51 +#: ../../mod/friendika.php:50 msgid "" "Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - " "dot com" msgstr "" -#: ../../mod/friendika.php:56 +#: ../../mod/friendika.php:55 msgid "Installed plugins/addons/apps" msgstr "" -#: ../../mod/friendika.php:64 +#: ../../mod/friendika.php:63 msgid "No installed plugins/addons/apps" msgstr "" -#: ../../mod/regmod.php:12 -msgid "Please login." +#: ../../mod/regmod.php:61 +msgid "Account approved." msgstr "" -#: ../../mod/regmod.php:56 +#: ../../mod/regmod.php:93 #, php-format msgid "Registration revoked for %s" msgstr "" #: ../../mod/regmod.php:105 -msgid "Account approved." +msgid "Please login." msgstr "" -#: ../../mod/update_network.php:22 ../../mod/update_profile.php:41 -msgid "[Embedded content - reload page to view]" -msgstr "" - -#: ../../mod/item.php:37 +#: ../../mod/item.php:81 msgid "Unable to locate original post." msgstr "" -#: ../../mod/item.php:128 +#: ../../mod/item.php:196 msgid "Empty post discarded." msgstr "" -#: ../../mod/item.php:214 ../../mod/message.php:93 -#: ../../mod/wall_upload.php:79 ../../mod/wall_upload.php:88 -#: ../../mod/wall_upload.php:95 +#: ../../mod/item.php:296 ../../mod/message.php:93 +#: ../../mod/wall_upload.php:81 ../../mod/wall_upload.php:90 +#: ../../mod/wall_upload.php:97 msgid "Wall Photos" msgstr "" -#: ../../mod/item.php:517 ../../mod/item.php:560 ../../mod/item.php:583 -#: ../../mod/item.php:624 ../../mod/dfrn_notify.php:193 -#: ../../mod/dfrn_notify.php:401 ../../mod/dfrn_notify.php:444 -#: ../../mod/dfrn_notify.php:530 ../../mod/dfrn_notify.php:571 +#: ../../mod/item.php:623 ../../mod/item.php:668 ../../mod/item.php:691 +#: ../../mod/item.php:734 ../../mod/dfrn_notify.php:293 +#: ../../mod/dfrn_notify.php:503 ../../mod/dfrn_notify.php:548 +#: ../../mod/dfrn_notify.php:634 ../../mod/dfrn_notify.php:677 msgid "noreply" msgstr "" -#: ../../mod/item.php:559 ../../mod/item.php:623 ../../mod/dfrn_notify.php:570 +#: ../../mod/item.php:667 ../../mod/item.php:733 ../../mod/dfrn_notify.php:676 msgid "Administrator@" msgstr "" -#: ../../mod/item.php:562 ../../mod/dfrn_notify.php:446 -#: ../../mod/dfrn_notify.php:573 +#: ../../mod/item.php:670 ../../mod/dfrn_notify.php:550 +#: ../../mod/dfrn_notify.php:679 #, php-format msgid "%s commented on an item at %s" msgstr "" -#: ../../mod/item.php:626 +#: ../../mod/item.php:736 #, php-format msgid "%s posted to your profile wall at %s" msgstr "" -#: ../../mod/item.php:655 +#: ../../mod/item.php:765 msgid "System error. Post not saved." msgstr "" -#: ../../mod/item.php:674 +#: ../../mod/item.php:784 #, php-format msgid "" "This message was sent to you by %s, a member of the Friendika social network." msgstr "" -#: ../../mod/item.php:676 +#: ../../mod/item.php:786 #, php-format msgid "You may visit them online at %s" msgstr "" -#: ../../mod/item.php:677 +#: ../../mod/item.php:787 msgid "" "Please contact the sender by replying to this post if you do not wish to " "receive these messages." msgstr "" -#: ../../mod/item.php:679 +#: ../../mod/item.php:789 #, php-format msgid "%s posted an update." msgstr "" -#: ../../mod/item.php:730 ../../mod/display.php:25 ../../mod/display.php:142 -msgid "Item not found." -msgstr "" - #: ../../mod/profile_photo.php:28 msgid "Image uploaded but image cropping failed." msgstr "" @@ -1918,6 +2203,10 @@ msgstr "" msgid "Image uploaded successfully." msgstr "" +#: ../../mod/hcard.php:11 ../../mod/profile.php:11 ../../boot.php:792 +msgid "No profile" +msgstr "" + #: ../../mod/removeme.php:42 ../../mod/removeme.php:45 msgid "Remove My Account" msgstr "" @@ -1952,7 +2241,7 @@ msgstr "" msgid "Message could not be sent." msgstr "" -#: ../../mod/message.php:125 ../../include/nav.php:101 +#: ../../mod/message.php:125 ../../include/nav.php:102 msgid "Messages" msgstr "" @@ -1976,7 +2265,7 @@ msgstr "" msgid "Conversation removed." msgstr "" -#: ../../mod/message.php:172 ../../include/conversation.php:684 +#: ../../mod/message.php:172 ../../include/conversation.php:699 msgid "Please enter a link URL:" msgstr "" @@ -1992,7 +2281,8 @@ msgstr "" msgid "Subject:" msgstr "" -#: ../../mod/message.php:185 ../../mod/message.php:319 ../../mod/invite.php:63 +#: ../../mod/message.php:185 ../../mod/message.php:319 +#: ../../mod/invite.php:101 msgid "Your message:" msgstr "" @@ -2020,74 +2310,414 @@ msgstr "" msgid "Send Reply" msgstr "" -#: ../../mod/profile.php:11 ../../boot.php:2270 -msgid "No profile" +#: ../../mod/admin.php:66 ../../mod/admin.php:297 +msgid "Site" msgstr "" -#: ../../mod/profile.php:59 +#: ../../mod/admin.php:67 ../../mod/admin.php:460 ../../mod/admin.php:472 +msgid "Users" +msgstr "" + +#: ../../mod/admin.php:68 ../../mod/admin.php:549 ../../mod/admin.php:586 +msgid "Plugins" +msgstr "" + +#: ../../mod/admin.php:69 +msgid "Update" +msgstr "" + +#: ../../mod/admin.php:83 ../../mod/admin.php:651 +msgid "Logs" +msgstr "" + +#: ../../mod/admin.php:88 +msgid "User registrations waiting for confirmation" +msgstr "" + +#: ../../mod/admin.php:118 ../../mod/admin.php:502 ../../mod/display.php:25 +#: ../../mod/display.php:112 ../../include/items.php:1842 +msgid "Item not found." +msgstr "" + +#: ../../mod/admin.php:151 ../../mod/admin.php:296 ../../mod/admin.php:459 +#: ../../mod/admin.php:548 ../../mod/admin.php:585 ../../mod/admin.php:650 +msgid "Administration" +msgstr "" + +#: ../../mod/admin.php:152 +msgid "Summary" +msgstr "" + +#: ../../mod/admin.php:153 +msgid "Registered users" +msgstr "" + +#: ../../mod/admin.php:155 +msgid "Pending registrations" +msgstr "" + +#: ../../mod/admin.php:156 +msgid "Version" +msgstr "" + +#: ../../mod/admin.php:158 +msgid "Active plugins" +msgstr "" + +#: ../../mod/admin.php:245 +msgid "Site settings updated." +msgstr "" + +#: ../../mod/admin.php:289 +msgid "Closed" +msgstr "" + +#: ../../mod/admin.php:290 +msgid "Requires approval" +msgstr "" + +#: ../../mod/admin.php:291 +msgid "Open" +msgstr "" + +#: ../../mod/admin.php:300 +msgid "File upload" +msgstr "" + +#: ../../mod/admin.php:301 +msgid "Policies" +msgstr "" + +#: ../../mod/admin.php:302 +msgid "Advanced" +msgstr "" + +#: ../../mod/admin.php:306 ../../addon/statusnet/statusnet.php:459 +msgid "Site name" +msgstr "" + +#: ../../mod/admin.php:307 +msgid "Banner/Logo" +msgstr "" + +#: ../../mod/admin.php:308 +msgid "System language" +msgstr "" + +#: ../../mod/admin.php:309 +msgid "System theme" +msgstr "" + +#: ../../mod/admin.php:311 +msgid "Maximum image size" +msgstr "" + +#: ../../mod/admin.php:313 +msgid "Register policy" +msgstr "" + +#: ../../mod/admin.php:314 +msgid "Register text" +msgstr "" + +#: ../../mod/admin.php:315 +msgid "Allowed friend domains" +msgstr "" + +#: ../../mod/admin.php:316 +msgid "Allowed email domains" +msgstr "" + +#: ../../mod/admin.php:317 +msgid "Block public" +msgstr "" + +#: ../../mod/admin.php:318 +msgid "Force publish" +msgstr "" + +#: ../../mod/admin.php:319 +msgid "Global directory update URL" +msgstr "" + +#: ../../mod/admin.php:321 +msgid "Block multiple registrations" +msgstr "" + +#: ../../mod/admin.php:322 +msgid "OpenID support" +msgstr "" + +#: ../../mod/admin.php:323 +msgid "Gravatar support" +msgstr "" + +#: ../../mod/admin.php:324 +msgid "Fullname check" +msgstr "" + +#: ../../mod/admin.php:325 +msgid "UTF-8 Regular expressions" +msgstr "" + +#: ../../mod/admin.php:326 +msgid "Show Community Page" +msgstr "" + +#: ../../mod/admin.php:327 +msgid "Enable OStatus support" +msgstr "" + +#: ../../mod/admin.php:328 +msgid "Only allow Friendika contacts" +msgstr "" + +#: ../../mod/admin.php:329 +msgid "Verify SSL" +msgstr "" + +#: ../../mod/admin.php:330 +msgid "Proxy user" +msgstr "" + +#: ../../mod/admin.php:331 +msgid "Proxy URL" +msgstr "" + +#: ../../mod/admin.php:332 +msgid "Network timeout" +msgstr "" + +#: ../../mod/admin.php:353 +#, php-format +msgid "%s user blocked" +msgid_plural "%s users blocked/unblocked" +msgstr[0] "" +msgstr[1] "" + +#: ../../mod/admin.php:360 +#, php-format +msgid "%s user deleted" +msgid_plural "%s users deleted" +msgstr[0] "" +msgstr[1] "" + +#: ../../mod/admin.php:394 +#, php-format +msgid "User '%s' deleted" +msgstr "" + +#: ../../mod/admin.php:401 +#, php-format +msgid "User '%s' unblocked" +msgstr "" + +#: ../../mod/admin.php:401 +#, php-format +msgid "User '%s' blocked" +msgstr "" + +#: ../../mod/admin.php:462 +msgid "select all" +msgstr "" + +#: ../../mod/admin.php:463 +msgid "User registrations waiting for confirm" +msgstr "" + +#: ../../mod/admin.php:464 +msgid "Request date" +msgstr "" + +#: ../../mod/admin.php:464 ../../mod/admin.php:473 +msgid "Email" +msgstr "" + +#: ../../mod/admin.php:465 +msgid "No registrations." +msgstr "" + +#: ../../mod/admin.php:467 +msgid "Deny" +msgstr "" + +#: ../../mod/admin.php:469 +msgid "Block" +msgstr "" + +#: ../../mod/admin.php:470 +msgid "Unblock" +msgstr "" + +#: ../../mod/admin.php:473 +msgid "Register date" +msgstr "" + +#: ../../mod/admin.php:473 +msgid "Last login" +msgstr "" + +#: ../../mod/admin.php:473 +msgid "Last item" +msgstr "" + +#: ../../mod/admin.php:473 +msgid "Account" +msgstr "" + +#: ../../mod/admin.php:475 +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:476 +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:512 +#, php-format +msgid "Plugin %s disabled." +msgstr "" + +#: ../../mod/admin.php:516 +#, php-format +msgid "Plugin %s enabled." +msgstr "" + +#: ../../mod/admin.php:526 +msgid "Disable" +msgstr "" + +#: ../../mod/admin.php:528 +msgid "Enable" +msgstr "" + +#: ../../mod/admin.php:550 +msgid "Toggle" +msgstr "" + +#: ../../mod/admin.php:551 ../../include/nav.php:108 +msgid "Settings" +msgstr "" + +#: ../../mod/admin.php:613 +msgid "Log settings updated." +msgstr "" + +#: ../../mod/admin.php:653 +msgid "Clear" +msgstr "" + +#: ../../mod/admin.php:659 +msgid "Debugging" +msgstr "" + +#: ../../mod/admin.php:660 +msgid "Log file" +msgstr "" + +#: ../../mod/admin.php:660 +msgid "Must be writable by web server. Relative to your Friendika index.php." +msgstr "" + +#: ../../mod/admin.php:661 +msgid "Log level" +msgstr "" + +#: ../../mod/admin.php:702 +msgid "Close" +msgstr "" + +#: ../../mod/admin.php:708 +msgid "FTP Host" +msgstr "" + +#: ../../mod/admin.php:709 +msgid "FTP Path" +msgstr "" + +#: ../../mod/admin.php:710 +msgid "FTP User" +msgstr "" + +#: ../../mod/admin.php:711 +msgid "FTP Password" +msgstr "" + +#: ../../mod/profile.php:102 ../../mod/display.php:63 msgid "Access to this profile has been restricted." msgstr "" -#: ../../mod/profile.php:115 -msgid "Status" +#: ../../mod/profile.php:133 +msgid "Tips for New Members" msgstr "" -#: ../../mod/profile.php:117 -msgid "Photos" -msgstr "" - -#: ../../mod/openid.php:62 ../../mod/openid.php:122 ../../include/auth.php:114 -#: ../../include/auth.php:139 ../../include/auth.php:192 +#: ../../mod/openid.php:62 ../../mod/openid.php:122 ../../include/auth.php:120 +#: ../../include/auth.php:145 ../../include/auth.php:198 msgid "Login failed." msgstr "" -#: ../../mod/openid.php:78 ../../include/auth.php:208 +#: ../../mod/openid.php:78 ../../include/auth.php:214 msgid "Welcome " msgstr "" -#: ../../mod/openid.php:79 ../../include/auth.php:209 +#: ../../mod/openid.php:79 ../../include/auth.php:215 msgid "Please upload a profile photo." msgstr "" -#: ../../mod/openid.php:82 ../../include/auth.php:212 +#: ../../mod/openid.php:82 ../../include/auth.php:218 msgid "Welcome back " msgstr "" -#: ../../mod/follow.php:43 -msgid "The profile address specified does not provide adequate information." +#: ../../mod/follow.php:39 +msgid "" +"This site is not configured to allow communications with other networks." msgstr "" -#: ../../mod/follow.php:45 +#: ../../mod/follow.php:40 ../../mod/follow.php:50 msgid "No compatible communication protocols or feeds were discovered." msgstr "" -#: ../../mod/follow.php:47 +#: ../../mod/follow.php:48 +msgid "The profile address specified does not provide adequate information." +msgstr "" + +#: ../../mod/follow.php:52 msgid "An author or name was not found." msgstr "" -#: ../../mod/follow.php:49 +#: ../../mod/follow.php:54 msgid "No browser URL could be matched to this address." msgstr "" -#: ../../mod/follow.php:57 +#: ../../mod/follow.php:61 +msgid "" +"The profile address specified belongs to a network which has been disabled " +"on this site." +msgstr "" + +#: ../../mod/follow.php:66 msgid "" "Limited profile. This person will be unable to receive direct/personal " "notifications from you." msgstr "" -#: ../../mod/follow.php:112 +#: ../../mod/follow.php:122 msgid "Unable to retrieve contact information." msgstr "" -#: ../../mod/follow.php:158 +#: ../../mod/follow.php:168 msgid "following" msgstr "" -#: ../../mod/display.php:135 +#: ../../mod/display.php:105 msgid "Item has been removed." msgstr "" -#: ../../mod/dfrn_notify.php:251 +#: ../../mod/dfrn_notify.php:353 msgid "New mail received at " msgstr "" @@ -2095,16 +2725,16 @@ msgstr "" msgid "Applications" msgstr "" -#: ../../mod/search.php:26 ../../include/nav.php:70 ../../boot.php:2114 +#: ../../mod/apps.php:11 +msgid "No installed applications." +msgstr "" + +#: ../../mod/search.php:26 ../../include/text.php:610 ../../include/nav.php:69 msgid "Search" msgstr "" -#: ../../mod/search.php:69 -msgid "No results." -msgstr "" - -#: ../../mod/profiles.php:21 ../../mod/profiles.php:240 -#: ../../mod/profiles.php:345 ../../mod/dfrn_confirm.php:62 +#: ../../mod/profiles.php:21 ../../mod/profiles.php:236 +#: ../../mod/profiles.php:341 ../../mod/dfrn_confirm.php:62 msgid "Profile not found." msgstr "" @@ -2112,213 +2742,210 @@ msgstr "" msgid "Profile Name is required." msgstr "" -#: ../../mod/profiles.php:202 +#: ../../mod/profiles.php:198 msgid "Profile updated." msgstr "" -#: ../../mod/profiles.php:257 +#: ../../mod/profiles.php:253 msgid "Profile deleted." msgstr "" -#: ../../mod/profiles.php:273 ../../mod/profiles.php:304 +#: ../../mod/profiles.php:269 ../../mod/profiles.php:300 msgid "Profile-" msgstr "" -#: ../../mod/profiles.php:292 ../../mod/profiles.php:331 +#: ../../mod/profiles.php:288 ../../mod/profiles.php:327 msgid "New profile created." msgstr "" -#: ../../mod/profiles.php:310 +#: ../../mod/profiles.php:306 msgid "Profile unavailable to clone." msgstr "" -#: ../../mod/profiles.php:357 +#: ../../mod/profiles.php:353 msgid "Hide your contact/friend list from viewers of this profile?" msgstr "" -#: ../../mod/profiles.php:366 -msgid "Hide profile details and all your messages from unknown viewers?" -msgstr "" - -#: ../../mod/profiles.php:382 +#: ../../mod/profiles.php:371 msgid "Edit Profile Details" msgstr "" -#: ../../mod/profiles.php:384 +#: ../../mod/profiles.php:373 msgid "View this profile" msgstr "" -#: ../../mod/profiles.php:385 +#: ../../mod/profiles.php:374 msgid "Create a new profile using these settings" msgstr "" -#: ../../mod/profiles.php:386 +#: ../../mod/profiles.php:375 msgid "Clone this profile" msgstr "" -#: ../../mod/profiles.php:387 +#: ../../mod/profiles.php:376 msgid "Delete this profile" msgstr "" -#: ../../mod/profiles.php:388 +#: ../../mod/profiles.php:377 msgid "Profile Name:" msgstr "" -#: ../../mod/profiles.php:389 +#: ../../mod/profiles.php:378 msgid "Your Full Name:" msgstr "" -#: ../../mod/profiles.php:390 +#: ../../mod/profiles.php:379 msgid "Title/Description:" msgstr "" -#: ../../mod/profiles.php:391 +#: ../../mod/profiles.php:380 msgid "Your Gender:" msgstr "" -#: ../../mod/profiles.php:392 -msgid "Birthday (y/m/d):" +#: ../../mod/profiles.php:381 +#, php-format +msgid "Birthday (%s):" msgstr "" -#: ../../mod/profiles.php:393 +#: ../../mod/profiles.php:382 msgid "Street Address:" msgstr "" -#: ../../mod/profiles.php:394 +#: ../../mod/profiles.php:383 msgid "Locality/City:" msgstr "" -#: ../../mod/profiles.php:395 +#: ../../mod/profiles.php:384 msgid "Postal/Zip Code:" msgstr "" -#: ../../mod/profiles.php:396 +#: ../../mod/profiles.php:385 msgid "Country:" msgstr "" -#: ../../mod/profiles.php:397 +#: ../../mod/profiles.php:386 msgid "Region/State:" msgstr "" -#: ../../mod/profiles.php:398 +#: ../../mod/profiles.php:387 msgid " Marital Status:" msgstr "" -#: ../../mod/profiles.php:399 +#: ../../mod/profiles.php:388 msgid "Who: (if applicable)" msgstr "" -#: ../../mod/profiles.php:400 +#: ../../mod/profiles.php:389 msgid "Examples: cathy123, Cathy Williams, cathy@example.com" msgstr "" -#: ../../mod/profiles.php:401 ../../include/profile_advanced.php:90 +#: ../../mod/profiles.php:390 ../../include/profile_advanced.php:90 msgid "Sexual Preference:" msgstr "" -#: ../../mod/profiles.php:402 +#: ../../mod/profiles.php:391 msgid "Homepage URL:" msgstr "" -#: ../../mod/profiles.php:403 ../../include/profile_advanced.php:115 +#: ../../mod/profiles.php:392 ../../include/profile_advanced.php:115 msgid "Political Views:" msgstr "" -#: ../../mod/profiles.php:404 +#: ../../mod/profiles.php:393 msgid "Religious Views:" msgstr "" -#: ../../mod/profiles.php:405 +#: ../../mod/profiles.php:394 msgid "Public Keywords:" msgstr "" -#: ../../mod/profiles.php:406 +#: ../../mod/profiles.php:395 msgid "Private Keywords:" msgstr "" -#: ../../mod/profiles.php:407 +#: ../../mod/profiles.php:396 msgid "Example: fishing photography software" msgstr "" -#: ../../mod/profiles.php:408 +#: ../../mod/profiles.php:397 msgid "(Used for suggesting potential friends, can be seen by others)" msgstr "" -#: ../../mod/profiles.php:409 +#: ../../mod/profiles.php:398 msgid "(Used for searching profiles, never shown to others)" msgstr "" -#: ../../mod/profiles.php:410 +#: ../../mod/profiles.php:399 msgid "Tell us about yourself..." msgstr "" -#: ../../mod/profiles.php:411 +#: ../../mod/profiles.php:400 msgid "Hobbies/Interests" msgstr "" -#: ../../mod/profiles.php:412 +#: ../../mod/profiles.php:401 msgid "Contact information and Social Networks" msgstr "" -#: ../../mod/profiles.php:413 +#: ../../mod/profiles.php:402 msgid "Musical interests" msgstr "" -#: ../../mod/profiles.php:414 +#: ../../mod/profiles.php:403 msgid "Books, literature" msgstr "" -#: ../../mod/profiles.php:415 +#: ../../mod/profiles.php:404 msgid "Television" msgstr "" -#: ../../mod/profiles.php:416 +#: ../../mod/profiles.php:405 msgid "Film/dance/culture/entertainment" msgstr "" -#: ../../mod/profiles.php:417 +#: ../../mod/profiles.php:406 msgid "Love/romance" msgstr "" -#: ../../mod/profiles.php:418 +#: ../../mod/profiles.php:407 msgid "Work/employment" msgstr "" -#: ../../mod/profiles.php:419 +#: ../../mod/profiles.php:408 msgid "School/education" msgstr "" -#: ../../mod/profiles.php:424 +#: ../../mod/profiles.php:413 msgid "" "This is your public profile.
It may " "be visible to anybody using the internet." msgstr "" -#: ../../mod/profiles.php:435 ../../mod/directory.php:112 +#: ../../mod/profiles.php:423 ../../mod/directory.php:112 msgid "Age: " msgstr "" -#: ../../mod/profiles.php:470 ../../include/nav.php:108 +#: ../../mod/profiles.php:458 ../../include/nav.php:109 msgid "Profiles" msgstr "" -#: ../../mod/profiles.php:471 +#: ../../mod/profiles.php:459 msgid "Change profile photo" msgstr "" -#: ../../mod/profiles.php:472 +#: ../../mod/profiles.php:460 msgid "Create New Profile" msgstr "" -#: ../../mod/profiles.php:482 +#: ../../mod/profiles.php:470 msgid "Profile Image" msgstr "" -#: ../../mod/profiles.php:484 -msgid "Visible to everybody" +#: ../../mod/profiles.php:472 +msgid "visible to everybody" msgstr "" -#: ../../mod/profiles.php:485 +#: ../../mod/profiles.php:473 msgid "Edit visibility" msgstr "" @@ -2346,339 +2973,391 @@ msgstr "" msgid "No entries (some entries may be hidden)." msgstr "" -#: ../../mod/invite.php:28 +#: ../../mod/invite.php:35 #, php-format msgid "%s : Not a valid email address." msgstr "" -#: ../../mod/invite.php:32 +#: ../../mod/invite.php:59 #, php-format msgid "Please join my network on %s" msgstr "" -#: ../../mod/invite.php:42 +#: ../../mod/invite.php:69 #, php-format msgid "%s : Message delivery failed." msgstr "" -#: ../../mod/invite.php:46 +#: ../../mod/invite.php:73 #, php-format msgid "%d message sent." msgid_plural "%d messages sent." msgstr[0] "" msgstr[1] "" -#: ../../mod/invite.php:61 +#: ../../mod/invite.php:92 +msgid "You have no more invitations available" +msgstr "" + +#: ../../mod/invite.php:99 msgid "Send invitations" msgstr "" -#: ../../mod/invite.php:62 +#: ../../mod/invite.php:100 msgid "Enter email addresses, one per line:" msgstr "" -#: ../../mod/invite.php:64 +#: ../../mod/invite.php:102 #, php-format msgid "Please join my social network on %s" msgstr "" -#: ../../mod/invite.php:65 +#: ../../mod/invite.php:103 msgid "To accept this invitation, please visit:" msgstr "" -#: ../../mod/invite.php:66 +#: ../../mod/invite.php:104 +msgid "You will need to supply this invitation code: $invite_code" +msgstr "" + +#: ../../mod/invite.php:104 msgid "" "Once you have registered, please connect with me via my profile page at:" msgstr "" -#: ../../mod/dfrn_confirm.php:231 +#: ../../mod/dfrn_confirm.php:233 msgid "Response from remote site was not understood." msgstr "" -#: ../../mod/dfrn_confirm.php:240 +#: ../../mod/dfrn_confirm.php:242 msgid "Unexpected response from remote site: " msgstr "" -#: ../../mod/dfrn_confirm.php:248 +#: ../../mod/dfrn_confirm.php:250 msgid "Confirmation completed successfully." msgstr "" -#: ../../mod/dfrn_confirm.php:250 ../../mod/dfrn_confirm.php:264 -#: ../../mod/dfrn_confirm.php:271 +#: ../../mod/dfrn_confirm.php:252 ../../mod/dfrn_confirm.php:266 +#: ../../mod/dfrn_confirm.php:273 msgid "Remote site reported: " msgstr "" -#: ../../mod/dfrn_confirm.php:262 +#: ../../mod/dfrn_confirm.php:264 msgid "Temporary failure. Please wait and try again." msgstr "" -#: ../../mod/dfrn_confirm.php:269 +#: ../../mod/dfrn_confirm.php:271 msgid "Introduction failed or was revoked." msgstr "" -#: ../../mod/dfrn_confirm.php:387 +#: ../../mod/dfrn_confirm.php:393 msgid "Unable to set contact photo." msgstr "" -#: ../../mod/dfrn_confirm.php:430 ../../include/conversation.php:61 +#: ../../mod/dfrn_confirm.php:436 ../../include/conversation.php:79 #, php-format msgid "%1$s is now friends with %2$s" msgstr "" -#: ../../mod/dfrn_confirm.php:501 +#: ../../mod/dfrn_confirm.php:507 #, php-format msgid "No user record found for '%s' " msgstr "" -#: ../../mod/dfrn_confirm.php:511 +#: ../../mod/dfrn_confirm.php:517 msgid "Our site encryption key is apparently messed up." msgstr "" -#: ../../mod/dfrn_confirm.php:522 +#: ../../mod/dfrn_confirm.php:528 msgid "Empty site URL was provided or URL could not be decrypted by us." msgstr "" -#: ../../mod/dfrn_confirm.php:534 +#: ../../mod/dfrn_confirm.php:549 msgid "Contact record was not found for you on our site." msgstr "" -#: ../../mod/dfrn_confirm.php:562 +#: ../../mod/dfrn_confirm.php:578 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:573 +#: ../../mod/dfrn_confirm.php:589 msgid "Unable to set your contact credentials on our system." msgstr "" -#: ../../mod/dfrn_confirm.php:626 +#: ../../mod/dfrn_confirm.php:642 msgid "Unable to update your contact profile details on our system" msgstr "" -#: ../../mod/dfrn_confirm.php:656 +#: ../../mod/dfrn_confirm.php:672 #, php-format msgid "Connection accepted at %s" msgstr "" -#: ../../addon/facebook/facebook.php:248 +#: ../../addon/facebook/facebook.php:314 msgid "Facebook disabled" msgstr "" -#: ../../addon/facebook/facebook.php:253 +#: ../../addon/facebook/facebook.php:319 msgid "Updating contacts" msgstr "" -#: ../../addon/facebook/facebook.php:262 +#: ../../addon/facebook/facebook.php:328 msgid "Facebook API key is missing." msgstr "" -#: ../../addon/facebook/facebook.php:269 +#: ../../addon/facebook/facebook.php:335 msgid "Facebook Connect" msgstr "" -#: ../../addon/facebook/facebook.php:275 +#: ../../addon/facebook/facebook.php:341 msgid "Install Facebook connector for this account." msgstr "" -#: ../../addon/facebook/facebook.php:282 +#: ../../addon/facebook/facebook.php:348 msgid "Remove Facebook connector" msgstr "" -#: ../../addon/facebook/facebook.php:288 +#: ../../addon/facebook/facebook.php:354 msgid "Post to Facebook by default" msgstr "" -#: ../../addon/facebook/facebook.php:350 +#: ../../addon/facebook/facebook.php:358 +msgid "Link all your Facebook friends and conversations" +msgstr "" + +#: ../../addon/facebook/facebook.php:363 +msgid "Warning: Your Facebook privacy settings can not be imported." +msgstr "" + +#: ../../addon/facebook/facebook.php:364 +msgid "" +"Linked Facebook items may be publicly visible, depending on " +"your privacy settings for this website/account." +msgstr "" + +#: ../../addon/facebook/facebook.php:419 msgid "Facebook" msgstr "" -#: ../../addon/facebook/facebook.php:351 +#: ../../addon/facebook/facebook.php:420 msgid "Facebook Connector Settings" msgstr "" -#: ../../addon/facebook/facebook.php:365 +#: ../../addon/facebook/facebook.php:434 msgid "Post to Facebook" msgstr "" -#: ../../addon/facebook/facebook.php:434 +#: ../../addon/facebook/facebook.php:507 msgid "" "Post to Facebook cancelled because of multi-network access permission " "conflict." msgstr "" -#: ../../addon/facebook/facebook.php:500 +#: ../../addon/facebook/facebook.php:580 msgid "Image: " msgstr "" -#: ../../addon/facebook/facebook.php:576 +#: ../../addon/facebook/facebook.php:656 msgid "View on Friendika" msgstr "" -#: ../../addon/widgets/widgets.php:41 -msgid "Widgets key: " +#: ../../addon/facebook/facebook.php:687 +msgid "Facebook post failed. Queued for retry." msgstr "" -#: ../../addon/widgets/widgets.php:45 +#: ../../addon/widgets/widgets.php:53 msgid "Generate new key" msgstr "" +#: ../../addon/widgets/widgets.php:56 +msgid "Widgets key" +msgstr "" + +#: ../../addon/widgets/widgets.php:58 +msgid "Widgets available" +msgstr "" + #: ../../addon/widgets/widget_friends.php:30 msgid "Connect on Friendika!" msgstr "" -#: ../../addon/tictac/tictac.php:14 +#: ../../addon/tictac/tictac.php:20 msgid "Three Dimensional Tic-Tac-Toe" msgstr "" -#: ../../addon/tictac/tictac.php:47 +#: ../../addon/tictac/tictac.php:53 msgid "3D Tic-Tac-Toe" msgstr "" -#: ../../addon/tictac/tictac.php:52 +#: ../../addon/tictac/tictac.php:58 msgid "New game" msgstr "" -#: ../../addon/tictac/tictac.php:53 +#: ../../addon/tictac/tictac.php:59 msgid "New game with handicap" msgstr "" -#: ../../addon/tictac/tictac.php:54 +#: ../../addon/tictac/tictac.php:60 msgid "" "Three dimensional tic-tac-toe is just like the traditional game except that " "it is played on multiple levels simultaneously. " msgstr "" -#: ../../addon/tictac/tictac.php:55 +#: ../../addon/tictac/tictac.php:61 msgid "" "In this case there are three levels. You win by getting three in a row on " "any level, as well as up, down, and diagonally across the different levels." msgstr "" -#: ../../addon/tictac/tictac.php:57 +#: ../../addon/tictac/tictac.php:63 msgid "" "The handicap game disables the center position on the middle level because " "the player claiming this square often has an unfair advantage." msgstr "" -#: ../../addon/tictac/tictac.php:176 +#: ../../addon/tictac/tictac.php:182 msgid "You go first..." msgstr "" -#: ../../addon/tictac/tictac.php:181 +#: ../../addon/tictac/tictac.php:187 msgid "I'm going first this time..." msgstr "" -#: ../../addon/tictac/tictac.php:187 +#: ../../addon/tictac/tictac.php:193 msgid "You won!" msgstr "" -#: ../../addon/tictac/tictac.php:193 ../../addon/tictac/tictac.php:218 +#: ../../addon/tictac/tictac.php:199 ../../addon/tictac/tictac.php:224 msgid "\"Cat\" game!" msgstr "" -#: ../../addon/tictac/tictac.php:216 +#: ../../addon/tictac/tictac.php:222 msgid "I won!" msgstr "" -#: ../../addon/randplace/randplace.php:171 +#: ../../addon/randplace/randplace.php:170 msgid "Randplace Settings" msgstr "" -#: ../../addon/randplace/randplace.php:173 +#: ../../addon/randplace/randplace.php:172 msgid "Enable Randplace Plugin" msgstr "" -#: ../../addon/java_upload/java_upload.php:33 -msgid "Select files to upload: " -msgstr "" - -#: ../../addon/java_upload/java_upload.php:35 -msgid "" -"Use the following controls only if the Java uploader [above] fails to launch." -msgstr "" - -#: ../../addon/js_upload/js_upload.php:39 +#: ../../addon/js_upload/js_upload.php:43 msgid "Upload a file" msgstr "" -#: ../../addon/js_upload/js_upload.php:40 +#: ../../addon/js_upload/js_upload.php:44 msgid "Drop files here to upload" msgstr "" -#: ../../addon/js_upload/js_upload.php:42 +#: ../../addon/js_upload/js_upload.php:46 msgid "Failed" msgstr "" -#: ../../addon/js_upload/js_upload.php:288 +#: ../../addon/js_upload/js_upload.php:292 msgid "No files were uploaded." msgstr "" -#: ../../addon/js_upload/js_upload.php:294 +#: ../../addon/js_upload/js_upload.php:298 msgid "Uploaded file is empty" msgstr "" -#: ../../addon/js_upload/js_upload.php:299 -msgid "Uploaded file is too large" -msgstr "" - -#: ../../addon/js_upload/js_upload.php:317 +#: ../../addon/js_upload/js_upload.php:321 msgid "File has an invalid extension, it should be one of " msgstr "" -#: ../../addon/js_upload/js_upload.php:328 +#: ../../addon/js_upload/js_upload.php:332 msgid "Upload was cancelled, or server error encountered" msgstr "" -#: ../../addon/oembed/oembed.php:29 +#: ../../addon/impressum/impressum.php:25 +msgid "Impressum" +msgstr "" + +#: ../../addon/impressum/impressum.php:38 +#: ../../addon/impressum/impressum.php:40 +#: ../../addon/impressum/impressum.php:70 +msgid "Site Owner" +msgstr "" + +#: ../../addon/impressum/impressum.php:38 +#: ../../addon/impressum/impressum.php:74 +msgid "Email Address" +msgstr "" + +#: ../../addon/impressum/impressum.php:43 +#: ../../addon/impressum/impressum.php:72 +msgid "Postal Address" +msgstr "" + +#: ../../addon/impressum/impressum.php:49 +msgid "" +"The impressum addon needs to be configured!
Please add at least the " +"owner variable to your config file. For other variables please " +"refer to the README file of the addon." +msgstr "" + +#: ../../addon/impressum/impressum.php:71 +msgid "Site Owners Profile" +msgstr "" + +#: ../../addon/impressum/impressum.php:73 +msgid "Notes" +msgstr "" + +#: ../../addon/oembed/oembed.php:30 msgid "OEmbed settings updated" msgstr "" -#: ../../addon/oembed/oembed.php:42 -msgid "Use OEmbed for YouTube videos: " +#: ../../addon/oembed/oembed.php:43 +msgid "Use OEmbed for YouTube videos" msgstr "" -#: ../../addon/oembed/oembed.php:76 +#: ../../addon/oembed/oembed.php:71 msgid "URL to embed:" msgstr "" -#: ../../addon/statusnet/statusnet.php:78 +#: ../../addon/statusnet/statusnet.php:133 msgid "Post to StatusNet" msgstr "" -#: ../../addon/statusnet/statusnet.php:117 +#: ../../addon/statusnet/statusnet.php:175 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." msgstr "" -#: ../../addon/statusnet/statusnet.php:145 +#: ../../addon/statusnet/statusnet.php:203 msgid "We could not contact the StatusNet API with the Path you entered." msgstr "" -#: ../../addon/statusnet/statusnet.php:172 +#: ../../addon/statusnet/statusnet.php:230 msgid "StatusNet settings updated." msgstr "" -#: ../../addon/statusnet/statusnet.php:195 +#: ../../addon/statusnet/statusnet.php:253 msgid "StatusNet Posting Settings" msgstr "" -#: ../../addon/statusnet/statusnet.php:209 +#: ../../addon/statusnet/statusnet.php:267 msgid "Globally Available StatusNet OAuthKeys" msgstr "" -#: ../../addon/statusnet/statusnet.php:210 +#: ../../addon/statusnet/statusnet.php:268 msgid "" "There are preconfigured OAuth key pairs for some StatusNet servers " "available. If you are useing one of them, please use these credentials. If " "not feel free to connect to any other StatusNet instance (see below)." msgstr "" -#: ../../addon/statusnet/statusnet.php:218 +#: ../../addon/statusnet/statusnet.php:276 msgid "Provide your own OAuth Credentials" msgstr "" -#: ../../addon/statusnet/statusnet.php:219 +#: ../../addon/statusnet/statusnet.php:277 msgid "" "No consumer key pair for StatusNet found. Register your Friendika Account as " "an desktop client on your StatusNet account, copy the consumer key pair here " @@ -2687,19 +3366,19 @@ msgid "" "installation at your favorited StatusNet installation." msgstr "" -#: ../../addon/statusnet/statusnet.php:221 +#: ../../addon/statusnet/statusnet.php:279 msgid "OAuth Consumer Key" msgstr "" -#: ../../addon/statusnet/statusnet.php:224 +#: ../../addon/statusnet/statusnet.php:282 msgid "OAuth Consumer Secret" msgstr "" -#: ../../addon/statusnet/statusnet.php:227 +#: ../../addon/statusnet/statusnet.php:285 msgid "Base API Path (remember the trailing /)" msgstr "" -#: ../../addon/statusnet/statusnet.php:248 +#: ../../addon/statusnet/statusnet.php:306 msgid "" "To connect to your StatusNet account click the button below to get a " "security code from StatusNet which you have to copy into the input box below " @@ -2707,63 +3386,92 @@ msgid "" "to StatusNet." msgstr "" -#: ../../addon/statusnet/statusnet.php:249 +#: ../../addon/statusnet/statusnet.php:307 msgid "Log in with StatusNet" msgstr "" -#: ../../addon/statusnet/statusnet.php:251 +#: ../../addon/statusnet/statusnet.php:309 msgid "Copy the security code from StatusNet here" msgstr "" -#: ../../addon/statusnet/statusnet.php:257 +#: ../../addon/statusnet/statusnet.php:315 msgid "Cancel Connection Process" msgstr "" -#: ../../addon/statusnet/statusnet.php:259 +#: ../../addon/statusnet/statusnet.php:317 msgid "Current StatusNet API is" msgstr "" -#: ../../addon/statusnet/statusnet.php:260 +#: ../../addon/statusnet/statusnet.php:318 msgid "Cancel StatusNet Connection" msgstr "" -#: ../../addon/statusnet/statusnet.php:271 ../../addon/twitter/twitter.php:165 +#: ../../addon/statusnet/statusnet.php:329 ../../addon/twitter/twitter.php:180 msgid "Currently connected to: " msgstr "" -#: ../../addon/statusnet/statusnet.php:272 +#: ../../addon/statusnet/statusnet.php:330 msgid "" -"If enabled all your public postings will be posted to the " -"associated StatusNet account." +"If enabled all your public postings can be posted to the " +"associated StatusNet account. You can choose to do so by default (here) or " +"for every posting separately in the posting options when writing the entry." msgstr "" -#: ../../addon/statusnet/statusnet.php:274 +#: ../../addon/statusnet/statusnet.php:332 msgid "Allow posting to StatusNet" msgstr "" -#: ../../addon/statusnet/statusnet.php:277 +#: ../../addon/statusnet/statusnet.php:335 msgid "Send public postings to StatusNet by default" msgstr "" -#: ../../addon/statusnet/statusnet.php:282 ../../addon/twitter/twitter.php:172 +#: ../../addon/statusnet/statusnet.php:340 ../../addon/twitter/twitter.php:191 msgid "Clear OAuth configuration" msgstr "" -#: ../../addon/twitter/twitter.php:64 +#: ../../addon/statusnet/statusnet.php:460 +msgid "API URL" +msgstr "" + +#: ../../addon/statusnet/statusnet.php:461 +msgid "Consumer Secret" +msgstr "" + +#: ../../addon/statusnet/statusnet.php:462 +msgid "Consumer Key" +msgstr "" + +#: ../../addon/piwik/piwik.php:77 +msgid "Piwik Base URL" +msgstr "" + +#: ../../addon/piwik/piwik.php:78 +msgid "Site ID" +msgstr "" + +#: ../../addon/piwik/piwik.php:79 +msgid "Show opt-out cookie link?" +msgstr "" + +#: ../../addon/twitter/twitter.php:70 msgid "Post to Twitter" msgstr "" -#: ../../addon/twitter/twitter.php:122 +#: ../../addon/twitter/twitter.php:115 +msgid "Twitter settings updated." +msgstr "" + +#: ../../addon/twitter/twitter.php:137 msgid "Twitter Posting Settings" msgstr "" -#: ../../addon/twitter/twitter.php:129 +#: ../../addon/twitter/twitter.php:144 msgid "" "No consumer key pair for Twitter found. Please contact your site " "administrator." msgstr "" -#: ../../addon/twitter/twitter.php:148 +#: ../../addon/twitter/twitter.php:163 msgid "" "At this Friendika instance the Twitter plugin was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " @@ -2772,29 +3480,42 @@ msgid "" "be posted to Twitter." msgstr "" -#: ../../addon/twitter/twitter.php:149 +#: ../../addon/twitter/twitter.php:164 msgid "Log in with Twitter" msgstr "" -#: ../../addon/twitter/twitter.php:151 +#: ../../addon/twitter/twitter.php:166 msgid "Copy the PIN from Twitter here" msgstr "" -#: ../../addon/twitter/twitter.php:166 +#: ../../addon/twitter/twitter.php:181 msgid "" -"If enabled all your public postings will be posted to the " -"associated Twitter account as well." +"If enabled all your public postings can be posted to the " +"associated Twitter account. You can choose to do so by default (here) or for " +"every posting separately in the posting options when writing the entry." msgstr "" -#: ../../addon/twitter/twitter.php:168 -msgid "Send public postings to Twitter" +#: ../../addon/twitter/twitter.php:183 +msgid "Allow posting to Twitter" msgstr "" -#: ../../include/profile_advanced.php:23 ../../boot.php:2356 +#: ../../addon/twitter/twitter.php:186 +msgid "Send public postings to Twitter by default" +msgstr "" + +#: ../../addon/twitter/twitter.php:282 +msgid "Consumer key" +msgstr "" + +#: ../../addon/twitter/twitter.php:283 +msgid "Consumer secret" +msgstr "" + +#: ../../include/profile_advanced.php:23 ../../boot.php:880 msgid "Gender:" msgstr "" -#: ../../include/profile_advanced.php:36 ../../include/items.php:1086 +#: ../../include/profile_advanced.php:36 ../../include/items.php:1137 msgid "Birthday:" msgstr "" @@ -2814,7 +3535,7 @@ msgstr "" msgid " Status:" msgstr "" -#: ../../include/profile_advanced.php:103 ../../boot.php:2362 +#: ../../include/profile_advanced.php:103 ../../boot.php:886 msgid "Homepage:" msgstr "" @@ -3122,6 +3843,133 @@ msgstr "" msgid "Ask me" msgstr "" +#: ../../include/event.php:11 +msgid "l F d, Y \\@ g:i A" +msgstr "" + +#: ../../include/event.php:17 +msgid "Starts:" +msgstr "" + +#: ../../include/event.php:27 +msgid "Finishes:" +msgstr "" + +#: ../../include/text.php:229 +msgid "prev" +msgstr "" + +#: ../../include/text.php:231 +msgid "first" +msgstr "" + +#: ../../include/text.php:260 +msgid "last" +msgstr "" + +#: ../../include/text.php:263 +msgid "next" +msgstr "" + +#: ../../include/text.php:542 +msgid "No contacts" +msgstr "" + +#: ../../include/text.php:550 +#, php-format +msgid "%d Contact" +msgid_plural "%d Contacts" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/text.php:711 +msgid "Monday" +msgstr "" + +#: ../../include/text.php:711 +msgid "Tuesday" +msgstr "" + +#: ../../include/text.php:711 +msgid "Wednesday" +msgstr "" + +#: ../../include/text.php:711 +msgid "Thursday" +msgstr "" + +#: ../../include/text.php:711 +msgid "Friday" +msgstr "" + +#: ../../include/text.php:711 +msgid "Saturday" +msgstr "" + +#: ../../include/text.php:711 +msgid "Sunday" +msgstr "" + +#: ../../include/text.php:715 +msgid "January" +msgstr "" + +#: ../../include/text.php:715 +msgid "February" +msgstr "" + +#: ../../include/text.php:715 +msgid "March" +msgstr "" + +#: ../../include/text.php:715 +msgid "April" +msgstr "" + +#: ../../include/text.php:715 +msgid "May" +msgstr "" + +#: ../../include/text.php:715 +msgid "June" +msgstr "" + +#: ../../include/text.php:715 +msgid "July" +msgstr "" + +#: ../../include/text.php:715 +msgid "August" +msgstr "" + +#: ../../include/text.php:715 +msgid "September" +msgstr "" + +#: ../../include/text.php:715 +msgid "October" +msgstr "" + +#: ../../include/text.php:715 +msgid "November" +msgstr "" + +#: ../../include/text.php:715 +msgid "December" +msgstr "" + +#: ../../include/text.php:778 +msgid "bytes" +msgstr "" + +#: ../../include/text.php:861 +msgid "Select an alternate language" +msgstr "" + +#: ../../include/diaspora.php:309 +msgid "Sharing notification from Diaspora network" +msgstr "" + #: ../../include/oembed.php:95 msgid "Embedding disabled" msgstr "" @@ -3134,40 +3982,108 @@ msgstr "" msgid "Everybody" msgstr "" -#: ../../include/nav.php:41 ../../boot.php:865 +#: ../../include/nav.php:41 ../../boot.php:667 msgid "Logout" msgstr "" -#: ../../include/nav.php:44 ../../boot.php:843 ../../boot.php:849 +#: ../../include/nav.php:41 +msgid "End this session" +msgstr "" + +#: ../../include/nav.php:44 ../../boot.php:645 ../../boot.php:651 msgid "Login" msgstr "" -#: ../../include/nav.php:55 ../../include/nav.php:92 +#: ../../include/nav.php:44 +msgid "Sign in" +msgstr "" + +#: ../../include/nav.php:55 ../../include/nav.php:93 msgid "Home" msgstr "" -#: ../../include/nav.php:68 +#: ../../include/nav.php:55 +msgid "Home Page" +msgstr "" + +#: ../../include/nav.php:59 +msgid "Create an account" +msgstr "" + +#: ../../include/nav.php:64 +msgid "Help and documentation" +msgstr "" + +#: ../../include/nav.php:67 msgid "Apps" msgstr "" -#: ../../include/nav.php:80 +#: ../../include/nav.php:67 +msgid "Addon applications, utilities, games" +msgstr "" + +#: ../../include/nav.php:69 +msgid "Search site content" +msgstr "" + +#: ../../include/nav.php:79 +msgid "Conversations on this site" +msgstr "" + +#: ../../include/nav.php:81 msgid "Directory" msgstr "" -#: ../../include/nav.php:90 +#: ../../include/nav.php:81 +msgid "People directory" +msgstr "" + +#: ../../include/nav.php:91 msgid "Network" msgstr "" -#: ../../include/nav.php:98 +#: ../../include/nav.php:91 +msgid "Conversations from your friends" +msgstr "" + +#: ../../include/nav.php:93 +msgid "Your posts and conversations" +msgstr "" + +#: ../../include/nav.php:99 msgid "Notifications" msgstr "" -#: ../../include/nav.php:104 +#: ../../include/nav.php:99 +msgid "Friend requests" +msgstr "" + +#: ../../include/nav.php:102 +msgid "Private mail" +msgstr "" + +#: ../../include/nav.php:105 msgid "Manage" msgstr "" -#: ../../include/nav.php:107 -msgid "Settings" +#: ../../include/nav.php:105 +msgid "Manage other pages" +msgstr "" + +#: ../../include/nav.php:109 +msgid "Manage/edit profiles" +msgstr "" + +#: ../../include/nav.php:110 +msgid "Manage/edit friends and contacts" +msgstr "" + +#: ../../include/nav.php:117 +msgid "Admin" +msgstr "" + +#: ../../include/nav.php:117 +msgid "Site setup and configuration" msgstr "" #: ../../include/auth.php:27 @@ -3178,71 +4094,79 @@ msgstr "" msgid "Miscellaneous" msgstr "" -#: ../../include/datetime.php:148 -msgid "less than a second ago" -msgstr "" - -#: ../../include/datetime.php:151 +#: ../../include/datetime.php:105 ../../include/datetime.php:237 msgid "year" msgstr "" -#: ../../include/datetime.php:151 -msgid "years" -msgstr "" - -#: ../../include/datetime.php:152 +#: ../../include/datetime.php:110 ../../include/datetime.php:238 msgid "month" msgstr "" -#: ../../include/datetime.php:152 -msgid "months" -msgstr "" - -#: ../../include/datetime.php:153 -msgid "week" -msgstr "" - -#: ../../include/datetime.php:153 -msgid "weeks" -msgstr "" - -#: ../../include/datetime.php:154 +#: ../../include/datetime.php:115 ../../include/datetime.php:240 msgid "day" msgstr "" -#: ../../include/datetime.php:155 +#: ../../include/datetime.php:228 +msgid "never" +msgstr "" + +#: ../../include/datetime.php:234 +msgid "less than a second ago" +msgstr "" + +#: ../../include/datetime.php:237 +msgid "years" +msgstr "" + +#: ../../include/datetime.php:238 +msgid "months" +msgstr "" + +#: ../../include/datetime.php:239 +msgid "week" +msgstr "" + +#: ../../include/datetime.php:239 +msgid "weeks" +msgstr "" + +#: ../../include/datetime.php:240 +msgid "days" +msgstr "" + +#: ../../include/datetime.php:241 msgid "hour" msgstr "" -#: ../../include/datetime.php:155 +#: ../../include/datetime.php:241 msgid "hours" msgstr "" -#: ../../include/datetime.php:156 +#: ../../include/datetime.php:242 msgid "minute" msgstr "" -#: ../../include/datetime.php:156 +#: ../../include/datetime.php:242 msgid "minutes" msgstr "" -#: ../../include/datetime.php:157 +#: ../../include/datetime.php:243 msgid "second" msgstr "" -#: ../../include/datetime.php:157 +#: ../../include/datetime.php:243 msgid "seconds" msgstr "" -#: ../../include/datetime.php:164 +#: ../../include/datetime.php:250 msgid " ago" msgstr "" -#: ../../include/poller.php:380 +#: ../../include/poller.php:418 msgid "From: " msgstr "" -#: ../../include/bbcode.php:83 +#: ../../include/bbcode.php:116 msgid "Image/photo" msgstr "" @@ -3251,327 +4175,229 @@ msgstr "" msgid "Cannot locate DNS info for database server '%s'" msgstr "" -#: ../../include/acl_selectors.php:133 -msgid "Visible To:" +#: ../../include/acl_selectors.php:279 +msgid "Visible to everybody" msgstr "" -#: ../../include/acl_selectors.php:133 -msgid "everybody" +#: ../../include/acl_selectors.php:280 +msgid "show" msgstr "" -#: ../../include/acl_selectors.php:137 ../../include/acl_selectors.php:152 -msgid "Groups" +#: ../../include/acl_selectors.php:281 +msgid "don't show" msgstr "" -#: ../../include/acl_selectors.php:148 -msgid "Except For:" -msgstr "" - -#: ../../include/notifier.php:414 +#: ../../include/notifier.php:465 msgid "(no subject)" msgstr "" -#: ../../include/items.php:1447 +#: ../../include/items.php:1526 msgid "You have a new follower at " msgstr "" -#: ../../include/conversation.php:191 ../../include/conversation.php:451 -#: ../../include/conversation.php:452 +#: ../../include/conversation.php:23 +msgid "event" +msgstr "" + +#: ../../include/conversation.php:213 ../../include/conversation.php:488 +#: ../../include/conversation.php:489 #, php-format msgid "View %s's profile" msgstr "" -#: ../../include/conversation.php:207 +#: ../../include/conversation.php:222 ../../include/conversation.php:501 +#, php-format +msgid "%s from %s" +msgstr "" + +#: ../../include/conversation.php:230 msgid "View in context" msgstr "" -#: ../../include/conversation.php:278 +#: ../../include/conversation.php:301 msgid "See more posts like this" msgstr "" -#: ../../include/conversation.php:303 +#: ../../include/conversation.php:329 #, php-format msgid "See all %d comments" msgstr "" -#: ../../include/conversation.php:453 +#: ../../include/conversation.php:427 +msgid "Select" +msgstr "" + +#: ../../include/conversation.php:429 +msgid "toggle star status" +msgstr "" + +#: ../../include/conversation.php:490 msgid "to" msgstr "" -#: ../../include/conversation.php:454 +#: ../../include/conversation.php:491 msgid "Wall-to-Wall" msgstr "" -#: ../../include/conversation.php:455 +#: ../../include/conversation.php:492 msgid "via Wall-To-Wall:" msgstr "" -#: ../../include/conversation.php:593 +#: ../../include/conversation.php:534 +msgid "Delete Selected Items" +msgstr "" + +#: ../../include/conversation.php:608 msgid "View status" msgstr "" -#: ../../include/conversation.php:594 +#: ../../include/conversation.php:609 msgid "View profile" msgstr "" -#: ../../include/conversation.php:595 +#: ../../include/conversation.php:610 msgid "View photos" msgstr "" -#: ../../include/conversation.php:596 +#: ../../include/conversation.php:611 msgid "View recent" msgstr "" -#: ../../include/conversation.php:598 +#: ../../include/conversation.php:613 msgid "Send PM" msgstr "" -#: ../../include/conversation.php:648 -#, php-format -msgid "%s likes this." -msgstr "" - -#: ../../include/conversation.php:648 -#, php-format -msgid "%s doesn't like this." -msgstr "" - -#: ../../include/conversation.php:652 -#, php-format -msgid "%2$d people like this." -msgstr "" - -#: ../../include/conversation.php:654 -#, php-format -msgid "%2$d people don't like this." -msgstr "" - -#: ../../include/conversation.php:660 -msgid "and" -msgstr "" - #: ../../include/conversation.php:663 #, php-format +msgid "%s likes this." +msgstr "" + +#: ../../include/conversation.php:663 +#, php-format +msgid "%s doesn't like this." +msgstr "" + +#: ../../include/conversation.php:667 +#, php-format +msgid "%2$d people like this." +msgstr "" + +#: ../../include/conversation.php:669 +#, php-format +msgid "%2$d people don't like this." +msgstr "" + +#: ../../include/conversation.php:675 +msgid "and" +msgstr "" + +#: ../../include/conversation.php:678 +#, php-format msgid ", and %d other people" msgstr "" -#: ../../include/conversation.php:664 +#: ../../include/conversation.php:679 #, php-format msgid "%s like this." msgstr "" -#: ../../include/conversation.php:664 +#: ../../include/conversation.php:679 #, php-format msgid "%s don't like this." msgstr "" -#: ../../include/conversation.php:683 +#: ../../include/conversation.php:698 msgid "Visible to everybody" msgstr "" -#: ../../include/conversation.php:685 +#: ../../include/conversation.php:700 msgid "Please enter a YouTube link:" msgstr "" -#: ../../include/conversation.php:686 +#: ../../include/conversation.php:701 msgid "Please enter a video(.ogg) link/URL:" msgstr "" -#: ../../include/conversation.php:687 +#: ../../include/conversation.php:702 msgid "Please enter an audio(.ogg) link/URL:" msgstr "" -#: ../../include/conversation.php:688 +#: ../../include/conversation.php:703 msgid "Where are you right now?" msgstr "" -#: ../../include/conversation.php:689 +#: ../../include/conversation.php:704 msgid "Enter a title for this item" msgstr "" -#: ../../include/conversation.php:740 +#: ../../include/conversation.php:755 msgid "Set title" msgstr "" -#: ../../boot.php:385 +#: ../../boot.php:410 msgid "Delete this item?" msgstr "" -#: ../../boot.php:834 +#: ../../boot.php:636 msgid "Create a New Account" msgstr "" -#: ../../boot.php:841 +#: ../../boot.php:643 msgid "Nickname or Email address: " msgstr "" -#: ../../boot.php:842 +#: ../../boot.php:644 msgid "Password: " msgstr "" -#: ../../boot.php:847 +#: ../../boot.php:649 msgid "Nickname/Email/OpenID: " msgstr "" -#: ../../boot.php:848 +#: ../../boot.php:650 msgid "Password (if not OpenID): " msgstr "" -#: ../../boot.php:851 +#: ../../boot.php:653 msgid "Forgot your password?" msgstr "" -#: ../../boot.php:1113 -msgid "prev" -msgstr "" - -#: ../../boot.php:1115 -msgid "first" -msgstr "" - -#: ../../boot.php:1144 -msgid "last" -msgstr "" - -#: ../../boot.php:1147 -msgid "next" -msgstr "" - -#: ../../boot.php:2046 -msgid "No contacts" -msgstr "" - -#: ../../boot.php:2054 -#, php-format -msgid "%d Contact" -msgid_plural "%d Contacts" -msgstr[0] "" -msgstr[1] "" - -#: ../../boot.php:2329 +#: ../../boot.php:853 msgid "Connect" msgstr "" -#: ../../boot.php:2344 -msgid "Location:" -msgstr "" - -#: ../../boot.php:2348 +#: ../../boot.php:872 msgid ", " msgstr "" -#: ../../boot.php:2360 +#: ../../boot.php:884 msgid "Status:" msgstr "" -#: ../../boot.php:2457 -msgid "Monday" -msgstr "" - -#: ../../boot.php:2457 -msgid "Tuesday" -msgstr "" - -#: ../../boot.php:2457 -msgid "Wednesday" -msgstr "" - -#: ../../boot.php:2457 -msgid "Thursday" -msgstr "" - -#: ../../boot.php:2457 -msgid "Friday" -msgstr "" - -#: ../../boot.php:2457 -msgid "Saturday" -msgstr "" - -#: ../../boot.php:2457 -msgid "Sunday" -msgstr "" - -#: ../../boot.php:2461 -msgid "January" -msgstr "" - -#: ../../boot.php:2461 -msgid "February" -msgstr "" - -#: ../../boot.php:2461 -msgid "March" -msgstr "" - -#: ../../boot.php:2461 -msgid "April" -msgstr "" - -#: ../../boot.php:2461 -msgid "May" -msgstr "" - -#: ../../boot.php:2461 -msgid "June" -msgstr "" - -#: ../../boot.php:2461 -msgid "July" -msgstr "" - -#: ../../boot.php:2461 -msgid "August" -msgstr "" - -#: ../../boot.php:2461 -msgid "September" -msgstr "" - -#: ../../boot.php:2461 -msgid "October" -msgstr "" - -#: ../../boot.php:2461 -msgid "November" -msgstr "" - -#: ../../boot.php:2461 -msgid "December" -msgstr "" - -#: ../../boot.php:2476 +#: ../../boot.php:975 msgid "g A l F d" msgstr "" -#: ../../boot.php:2494 +#: ../../boot.php:993 msgid "Birthday Reminders" msgstr "" -#: ../../boot.php:2495 +#: ../../boot.php:994 msgid "Birthdays this week:" msgstr "" -#: ../../boot.php:2496 +#: ../../boot.php:995 msgid "(Adjusted for local time)" msgstr "" -#: ../../boot.php:2507 +#: ../../boot.php:1006 msgid "[today]" msgstr "" -#: ../../boot.php:2570 -msgid "bytes" -msgstr "" - -#: ../../boot.php:2744 -msgid "link to source" -msgstr "" - -#: ../../index.php:199 +#: ../../index.php:209 msgid "Not Found" msgstr "" -#: ../../index.php:200 +#: ../../index.php:210 msgid "Page not found." msgstr "" diff --git a/util/strings.php b/util/strings.php index a9591b0c25..d0e36217b1 100644 --- a/util/strings.php +++ b/util/strings.php @@ -1,1391 +1,1033 @@ strings['Not Found'] = 'Not Found'; -$a->strings['Page not found.' ] = 'Page not found.' ; -$a->strings['Permission denied'] = 'Permission denied'; -$a->strings['Permission denied.'] = 'Permission denied.'; -$a->strings['Delete this item?'] = 'Delete this item?'; -$a->strings['Comment'] = 'Comment'; -$a->strings['Create a New Account'] = 'Create a New Account'; -$a->strings['Register'] = 'Register'; -$a->strings['Nickname or Email address: '] = 'Nickname or Email address: '; -$a->strings['Password: '] = 'Password: '; -$a->strings['Login'] = 'Login'; -$a->strings['Nickname/Email/OpenID: '] = 'Nickname/Email/OpenID: '; -$a->strings["Password \x28if not OpenID\x29: "] = "Password \x28if not OpenID\x29: "; -$a->strings['Forgot your password?'] = 'Forgot your password?'; -$a->strings['Password Reset'] = 'Password Reset'; -$a->strings['Logout'] = 'Logout'; -$a->strings['prev'] = 'prev'; -$a->strings['first'] = 'first'; -$a->strings['last'] = 'last'; -$a->strings['next'] = 'next'; -$a->strings['No contacts'] = 'No contacts'; -$a->strings['View Contacts'] = 'View Contacts'; -$a->strings['Search'] = 'Search'; -$a->strings['No profile'] = 'No profile'; -$a->strings['Connect'] = 'Connect'; -$a->strings['Location:'] = 'Location:'; -$a->strings[', '] = ', '; -$a->strings['Gender:'] = 'Gender:'; -$a->strings['Status:'] = 'Status:'; -$a->strings['Homepage:'] = 'Homepage:'; -$a->strings['Monday'] = 'Monday'; -$a->strings['Tuesday'] = 'Tuesday'; -$a->strings['Wednesday'] = 'Wednesday'; -$a->strings['Thursday'] = 'Thursday'; -$a->strings['Friday'] = 'Friday'; -$a->strings['Saturday'] = 'Saturday'; -$a->strings['Sunday'] = 'Sunday'; -$a->strings['January'] = 'January'; -$a->strings['February'] = 'February'; -$a->strings['March'] = 'March'; -$a->strings['April'] = 'April'; -$a->strings['May'] = 'May'; -$a->strings['June'] = 'June'; -$a->strings['July'] = 'July'; -$a->strings['August'] = 'August'; -$a->strings['September'] = 'September'; -$a->strings['October'] = 'October'; -$a->strings['November'] = 'November'; -$a->strings['December'] = 'December'; -$a->strings['g A l F d'] = 'g A l F d'; -$a->strings['Birthday Reminders'] = 'Birthday Reminders'; -$a->strings['Birthdays this week:'] = 'Birthdays this week:'; -$a->strings["\x28Adjusted for local time\x29"] = "\x28Adjusted for local time\x29"; -$a->strings['[today]'] = '[today]'; -$a->strings['bytes'] = 'bytes'; -$a->strings['link to source'] = 'link to source'; -$a->strings['%d Contact'] = array( - 0 => '%d Contact', - 1 => '%d Contacts', -); -$a->strings['Applications'] = 'Applications'; -$a->strings['Private Notes'] = 'Private Notes'; -$a->strings['Item not available.'] = 'Item not available.'; -$a->strings['Item was not found.'] = 'Item was not found.'; -$a->strings["Invite Friends"] = "Invite Friends"; -$a->strings['Find People With Shared Interests'] = 'Find People With Shared Interests'; -$a->strings['Connect/Follow'] = 'Connect/Follow'; -$a->strings['Example: bob@example.com, http://example.com/barbara'] = 'Example: bob@example.com, http://example.com/barbara'; -$a->strings['Follow'] = 'Follow'; -$a->strings['Could not access contact record.'] = 'Could not access contact record.'; -$a->strings['Could not locate selected profile.'] = 'Could not locate selected profile.'; -$a->strings['Contact updated.'] = 'Contact updated.'; -$a->strings['Failed to update contact record.'] = 'Failed to update contact record.'; -$a->strings['Contact has been '] = 'Contact has been '; -$a->strings['blocked'] = 'blocked'; -$a->strings['unblocked'] = 'unblocked'; -$a->strings['Contact has been blocked'] = 'Contact has been blocked'; -$a->strings['Contact has been unblocked'] = 'Contact has been unblocked'; -$a->strings['Contact has been ignored'] = 'Contact has been ignored'; -$a->strings['Contact has been unignored'] = 'Contact has been unignored'; -$a->strings['stopped following'] = 'stopped following'; -$a->strings['Contact has been removed.'] = 'Contact has been removed.'; -$a->strings['Contact not found.'] = 'Contact not found.'; -$a->strings['Mutual Friendship'] = 'Mutual Friendship'; -$a->strings['is a fan of yours'] = 'is a fan of yours'; -$a->strings['you are a fan of'] = 'you are a fan of'; -$a->strings['Privacy Unavailable'] = 'Privacy Unavailable'; -$a->strings['Private communications are not available for this contact.'] = 'Private communications are not available for this contact.'; -$a->strings['Never'] = 'Never'; -$a->strings["\x28Update was successful\x29"] = "\x28Update was successful\x29"; -$a->strings["\x28Update was not successful\x29"] = "\x28Update was not successful\x29"; -$a->strings['Contact Editor'] = 'Contact Editor'; -$a->strings['Submit'] = 'Submit'; -$a->strings['Profile Visibility'] = 'Profile Visibility'; -$a->strings['Please choose the profile you would like to display to %s when viewing your profile securely.'] = 'Please choose the profile you would like to display to %s when viewing your profile securely.'; -$a->strings['Contact Information / Notes'] = 'Contact Information / Notes'; -$a->strings['Online Reputation'] = 'Online Reputation'; -$a->strings['Occasionally your friends may wish to inquire about this person\'s online legitimacy.'] = 'Occasionally your friends may wish to inquire about this person\'s online legitimacy.'; -$a->strings['You may help them choose whether or not to interact with this person by providing a reputation to guide them.'] = 'You may help them choose whether or not to interact with this person by providing a reputation to guide them.'; -$a->strings['Please take a moment to elaborate on this selection if you feel it could be helpful to others.'] = 'Please take a moment to elaborate on this selection if you feel it could be helpful to others.'; -$a->strings['Visit $name\'s profile'] = 'Visit $name\'s profile'; -$a->strings['Block/Unblock contact'] = 'Block/Unblock contact'; -$a->strings['Ignore contact'] = 'Ignore contact'; -$a->strings['Repair contact URL settings'] = 'Repair contact URL settings'; -$a->strings["Repair contact URL settings \x28WARNING: Advanced\x29"] = "Repair contact URL settings \x28WARNING: Advanced\x29"; -$a->strings['View conversations'] = 'View conversations'; -$a->strings['Delete contact'] = 'Delete contact'; -$a->strings['Last updated: '] = 'Last updated: '; -$a->strings['Update public posts: '] = 'Update public posts: '; -$a->strings['Update now'] = 'Update now'; -$a->strings['Unblock this contact'] = 'Unblock this contact'; -$a->strings['Block this contact'] = 'Block this contact'; -$a->strings['Unignore this contact'] = 'Unignore this contact'; -$a->strings['Ignore this contact'] = 'Ignore this contact'; -$a->strings['Currently blocked'] = 'Currently blocked'; -$a->strings['Currently ignored'] = 'Currently ignored'; -$a->strings['Contacts'] = 'Contacts'; -$a->strings['Show Blocked Connections'] = 'Show Blocked Connections'; -$a->strings['Hide Blocked Connections'] = 'Hide Blocked Connections'; -$a->strings['Finding: '] = 'Finding: '; -$a->strings['Find'] = 'Find'; -$a->strings['Visit $username\'s profile'] = 'Visit $username\'s profile'; -$a->strings['Edit contact'] = 'Edit contact'; -$a->strings['Contact settings applied.'] = 'Contact settings applied.'; -$a->strings['Contact update failed.'] = 'Contact update failed.'; -$a->strings['Repair Contact Settings'] = 'Repair Contact Settings'; -$a->strings['WARNING: This is highly advanced and if you enter incorrect information your communications with this contact will stop working.'] = 'WARNING: This is highly advanced and if you enter incorrect information your communications with this contact will stop working.'; -$a->strings['Please use your browser \'Back\' button now if you are uncertain what to do on this page.'] = 'Please use your browser \'Back\' button now if you are uncertain what to do on this page.'; -$a->strings['Name'] = 'Name'; -$a->strings['Account Nickname'] = 'Account Nickname'; -$a->strings['Account URL'] = 'Account URL'; -$a->strings['Friend Request URL'] = 'Friend Request URL'; -$a->strings['Friend Confirm URL'] = 'Friend Confirm URL'; -$a->strings['Notification Endpoint URL'] = 'Notification Endpoint URL'; -$a->strings['Poll/Feed URL'] = 'Poll/Feed URL'; -$a->strings['Profile not found.'] = 'Profile not found.'; -$a->strings['Response from remote site was not understood.'] = 'Response from remote site was not understood.'; -$a->strings['Unexpected response from remote site: '] = 'Unexpected response from remote site: '; -$a->strings["Confirmation completed successfully."] = "Confirmation completed successfully."; -$a->strings['Remote site reported: '] = 'Remote site reported: '; -$a->strings["Temporary failure. Please wait and try again."] = "Temporary failure. Please wait and try again."; -$a->strings["Introduction failed or was revoked."] = "Introduction failed or was revoked."; -$a->strings['Unable to set contact photo.'] = 'Unable to set contact photo.'; -$a->strings['%1$s is now friends with %2$s'] = '%1$s is now friends with %2$s'; -$a->strings['Our site encryption key is apparently messed up.'] = 'Our site encryption key is apparently messed up.'; -$a->strings['Empty site URL was provided or URL could not be decrypted by us.'] = 'Empty site URL was provided or URL could not be decrypted by us.'; -$a->strings['Contact record was not found for you on our site.'] = 'Contact record was not found for you on our site.'; -$a->strings['The ID provided by your system is a duplicate on our system. It should work if you try again.'] = 'The ID provided by your system is a duplicate on our system. It should work if you try again.'; -$a->strings['Unable to set your contact credentials on our system.'] = 'Unable to set your contact credentials on our system.'; -$a->strings['Unable to update your contact profile details on our system'] = 'Unable to update your contact profile details on our system'; -$a->strings["Connection accepted at %s"] = "Connection accepted at %s"; -$a->strings['Administrator'] = 'Administrator'; -$a->strings['noreply'] = 'noreply'; -$a->strings['%s commented on an item at %s'] = '%s commented on an item at %s'; -$a->strings["This introduction has already been accepted."] = "This introduction has already been accepted."; -$a->strings['Profile location is not valid or does not contain profile information.'] = 'Profile location is not valid or does not contain profile information.'; -$a->strings['Warning: profile location has no identifiable owner name.'] = 'Warning: profile location has no identifiable owner name.'; -$a->strings['Warning: profile location has no profile photo.'] = 'Warning: profile location has no profile photo.'; -$a->strings["Introduction complete."] = "Introduction complete."; -$a->strings['Unrecoverable protocol error.'] = 'Unrecoverable protocol error.'; -$a->strings['Profile unavailable.'] = 'Profile unavailable.'; -$a->strings['%s has received too many connection requests today.'] = '%s has received too many connection requests today.'; -$a->strings['Spam protection measures have been invoked.'] = 'Spam protection measures have been invoked.'; -$a->strings['Friends are advised to please try again in 24 hours.'] = 'Friends are advised to please try again in 24 hours.'; -$a->strings["Invalid locator"] = "Invalid locator"; -$a->strings["Unable to resolve your name at the provided location."] = "Unable to resolve your name at the provided location."; -$a->strings['You have already introduced yourself here.'] = 'You have already introduced yourself here.'; -$a->strings['Apparently you are already friends with %s.'] = 'Apparently you are already friends with %s.'; -$a->strings['Invalid profile URL.'] = 'Invalid profile URL.'; -$a->strings['Disallowed profile URL.'] = 'Disallowed profile URL.'; -$a->strings['Your introduction has been sent.'] = 'Your introduction has been sent.'; -$a->strings["Please login to confirm introduction."] = "Please login to confirm introduction."; -$a->strings["Incorrect identity currently logged in. Please login to this profile."] = "Incorrect identity currently logged in. Please login to this profile."; -$a->strings['Welcome home %s.'] = 'Welcome home %s.'; -$a->strings['Please confirm your introduction/connection request to %s.'] = 'Please confirm your introduction/connection request to %s.'; -$a->strings['Confirm'] = 'Confirm'; -$a->strings['[Name Withheld]'] = '[Name Withheld]'; -$a->strings["Introduction received at "] = "Introduction received at "; -$a->strings['Public access denied.'] = 'Public access denied.'; -$a->strings['Friend/Connection Request'] = 'Friend/Connection Request'; -$a->strings['Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca'] = 'Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca'; -$a->strings['Please answer the following:'] = 'Please answer the following:'; -$a->strings['Does $name know you?'] = 'Does $name know you?'; -$a->strings['Yes'] = 'Yes'; -$a->strings['No'] = 'No'; -$a->strings['Add a personal note:'] = 'Add a personal note:'; -$a->strings["Please enter your 'Identity Address' from one of the following supported social networks:"] = "Please enter your 'Identity Address' from one of the following supported social networks:"; -$a->strings['Friendika'] = 'Friendika'; -$a->strings['StatusNet/Federated Social Web'] = 'StatusNet/Federated Social Web'; -$a->strings["Private \x28secure\x29 network"] = "Private \x28secure\x29 network"; -$a->strings["Public \x28insecure\x29 network"] = "Public \x28insecure\x29 network"; -$a->strings['Your Identity Address:'] = 'Your Identity Address:'; -$a->strings['Submit Request'] = 'Submit Request'; -$a->strings['Cancel'] = 'Cancel'; +; +$a->strings["Post successful."] = ""; +$a->strings["Contact settings applied."] = ""; +$a->strings["Contact update failed."] = ""; +$a->strings["Permission denied."] = ""; +$a->strings["Contact not found."] = ""; +$a->strings["Repair Contact Settings"] = ""; +$a->strings["WARNING: This is highly advanced and if you enter incorrect information your communications with this contact will stop working."] = ""; +$a->strings["Please use your browser 'Back' button now if you are uncertain what to do on this page."] = ""; +$a->strings["Name"] = ""; +$a->strings["Account Nickname"] = ""; +$a->strings["Account URL"] = ""; +$a->strings["Friend Request URL"] = ""; +$a->strings["Friend Confirm URL"] = ""; +$a->strings["Notification Endpoint URL"] = ""; +$a->strings["Poll/Feed URL"] = ""; +$a->strings["Submit"] = ""; +$a->strings["Help:"] = ""; +$a->strings["Help"] = ""; +$a->strings["File exceeds size limit of %d"] = ""; +$a->strings["File upload failed."] = ""; +$a->strings["Friend suggestion sent."] = ""; +$a->strings["Suggest Friends"] = ""; +$a->strings["Suggest a friend for %s"] = ""; +$a->strings["Status"] = ""; +$a->strings["Profile"] = ""; +$a->strings["Photos"] = ""; +$a->strings["Events"] = ""; +$a->strings["Personal Notes"] = ""; +$a->strings["Create New Event"] = ""; +$a->strings["Previous"] = ""; +$a->strings["Next"] = ""; +$a->strings["l, F j"] = ""; +$a->strings["Edit event"] = ""; +$a->strings["link to source"] = ""; +$a->strings["hour:minute"] = ""; +$a->strings["Event details"] = ""; +$a->strings["Format is %s %s. Starting date and Description are required."] = ""; +$a->strings["Event Starts:"] = ""; +$a->strings["Finish date/time is not known or not relevant"] = ""; +$a->strings["Event Finishes:"] = ""; +$a->strings["Adjust for viewer timezone"] = ""; +$a->strings["Description:"] = ""; +$a->strings["Location:"] = ""; +$a->strings["Share this event"] = ""; +$a->strings["Cancel"] = ""; +$a->strings["Tag removed"] = ""; +$a->strings["Remove Item Tag"] = ""; +$a->strings["Select a tag to remove: "] = ""; +$a->strings["Remove"] = ""; +$a->strings["%s welcomes %s"] = ""; +$a->strings["Photo Albums"] = ""; +$a->strings["Contact Photos"] = ""; +$a->strings["everybody"] = ""; +$a->strings["Contact information unavailable"] = ""; +$a->strings["Profile Photos"] = ""; +$a->strings["Album not found."] = ""; +$a->strings["Delete Album"] = ""; +$a->strings["Delete Photo"] = ""; +$a->strings["was tagged in a"] = ""; +$a->strings["photo"] = ""; +$a->strings["by"] = ""; +$a->strings["Image exceeds size limit of "] = ""; +$a->strings["Image file is empty."] = ""; +$a->strings["Unable to process image."] = ""; +$a->strings["Image upload failed."] = ""; +$a->strings["Public access denied."] = ""; +$a->strings["No photos selected"] = ""; +$a->strings["Access to this item is restricted."] = ""; +$a->strings["Upload Photos"] = ""; +$a->strings["New album name: "] = ""; +$a->strings["or existing album name: "] = ""; +$a->strings["Permissions"] = ""; +$a->strings["Edit Album"] = ""; +$a->strings["View Photo"] = ""; +$a->strings["Photo not available"] = ""; +$a->strings["Edit photo"] = ""; +$a->strings["Use as profile photo"] = ""; +$a->strings["Private Message"] = ""; +$a->strings["View Full Size"] = ""; +$a->strings["Tags: "] = ""; +$a->strings["[Remove any tag]"] = ""; +$a->strings["New album name"] = ""; +$a->strings["Caption"] = ""; +$a->strings["Add a Tag"] = ""; +$a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = ""; +$a->strings["I like this (toggle)"] = ""; +$a->strings["I don't like this (toggle)"] = ""; +$a->strings["Share"] = ""; +$a->strings["Please wait"] = ""; +$a->strings["This is you"] = ""; +$a->strings["Comment"] = ""; +$a->strings["Delete"] = ""; +$a->strings["Recent Photos"] = ""; +$a->strings["Upload New Photos"] = ""; +$a->strings["View Album"] = ""; +$a->strings["Not available."] = ""; +$a->strings["Community"] = ""; +$a->strings["No results."] = ""; +$a->strings["Shared content is covered by the
Creative Commons Attribution 3.0 license."] = ""; +$a->strings["Item not found"] = ""; +$a->strings["Edit post"] = ""; +$a->strings["Post to Email"] = ""; +$a->strings["Edit"] = ""; +$a->strings["Upload photo"] = ""; +$a->strings["Attach file"] = ""; +$a->strings["Insert web link"] = ""; +$a->strings["Insert YouTube video"] = ""; +$a->strings["Insert Vorbis [.ogg] video"] = ""; +$a->strings["Insert Vorbis [.ogg] audio"] = ""; +$a->strings["Set your location"] = ""; +$a->strings["Clear browser location"] = ""; +$a->strings["Permission settings"] = ""; +$a->strings["CC: email addresses"] = ""; +$a->strings["Public post"] = ""; +$a->strings["Example: bob@example.com, mary@example.com"] = ""; +$a->strings["This introduction has already been accepted."] = ""; +$a->strings["Profile location is not valid or does not contain profile information."] = ""; +$a->strings["Warning: profile location has no identifiable owner name."] = ""; +$a->strings["Warning: profile location has no profile photo."] = ""; $a->strings["%d required parameter was not found at the given location"] = array( - 0 => "%d required parameter was not found at the given location", - 1 => "%d required parameters were not found at the given location", + 0 => "", + 1 => "", ); -$a->strings['Global Directory'] = 'Global Directory'; -$a->strings['Normal site view'] = 'Normal site view'; -$a->strings['View all site entries'] = 'View all site entries'; -$a->strings['Site Directory'] = 'Site Directory'; -$a->strings['Age: '] = 'Age: '; -$a->strings['Gender: '] = 'Gender: '; -$a->strings["No entries \x28some entries may be hidden\x29."] = "No entries \x28some entries may be hidden\x29."; -$a->strings['Item not found.'] = 'Item not found.'; -$a->strings['Item has been removed.'] = 'Item has been removed.'; -$a->strings['Shared content is covered by the Creative Commons Attribution 3.0 license.'] = 'Shared content is covered by the Creative Commons Attribution 3.0 license.'; -$a->strings['Item not found'] = 'Item not found'; -$a->strings['Edit post'] = 'Edit post'; -$a->strings['Visible to everybody'] = 'Visible to everybody'; -$a->strings["Post to Email"] = "Post to Email"; -$a->strings['Edit'] = 'Edit'; -$a->strings['Upload photo'] = 'Upload photo'; -$a->strings['Attach file'] = 'Attach file'; -$a->strings['Insert web link'] = 'Insert web link'; -$a->strings['Insert YouTube video'] = 'Insert YouTube video'; -$a->strings['Insert Vorbis [.ogg] video'] = 'Insert Vorbis [.ogg] video'; -$a->strings['Insert Vorbis [.ogg] audio'] = 'Insert Vorbis [.ogg] audio'; -$a->strings['Set your location'] = 'Set your location'; -$a->strings['Clear browser location'] = 'Clear browser location'; -$a->strings['Please wait'] = 'Please wait'; -$a->strings['Permission settings'] = 'Permission settings'; -$a->strings['CC: email addresses'] = 'CC: email addresses'; -$a->strings['Public post'] = 'Public post'; -$a->strings['Example: bob@example.com, mary@example.com'] = 'Example: bob@example.com, mary@example.com'; -$a->strings['The profile address specified does not provide adequate information.'] = 'The profile address specified does not provide adequate information.'; -$a->strings['No compatible communication protocols or feeds were discovered.'] = 'No compatible communication protocols or feeds were discovered.'; -$a->strings['An author or name was not found.'] = 'An author or name was not found.'; -$a->strings['No browser URL could be matched to this address.'] = 'No browser URL could be matched to this address.'; -$a->strings['Limited profile. This person will be unable to receive direct/personal notifications from you.'] = 'Limited profile. This person will be unable to receive direct/personal notifications from you.'; -$a->strings['Unable to retrieve contact information.'] = 'Unable to retrieve contact information.'; -$a->strings['following'] = 'following'; -$a->strings['This is Friendika version'] = 'This is Friendika version'; -$a->strings['running at web location'] = 'running at web location'; -$a->strings['Shared content within the Friendika network is provided under the Creative Commons Attribution 3.0 license'] = 'Shared content within the Friendika network is provided under the Creative Commons Attribution 3.0 license'; -$a->strings['Please visit Project.Friendika.com to learn more about the Friendika project.'] = 'Please visit Project.Friendika.com to learn more about the Friendika project.'; -$a->strings['Bug reports and issues: please visit'] = 'Bug reports and issues: please visit'; -$a->strings['Suggestions, praise, donations, etc. - please email "Info" at Friendika - dot com'] = 'Suggestions, praise, donations, etc. - please email "Info" at Friendika - dot com'; -$a->strings['Installed plugins/addons/apps'] = 'Installed plugins/addons/apps'; -$a->strings['No installed plugins/addons/apps'] = 'No installed plugins/addons/apps'; -$a->strings['Group created.'] = 'Group created.'; -$a->strings['Could not create group.'] = 'Could not create group.'; -$a->strings['Group not found.'] = 'Group not found.'; -$a->strings['Group name changed.'] = 'Group name changed.'; -$a->strings['Create a group of contacts/friends.'] = 'Create a group of contacts/friends.'; -$a->strings['Group Name: '] = 'Group Name: '; -$a->strings['Group removed.'] = 'Group removed.'; -$a->strings['Unable to remove group.'] = 'Unable to remove group.'; -$a->strings['Delete'] = 'Delete'; -$a->strings['Click on a contact to add or remove.'] = 'Click on a contact to add or remove.'; -$a->strings['Group Editor'] = 'Group Editor'; -$a->strings['Members'] = 'Members'; -$a->strings['All Contacts'] = 'All Contacts'; -$a->strings['Help:'] = 'Help:'; -$a->strings['Help'] = 'Help'; -$a->strings["Welcome to %s"] = "Welcome to %s"; -$a->strings['Could not create/connect to database.'] = 'Could not create/connect to database.'; -$a->strings['Connected to database.'] = 'Connected to database.'; -$a->strings['Proceed with Installation'] = 'Proceed with Installation'; -$a->strings['Your Friendika site database has been installed.'] = 'Your Friendika site database has been installed.'; -$a->strings['IMPORTANT: You will need to [manually] setup a scheduled task for the poller.'] = 'IMPORTANT: You will need to [manually] setup a scheduled task for the poller.'; -$a->strings['Please see the file "INSTALL.txt".'] = 'Please see the file "INSTALL.txt".'; -$a->strings['Proceed to registration'] = 'Proceed to registration'; -$a->strings['Database import failed.'] = 'Database import failed.'; -$a->strings['You may need to import the file "database.sql" manually using phpmyadmin or mysql.'] = 'You may need to import the file "database.sql" manually using phpmyadmin or mysql.'; -$a->strings['Welcome to Friendika.'] = 'Welcome to Friendika.'; -$a->strings['Friendika Social Network'] = 'Friendika Social Network'; -$a->strings['Installation'] = 'Installation'; -$a->strings['In order to install Friendika we need to know how to contact your database.'] = 'In order to install Friendika we need to know how to contact your database.'; -$a->strings['Please contact your hosting provider or site administrator if you have questions about these settings.'] = 'Please contact your hosting provider or site administrator if you have questions about these settings.'; -$a->strings['The database you specify below must already exist. If it does not, please create it before continuing.'] = 'The database you specify below must already exist. If it does not, please create it before continuing.'; -$a->strings['Database Server Name'] = 'Database Server Name'; -$a->strings['Database Login Name'] = 'Database Login Name'; -$a->strings['Database Login Password'] = 'Database Login Password'; -$a->strings['Database Name'] = 'Database Name'; -$a->strings['Please select a default timezone for your website'] = 'Please select a default timezone for your website'; -$a->strings['Could not find a command line version of PHP in the web server PATH.'] = 'Could not find a command line version of PHP in the web server PATH.'; -$a->strings['This is required. Please adjust the configuration file .htconfig.php accordingly.'] = 'This is required. Please adjust the configuration file .htconfig.php accordingly.'; -$a->strings['The command line version of PHP on your system does not have "register_argc_argv" enabled.'] = 'The command line version of PHP on your system does not have "register_argc_argv" enabled.'; -$a->strings['This is required for message delivery to work.'] = 'This is required for message delivery to work.'; -$a->strings['Error: the "openssl_pkey_new" function on this system is not able to generate encryption keys'] = 'Error: the "openssl_pkey_new" function on this system is not able to generate encryption keys'; -$a->strings['If running under Windows, please see "http://www.php.net/manual/en/openssl.installation.php".'] = 'If running under Windows, please see "http://www.php.net/manual/en/openssl.installation.php".'; -$a->strings['Error: Apache webserver mod-rewrite module is required but not installed.'] = 'Error: Apache webserver mod-rewrite module is required but not installed.'; -$a->strings['Error: libCURL PHP module required but not installed.'] = 'Error: libCURL PHP module required but not installed.'; -$a->strings['Error: GD graphics PHP module with JPEG support required but not installed.'] = 'Error: GD graphics PHP module with JPEG support required but not installed.'; -$a->strings['Error: openssl PHP module required but not installed.'] = 'Error: openssl PHP module required but not installed.'; -$a->strings['Error: mysqli PHP module required but not installed.'] = 'Error: mysqli PHP module required but not installed.'; -$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.'] = '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.'; -$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.'] = '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.'; -$a->strings['Please check with your site documentation or support people to see if this situation can be corrected.'] = 'Please check with your site documentation or support people to see if this situation can be corrected.'; -$a->strings['If not, you may be required to perform a manual installation. Please see the file "INSTALL.txt" for instructions.'] = 'If not, you may be required to perform a manual installation. Please see the file "INSTALL.txt" for instructions.'; -$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.'] = '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.'; -$a->strings['Errors encountered creating database tables.'] = 'Errors encountered creating database tables.'; -$a->strings['%s : Not a valid email address.'] = '%s : Not a valid email address.'; -$a->strings['Please join my network on %s'] = 'Please join my network on %s'; -$a->strings['%s : Message delivery failed.'] = '%s : Message delivery failed.'; -$a->strings['Send invitations'] = 'Send invitations'; -$a->strings['Enter email addresses, one per line:'] = 'Enter email addresses, one per line:'; -$a->strings['Your message:'] = 'Your message:'; -$a->strings['To accept this invitation, please visit:'] = 'To accept this invitation, please visit:'; -$a->strings['Once you have registered, please connect with me via my profile page at:'] = 'Once you have registered, please connect with me via my profile page at:'; +$a->strings["Introduction complete."] = ""; +$a->strings["Unrecoverable protocol error."] = ""; +$a->strings["Profile unavailable."] = ""; +$a->strings["%s has received too many connection requests today."] = ""; +$a->strings["Spam protection measures have been invoked."] = ""; +$a->strings["Friends are advised to please try again in 24 hours."] = ""; +$a->strings["Invalid locator"] = ""; +$a->strings["Unable to resolve your name at the provided location."] = ""; +$a->strings["You have already introduced yourself here."] = ""; +$a->strings["Apparently you are already friends with %s."] = ""; +$a->strings["Invalid profile URL."] = ""; +$a->strings["Disallowed profile URL."] = ""; +$a->strings["Failed to update contact record."] = ""; +$a->strings["Your introduction has been sent."] = ""; +$a->strings["Please login to confirm introduction."] = ""; +$a->strings["Incorrect identity currently logged in. Please login to this profile."] = ""; +$a->strings["Welcome home %s."] = ""; +$a->strings["Please confirm your introduction/connection request to %s."] = ""; +$a->strings["Confirm"] = ""; +$a->strings["[Name Withheld]"] = ""; +$a->strings["Introduction received at "] = ""; +$a->strings["Administrator"] = ""; +$a->strings["Friend/Connection Request"] = ""; +$a->strings["Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca"] = ""; +$a->strings["Please answer the following:"] = ""; +$a->strings["Does %s know you?"] = ""; +$a->strings["Yes"] = ""; +$a->strings["No"] = ""; +$a->strings["Add a personal note:"] = ""; +$a->strings["Please enter your 'Identity Address' from one of the following supported social networks:"] = ""; +$a->strings["Friendika"] = ""; +$a->strings["StatusNet/Federated Social Web"] = ""; +$a->strings["Private (secure) network"] = ""; +$a->strings["Public (insecure) network"] = ""; +$a->strings["Your Identity Address:"] = ""; +$a->strings["Submit Request"] = ""; +$a->strings["Could not create/connect to database."] = ""; +$a->strings["Connected to database."] = ""; +$a->strings["Proceed with Installation"] = ""; +$a->strings["Your Friendika site database has been installed."] = ""; +$a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = ""; +$a->strings["Please see the file \"INSTALL.txt\"."] = ""; +$a->strings["Proceed to registration"] = ""; +$a->strings["Database import failed."] = ""; +$a->strings["You may need to import the file \"database.sql\" manually using phpmyadmin or mysql."] = ""; +$a->strings["Welcome to Friendika."] = ""; +$a->strings["Friendika Social Network"] = ""; +$a->strings["Installation"] = ""; +$a->strings["In order to install Friendika we need to know how to connect to your database."] = ""; +$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = ""; +$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = ""; +$a->strings["Database Server Name"] = ""; +$a->strings["Database Login Name"] = ""; +$a->strings["Database Login Password"] = ""; +$a->strings["Database Name"] = ""; +$a->strings["Please select a default timezone for your website"] = ""; +$a->strings["Site administrator email address. Your account email address must match this in order to use the web admin panel."] = ""; +$a->strings["Could not find a command line version of PHP in the web server PATH."] = ""; +$a->strings["This is required. Please adjust the configuration file .htconfig.php accordingly."] = ""; +$a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = ""; +$a->strings["This is required for message delivery to work."] = ""; +$a->strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = ""; +$a->strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = ""; +$a->strings["Error: Apache webserver mod-rewrite module is required but not installed."] = ""; +$a->strings["Error: libCURL PHP module required but not installed."] = ""; +$a->strings["Error: GD graphics PHP module with JPEG support required but not installed."] = ""; +$a->strings["Error: openssl PHP module required but not installed."] = ""; +$a->strings["Error: mysqli PHP module required but not installed."] = ""; +$a->strings["Error: mb_string PHP module required but not installed."] = ""; +$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."] = ""; +$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."] = ""; +$a->strings["Please check with your site documentation or support people to see if this situation can be corrected."] = ""; +$a->strings["If not, you may be required to perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = ""; +$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."] = ""; +$a->strings["Errors encountered creating database tables."] = ""; +$a->strings["[Embedded content - reload page to view]"] = ""; +$a->strings["Profile Match"] = ""; +$a->strings["No keywords to match. Please add keywords to your default profile."] = ""; +$a->strings["No matches"] = ""; +$a->strings["Remote privacy information not available."] = ""; +$a->strings["Visible to:"] = ""; +$a->strings["Welcome to %s"] = ""; +$a->strings["Invalid request identifier."] = ""; +$a->strings["Discard"] = ""; +$a->strings["Ignore"] = ""; +$a->strings["Pending Friend/Connect Notifications"] = ""; +$a->strings["Show Ignored Requests"] = ""; +$a->strings["Hide Ignored Requests"] = ""; +$a->strings["Notification type: "] = ""; +$a->strings["Friend Suggestion"] = ""; +$a->strings["suggested by %s"] = ""; +$a->strings["Approve"] = ""; +$a->strings["Claims to be known to you: "] = ""; +$a->strings["yes"] = ""; +$a->strings["no"] = ""; +$a->strings["Approve as: "] = ""; +$a->strings["Friend"] = ""; +$a->strings["Fan/Admirer"] = ""; +$a->strings["Friend/Connect Request"] = ""; +$a->strings["New Follower"] = ""; +$a->strings["No notifications."] = ""; +$a->strings["Invite Friends"] = ""; +$a->strings["%d invitation available"] = array( + 0 => "", + 1 => "", +); +$a->strings["Find People With Shared Interests"] = ""; +$a->strings["Connect/Follow"] = ""; +$a->strings["Example: bob@example.com, http://example.com/barbara"] = ""; +$a->strings["Follow"] = ""; +$a->strings["Could not access contact record."] = ""; +$a->strings["Could not locate selected profile."] = ""; +$a->strings["Contact updated."] = ""; +$a->strings["Contact has been blocked"] = ""; +$a->strings["Contact has been unblocked"] = ""; +$a->strings["Contact has been ignored"] = ""; +$a->strings["Contact has been unignored"] = ""; +$a->strings["stopped following"] = ""; +$a->strings["Contact has been removed."] = ""; +$a->strings["Mutual Friendship"] = ""; +$a->strings["is a fan of yours"] = ""; +$a->strings["you are a fan of"] = ""; +$a->strings["Privacy Unavailable"] = ""; +$a->strings["Private communications are not available for this contact."] = ""; +$a->strings["Never"] = ""; +$a->strings["(Update was successful)"] = ""; +$a->strings["(Update was not successful)"] = ""; +$a->strings["Suggest friends"] = ""; +$a->strings["Contact Editor"] = ""; +$a->strings["Profile Visibility"] = ""; +$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = ""; +$a->strings["Contact Information / Notes"] = ""; +$a->strings["Online Reputation"] = ""; +$a->strings["Occasionally your friends may wish to inquire about this person's online legitimacy."] = ""; +$a->strings["You may help them choose whether or not to interact with this person by providing a reputation to guide them."] = ""; +$a->strings["Please take a moment to elaborate on this selection if you feel it could be helpful to others."] = ""; +$a->strings["Visit %s's profile [%s]"] = ""; +$a->strings["Block/Unblock contact"] = ""; +$a->strings["Ignore contact"] = ""; +$a->strings["Repair contact URL settings"] = ""; +$a->strings["Repair contact URL settings (WARNING: Advanced)"] = ""; +$a->strings["View conversations"] = ""; +$a->strings["Delete contact"] = ""; +$a->strings["Last updated: "] = ""; +$a->strings["Update public posts: "] = ""; +$a->strings["Update now"] = ""; +$a->strings["Unblock this contact"] = ""; +$a->strings["Block this contact"] = ""; +$a->strings["Unignore this contact"] = ""; +$a->strings["Ignore this contact"] = ""; +$a->strings["Currently blocked"] = ""; +$a->strings["Currently ignored"] = ""; +$a->strings["Contacts"] = ""; +$a->strings["Show Blocked Connections"] = ""; +$a->strings["Hide Blocked Connections"] = ""; +$a->strings["Finding: "] = ""; +$a->strings["Find"] = ""; +$a->strings["Edit contact"] = ""; +$a->strings["No valid account found."] = ""; +$a->strings["Password reset request issued. Check your email."] = ""; +$a->strings["Password reset requested at %s"] = ""; +$a->strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = ""; +$a->strings["Password Reset"] = ""; +$a->strings["Your password has been reset as requested."] = ""; +$a->strings["Your new password is"] = ""; +$a->strings["Save or copy your new password - and then"] = ""; +$a->strings["click here to login"] = ""; +$a->strings["Your password may be changed from the Settings page after successful login."] = ""; +$a->strings["Forgot your Password?"] = ""; +$a->strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = ""; +$a->strings["Nickname or Email: "] = ""; +$a->strings["Reset"] = ""; +$a->strings["Passwords do not match. Password unchanged."] = ""; +$a->strings["Empty passwords are not allowed. Password unchanged."] = ""; +$a->strings["Password changed."] = ""; +$a->strings["Password update failed. Please try again."] = ""; +$a->strings["Failed to connect with email account using the settings provided."] = ""; +$a->strings[" Please use a shorter name."] = ""; +$a->strings[" Name too short."] = ""; +$a->strings[" Not valid email."] = ""; +$a->strings[" Cannot change to that email."] = ""; +$a->strings["Settings updated."] = ""; +$a->strings["Account settings"] = ""; +$a->strings["Plugin settings"] = ""; +$a->strings["No Plugin settings configured"] = ""; +$a->strings["Plugin Settings"] = ""; +$a->strings["Normal Account"] = ""; +$a->strings["This account is a normal personal profile"] = ""; +$a->strings["Soapbox Account"] = ""; +$a->strings["Automatically approve all connection/friend requests as read-only fans"] = ""; +$a->strings["Community/Celebrity Account"] = ""; +$a->strings["Automatically approve all connection/friend requests as read-write fans"] = ""; +$a->strings["Automatic Friend Account"] = ""; +$a->strings["Automatically approve all connection/friend requests as friends"] = ""; +$a->strings["OpenID:"] = ""; +$a->strings["(Optional) Allow this OpenID to login to this account."] = ""; +$a->strings["Publish your default profile in your local site directory?"] = ""; +$a->strings["Publish your default profile in the global social directory?"] = ""; +$a->strings["Hide your contact/friend list from viewers of your default profile?"] = ""; +$a->strings["Hide profile details and all your messages from unknown viewers?"] = ""; +$a->strings["Profile is not published."] = ""; +$a->strings["or"] = ""; +$a->strings["Your Identity Address is"] = ""; +$a->strings["Account Settings"] = ""; +$a->strings["Export Personal Data"] = ""; +$a->strings["Password Settings"] = ""; +$a->strings["New Password:"] = ""; +$a->strings["Confirm:"] = ""; +$a->strings["Leave password fields blank unless changing"] = ""; +$a->strings["Basic Settings"] = ""; +$a->strings["Full Name:"] = ""; +$a->strings["Email Address:"] = ""; +$a->strings["Your Timezone:"] = ""; +$a->strings["Default Post Location:"] = ""; +$a->strings["Use Browser Location:"] = ""; +$a->strings["Display Theme:"] = ""; +$a->strings["Security and Privacy Settings"] = ""; +$a->strings["Maximum Friend Requests/Day:"] = ""; +$a->strings["(to prevent spam abuse)"] = ""; +$a->strings["Default Post Permissions"] = ""; +$a->strings["(click to open/close)"] = ""; +$a->strings["Allow friends to post to your profile page:"] = ""; +$a->strings["Automatically expire posts after days:"] = ""; +$a->strings["If empty, posts will not expire. Expired posts will be deleted"] = ""; +$a->strings["Notification Settings"] = ""; +$a->strings["Send a notification email when:"] = ""; +$a->strings["You receive an introduction"] = ""; +$a->strings["Your introductions are confirmed"] = ""; +$a->strings["Someone writes on your profile wall"] = ""; +$a->strings["Someone writes a followup comment"] = ""; +$a->strings["You receive a private message"] = ""; +$a->strings["Email/Mailbox Setup"] = ""; +$a->strings["If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."] = ""; +$a->strings["Last successful email check:"] = ""; +$a->strings["Email access is disabled on this site."] = ""; +$a->strings["IMAP server name:"] = ""; +$a->strings["IMAP port:"] = ""; +$a->strings["Security:"] = ""; +$a->strings["None"] = ""; +$a->strings["Email login name:"] = ""; +$a->strings["Email password:"] = ""; +$a->strings["Reply-to address:"] = ""; +$a->strings["Send public posts to all email contacts:"] = ""; +$a->strings["Advanced Page Settings"] = ""; +$a->strings["Welcome back %s"] = ""; +$a->strings["Manage Identities and/or Pages"] = ""; +$a->strings["(Toggle between different identities or community/group pages which share your account details.)"] = ""; +$a->strings["Select an identity to manage: "] = ""; +$a->strings["View Conversations"] = ""; +$a->strings["View New Items"] = ""; +$a->strings["View Any Items"] = ""; +$a->strings["View Starred Items"] = ""; +$a->strings["Warning: This group contains %s member from an insecure network."] = array( + 0 => "", + 1 => "", +); +$a->strings["Private messages to this group are at risk of public disclosure."] = ""; +$a->strings["No such group"] = ""; +$a->strings["Group is empty"] = ""; +$a->strings["Group: "] = ""; +$a->strings["Contact: "] = ""; +$a->strings["Private messages to this person are at risk of public disclosure."] = ""; +$a->strings["Invalid contact."] = ""; +$a->strings["Save"] = ""; +$a->strings["Welcome to Friendika"] = ""; +$a->strings["New Member Checklist"] = ""; +$a->strings["We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page."] = ""; +$a->strings["On your Settings page - change your initial password. Also make a note of your Identity Address. This will be useful in making friends."] = ""; +$a->strings["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."] = ""; +$a->strings["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."] = ""; +$a->strings["Authorise the Facebook Connector if you currently have a Facebook account and we will (optionally) import all your Facebook friends and conversations."] = ""; +$a->strings["Enter your email access information on your Settings page if you wish to import and interact with friends or mailing lists from your email INBOX"] = ""; +$a->strings["Edit your default profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors."] = ""; +$a->strings["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."] = ""; +$a->strings["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 Connect dialog."] = ""; +$a->strings["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."] = ""; +$a->strings["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."] = ""; +$a->strings["Our help pages may be consulted for detail on other program features and resources."] = ""; +$a->strings["Item not available."] = ""; +$a->strings["Item was not found."] = ""; +$a->strings["Group created."] = ""; +$a->strings["Could not create group."] = ""; +$a->strings["Group not found."] = ""; +$a->strings["Group name changed."] = ""; +$a->strings["Permission denied"] = ""; +$a->strings["Create a group of contacts/friends."] = ""; +$a->strings["Group Name: "] = ""; +$a->strings["Group removed."] = ""; +$a->strings["Unable to remove group."] = ""; +$a->strings["Click on a contact to add or remove."] = ""; +$a->strings["Group Editor"] = ""; +$a->strings["Members"] = ""; +$a->strings["All Contacts"] = ""; +$a->strings["Invalid profile identifier."] = ""; +$a->strings["Profile Visibility Editor"] = ""; +$a->strings["Visible To"] = ""; +$a->strings["All Contacts (with secure profile access)"] = ""; +$a->strings["View Contacts"] = ""; +$a->strings["No contacts."] = ""; +$a->strings["An invitation is required."] = ""; +$a->strings["Invitation could not be verified."] = ""; +$a->strings["Invalid OpenID url"] = ""; +$a->strings["Please enter the required information."] = ""; +$a->strings["Please use a shorter name."] = ""; +$a->strings["Name too short."] = ""; +$a->strings["That doesn't appear to be your full (First Last) name."] = ""; +$a->strings["Your email domain is not among those allowed on this site."] = ""; +$a->strings["Not a valid email address."] = ""; +$a->strings["Cannot use that email."] = ""; +$a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and must also begin with a letter."] = ""; +$a->strings["Nickname is already registered. Please choose another."] = ""; +$a->strings["SERIOUS ERROR: Generation of security keys failed."] = ""; +$a->strings["An error occurred during registration. Please try again."] = ""; +$a->strings["An error occurred creating your default profile. Please try again."] = ""; +$a->strings["Registration details for %s"] = ""; +$a->strings["Registration successful. Please check your email for further instructions."] = ""; +$a->strings["Failed to send email message. Here is the message that failed."] = ""; +$a->strings["Your registration can not be processed."] = ""; +$a->strings["Registration request at %s"] = ""; +$a->strings["Your registration is pending approval by the site owner."] = ""; +$a->strings["You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = ""; +$a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = ""; +$a->strings["Your OpenID (optional): "] = ""; +$a->strings["Include your profile in member directory?"] = ""; +$a->strings["Membership on this site is by invitation only."] = ""; +$a->strings["Your invitation ID: "] = ""; +$a->strings["Registration"] = ""; +$a->strings["Your Full Name (e.g. Joe Smith): "] = ""; +$a->strings["Your Email Address: "] = ""; +$a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be 'nickname@\$sitename'."] = ""; +$a->strings["Choose a nickname: "] = ""; +$a->strings["Register"] = ""; +$a->strings["status"] = ""; +$a->strings["%1\$s likes %2\$s's %3\$s"] = ""; +$a->strings["%1\$s doesn't like %2\$s's %3\$s"] = ""; +$a->strings["This is Friendika version"] = ""; +$a->strings["running at web location"] = ""; +$a->strings["Shared content within the Friendika network is provided under the Creative Commons Attribution 3.0 license"] = ""; +$a->strings["Please visit Project.Friendika.com to learn more about the Friendika project."] = ""; +$a->strings["Bug reports and issues: please visit"] = ""; +$a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - dot com"] = ""; +$a->strings["Installed plugins/addons/apps"] = ""; +$a->strings["No installed plugins/addons/apps"] = ""; +$a->strings["Account approved."] = ""; +$a->strings["Registration revoked for %s"] = ""; +$a->strings["Please login."] = ""; +$a->strings["Unable to locate original post."] = ""; +$a->strings["Empty post discarded."] = ""; +$a->strings["Wall Photos"] = ""; +$a->strings["noreply"] = ""; +$a->strings["Administrator@"] = ""; +$a->strings["%s commented on an item at %s"] = ""; +$a->strings["%s posted to your profile wall at %s"] = ""; +$a->strings["System error. Post not saved."] = ""; +$a->strings["This message was sent to you by %s, a member of the Friendika social network."] = ""; +$a->strings["You may visit them online at %s"] = ""; +$a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = ""; +$a->strings["%s posted an update."] = ""; +$a->strings["Image uploaded but image cropping failed."] = ""; +$a->strings["Image size reduction [%s] failed."] = ""; +$a->strings["Unable to process image"] = ""; +$a->strings["Image exceeds size limit of %d"] = ""; +$a->strings["Upload File:"] = ""; +$a->strings["Upload Profile Photo"] = ""; +$a->strings["Upload"] = ""; +$a->strings["skip this step"] = ""; +$a->strings["select a photo from your photo albums"] = ""; +$a->strings["Crop Image"] = ""; +$a->strings["Please adjust the image cropping for optimum viewing."] = ""; +$a->strings["Done Editing"] = ""; +$a->strings["Image uploaded successfully."] = ""; +$a->strings["No profile"] = ""; +$a->strings["Remove My Account"] = ""; +$a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = ""; +$a->strings["Please enter your password for verification:"] = ""; +$a->strings["No recipient selected."] = ""; +$a->strings["[no subject]"] = ""; +$a->strings["Unable to locate contact information."] = ""; +$a->strings["Message sent."] = ""; +$a->strings["Message could not be sent."] = ""; +$a->strings["Messages"] = ""; +$a->strings["Inbox"] = ""; +$a->strings["Outbox"] = ""; +$a->strings["New Message"] = ""; +$a->strings["Message deleted."] = ""; +$a->strings["Conversation removed."] = ""; +$a->strings["Please enter a link URL:"] = ""; +$a->strings["Send Private Message"] = ""; +$a->strings["To:"] = ""; +$a->strings["Subject:"] = ""; +$a->strings["Your message:"] = ""; +$a->strings["No messages."] = ""; +$a->strings["Delete conversation"] = ""; +$a->strings["D, d M Y - g:i A"] = ""; +$a->strings["Message not available."] = ""; +$a->strings["Delete message"] = ""; +$a->strings["Send Reply"] = ""; +$a->strings["Site"] = ""; +$a->strings["Users"] = ""; +$a->strings["Plugins"] = ""; +$a->strings["Update"] = ""; +$a->strings["Logs"] = ""; +$a->strings["User registrations waiting for confirmation"] = ""; +$a->strings["Item not found."] = ""; +$a->strings["Administration"] = ""; +$a->strings["Summary"] = ""; +$a->strings["Registered users"] = ""; +$a->strings["Pending registrations"] = ""; +$a->strings["Version"] = ""; +$a->strings["Active plugins"] = ""; +$a->strings["Site settings updated."] = ""; +$a->strings["Closed"] = ""; +$a->strings["Requires approval"] = ""; +$a->strings["Open"] = ""; +$a->strings["File upload"] = ""; +$a->strings["Policies"] = ""; +$a->strings["Advanced"] = ""; +$a->strings["Site name"] = ""; +$a->strings["Banner/Logo"] = ""; +$a->strings["System language"] = ""; +$a->strings["System theme"] = ""; +$a->strings["Maximum image size"] = ""; +$a->strings["Register policy"] = ""; +$a->strings["Register text"] = ""; +$a->strings["Allowed friend domains"] = ""; +$a->strings["Allowed email domains"] = ""; +$a->strings["Block public"] = ""; +$a->strings["Force publish"] = ""; +$a->strings["Global directory update URL"] = ""; +$a->strings["Block multiple registrations"] = ""; +$a->strings["OpenID support"] = ""; +$a->strings["Gravatar support"] = ""; +$a->strings["Fullname check"] = ""; +$a->strings["UTF-8 Regular expressions"] = ""; +$a->strings["Show Community Page"] = ""; +$a->strings["Enable OStatus support"] = ""; +$a->strings["Only allow Friendika contacts"] = ""; +$a->strings["Verify SSL"] = ""; +$a->strings["Proxy user"] = ""; +$a->strings["Proxy URL"] = ""; +$a->strings["Network timeout"] = ""; +$a->strings["%s user blocked"] = array( + 0 => "", + 1 => "", +); +$a->strings["%s user deleted"] = array( + 0 => "", + 1 => "", +); +$a->strings["User '%s' deleted"] = ""; +$a->strings["User '%s' unblocked"] = ""; +$a->strings["User '%s' blocked"] = ""; +$a->strings["select all"] = ""; +$a->strings["User registrations waiting for confirm"] = ""; +$a->strings["Request date"] = ""; +$a->strings["Email"] = ""; +$a->strings["No registrations."] = ""; +$a->strings["Deny"] = ""; +$a->strings["Block"] = ""; +$a->strings["Unblock"] = ""; +$a->strings["Register date"] = ""; +$a->strings["Last login"] = ""; +$a->strings["Last item"] = ""; +$a->strings["Account"] = ""; +$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = ""; +$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = ""; +$a->strings["Plugin %s disabled."] = ""; +$a->strings["Plugin %s enabled."] = ""; +$a->strings["Disable"] = ""; +$a->strings["Enable"] = ""; +$a->strings["Toggle"] = ""; +$a->strings["Settings"] = ""; +$a->strings["Log settings updated."] = ""; +$a->strings["Clear"] = ""; +$a->strings["Debugging"] = ""; +$a->strings["Log file"] = ""; +$a->strings["Must be writable by web server. Relative to your Friendika index.php."] = ""; +$a->strings["Log level"] = ""; +$a->strings["Close"] = ""; +$a->strings["FTP Host"] = ""; +$a->strings["FTP Path"] = ""; +$a->strings["FTP User"] = ""; +$a->strings["FTP Password"] = ""; +$a->strings["Access to this profile has been restricted."] = ""; +$a->strings["Tips for New Members"] = ""; +$a->strings["Login failed."] = ""; +$a->strings["Welcome "] = ""; +$a->strings["Please upload a profile photo."] = ""; +$a->strings["Welcome back "] = ""; +$a->strings["This site is not configured to allow communications with other networks."] = ""; +$a->strings["No compatible communication protocols or feeds were discovered."] = ""; +$a->strings["The profile address specified does not provide adequate information."] = ""; +$a->strings["An author or name was not found."] = ""; +$a->strings["No browser URL could be matched to this address."] = ""; +$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = ""; +$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = ""; +$a->strings["Unable to retrieve contact information."] = ""; +$a->strings["following"] = ""; +$a->strings["Item has been removed."] = ""; +$a->strings["New mail received at "] = ""; +$a->strings["Applications"] = ""; +$a->strings["No installed applications."] = ""; +$a->strings["Search"] = ""; +$a->strings["Profile not found."] = ""; +$a->strings["Profile Name is required."] = ""; +$a->strings["Profile updated."] = ""; +$a->strings["Profile deleted."] = ""; +$a->strings["Profile-"] = ""; +$a->strings["New profile created."] = ""; +$a->strings["Profile unavailable to clone."] = ""; +$a->strings["Hide your contact/friend list from viewers of this profile?"] = ""; +$a->strings["Edit Profile Details"] = ""; +$a->strings["View this profile"] = ""; +$a->strings["Create a new profile using these settings"] = ""; +$a->strings["Clone this profile"] = ""; +$a->strings["Delete this profile"] = ""; +$a->strings["Profile Name:"] = ""; +$a->strings["Your Full Name:"] = ""; +$a->strings["Title/Description:"] = ""; +$a->strings["Your Gender:"] = ""; +$a->strings["Birthday (%s):"] = ""; +$a->strings["Street Address:"] = ""; +$a->strings["Locality/City:"] = ""; +$a->strings["Postal/Zip Code:"] = ""; +$a->strings["Country:"] = ""; +$a->strings["Region/State:"] = ""; +$a->strings[" Marital Status:"] = ""; +$a->strings["Who: (if applicable)"] = ""; +$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = ""; +$a->strings["Sexual Preference:"] = ""; +$a->strings["Homepage URL:"] = ""; +$a->strings["Political Views:"] = ""; +$a->strings["Religious Views:"] = ""; +$a->strings["Public Keywords:"] = ""; +$a->strings["Private Keywords:"] = ""; +$a->strings["Example: fishing photography software"] = ""; +$a->strings["(Used for suggesting potential friends, can be seen by others)"] = ""; +$a->strings["(Used for searching profiles, never shown to others)"] = ""; +$a->strings["Tell us about yourself..."] = ""; +$a->strings["Hobbies/Interests"] = ""; +$a->strings["Contact information and Social Networks"] = ""; +$a->strings["Musical interests"] = ""; +$a->strings["Books, literature"] = ""; +$a->strings["Television"] = ""; +$a->strings["Film/dance/culture/entertainment"] = ""; +$a->strings["Love/romance"] = ""; +$a->strings["Work/employment"] = ""; +$a->strings["School/education"] = ""; +$a->strings["This is your public profile.
It may be visible to anybody using the internet."] = ""; +$a->strings["Age: "] = ""; +$a->strings["Profiles"] = ""; +$a->strings["Change profile photo"] = ""; +$a->strings["Create New Profile"] = ""; +$a->strings["Profile Image"] = ""; +$a->strings["visible to everybody"] = ""; +$a->strings["Edit visibility"] = ""; +$a->strings["Global Directory"] = ""; +$a->strings["Normal site view"] = ""; +$a->strings["View all site entries"] = ""; +$a->strings["Site Directory"] = ""; +$a->strings["Gender: "] = ""; +$a->strings["No entries (some entries may be hidden)."] = ""; +$a->strings["%s : Not a valid email address."] = ""; +$a->strings["Please join my network on %s"] = ""; +$a->strings["%s : Message delivery failed."] = ""; $a->strings["%d message sent."] = array( - 0 => "%d message sent.", - 1 => "%d messages sent.", + 0 => "", + 1 => "", ); -$a->strings['Unable to locate original post.'] = 'Unable to locate original post.'; -$a->strings['Empty post discarded.'] = 'Empty post discarded.'; -$a->strings['Wall Photos'] = 'Wall Photos'; -$a->strings['%s posted to your profile wall at %s'] = '%s posted to your profile wall at %s'; -$a->strings['System error. Post not saved.'] = 'System error. Post not saved.'; -$a->strings['This message was sent to you by %s, a member of the Friendika social network.'] = 'This message was sent to you by %s, a member of the Friendika social network.'; -$a->strings['You may visit them online at %s'] = 'You may visit them online at %s'; -$a->strings['Please contact the sender by replying to this post if you do not wish to receive these messages.'] = 'Please contact the sender by replying to this post if you do not wish to receive these messages.'; -$a->strings['%s posted an update.'] = '%s posted an update.'; -$a->strings['photo'] = 'photo'; -$a->strings['status'] = 'status'; -$a->strings['%1$s likes %2$s\'s %3$s'] = '%1$s likes %2$s\'s %3$s'; -$a->strings['%1$s doesn\'t like %2$s\'s %3$s'] = '%1$s doesn\'t like %2$s\'s %3$s'; -$a->strings['Remote privacy information not available.'] = 'Remote privacy information not available.'; -$a->strings['Visible to:'] = 'Visible to:'; -$a->strings['Password reset request issued. Check your email.'] = 'Password reset request issued. Check your email.'; -$a->strings['Password reset requested at %s'] = 'Password reset requested at %s'; -$a->strings["Request could not be verified. \x28You may have previously submitted it.\x29 Password reset failed."] = "Request could not be verified. \x28You may have previously submitted it.\x29 Password reset failed."; -$a->strings['Your password has been reset as requested.'] = 'Your password has been reset as requested.'; -$a->strings['Your new password is'] = 'Your new password is'; -$a->strings['Save or copy your new password - and then'] = 'Save or copy your new password - and then'; -$a->strings['click here to login'] = 'click here to login'; -$a->strings['Your password may be changed from the Settings page after successful login.'] = 'Your password may be changed from the Settings page after successful login.'; -$a->strings['Forgot your Password?'] = 'Forgot your Password?'; -$a->strings['Enter your email address and submit to have your password reset. Then check your email for further instructions.'] = 'Enter your email address and submit to have your password reset. Then check your email for further instructions.'; -$a->strings['Nickname or Email: '] = 'Nickname or Email: '; -$a->strings['Reset'] = 'Reset'; -$a->strings["Welcome back %s"] = "Welcome back %s"; -$a->strings['Manage Identities and/or Pages'] = 'Manage Identities and/or Pages'; -$a->strings["\x28Toggle between different identities or community/group pages which share your account details.\x29"] = "\x28Toggle between different identities or community/group pages which share your account details.\x29"; -$a->strings['Select an identity to manage: '] = 'Select an identity to manage: '; -$a->strings['Profile Match'] = 'Profile Match'; -$a->strings['No matches'] = 'No matches'; -$a->strings['No recipient selected.'] = 'No recipient selected.'; -$a->strings['[no subject]'] = '[no subject]'; -$a->strings['Unable to locate contact information.'] = 'Unable to locate contact information.'; -$a->strings['Message sent.'] = 'Message sent.'; -$a->strings['Message could not be sent.'] = 'Message could not be sent.'; -$a->strings['Messages'] = 'Messages'; -$a->strings['Inbox'] = 'Inbox'; -$a->strings['Outbox'] = 'Outbox'; -$a->strings['New Message'] = 'New Message'; -$a->strings['Message deleted.'] = 'Message deleted.'; -$a->strings['Conversation removed.'] = 'Conversation removed.'; -$a->strings['Please enter a link URL:'] = 'Please enter a link URL:'; -$a->strings['Send Private Message'] = 'Send Private Message'; -$a->strings['To:'] = 'To:'; -$a->strings['Subject:'] = 'Subject:'; -$a->strings['No messages.'] = 'No messages.'; -$a->strings['Delete conversation'] = 'Delete conversation'; -$a->strings['D, d M Y - g:i A'] = 'D, d M Y - g:i A'; -$a->strings['Message not available.'] = 'Message not available.'; -$a->strings['Delete message'] = 'Delete message'; -$a->strings['Send Reply'] = 'Send Reply'; -$a->strings['Normal View'] = 'Normal View'; -$a->strings['New Item View'] = 'New Item View'; -$a->strings['Private messages to this group are at risk of public disclosure.'] = 'Private messages to this group are at risk of public disclosure.'; -$a->strings['No such group'] = 'No such group'; -$a->strings['Group is empty'] = 'Group is empty'; -$a->strings['Group: '] = 'Group: '; -$a->strings['Contact: '] = 'Contact: '; -$a->strings['Private messages to this person are at risk of public disclosure.'] = 'Private messages to this person are at risk of public disclosure.'; -$a->strings['Invalid contact.'] = 'Invalid contact.'; -$a->strings['Warning: This group contains %s member from an insecure network.'] = array( - 0 => 'Warning: This group contains %s member from an insecure network.', - 1 => 'Warning: This group contains %s members from an insecure network.', +$a->strings["You have no more invitations available"] = ""; +$a->strings["Send invitations"] = ""; +$a->strings["Enter email addresses, one per line:"] = ""; +$a->strings["Please join my social network on %s"] = ""; +$a->strings["To accept this invitation, please visit:"] = ""; +$a->strings["You will need to supply this invitation code: \$invite_code"] = ""; +$a->strings["Once you have registered, please connect with me via my profile page at:"] = ""; +$a->strings["Response from remote site was not understood."] = ""; +$a->strings["Unexpected response from remote site: "] = ""; +$a->strings["Confirmation completed successfully."] = ""; +$a->strings["Remote site reported: "] = ""; +$a->strings["Temporary failure. Please wait and try again."] = ""; +$a->strings["Introduction failed or was revoked."] = ""; +$a->strings["Unable to set contact photo."] = ""; +$a->strings["%1\$s is now friends with %2\$s"] = ""; +$a->strings["No user record found for '%s' "] = ""; +$a->strings["Our site encryption key is apparently messed up."] = ""; +$a->strings["Empty site URL was provided or URL could not be decrypted by us."] = ""; +$a->strings["Contact record was not found for you on our site."] = ""; +$a->strings["The ID provided by your system is a duplicate on our system. It should work if you try again."] = ""; +$a->strings["Unable to set your contact credentials on our system."] = ""; +$a->strings["Unable to update your contact profile details on our system"] = ""; +$a->strings["Connection accepted at %s"] = ""; +$a->strings["Facebook disabled"] = ""; +$a->strings["Updating contacts"] = ""; +$a->strings["Facebook API key is missing."] = ""; +$a->strings["Facebook Connect"] = ""; +$a->strings["Install Facebook connector for this account."] = ""; +$a->strings["Remove Facebook connector"] = ""; +$a->strings["Post to Facebook by default"] = ""; +$a->strings["Link all your Facebook friends and conversations"] = ""; +$a->strings["Warning: Your Facebook privacy settings can not be imported."] = ""; +$a->strings["Linked Facebook items may be publicly visible, depending on your privacy settings for this website/account."] = ""; +$a->strings["Facebook"] = ""; +$a->strings["Facebook Connector Settings"] = ""; +$a->strings["Post to Facebook"] = ""; +$a->strings["Post to Facebook cancelled because of multi-network access permission conflict."] = ""; +$a->strings["Image: "] = ""; +$a->strings["View on Friendika"] = ""; +$a->strings["Facebook post failed. Queued for retry."] = ""; +$a->strings["Generate new key"] = ""; +$a->strings["Widgets key"] = ""; +$a->strings["Widgets available"] = ""; +$a->strings["Connect on Friendika!"] = ""; +$a->strings["Three Dimensional Tic-Tac-Toe"] = ""; +$a->strings["3D Tic-Tac-Toe"] = ""; +$a->strings["New game"] = ""; +$a->strings["New game with handicap"] = ""; +$a->strings["Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. "] = ""; +$a->strings["In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels."] = ""; +$a->strings["The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage."] = ""; +$a->strings["You go first..."] = ""; +$a->strings["I'm going first this time..."] = ""; +$a->strings["You won!"] = ""; +$a->strings["\"Cat\" game!"] = ""; +$a->strings["I won!"] = ""; +$a->strings["Randplace Settings"] = ""; +$a->strings["Enable Randplace Plugin"] = ""; +$a->strings["Upload a file"] = ""; +$a->strings["Drop files here to upload"] = ""; +$a->strings["Failed"] = ""; +$a->strings["No files were uploaded."] = ""; +$a->strings["Uploaded file is empty"] = ""; +$a->strings["File has an invalid extension, it should be one of "] = ""; +$a->strings["Upload was cancelled, or server error encountered"] = ""; +$a->strings["Impressum"] = ""; +$a->strings["Site Owner"] = ""; +$a->strings["Email Address"] = ""; +$a->strings["Postal Address"] = ""; +$a->strings["The impressum addon needs to be configured!
Please add at least the owner variable to your config file. For other variables please refer to the README file of the addon."] = ""; +$a->strings["Site Owners Profile"] = ""; +$a->strings["Notes"] = ""; +$a->strings["OEmbed settings updated"] = ""; +$a->strings["Use OEmbed for YouTube videos"] = ""; +$a->strings["URL to embed:"] = ""; +$a->strings["Post to StatusNet"] = ""; +$a->strings["Please contact your site administrator.
The provided API URL is not valid."] = ""; +$a->strings["We could not contact the StatusNet API with the Path you entered."] = ""; +$a->strings["StatusNet settings updated."] = ""; +$a->strings["StatusNet Posting Settings"] = ""; +$a->strings["Globally Available StatusNet OAuthKeys"] = ""; +$a->strings["There are preconfigured OAuth key pairs for some StatusNet servers available. If you are useing one of them, please use these credentials. If not feel free to connect to any other StatusNet instance (see below)."] = ""; +$a->strings["Provide your own OAuth Credentials"] = ""; +$a->strings["No consumer key pair for StatusNet found. Register your Friendika Account as an desktop client on your StatusNet account, copy the consumer key pair here and enter the API base root.
Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendika installation at your favorited StatusNet installation."] = ""; +$a->strings["OAuth Consumer Key"] = ""; +$a->strings["OAuth Consumer Secret"] = ""; +$a->strings["Base API Path (remember the trailing /)"] = ""; +$a->strings["To connect to your StatusNet account click the button below to get a security code from StatusNet which you have to copy into the input box below and submit the form. Only your public posts will be posted to StatusNet."] = ""; +$a->strings["Log in with StatusNet"] = ""; +$a->strings["Copy the security code from StatusNet here"] = ""; +$a->strings["Cancel Connection Process"] = ""; +$a->strings["Current StatusNet API is"] = ""; +$a->strings["Cancel StatusNet Connection"] = ""; +$a->strings["Currently connected to: "] = ""; +$a->strings["If enabled all your public postings can be posted to the associated StatusNet account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = ""; +$a->strings["Allow posting to StatusNet"] = ""; +$a->strings["Send public postings to StatusNet by default"] = ""; +$a->strings["Clear OAuth configuration"] = ""; +$a->strings["API URL"] = ""; +$a->strings["Consumer Secret"] = ""; +$a->strings["Consumer Key"] = ""; +$a->strings["Piwik Base URL"] = ""; +$a->strings["Site ID"] = ""; +$a->strings["Show opt-out cookie link?"] = ""; +$a->strings["Post to Twitter"] = ""; +$a->strings["Twitter settings updated."] = ""; +$a->strings["Twitter Posting Settings"] = ""; +$a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = ""; +$a->strings["At this Friendika instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = ""; +$a->strings["Log in with Twitter"] = ""; +$a->strings["Copy the PIN from Twitter here"] = ""; +$a->strings["If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = ""; +$a->strings["Allow posting to Twitter"] = ""; +$a->strings["Send public postings to Twitter by default"] = ""; +$a->strings["Consumer key"] = ""; +$a->strings["Consumer secret"] = ""; +$a->strings["Gender:"] = ""; +$a->strings["Birthday:"] = ""; +$a->strings["j F, Y"] = ""; +$a->strings["j F"] = ""; +$a->strings["Age:"] = ""; +$a->strings[" Status:"] = ""; +$a->strings["Homepage:"] = ""; +$a->strings["Religion:"] = ""; +$a->strings["About:"] = ""; +$a->strings["Hobbies/Interests:"] = ""; +$a->strings["Contact information and Social Networks:"] = ""; +$a->strings["Musical interests:"] = ""; +$a->strings["Books, literature:"] = ""; +$a->strings["Television:"] = ""; +$a->strings["Film/dance/culture/entertainment:"] = ""; +$a->strings["Love/Romance:"] = ""; +$a->strings["Work/employment:"] = ""; +$a->strings["School/education:"] = ""; +$a->strings["Unknown | Not categorised"] = ""; +$a->strings["Block immediately"] = ""; +$a->strings["Shady, spammer, self-marketer"] = ""; +$a->strings["Known to me, but no opinion"] = ""; +$a->strings["OK, probably harmless"] = ""; +$a->strings["Reputable, has my trust"] = ""; +$a->strings["Frequently"] = ""; +$a->strings["Hourly"] = ""; +$a->strings["Twice daily"] = ""; +$a->strings["Daily"] = ""; +$a->strings["Weekly"] = ""; +$a->strings["Monthly"] = ""; +$a->strings["Male"] = ""; +$a->strings["Female"] = ""; +$a->strings["Currently Male"] = ""; +$a->strings["Currently Female"] = ""; +$a->strings["Mostly Male"] = ""; +$a->strings["Mostly Female"] = ""; +$a->strings["Transgender"] = ""; +$a->strings["Intersex"] = ""; +$a->strings["Transsexual"] = ""; +$a->strings["Hermaphrodite"] = ""; +$a->strings["Neuter"] = ""; +$a->strings["Non-specific"] = ""; +$a->strings["Other"] = ""; +$a->strings["Undecided"] = ""; +$a->strings["Males"] = ""; +$a->strings["Females"] = ""; +$a->strings["Gay"] = ""; +$a->strings["Lesbian"] = ""; +$a->strings["No Preference"] = ""; +$a->strings["Bisexual"] = ""; +$a->strings["Autosexual"] = ""; +$a->strings["Abstinent"] = ""; +$a->strings["Virgin"] = ""; +$a->strings["Deviant"] = ""; +$a->strings["Fetish"] = ""; +$a->strings["Oodles"] = ""; +$a->strings["Nonsexual"] = ""; +$a->strings["Single"] = ""; +$a->strings["Lonely"] = ""; +$a->strings["Available"] = ""; +$a->strings["Unavailable"] = ""; +$a->strings["Dating"] = ""; +$a->strings["Unfaithful"] = ""; +$a->strings["Sex Addict"] = ""; +$a->strings["Friends"] = ""; +$a->strings["Friends/Benefits"] = ""; +$a->strings["Casual"] = ""; +$a->strings["Engaged"] = ""; +$a->strings["Married"] = ""; +$a->strings["Partners"] = ""; +$a->strings["Cohabiting"] = ""; +$a->strings["Happy"] = ""; +$a->strings["Not Looking"] = ""; +$a->strings["Swinger"] = ""; +$a->strings["Betrayed"] = ""; +$a->strings["Separated"] = ""; +$a->strings["Unstable"] = ""; +$a->strings["Divorced"] = ""; +$a->strings["Widowed"] = ""; +$a->strings["Uncertain"] = ""; +$a->strings["Complicated"] = ""; +$a->strings["Don't care"] = ""; +$a->strings["Ask me"] = ""; +$a->strings["l F d, Y \\@ g:i A"] = ""; +$a->strings["Starts:"] = ""; +$a->strings["Finishes:"] = ""; +$a->strings["prev"] = ""; +$a->strings["first"] = ""; +$a->strings["last"] = ""; +$a->strings["next"] = ""; +$a->strings["No contacts"] = ""; +$a->strings["%d Contact"] = array( + 0 => "", + 1 => "", ); -$a->strings['Save'] = 'Save'; -$a->strings['Invalid request identifier.'] = 'Invalid request identifier.'; -$a->strings['Discard'] = 'Discard'; -$a->strings['Ignore'] = 'Ignore'; -$a->strings['Pending Friend/Connect Notifications'] = 'Pending Friend/Connect Notifications'; -$a->strings['Show Ignored Requests'] = 'Show Ignored Requests'; -$a->strings['Hide Ignored Requests'] = 'Hide Ignored Requests'; -$a->strings['Claims to be known to you: '] = 'Claims to be known to you: '; -$a->strings['yes'] = 'yes'; -$a->strings['no'] = 'no'; -$a->strings['Approve as: '] = 'Approve as: '; -$a->strings['Friend'] = 'Friend'; -$a->strings['Fan/Admirer'] = 'Fan/Admirer'; -$a->strings['Notification type: '] = 'Notification type: '; -$a->strings['Friend/Connect Request'] = 'Friend/Connect Request'; -$a->strings['New Follower'] = 'New Follower'; -$a->strings['Approve'] = 'Approve'; -$a->strings['No notifications.'] = 'No notifications.'; -$a->strings['User registrations waiting for confirm'] = 'User registrations waiting for confirm'; -$a->strings['Deny'] = 'Deny'; -$a->strings['No registrations.'] = 'No registrations.'; -$a->strings['Post successful.'] = 'Post successful.'; -$a->strings['Login failed.'] = 'Login failed.'; -$a->strings["Welcome "] = "Welcome "; -$a->strings['Please upload a profile photo.'] = 'Please upload a profile photo.'; -$a->strings["Welcome back "] = "Welcome back "; -$a->strings['Photo Albums'] = 'Photo Albums'; -$a->strings['Contact Photos'] = 'Contact Photos'; -$a->strings['Contact information unavailable'] = 'Contact information unavailable'; -$a->strings['Profile Photos'] = 'Profile Photos'; -$a->strings['Album not found.'] = 'Album not found.'; -$a->strings['Delete Album'] = 'Delete Album'; -$a->strings['Delete Photo'] = 'Delete Photo'; -$a->strings['was tagged in a'] = 'was tagged in a'; -$a->strings['by'] = 'by'; -$a->strings['Image exceeds size limit of '] = 'Image exceeds size limit of '; -$a->strings['Unable to process image.'] = 'Unable to process image.'; -$a->strings['Image upload failed.'] = 'Image upload failed.'; -$a->strings['No photos selected'] = 'No photos selected'; -$a->strings['Upload Photos'] = 'Upload Photos'; -$a->strings['New album name: '] = 'New album name: '; -$a->strings['or existing album name: '] = 'or existing album name: '; -$a->strings['Permissions'] = 'Permissions'; -$a->strings['Edit Album'] = 'Edit Album'; -$a->strings['View Photo'] = 'View Photo'; -$a->strings['Photo not available'] = 'Photo not available'; -$a->strings['Edit photo'] = 'Edit photo'; -$a->strings['Use as profile photo'] = 'Use as profile photo'; -$a->strings['Private Message'] = 'Private Message'; -$a->strings['<< Prev'] = '<< Prev'; -$a->strings['View Full Size'] = 'View Full Size'; -$a->strings['Next >>'] = 'Next >>'; -$a->strings['[Remove any tag]'] = '[Remove any tag]'; -$a->strings['New album name'] = 'New album name'; -$a->strings['Caption'] = 'Caption'; -$a->strings['Add a Tag'] = 'Add a Tag'; -$a->strings['Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping'] = 'Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping'; -$a->strings["I like this \x28toggle\x29"] = "I like this \x28toggle\x29"; -$a->strings["I don't like this \x28toggle\x29"] = "I don't like this \x28toggle\x29"; -$a->strings['Share'] = 'Share'; -$a->strings['This is you'] = 'This is you'; -$a->strings['Recent Photos'] = 'Recent Photos'; -$a->strings['Upload New Photos'] = 'Upload New Photos'; -$a->strings['View Album'] = 'View Album'; -$a->strings['Access to this profile has been restricted.'] = 'Access to this profile has been restricted.'; -$a->strings['Status'] = 'Status'; -$a->strings['Profile'] = 'Profile'; -$a->strings['Photos'] = 'Photos'; -$a->strings['Image uploaded but image cropping failed.'] = 'Image uploaded but image cropping failed.'; -$a->strings['Unable to process image'] = 'Unable to process image'; -$a->strings['Upload File:'] = 'Upload File:'; -$a->strings['Upload Profile Photo'] = 'Upload Profile Photo'; -$a->strings['Upload'] = 'Upload'; -$a->strings['or'] = 'or'; -$a->strings['skip this step'] = 'skip this step'; -$a->strings['select a photo from your photo albums'] = 'select a photo from your photo albums'; -$a->strings['Crop Image'] = 'Crop Image'; -$a->strings['Please adjust the image cropping for optimum viewing.'] = 'Please adjust the image cropping for optimum viewing.'; -$a->strings['Done Editing'] = 'Done Editing'; -$a->strings['Image uploaded successfully.'] = 'Image uploaded successfully.'; -$a->strings['Profile Name is required.'] = 'Profile Name is required.'; -$a->strings['Profile updated.'] = 'Profile updated.'; -$a->strings['Profile deleted.'] = 'Profile deleted.'; -$a->strings['Profile-'] = 'Profile-'; -$a->strings['New profile created.'] = 'New profile created.'; -$a->strings['Profile unavailable to clone.'] = 'Profile unavailable to clone.'; -$a->strings['Hide your contact/friend list from viewers of this profile?'] = 'Hide your contact/friend list from viewers of this profile?'; -$a->strings['Hide profile details and all your messages from unknown viewers?'] = 'Hide profile details and all your messages from unknown viewers?'; -$a->strings['Edit Profile Details'] = 'Edit Profile Details'; -$a->strings['View this profile'] = 'View this profile'; -$a->strings['Create a new profile using these settings'] = 'Create a new profile using these settings'; -$a->strings['Clone this profile'] = 'Clone this profile'; -$a->strings['Delete this profile'] = 'Delete this profile'; -$a->strings['Profile Name:'] = 'Profile Name:'; -$a->strings['Your Full Name:'] = 'Your Full Name:'; -$a->strings['Title/Description:'] = 'Title/Description:'; -$a->strings['Your Gender:'] = 'Your Gender:'; -$a->strings["Birthday \x28y/m/d\x29:"] = "Birthday \x28y/m/d\x29:"; -$a->strings['Street Address:'] = 'Street Address:'; -$a->strings['Locality/City:'] = 'Locality/City:'; -$a->strings['Postal/Zip Code:'] = 'Postal/Zip Code:'; -$a->strings['Country:'] = 'Country:'; -$a->strings['Region/State:'] = 'Region/State:'; -$a->strings[' Marital Status:'] = ' Marital Status:'; -$a->strings["Who: \x28if applicable\x29"] = "Who: \x28if applicable\x29"; -$a->strings['Examples: cathy123, Cathy Williams, cathy@example.com'] = 'Examples: cathy123, Cathy Williams, cathy@example.com'; -$a->strings['Sexual Preference:'] = 'Sexual Preference:'; -$a->strings['Homepage URL:'] = 'Homepage URL:'; -$a->strings['Political Views:'] = 'Political Views:'; -$a->strings['Religious Views:'] = 'Religious Views:'; -$a->strings['Public Keywords:'] = 'Public Keywords:'; -$a->strings['Private Keywords:'] = 'Private Keywords:'; -$a->strings['Example: fishing photography software'] = 'Example: fishing photography software'; -$a->strings["\x28Used for suggesting potential friends, can be seen by others\x29"] = "\x28Used for suggesting potential friends, can be seen by others\x29"; -$a->strings["\x28Used for searching profiles, never shown to others\x29"] = "\x28Used for searching profiles, never shown to others\x29"; -$a->strings['Tell us about yourself...'] = 'Tell us about yourself...'; -$a->strings['Hobbies/Interests'] = 'Hobbies/Interests'; -$a->strings['Contact information and Social Networks'] = 'Contact information and Social Networks'; -$a->strings['Musical interests'] = 'Musical interests'; -$a->strings['Books, literature'] = 'Books, literature'; -$a->strings['Television'] = 'Television'; -$a->strings['Film/dance/culture/entertainment'] = 'Film/dance/culture/entertainment'; -$a->strings['Love/romance'] = 'Love/romance'; -$a->strings['Work/employment'] = 'Work/employment'; -$a->strings['School/education'] = 'School/education'; -$a->strings['This is your public profile.
It may be visible to anybody using the internet.'] = 'This is your public profile.
It may be visible to anybody using the internet.'; -$a->strings['Profiles'] = 'Profiles'; -$a->strings['Change profile photo'] = 'Change profile photo'; -$a->strings['Create New Profile'] = 'Create New Profile'; -$a->strings['Profile Image'] = 'Profile Image'; -$a->strings['Visible to everybody'] = 'Visible to everybody'; -$a->strings['Edit visibility'] = 'Edit visibility'; -$a->strings['Invalid profile identifier.'] = 'Invalid profile identifier.'; -$a->strings['Profile Visibility Editor'] = 'Profile Visibility Editor'; -$a->strings['Visible To'] = 'Visible To'; -$a->strings["All Contacts \x28with secure profile access\x29"] = "All Contacts \x28with secure profile access\x29"; -$a->strings['Invalid OpenID url'] = 'Invalid OpenID url'; -$a->strings['Please enter the required information.'] = 'Please enter the required information.'; -$a->strings['Please use a shorter name.'] = 'Please use a shorter name.'; -$a->strings['Name too short.'] = 'Name too short.'; -$a->strings["That doesn't appear to be your full \x28First Last\x29 name."] = "That doesn't appear to be your full \x28First Last\x29 name."; -$a->strings['Your email domain is not among those allowed on this site.'] = 'Your email domain is not among those allowed on this site.'; -$a->strings['Not a valid email address.'] = 'Not a valid email address.'; -$a->strings['Cannot use that email.'] = 'Cannot use that email.'; -$a->strings['Your "nickname" can only contain "a-z", "0-9", "-", and "_", and must also begin with a letter.'] = 'Your "nickname" can only contain "a-z", "0-9", "-", and "_", and must also begin with a letter.'; -$a->strings['Nickname is already registered. Please choose another.'] = 'Nickname is already registered. Please choose another.'; -$a->strings['SERIOUS ERROR: Generation of security keys failed.'] = 'SERIOUS ERROR: Generation of security keys failed.'; -$a->strings['An error occurred during registration. Please try again.'] = 'An error occurred during registration. Please try again.'; -$a->strings['An error occurred creating your default profile. Please try again.'] = 'An error occurred creating your default profile. Please try again.'; -$a->strings['Registration successful. Please check your email for further instructions.'] = 'Registration successful. Please check your email for further instructions.'; -$a->strings['Failed to send email message. Here is the message that failed.'] = 'Failed to send email message. Here is the message that failed.'; -$a->strings['Your registration can not be processed.'] = 'Your registration can not be processed.'; -$a->strings['Your registration is pending approval by the site owner.'] = 'Your registration is pending approval by the site owner.'; -$a->strings["You may \x28optionally\x29 fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "You may \x28optionally\x29 fill in this form via OpenID by supplying your OpenID and clicking 'Register'."; -$a->strings['If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items.'] = 'If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items.'; -$a->strings["Your OpenID \x28optional\x29: "] = "Your OpenID \x28optional\x29: "; -$a->strings['Members of this network prefer to communicate with real people who use their real names.'] = 'Members of this network prefer to communicate with real people who use their real names.'; -$a->strings['Include your profile in member directory?'] = 'Include your profile in member directory?'; -$a->strings['Registration'] = 'Registration'; -$a->strings['Your Full Name ' . "\x28" . 'e.g. Joe Smith' . "\x29" . ': '] = 'Your Full Name ' . "\x28" . 'e.g. Joe Smith' . "\x29" . ': '; -$a->strings['Your Email Address: '] = 'Your Email Address: '; -$a->strings['Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be \'nickname@$sitename\'.'] = 'Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be \'nickname@$sitename\'.'; -$a->strings['Choose a nickname: '] = 'Choose a nickname: '; -$a->strings['Please login.'] = 'Please login.'; -$a->strings['Account approved.'] = 'Account approved.'; -$a->strings['Remove My Account'] = 'Remove My Account'; -$a->strings['This will completely remove your account. Once this has been done it is not recoverable.'] = 'This will completely remove your account. Once this has been done it is not recoverable.'; -$a->strings['Please enter your password for verification:'] = 'Please enter your password for verification:'; -$a->strings['No results.'] = 'No results.'; -$a->strings['Passwords do not match. Password unchanged.'] = 'Passwords do not match. Password unchanged.'; -$a->strings['Empty passwords are not allowed. Password unchanged.'] = 'Empty passwords are not allowed. Password unchanged.'; -$a->strings['Password changed.'] = 'Password changed.'; -$a->strings['Password update failed. Please try again.'] = 'Password update failed. Please try again.'; -$a->strings[' Please use a shorter name.'] = ' Please use a shorter name.'; -$a->strings[' Name too short.'] = ' Name too short.'; -$a->strings[' Not valid email.'] = ' Not valid email.'; -$a->strings[' Cannot change to that email.'] = ' Cannot change to that email.'; -$a->strings['Settings updated.'] = 'Settings updated.'; -$a->strings['Plugin Settings'] = 'Plugin Settings'; -$a->strings['Account Settings'] = 'Account Settings'; -$a->strings['No Plugin settings configured'] = 'No Plugin settings configured'; -$a->strings['Normal Account'] = 'Normal Account'; -$a->strings['This account is a normal personal profile'] = 'This account is a normal personal profile'; -$a->strings['Soapbox Account'] = 'Soapbox Account'; -$a->strings['Automatically approve all connection/friend requests as read-only fans'] = 'Automatically approve all connection/friend requests as read-only fans'; -$a->strings['Community/Celebrity Account'] = 'Community/Celebrity Account'; -$a->strings['Automatically approve all connection/friend requests as read-write fans'] = 'Automatically approve all connection/friend requests as read-write fans'; -$a->strings['Automatic Friend Account'] = 'Automatic Friend Account'; -$a->strings['Automatically approve all connection/friend requests as friends'] = 'Automatically approve all connection/friend requests as friends'; -$a->strings['OpenID: '] = 'OpenID: '; -$a->strings[" \x28Optional\x29 Allow this OpenID to login to this account."] = " \x28Optional\x29 Allow this OpenID to login to this account."; -$a->strings['Publish your default profile in site directory?'] = 'Publish your default profile in site directory?'; -$a->strings['Publish your default profile in global social directory?'] = 'Publish your default profile in global social directory?'; -$a->strings['Profile is not published.'] = 'Profile is not published.'; -$a->strings['Your Identity Address is'] = 'Your Identity Address is'; -$a->strings['Export Personal Data'] = 'Export Personal Data'; -$a->strings['Basic Settings'] = 'Basic Settings'; -$a->strings['Full Name:'] = 'Full Name:'; -$a->strings['Email Address:'] = 'Email Address:'; -$a->strings['Your Timezone:'] = 'Your Timezone:'; -$a->strings['Default Post Location:'] = 'Default Post Location:'; -$a->strings['Use Browser Location:'] = 'Use Browser Location:'; -$a->strings['Display Theme:'] = 'Display Theme:'; -$a->strings['Security and Privacy Settings'] = 'Security and Privacy Settings'; -$a->strings['Maximum Friend Requests/Day:'] = 'Maximum Friend Requests/Day:'; -$a->strings["\x28to prevent spam abuse\x29"] = "\x28to prevent spam abuse\x29"; -$a->strings['Allow friends to post to your profile page:'] = 'Allow friends to post to your profile page:'; -$a->strings["Automatically expire \x28delete\x29 posts older than"] = "Automatically expire \x28delete\x29 posts older than"; -$a->strings['days'] = 'days'; -$a->strings['Notification Settings'] = 'Notification Settings'; -$a->strings['Send a notification email when:'] = 'Send a notification email when:'; -$a->strings['You receive an introduction'] = 'You receive an introduction'; -$a->strings['Your introductions are confirmed'] = 'Your introductions are confirmed'; -$a->strings['Someone writes on your profile wall'] = 'Someone writes on your profile wall'; -$a->strings['Someone writes a followup comment'] = 'Someone writes a followup comment'; -$a->strings['You receive a private message'] = 'You receive a private message'; -$a->strings['Password Settings'] = 'Password Settings'; -$a->strings['Leave password fields blank unless changing'] = 'Leave password fields blank unless changing'; -$a->strings['New Password:'] = 'New Password:'; -$a->strings['Confirm:'] = 'Confirm:'; -$a->strings['Advanced Page Settings'] = 'Advanced Page Settings'; -$a->strings['Default Post Permissions'] = 'Default Post Permissions'; -$a->strings["\x28click to open/close\x29"] = "\x28click to open/close\x29"; -$a->strings['Email/Mailbox Setup'] = 'Email/Mailbox Setup'; -$a->strings["If you wish to communicate with email contacts using this service \x28optional\x29, please specify how to connect to your mailbox."] = "If you wish to communicate with email contacts using this service \x28optional\x29, please specify how to connect to your mailbox."; -$a->strings['IMAP server name:'] = 'IMAP server name:'; -$a->strings['IMAP port:'] = 'IMAP port:'; -$a->strings["Security \x28TLS or SSL\x29:"] = "Security \x28TLS or SSL\x29:"; -$a->strings['Email login name:'] = 'Email login name:'; -$a->strings['Email password:'] = 'Email password:'; -$a->strings["Reply-to address \x28Optional\x29:"] = "Reply-to address \x28Optional\x29:"; -$a->strings['Send public posts to all email contacts:'] = 'Send public posts to all email contacts:'; -$a->strings['Email access is disabled on this site.'] = 'Email access is disabled on this site.'; -$a->strings['Tag removed'] = 'Tag removed'; -$a->strings['Remove Item Tag'] = 'Remove Item Tag'; -$a->strings['Select a tag to remove: '] = 'Select a tag to remove: '; -$a->strings['Remove'] = 'Remove'; -$a->strings['[Embedded content - reload page to view]'] = '[Embedded content - reload page to view]'; -$a->strings['No contacts.'] = 'No contacts.'; -$a->strings['File upload failed.'] = 'File upload failed.'; -$a->strings['Image exceeds size limit of %d'] = 'Image exceeds size limit of %d'; -$a->strings['Visible To:'] = 'Visible To:'; -$a->strings['everybody'] = 'everybody'; -$a->strings['Groups'] = 'Groups'; -$a->strings['Except For:'] = 'Except For:'; -$a->strings['Logged out.'] = 'Logged out.'; -$a->strings['Image/photo'] = 'Image/photo'; -$a->strings['Unknown | Not categorised'] = 'Unknown | Not categorised'; -$a->strings['Block immediately'] = 'Block immediately'; -$a->strings['Shady, spammer, self-marketer'] = 'Shady, spammer, self-marketer'; -$a->strings['Known to me, but no opinion'] = 'Known to me, but no opinion'; -$a->strings['OK, probably harmless'] = 'OK, probably harmless'; -$a->strings['Reputable, has my trust'] = 'Reputable, has my trust'; -$a->strings['Frequently'] = 'Frequently'; -$a->strings['Hourly'] = 'Hourly'; -$a->strings['Twice daily'] = 'Twice daily'; -$a->strings['Daily'] = 'Daily'; -$a->strings['Weekly'] = 'Weekly'; -$a->strings['Monthly'] = 'Monthly'; -$a->strings['View %s\'s profile'] = 'View %s\'s profile'; -$a->strings['View in context'] = 'View in context'; -$a->strings['See more posts like this'] = 'See more posts like this'; -$a->strings['See all %d comments'] = 'See all %d comments'; -$a->strings['to'] = 'to'; -$a->strings['Wall-to-Wall'] = 'Wall-to-Wall'; -$a->strings['via Wall-To-Wall:'] = 'via Wall-To-Wall:'; -$a->strings['%s likes this.'] = '%s likes this.'; -$a->strings['%s doesn\'t like this.'] = '%s doesn\'t like this.'; -$a->strings['%2$d people like this.'] = '%2$d people like this.'; -$a->strings['%2$d people don\'t like this.'] = '%2$d people don\'t like this.'; -$a->strings['and'] = 'and'; -$a->strings[', and %d other people'] = ', and %d other people'; -$a->strings['%s like this.'] = '%s like this.'; -$a->strings['%s don\'t like this.'] = '%s don\'t like this.'; -$a->strings['Please enter a YouTube link:'] = 'Please enter a YouTube link:'; -$a->strings["Please enter a video\x28.ogg\x29 link/URL:"] = "Please enter a video\x28.ogg\x29 link/URL:"; -$a->strings["Please enter an audio\x28.ogg\x29 link/URL:"] = "Please enter an audio\x28.ogg\x29 link/URL:"; -$a->strings['Where are you right now?'] = 'Where are you right now?'; -$a->strings['Enter a title for this item'] = 'Enter a title for this item'; -$a->strings['Set title'] = 'Set title'; -$a->strings['Miscellaneous'] = 'Miscellaneous'; -$a->strings['less than a second ago'] = 'less than a second ago'; -$a->strings['year'] = 'year'; -$a->strings['years'] = 'years'; -$a->strings['month'] = 'month'; -$a->strings['months'] = 'months'; -$a->strings['week'] = 'week'; -$a->strings['weeks'] = 'weeks'; -$a->strings['day'] = 'day'; -$a->strings['hour'] = 'hour'; -$a->strings['hours'] = 'hours'; -$a->strings['minute'] = 'minute'; -$a->strings['minutes'] = 'minutes'; -$a->strings['second'] = 'second'; -$a->strings['seconds'] = 'seconds'; -$a->strings[' ago'] = ' ago'; -$a->strings['Cannot locate DNS info for database server \'%s\''] = 'Cannot locate DNS info for database server \'%s\''; -$a->strings['Create a new group'] = 'Create a new group'; -$a->strings['Everybody'] = 'Everybody'; -$a->strings['Birthday:'] = 'Birthday:'; -$a->strings['Home'] = 'Home'; -$a->strings['Apps'] = 'Apps'; -$a->strings['Directory'] = 'Directory'; -$a->strings['Network'] = 'Network'; -$a->strings['Manage'] = 'Manage'; -$a->strings['Settings'] = 'Settings'; -$a->strings["\x28no subject\x29"] = "\x28no subject\x29"; -$a->strings['Embedding disabled'] = 'Embedding disabled'; -$a->strings['From: '] = 'From: '; -$a->strings['j F, Y'] = 'j F, Y'; -$a->strings['j F'] = 'j F'; -$a->strings['Age:'] = 'Age:'; -$a->strings[' Status:'] = ' Status:'; -$a->strings['Religion:'] = 'Religion:'; -$a->strings['About:'] = 'About:'; -$a->strings['Hobbies/Interests:'] = 'Hobbies/Interests:'; -$a->strings['Contact information and Social Networks:'] = 'Contact information and Social Networks:'; -$a->strings['Musical interests:'] = 'Musical interests:'; -$a->strings['Books, literature:'] = 'Books, literature:'; -$a->strings['Television:'] = 'Television:'; -$a->strings['Film/dance/culture/entertainment:'] = 'Film/dance/culture/entertainment:'; -$a->strings['Love/Romance:'] = 'Love/Romance:'; -$a->strings['Work/employment:'] = 'Work/employment:'; -$a->strings['School/education:'] = 'School/education:'; -$a->strings['Male'] = 'Male'; -$a->strings['Female'] = 'Female'; -$a->strings['Currently Male'] = 'Currently Male'; -$a->strings['Currently Female'] = 'Currently Female'; -$a->strings['Mostly Male'] = 'Mostly Male'; -$a->strings['Mostly Female'] = 'Mostly Female'; -$a->strings['Transgender'] = 'Transgender'; -$a->strings['Intersex'] = 'Intersex'; -$a->strings['Transsexual'] = 'Transsexual'; -$a->strings['Hermaphrodite'] = 'Hermaphrodite'; -$a->strings['Neuter'] = 'Neuter'; -$a->strings['Non-specific'] = 'Non-specific'; -$a->strings['Other'] = 'Other'; -$a->strings['Undecided'] = 'Undecided'; -$a->strings['Males'] = 'Males'; -$a->strings['Females'] = 'Females'; -$a->strings['Gay'] = 'Gay'; -$a->strings['Lesbian'] = 'Lesbian'; -$a->strings['No Preference'] = 'No Preference'; -$a->strings['Bisexual'] = 'Bisexual'; -$a->strings['Autosexual'] = 'Autosexual'; -$a->strings['Abstinent'] = 'Abstinent'; -$a->strings['Virgin'] = 'Virgin'; -$a->strings['Deviant'] = 'Deviant'; -$a->strings['Fetish'] = 'Fetish'; -$a->strings['Oodles'] = 'Oodles'; -$a->strings['Nonsexual'] = 'Nonsexual'; -$a->strings['Single'] = 'Single'; -$a->strings['Lonely'] = 'Lonely'; -$a->strings['Available'] = 'Available'; -$a->strings['Unavailable'] = 'Unavailable'; -$a->strings['Dating'] = 'Dating'; -$a->strings['Unfaithful'] = 'Unfaithful'; -$a->strings['Sex Addict'] = 'Sex Addict'; -$a->strings['Friends'] = 'Friends'; -$a->strings['Friends/Benefits'] = 'Friends/Benefits'; -$a->strings['Casual'] = 'Casual'; -$a->strings['Engaged'] = 'Engaged'; -$a->strings['Married'] = 'Married'; -$a->strings['Partners'] = 'Partners'; -$a->strings['Cohabiting'] = 'Cohabiting'; -$a->strings['Happy'] = 'Happy'; -$a->strings['Not Looking'] = 'Not Looking'; -$a->strings['Swinger'] = 'Swinger'; -$a->strings['Betrayed'] = 'Betrayed'; -$a->strings['Separated'] = 'Separated'; -$a->strings['Unstable'] = 'Unstable'; -$a->strings['Divorced'] = 'Divorced'; -$a->strings['Widowed'] = 'Widowed'; -$a->strings['Uncertain'] = 'Uncertain'; -$a->strings['Complicated'] = 'Complicated'; -$a->strings['Don\'t care'] = 'Don\'t care'; -$a->strings['Ask me'] = 'Ask me'; -$a->strings['Facebook disabled'] = 'Facebook disabled'; -$a->strings['Updating contacts'] = 'Updating contacts'; -$a->strings['Facebook API key is missing.'] = 'Facebook API key is missing.'; -$a->strings['Facebook Connect'] = 'Facebook Connect'; -$a->strings['Install Facebook connector for this account.'] = 'Install Facebook connector for this account.'; -$a->strings['Remove Facebook connector'] = 'Remove Facebook connector'; -$a->strings['Post to Facebook by default'] = 'Post to Facebook by default'; -$a->strings['Facebook'] = 'Facebook'; -$a->strings['Facebook Connector Settings'] = 'Facebook Connector Settings'; -$a->strings['Post to Facebook'] = 'Post to Facebook'; -$a->strings['Post to Facebook cancelled because of multi-network access permission conflict.'] = 'Post to Facebook cancelled because of multi-network access permission conflict.'; -$a->strings['Image: '] = 'Image: '; -$a->strings['View on Friendika'] = 'View on Friendika'; -$a->strings['Select files to upload: '] = 'Select files to upload: '; -$a->strings['Use the following controls only if the Java uploader [above] fails to launch.'] = 'Use the following controls only if the Java uploader [above] fails to launch.'; -$a->strings['Upload a file'] = 'Upload a file'; -$a->strings['Drop files here to upload'] = 'Drop files here to upload'; -$a->strings['Failed'] = 'Failed'; -$a->strings['No files were uploaded.'] = 'No files were uploaded.'; -$a->strings['Uploaded file is empty'] = 'Uploaded file is empty'; -$a->strings['Uploaded file is too large'] = 'Uploaded file is too large'; -$a->strings['File has an invalid extension, it should be one of '] = 'File has an invalid extension, it should be one of '; -$a->strings['Upload was cancelled, or server error encountered'] = 'Upload was cancelled, or server error encountered'; -$a->strings['OEmbed settings updated'] = 'OEmbed settings updated'; -$a->strings['URL to embed:'] = 'URL to embed:'; -$a->strings['Randplace Settings'] = 'Randplace Settings'; -$a->strings['Enable Randplace Plugin'] = 'Enable Randplace Plugin'; -$a->strings['Post to StatusNet'] = 'Post to StatusNet'; -$a->strings['Please contact your site administrator.
The provided API URL is not valid.'] = 'Please contact your site administrator.
The provided API URL is not valid.'; -$a->strings['We could not contact the StatusNet API with the Path you entered.'] = 'We could not contact the StatusNet API with the Path you entered.'; -$a->strings['StatusNet settings updated.'] = 'StatusNet settings updated.'; -$a->strings['StatusNet Posting Settings'] = 'StatusNet Posting Settings'; -$a->strings['Globally Available StatusNet OAuthKeys'] = 'Globally Available StatusNet OAuthKeys'; -$a->strings["There are preconfigured OAuth key pairs for some StatusNet servers available. If you are useing one of them, please use these credentials. If not feel free to connect to any other StatusNet instance \x28see below\x29."] = "There are preconfigured OAuth key pairs for some StatusNet servers available. If you are useing one of them, please use these credentials. If not feel free to connect to any other StatusNet instance \x28see below\x29."; -$a->strings['Provide your own OAuth Credentials'] = 'Provide your own OAuth Credentials'; -$a->strings['No consumer key pair for StatusNet found. Register your Friendika Account as an desktop client on your StatusNet account, copy the consumer key pair here and enter the API base root.
Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendika installation at your favorited StatusNet installation.'] = 'No consumer key pair for StatusNet found. Register your Friendika Account as an desktop client on your StatusNet account, copy the consumer key pair here and enter the API base root.
Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendika installation at your favorited StatusNet installation.'; -$a->strings['OAuth Consumer Key'] = 'OAuth Consumer Key'; -$a->strings['OAuth Consumer Secret'] = 'OAuth Consumer Secret'; -$a->strings["Base API Path \x28remember the trailing /\x29"] = "Base API Path \x28remember the trailing /\x29"; -$a->strings['To connect to your StatusNet account click the button below to get a security code from StatusNet which you have to copy into the input box below and submit the form. Only your public posts will be posted to StatusNet.'] = 'To connect to your StatusNet account click the button below to get a security code from StatusNet which you have to copy into the input box below and submit the form. Only your public posts will be posted to StatusNet.'; -$a->strings['Log in with StatusNet'] = 'Log in with StatusNet'; -$a->strings['Copy the security code from StatusNet here'] = 'Copy the security code from StatusNet here'; -$a->strings['Cancel StatusNet Connection'] = 'Cancel StatusNet Connection'; -$a->strings['Currently connected to: '] = 'Currently connected to: '; -$a->strings['If enabled all your public postings will be posted to the associated StatusNet account.'] = 'If enabled all your public postings will be posted to the associated StatusNet account.'; -$a->strings['Allow posting to StatusNet'] = 'Allow posting to StatusNet'; -$a->strings['Send public postings to StatusNet by default'] = 'Send public postings to StatusNet by default'; -$a->strings['Clear OAuth configuration'] = 'Clear OAuth configuration'; -$a->strings['Three Dimensional Tic-Tac-Toe'] = 'Three Dimensional Tic-Tac-Toe'; -$a->strings['3D Tic-Tac-Toe'] = '3D Tic-Tac-Toe'; -$a->strings['New game'] = 'New game'; -$a->strings['New game with handicap'] = 'New game with handicap'; -$a->strings['Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. '] = 'Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. '; -$a->strings['In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels.'] = 'In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels.'; -$a->strings['The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage.'] = 'The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage.'; -$a->strings['You go first...'] = 'You go first...'; -$a->strings['I\'m going first this time...'] = 'I\'m going first this time...'; -$a->strings['You won!'] = 'You won!'; -$a->strings['"Cat" game!'] = '"Cat" game!'; -$a->strings['I won!'] = 'I won!'; -$a->strings['Post to Twitter'] = 'Post to Twitter'; -$a->strings['Twitter Posting Settings'] = 'Twitter Posting Settings'; -$a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'No consumer key pair for Twitter found. Please contact your site administrator.'; -$a->strings['At this Friendika instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.'] = 'At this Friendika instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.'; -$a->strings['Copy the PIN from Twitter here'] = 'Copy the PIN from Twitter here'; -$a->strings['If enabled all your public postings will be posted to the associated Twitter account as well.'] = 'If enabled all your public postings will be posted to the associated Twitter account as well.'; -$a->strings['Send public postings to Twitter'] = 'Send public postings to Twitter'; -$a->strings['Connect on Friendika!'] = 'Connect on Friendika!'; -$a->strings['Widgets key: '] = 'Widgets key: '; -$a->strings["Plugin Settings"] = "Plugin Settings"; -$a->strings['Africa/Abidjan'] = 'Africa/Abidjan'; -$a->strings['Africa/Accra'] = 'Africa/Accra'; -$a->strings['Africa/Addis_Ababa'] = 'Africa/Addis_Ababa'; -$a->strings['Africa/Algiers'] = 'Africa/Algiers'; -$a->strings['Africa/Asmara'] = 'Africa/Asmara'; -$a->strings['Africa/Asmera'] = 'Africa/Asmera'; -$a->strings['Africa/Bamako'] = 'Africa/Bamako'; -$a->strings['Africa/Bangui'] = 'Africa/Bangui'; -$a->strings['Africa/Banjul'] = 'Africa/Banjul'; -$a->strings['Africa/Bissau'] = 'Africa/Bissau'; -$a->strings['Africa/Blantyre'] = 'Africa/Blantyre'; -$a->strings['Africa/Brazzaville'] = 'Africa/Brazzaville'; -$a->strings['Africa/Bujumbura'] = 'Africa/Bujumbura'; -$a->strings['Africa/Cairo'] = 'Africa/Cairo'; -$a->strings['Africa/Casablanca'] = 'Africa/Casablanca'; -$a->strings['Africa/Ceuta'] = 'Africa/Ceuta'; -$a->strings['Africa/Conakry'] = 'Africa/Conakry'; -$a->strings['Africa/Dakar'] = 'Africa/Dakar'; -$a->strings['Africa/Dar_es_Salaam'] = 'Africa/Dar_es_Salaam'; -$a->strings['Africa/Djibouti'] = 'Africa/Djibouti'; -$a->strings['Africa/Douala'] = 'Africa/Douala'; -$a->strings['Africa/El_Aaiun'] = 'Africa/El_Aaiun'; -$a->strings['Africa/Freetown'] = 'Africa/Freetown'; -$a->strings['Africa/Gaborone'] = 'Africa/Gaborone'; -$a->strings['Africa/Harare'] = 'Africa/Harare'; -$a->strings['Africa/Johannesburg'] = 'Africa/Johannesburg'; -$a->strings['Africa/Kampala'] = 'Africa/Kampala'; -$a->strings['Africa/Khartoum'] = 'Africa/Khartoum'; -$a->strings['Africa/Kigali'] = 'Africa/Kigali'; -$a->strings['Africa/Kinshasa'] = 'Africa/Kinshasa'; -$a->strings['Africa/Lagos'] = 'Africa/Lagos'; -$a->strings['Africa/Libreville'] = 'Africa/Libreville'; -$a->strings['Africa/Lome'] = 'Africa/Lome'; -$a->strings['Africa/Luanda'] = 'Africa/Luanda'; -$a->strings['Africa/Lubumbashi'] = 'Africa/Lubumbashi'; -$a->strings['Africa/Lusaka'] = 'Africa/Lusaka'; -$a->strings['Africa/Malabo'] = 'Africa/Malabo'; -$a->strings['Africa/Maputo'] = 'Africa/Maputo'; -$a->strings['Africa/Maseru'] = 'Africa/Maseru'; -$a->strings['Africa/Mbabane'] = 'Africa/Mbabane'; -$a->strings['Africa/Mogadishu'] = 'Africa/Mogadishu'; -$a->strings['Africa/Monrovia'] = 'Africa/Monrovia'; -$a->strings['Africa/Nairobi'] = 'Africa/Nairobi'; -$a->strings['Africa/Ndjamena'] = 'Africa/Ndjamena'; -$a->strings['Africa/Niamey'] = 'Africa/Niamey'; -$a->strings['Africa/Nouakchott'] = 'Africa/Nouakchott'; -$a->strings['Africa/Ouagadougou'] = 'Africa/Ouagadougou'; -$a->strings['Africa/Porto-Novo'] = 'Africa/Porto-Novo'; -$a->strings['Africa/Sao_Tome'] = 'Africa/Sao_Tome'; -$a->strings['Africa/Timbuktu'] = 'Africa/Timbuktu'; -$a->strings['Africa/Tripoli'] = 'Africa/Tripoli'; -$a->strings['Africa/Tunis'] = 'Africa/Tunis'; -$a->strings['Africa/Windhoek'] = 'Africa/Windhoek'; -$a->strings['America/Adak'] = 'America/Adak'; -$a->strings['America/Anchorage'] = 'America/Anchorage'; -$a->strings['America/Anguilla'] = 'America/Anguilla'; -$a->strings['America/Antigua'] = 'America/Antigua'; -$a->strings['America/Araguaina'] = 'America/Araguaina'; -$a->strings['America/Argentina/Buenos_Aires'] = 'America/Argentina/Buenos_Aires'; -$a->strings['America/Argentina/Catamarca'] = 'America/Argentina/Catamarca'; -$a->strings['America/Argentina/ComodRivadavia'] = 'America/Argentina/ComodRivadavia'; -$a->strings['America/Argentina/Cordoba'] = 'America/Argentina/Cordoba'; -$a->strings['America/Argentina/Jujuy'] = 'America/Argentina/Jujuy'; -$a->strings['America/Argentina/La_Rioja'] = 'America/Argentina/La_Rioja'; -$a->strings['America/Argentina/Mendoza'] = 'America/Argentina/Mendoza'; -$a->strings['America/Argentina/Rio_Gallegos'] = 'America/Argentina/Rio_Gallegos'; -$a->strings['America/Argentina/Salta'] = 'America/Argentina/Salta'; -$a->strings['America/Argentina/San_Juan'] = 'America/Argentina/San_Juan'; -$a->strings['America/Argentina/San_Luis'] = 'America/Argentina/San_Luis'; -$a->strings['America/Argentina/Tucuman'] = 'America/Argentina/Tucuman'; -$a->strings['America/Argentina/Ushuaia'] = 'America/Argentina/Ushuaia'; -$a->strings['America/Aruba'] = 'America/Aruba'; -$a->strings['America/Asuncion'] = 'America/Asuncion'; -$a->strings['America/Atikokan'] = 'America/Atikokan'; -$a->strings['America/Atka'] = 'America/Atka'; -$a->strings['America/Bahia'] = 'America/Bahia'; -$a->strings['America/Barbados'] = 'America/Barbados'; -$a->strings['America/Belem'] = 'America/Belem'; -$a->strings['America/Belize'] = 'America/Belize'; -$a->strings['America/Blanc-Sablon'] = 'America/Blanc-Sablon'; -$a->strings['America/Boa_Vista'] = 'America/Boa_Vista'; -$a->strings['America/Bogota'] = 'America/Bogota'; -$a->strings['America/Boise'] = 'America/Boise'; -$a->strings['America/Buenos_Aires'] = 'America/Buenos_Aires'; -$a->strings['America/Cambridge_Bay'] = 'America/Cambridge_Bay'; -$a->strings['America/Campo_Grande'] = 'America/Campo_Grande'; -$a->strings['America/Cancun'] = 'America/Cancun'; -$a->strings['America/Caracas'] = 'America/Caracas'; -$a->strings['America/Catamarca'] = 'America/Catamarca'; -$a->strings['America/Cayenne'] = 'America/Cayenne'; -$a->strings['America/Cayman'] = 'America/Cayman'; -$a->strings['America/Chicago'] = 'America/Chicago'; -$a->strings['America/Chihuahua'] = 'America/Chihuahua'; -$a->strings['America/Coral_Harbour'] = 'America/Coral_Harbour'; -$a->strings['America/Cordoba'] = 'America/Cordoba'; -$a->strings['America/Costa_Rica'] = 'America/Costa_Rica'; -$a->strings['America/Cuiaba'] = 'America/Cuiaba'; -$a->strings['America/Curacao'] = 'America/Curacao'; -$a->strings['America/Danmarkshavn'] = 'America/Danmarkshavn'; -$a->strings['America/Dawson'] = 'America/Dawson'; -$a->strings['America/Dawson_Creek'] = 'America/Dawson_Creek'; -$a->strings['America/Denver'] = 'America/Denver'; -$a->strings['America/Detroit'] = 'America/Detroit'; -$a->strings['America/Dominica'] = 'America/Dominica'; -$a->strings['America/Edmonton'] = 'America/Edmonton'; -$a->strings['America/Eirunepe'] = 'America/Eirunepe'; -$a->strings['America/El_Salvador'] = 'America/El_Salvador'; -$a->strings['America/Ensenada'] = 'America/Ensenada'; -$a->strings['America/Fort_Wayne'] = 'America/Fort_Wayne'; -$a->strings['America/Fortaleza'] = 'America/Fortaleza'; -$a->strings['America/Glace_Bay'] = 'America/Glace_Bay'; -$a->strings['America/Godthab'] = 'America/Godthab'; -$a->strings['America/Goose_Bay'] = 'America/Goose_Bay'; -$a->strings['America/Grand_Turk'] = 'America/Grand_Turk'; -$a->strings['America/Grenada'] = 'America/Grenada'; -$a->strings['America/Guadeloupe'] = 'America/Guadeloupe'; -$a->strings['America/Guatemala'] = 'America/Guatemala'; -$a->strings['America/Guayaquil'] = 'America/Guayaquil'; -$a->strings['America/Guyana'] = 'America/Guyana'; -$a->strings['America/Halifax'] = 'America/Halifax'; -$a->strings['America/Havana'] = 'America/Havana'; -$a->strings['America/Hermosillo'] = 'America/Hermosillo'; -$a->strings['America/Indiana/Indianapolis'] = 'America/Indiana/Indianapolis'; -$a->strings['America/Indiana/Knox'] = 'America/Indiana/Knox'; -$a->strings['America/Indiana/Marengo'] = 'America/Indiana/Marengo'; -$a->strings['America/Indiana/Petersburg'] = 'America/Indiana/Petersburg'; -$a->strings['America/Indiana/Tell_City'] = 'America/Indiana/Tell_City'; -$a->strings['America/Indiana/Vevay'] = 'America/Indiana/Vevay'; -$a->strings['America/Indiana/Vincennes'] = 'America/Indiana/Vincennes'; -$a->strings['America/Indiana/Winamac'] = 'America/Indiana/Winamac'; -$a->strings['America/Indianapolis'] = 'America/Indianapolis'; -$a->strings['America/Inuvik'] = 'America/Inuvik'; -$a->strings['America/Iqaluit'] = 'America/Iqaluit'; -$a->strings['America/Jamaica'] = 'America/Jamaica'; -$a->strings['America/Jujuy'] = 'America/Jujuy'; -$a->strings['America/Juneau'] = 'America/Juneau'; -$a->strings['America/Kentucky/Louisville'] = 'America/Kentucky/Louisville'; -$a->strings['America/Kentucky/Monticello'] = 'America/Kentucky/Monticello'; -$a->strings['America/Knox_IN'] = 'America/Knox_IN'; -$a->strings['America/La_Paz'] = 'America/La_Paz'; -$a->strings['America/Lima'] = 'America/Lima'; -$a->strings['America/Los_Angeles'] = 'America/Los_Angeles'; -$a->strings['America/Louisville'] = 'America/Louisville'; -$a->strings['America/Maceio'] = 'America/Maceio'; -$a->strings['America/Managua'] = 'America/Managua'; -$a->strings['America/Manaus'] = 'America/Manaus'; -$a->strings['America/Marigot'] = 'America/Marigot'; -$a->strings['America/Martinique'] = 'America/Martinique'; -$a->strings['America/Matamoros'] = 'America/Matamoros'; -$a->strings['America/Mazatlan'] = 'America/Mazatlan'; -$a->strings['America/Mendoza'] = 'America/Mendoza'; -$a->strings['America/Menominee'] = 'America/Menominee'; -$a->strings['America/Merida'] = 'America/Merida'; -$a->strings['America/Mexico_City'] = 'America/Mexico_City'; -$a->strings['America/Miquelon'] = 'America/Miquelon'; -$a->strings['America/Moncton'] = 'America/Moncton'; -$a->strings['America/Monterrey'] = 'America/Monterrey'; -$a->strings['America/Montevideo'] = 'America/Montevideo'; -$a->strings['America/Montreal'] = 'America/Montreal'; -$a->strings['America/Montserrat'] = 'America/Montserrat'; -$a->strings['America/Nassau'] = 'America/Nassau'; -$a->strings['America/New_York'] = 'America/New_York'; -$a->strings['America/Nipigon'] = 'America/Nipigon'; -$a->strings['America/Nome'] = 'America/Nome'; -$a->strings['America/Noronha'] = 'America/Noronha'; -$a->strings['America/North_Dakota/Center'] = 'America/North_Dakota/Center'; -$a->strings['America/North_Dakota/New_Salem'] = 'America/North_Dakota/New_Salem'; -$a->strings['America/Ojinaga'] = 'America/Ojinaga'; -$a->strings['America/Panama'] = 'America/Panama'; -$a->strings['America/Pangnirtung'] = 'America/Pangnirtung'; -$a->strings['America/Paramaribo'] = 'America/Paramaribo'; -$a->strings['America/Phoenix'] = 'America/Phoenix'; -$a->strings['America/Port-au-Prince'] = 'America/Port-au-Prince'; -$a->strings['America/Port_of_Spain'] = 'America/Port_of_Spain'; -$a->strings['America/Porto_Acre'] = 'America/Porto_Acre'; -$a->strings['America/Porto_Velho'] = 'America/Porto_Velho'; -$a->strings['America/Puerto_Rico'] = 'America/Puerto_Rico'; -$a->strings['America/Rainy_River'] = 'America/Rainy_River'; -$a->strings['America/Rankin_Inlet'] = 'America/Rankin_Inlet'; -$a->strings['America/Recife'] = 'America/Recife'; -$a->strings['America/Regina'] = 'America/Regina'; -$a->strings['America/Resolute'] = 'America/Resolute'; -$a->strings['America/Rio_Branco'] = 'America/Rio_Branco'; -$a->strings['America/Rosario'] = 'America/Rosario'; -$a->strings['America/Santa_Isabel'] = 'America/Santa_Isabel'; -$a->strings['America/Santarem'] = 'America/Santarem'; -$a->strings['America/Santiago'] = 'America/Santiago'; -$a->strings['America/Santo_Domingo'] = 'America/Santo_Domingo'; -$a->strings['America/Sao_Paulo'] = 'America/Sao_Paulo'; -$a->strings['America/Scoresbysund'] = 'America/Scoresbysund'; -$a->strings['America/Shiprock'] = 'America/Shiprock'; -$a->strings['America/St_Barthelemy'] = 'America/St_Barthelemy'; -$a->strings['America/St_Johns'] = 'America/St_Johns'; -$a->strings['America/St_Kitts'] = 'America/St_Kitts'; -$a->strings['America/St_Lucia'] = 'America/St_Lucia'; -$a->strings['America/St_Thomas'] = 'America/St_Thomas'; -$a->strings['America/St_Vincent'] = 'America/St_Vincent'; -$a->strings['America/Swift_Current'] = 'America/Swift_Current'; -$a->strings['America/Tegucigalpa'] = 'America/Tegucigalpa'; -$a->strings['America/Thule'] = 'America/Thule'; -$a->strings['America/Thunder_Bay'] = 'America/Thunder_Bay'; -$a->strings['America/Tijuana'] = 'America/Tijuana'; -$a->strings['America/Toronto'] = 'America/Toronto'; -$a->strings['America/Tortola'] = 'America/Tortola'; -$a->strings['America/Vancouver'] = 'America/Vancouver'; -$a->strings['America/Virgin'] = 'America/Virgin'; -$a->strings['America/Whitehorse'] = 'America/Whitehorse'; -$a->strings['America/Winnipeg'] = 'America/Winnipeg'; -$a->strings['America/Yakutat'] = 'America/Yakutat'; -$a->strings['America/Yellowknife'] = 'America/Yellowknife'; -$a->strings['Antarctica/Casey'] = 'Antarctica/Casey'; -$a->strings['Antarctica/Davis'] = 'Antarctica/Davis'; -$a->strings['Antarctica/DumontDUrville'] = 'Antarctica/DumontDUrville'; -$a->strings['Antarctica/Macquarie'] = 'Antarctica/Macquarie'; -$a->strings['Antarctica/Mawson'] = 'Antarctica/Mawson'; -$a->strings['Antarctica/McMurdo'] = 'Antarctica/McMurdo'; -$a->strings['Antarctica/Palmer'] = 'Antarctica/Palmer'; -$a->strings['Antarctica/Rothera'] = 'Antarctica/Rothera'; -$a->strings['Antarctica/South_Pole'] = 'Antarctica/South_Pole'; -$a->strings['Antarctica/Syowa'] = 'Antarctica/Syowa'; -$a->strings['Antarctica/Vostok'] = 'Antarctica/Vostok'; -$a->strings['Arctic/Longyearbyen'] = 'Arctic/Longyearbyen'; -$a->strings['Asia/Aden'] = 'Asia/Aden'; -$a->strings['Asia/Almaty'] = 'Asia/Almaty'; -$a->strings['Asia/Amman'] = 'Asia/Amman'; -$a->strings['Asia/Anadyr'] = 'Asia/Anadyr'; -$a->strings['Asia/Aqtau'] = 'Asia/Aqtau'; -$a->strings['Asia/Aqtobe'] = 'Asia/Aqtobe'; -$a->strings['Asia/Ashgabat'] = 'Asia/Ashgabat'; -$a->strings['Asia/Ashkhabad'] = 'Asia/Ashkhabad'; -$a->strings['Asia/Baghdad'] = 'Asia/Baghdad'; -$a->strings['Asia/Bahrain'] = 'Asia/Bahrain'; -$a->strings['Asia/Baku'] = 'Asia/Baku'; -$a->strings['Asia/Bangkok'] = 'Asia/Bangkok'; -$a->strings['Asia/Beirut'] = 'Asia/Beirut'; -$a->strings['Asia/Bishkek'] = 'Asia/Bishkek'; -$a->strings['Asia/Brunei'] = 'Asia/Brunei'; -$a->strings['Asia/Calcutta'] = 'Asia/Calcutta'; -$a->strings['Asia/Choibalsan'] = 'Asia/Choibalsan'; -$a->strings['Asia/Chongqing'] = 'Asia/Chongqing'; -$a->strings['Asia/Chungking'] = 'Asia/Chungking'; -$a->strings['Asia/Colombo'] = 'Asia/Colombo'; -$a->strings['Asia/Dacca'] = 'Asia/Dacca'; -$a->strings['Asia/Damascus'] = 'Asia/Damascus'; -$a->strings['Asia/Dhaka'] = 'Asia/Dhaka'; -$a->strings['Asia/Dili'] = 'Asia/Dili'; -$a->strings['Asia/Dubai'] = 'Asia/Dubai'; -$a->strings['Asia/Dushanbe'] = 'Asia/Dushanbe'; -$a->strings['Asia/Gaza'] = 'Asia/Gaza'; -$a->strings['Asia/Harbin'] = 'Asia/Harbin'; -$a->strings['Asia/Ho_Chi_Minh'] = 'Asia/Ho_Chi_Minh'; -$a->strings['Asia/Hong_Kong'] = 'Asia/Hong_Kong'; -$a->strings['Asia/Hovd'] = 'Asia/Hovd'; -$a->strings['Asia/Irkutsk'] = 'Asia/Irkutsk'; -$a->strings['Asia/Istanbul'] = 'Asia/Istanbul'; -$a->strings['Asia/Jakarta'] = 'Asia/Jakarta'; -$a->strings['Asia/Jayapura'] = 'Asia/Jayapura'; -$a->strings['Asia/Jerusalem'] = 'Asia/Jerusalem'; -$a->strings['Asia/Kabul'] = 'Asia/Kabul'; -$a->strings['Asia/Kamchatka'] = 'Asia/Kamchatka'; -$a->strings['Asia/Karachi'] = 'Asia/Karachi'; -$a->strings['Asia/Kashgar'] = 'Asia/Kashgar'; -$a->strings['Asia/Kathmandu'] = 'Asia/Kathmandu'; -$a->strings['Asia/Katmandu'] = 'Asia/Katmandu'; -$a->strings['Asia/Kolkata'] = 'Asia/Kolkata'; -$a->strings['Asia/Krasnoyarsk'] = 'Asia/Krasnoyarsk'; -$a->strings['Asia/Kuala_Lumpur'] = 'Asia/Kuala_Lumpur'; -$a->strings['Asia/Kuching'] = 'Asia/Kuching'; -$a->strings['Asia/Kuwait'] = 'Asia/Kuwait'; -$a->strings['Asia/Macao'] = 'Asia/Macao'; -$a->strings['Asia/Macau'] = 'Asia/Macau'; -$a->strings['Asia/Magadan'] = 'Asia/Magadan'; -$a->strings['Asia/Makassar'] = 'Asia/Makassar'; -$a->strings['Asia/Manila'] = 'Asia/Manila'; -$a->strings['Asia/Muscat'] = 'Asia/Muscat'; -$a->strings['Asia/Nicosia'] = 'Asia/Nicosia'; -$a->strings['Asia/Novokuznetsk'] = 'Asia/Novokuznetsk'; -$a->strings['Asia/Novosibirsk'] = 'Asia/Novosibirsk'; -$a->strings['Asia/Omsk'] = 'Asia/Omsk'; -$a->strings['Asia/Oral'] = 'Asia/Oral'; -$a->strings['Asia/Phnom_Penh'] = 'Asia/Phnom_Penh'; -$a->strings['Asia/Pontianak'] = 'Asia/Pontianak'; -$a->strings['Asia/Pyongyang'] = 'Asia/Pyongyang'; -$a->strings['Asia/Qatar'] = 'Asia/Qatar'; -$a->strings['Asia/Qyzylorda'] = 'Asia/Qyzylorda'; -$a->strings['Asia/Rangoon'] = 'Asia/Rangoon'; -$a->strings['Asia/Riyadh'] = 'Asia/Riyadh'; -$a->strings['Asia/Saigon'] = 'Asia/Saigon'; -$a->strings['Asia/Sakhalin'] = 'Asia/Sakhalin'; -$a->strings['Asia/Samarkand'] = 'Asia/Samarkand'; -$a->strings['Asia/Seoul'] = 'Asia/Seoul'; -$a->strings['Asia/Shanghai'] = 'Asia/Shanghai'; -$a->strings['Asia/Singapore'] = 'Asia/Singapore'; -$a->strings['Asia/Taipei'] = 'Asia/Taipei'; -$a->strings['Asia/Tashkent'] = 'Asia/Tashkent'; -$a->strings['Asia/Tbilisi'] = 'Asia/Tbilisi'; -$a->strings['Asia/Tehran'] = 'Asia/Tehran'; -$a->strings['Asia/Tel_Aviv'] = 'Asia/Tel_Aviv'; -$a->strings['Asia/Thimbu'] = 'Asia/Thimbu'; -$a->strings['Asia/Thimphu'] = 'Asia/Thimphu'; -$a->strings['Asia/Tokyo'] = 'Asia/Tokyo'; -$a->strings['Asia/Ujung_Pandang'] = 'Asia/Ujung_Pandang'; -$a->strings['Asia/Ulaanbaatar'] = 'Asia/Ulaanbaatar'; -$a->strings['Asia/Ulan_Bator'] = 'Asia/Ulan_Bator'; -$a->strings['Asia/Urumqi'] = 'Asia/Urumqi'; -$a->strings['Asia/Vientiane'] = 'Asia/Vientiane'; -$a->strings['Asia/Vladivostok'] = 'Asia/Vladivostok'; -$a->strings['Asia/Yakutsk'] = 'Asia/Yakutsk'; -$a->strings['Asia/Yekaterinburg'] = 'Asia/Yekaterinburg'; -$a->strings['Asia/Yerevan'] = 'Asia/Yerevan'; -$a->strings['Atlantic/Azores'] = 'Atlantic/Azores'; -$a->strings['Atlantic/Bermuda'] = 'Atlantic/Bermuda'; -$a->strings['Atlantic/Canary'] = 'Atlantic/Canary'; -$a->strings['Atlantic/Cape_Verde'] = 'Atlantic/Cape_Verde'; -$a->strings['Atlantic/Faeroe'] = 'Atlantic/Faeroe'; -$a->strings['Atlantic/Faroe'] = 'Atlantic/Faroe'; -$a->strings['Atlantic/Jan_Mayen'] = 'Atlantic/Jan_Mayen'; -$a->strings['Atlantic/Madeira'] = 'Atlantic/Madeira'; -$a->strings['Atlantic/Reykjavik'] = 'Atlantic/Reykjavik'; -$a->strings['Atlantic/South_Georgia'] = 'Atlantic/South_Georgia'; -$a->strings['Atlantic/St_Helena'] = 'Atlantic/St_Helena'; -$a->strings['Atlantic/Stanley'] = 'Atlantic/Stanley'; -$a->strings['Australia/ACT'] = 'Australia/ACT'; -$a->strings['Australia/Adelaide'] = 'Australia/Adelaide'; -$a->strings['Australia/Brisbane'] = 'Australia/Brisbane'; -$a->strings['Australia/Broken_Hill'] = 'Australia/Broken_Hill'; -$a->strings['Australia/Canberra'] = 'Australia/Canberra'; -$a->strings['Australia/Currie'] = 'Australia/Currie'; -$a->strings['Australia/Darwin'] = 'Australia/Darwin'; -$a->strings['Australia/Eucla'] = 'Australia/Eucla'; -$a->strings['Australia/Hobart'] = 'Australia/Hobart'; -$a->strings['Australia/LHI'] = 'Australia/LHI'; -$a->strings['Australia/Lindeman'] = 'Australia/Lindeman'; -$a->strings['Australia/Lord_Howe'] = 'Australia/Lord_Howe'; -$a->strings['Australia/Melbourne'] = 'Australia/Melbourne'; -$a->strings['Australia/North'] = 'Australia/North'; -$a->strings['Australia/NSW'] = 'Australia/NSW'; -$a->strings['Australia/Perth'] = 'Australia/Perth'; -$a->strings['Australia/Queensland'] = 'Australia/Queensland'; -$a->strings['Australia/South'] = 'Australia/South'; -$a->strings['Australia/Sydney'] = 'Australia/Sydney'; -$a->strings['Australia/Tasmania'] = 'Australia/Tasmania'; -$a->strings['Australia/Victoria'] = 'Australia/Victoria'; -$a->strings['Australia/West'] = 'Australia/West'; -$a->strings['Australia/Yancowinna'] = 'Australia/Yancowinna'; -$a->strings['Brazil/Acre'] = 'Brazil/Acre'; -$a->strings['Brazil/DeNoronha'] = 'Brazil/DeNoronha'; -$a->strings['Brazil/East'] = 'Brazil/East'; -$a->strings['Brazil/West'] = 'Brazil/West'; -$a->strings['Canada/Atlantic'] = 'Canada/Atlantic'; -$a->strings['Canada/Central'] = 'Canada/Central'; -$a->strings['Canada/East-Saskatchewan'] = 'Canada/East-Saskatchewan'; -$a->strings['Canada/Eastern'] = 'Canada/Eastern'; -$a->strings['Canada/Mountain'] = 'Canada/Mountain'; -$a->strings['Canada/Newfoundland'] = 'Canada/Newfoundland'; -$a->strings['Canada/Pacific'] = 'Canada/Pacific'; -$a->strings['Canada/Saskatchewan'] = 'Canada/Saskatchewan'; -$a->strings['Canada/Yukon'] = 'Canada/Yukon'; -$a->strings['CET'] = 'CET'; -$a->strings['Chile/Continental'] = 'Chile/Continental'; -$a->strings['Chile/EasterIsland'] = 'Chile/EasterIsland'; -$a->strings['CST6CDT'] = 'CST6CDT'; -$a->strings['Cuba'] = 'Cuba'; -$a->strings['EET'] = 'EET'; -$a->strings['Egypt'] = 'Egypt'; -$a->strings['Eire'] = 'Eire'; -$a->strings['EST'] = 'EST'; -$a->strings['EST5EDT'] = 'EST5EDT'; -$a->strings['Etc/GMT'] = 'Etc/GMT'; -$a->strings['Etc/GMT+0'] = 'Etc/GMT+0'; -$a->strings['Etc/GMT+1'] = 'Etc/GMT+1'; -$a->strings['Etc/GMT+10'] = 'Etc/GMT+10'; -$a->strings['Etc/GMT+11'] = 'Etc/GMT+11'; -$a->strings['Etc/GMT+12'] = 'Etc/GMT+12'; -$a->strings['Etc/GMT+2'] = 'Etc/GMT+2'; -$a->strings['Etc/GMT+3'] = 'Etc/GMT+3'; -$a->strings['Etc/GMT+4'] = 'Etc/GMT+4'; -$a->strings['Etc/GMT+5'] = 'Etc/GMT+5'; -$a->strings['Etc/GMT+6'] = 'Etc/GMT+6'; -$a->strings['Etc/GMT+7'] = 'Etc/GMT+7'; -$a->strings['Etc/GMT+8'] = 'Etc/GMT+8'; -$a->strings['Etc/GMT+9'] = 'Etc/GMT+9'; -$a->strings['Etc/GMT-0'] = 'Etc/GMT-0'; -$a->strings['Etc/GMT-1'] = 'Etc/GMT-1'; -$a->strings['Etc/GMT-10'] = 'Etc/GMT-10'; -$a->strings['Etc/GMT-11'] = 'Etc/GMT-11'; -$a->strings['Etc/GMT-12'] = 'Etc/GMT-12'; -$a->strings['Etc/GMT-13'] = 'Etc/GMT-13'; -$a->strings['Etc/GMT-14'] = 'Etc/GMT-14'; -$a->strings['Etc/GMT-2'] = 'Etc/GMT-2'; -$a->strings['Etc/GMT-3'] = 'Etc/GMT-3'; -$a->strings['Etc/GMT-4'] = 'Etc/GMT-4'; -$a->strings['Etc/GMT-5'] = 'Etc/GMT-5'; -$a->strings['Etc/GMT-6'] = 'Etc/GMT-6'; -$a->strings['Etc/GMT-7'] = 'Etc/GMT-7'; -$a->strings['Etc/GMT-8'] = 'Etc/GMT-8'; -$a->strings['Etc/GMT-9'] = 'Etc/GMT-9'; -$a->strings['Etc/GMT0'] = 'Etc/GMT0'; -$a->strings['Etc/Greenwich'] = 'Etc/Greenwich'; -$a->strings['Etc/UCT'] = 'Etc/UCT'; -$a->strings['Etc/Universal'] = 'Etc/Universal'; -$a->strings['Etc/UTC'] = 'Etc/UTC'; -$a->strings['Etc/Zulu'] = 'Etc/Zulu'; -$a->strings['Europe/Amsterdam'] = 'Europe/Amsterdam'; -$a->strings['Europe/Andorra'] = 'Europe/Andorra'; -$a->strings['Europe/Athens'] = 'Europe/Athens'; -$a->strings['Europe/Belfast'] = 'Europe/Belfast'; -$a->strings['Europe/Belgrade'] = 'Europe/Belgrade'; -$a->strings['Europe/Berlin'] = 'Europe/Berlin'; -$a->strings['Europe/Bratislava'] = 'Europe/Bratislava'; -$a->strings['Europe/Brussels'] = 'Europe/Brussels'; -$a->strings['Europe/Bucharest'] = 'Europe/Bucharest'; -$a->strings['Europe/Budapest'] = 'Europe/Budapest'; -$a->strings['Europe/Chisinau'] = 'Europe/Chisinau'; -$a->strings['Europe/Copenhagen'] = 'Europe/Copenhagen'; -$a->strings['Europe/Dublin'] = 'Europe/Dublin'; -$a->strings['Europe/Gibraltar'] = 'Europe/Gibraltar'; -$a->strings['Europe/Guernsey'] = 'Europe/Guernsey'; -$a->strings['Europe/Helsinki'] = 'Europe/Helsinki'; -$a->strings['Europe/Isle_of_Man'] = 'Europe/Isle_of_Man'; -$a->strings['Europe/Istanbul'] = 'Europe/Istanbul'; -$a->strings['Europe/Jersey'] = 'Europe/Jersey'; -$a->strings['Europe/Kaliningrad'] = 'Europe/Kaliningrad'; -$a->strings['Europe/Kiev'] = 'Europe/Kiev'; -$a->strings['Europe/Lisbon'] = 'Europe/Lisbon'; -$a->strings['Europe/Ljubljana'] = 'Europe/Ljubljana'; -$a->strings['Europe/London'] = 'Europe/London'; -$a->strings['Europe/Luxembourg'] = 'Europe/Luxembourg'; -$a->strings['Europe/Madrid'] = 'Europe/Madrid'; -$a->strings['Europe/Malta'] = 'Europe/Malta'; -$a->strings['Europe/Mariehamn'] = 'Europe/Mariehamn'; -$a->strings['Europe/Minsk'] = 'Europe/Minsk'; -$a->strings['Europe/Monaco'] = 'Europe/Monaco'; -$a->strings['Europe/Moscow'] = 'Europe/Moscow'; -$a->strings['Europe/Nicosia'] = 'Europe/Nicosia'; -$a->strings['Europe/Oslo'] = 'Europe/Oslo'; -$a->strings['Europe/Paris'] = 'Europe/Paris'; -$a->strings['Europe/Podgorica'] = 'Europe/Podgorica'; -$a->strings['Europe/Prague'] = 'Europe/Prague'; -$a->strings['Europe/Riga'] = 'Europe/Riga'; -$a->strings['Europe/Rome'] = 'Europe/Rome'; -$a->strings['Europe/Samara'] = 'Europe/Samara'; -$a->strings['Europe/San_Marino'] = 'Europe/San_Marino'; -$a->strings['Europe/Sarajevo'] = 'Europe/Sarajevo'; -$a->strings['Europe/Simferopol'] = 'Europe/Simferopol'; -$a->strings['Europe/Skopje'] = 'Europe/Skopje'; -$a->strings['Europe/Sofia'] = 'Europe/Sofia'; -$a->strings['Europe/Stockholm'] = 'Europe/Stockholm'; -$a->strings['Europe/Tallinn'] = 'Europe/Tallinn'; -$a->strings['Europe/Tirane'] = 'Europe/Tirane'; -$a->strings['Europe/Tiraspol'] = 'Europe/Tiraspol'; -$a->strings['Europe/Uzhgorod'] = 'Europe/Uzhgorod'; -$a->strings['Europe/Vaduz'] = 'Europe/Vaduz'; -$a->strings['Europe/Vatican'] = 'Europe/Vatican'; -$a->strings['Europe/Vienna'] = 'Europe/Vienna'; -$a->strings['Europe/Vilnius'] = 'Europe/Vilnius'; -$a->strings['Europe/Volgograd'] = 'Europe/Volgograd'; -$a->strings['Europe/Warsaw'] = 'Europe/Warsaw'; -$a->strings['Europe/Zagreb'] = 'Europe/Zagreb'; -$a->strings['Europe/Zaporozhye'] = 'Europe/Zaporozhye'; -$a->strings['Europe/Zurich'] = 'Europe/Zurich'; -$a->strings['Factory'] = 'Factory'; -$a->strings['GB'] = 'GB'; -$a->strings['GB-Eire'] = 'GB-Eire'; -$a->strings['GMT'] = 'GMT'; -$a->strings['GMT+0'] = 'GMT+0'; -$a->strings['GMT-0'] = 'GMT-0'; -$a->strings['GMT0'] = 'GMT0'; -$a->strings['Greenwich'] = 'Greenwich'; -$a->strings['Hongkong'] = 'Hongkong'; -$a->strings['HST'] = 'HST'; -$a->strings['Iceland'] = 'Iceland'; -$a->strings['Indian/Antananarivo'] = 'Indian/Antananarivo'; -$a->strings['Indian/Chagos'] = 'Indian/Chagos'; -$a->strings['Indian/Christmas'] = 'Indian/Christmas'; -$a->strings['Indian/Cocos'] = 'Indian/Cocos'; -$a->strings['Indian/Comoro'] = 'Indian/Comoro'; -$a->strings['Indian/Kerguelen'] = 'Indian/Kerguelen'; -$a->strings['Indian/Mahe'] = 'Indian/Mahe'; -$a->strings['Indian/Maldives'] = 'Indian/Maldives'; -$a->strings['Indian/Mauritius'] = 'Indian/Mauritius'; -$a->strings['Indian/Mayotte'] = 'Indian/Mayotte'; -$a->strings['Indian/Reunion'] = 'Indian/Reunion'; -$a->strings['Iran'] = 'Iran'; -$a->strings['Israel'] = 'Israel'; -$a->strings['Jamaica'] = 'Jamaica'; -$a->strings['Japan'] = 'Japan'; -$a->strings['Kwajalein'] = 'Kwajalein'; -$a->strings['Libya'] = 'Libya'; -$a->strings['MET'] = 'MET'; -$a->strings['Mexico/BajaNorte'] = 'Mexico/BajaNorte'; -$a->strings['Mexico/BajaSur'] = 'Mexico/BajaSur'; -$a->strings['Mexico/General'] = 'Mexico/General'; -$a->strings['MST'] = 'MST'; -$a->strings['MST7MDT'] = 'MST7MDT'; -$a->strings['Navajo'] = 'Navajo'; -$a->strings['NZ'] = 'NZ'; -$a->strings['NZ-CHAT'] = 'NZ-CHAT'; -$a->strings['Pacific/Apia'] = 'Pacific/Apia'; -$a->strings['Pacific/Auckland'] = 'Pacific/Auckland'; -$a->strings['Pacific/Chatham'] = 'Pacific/Chatham'; -$a->strings['Pacific/Easter'] = 'Pacific/Easter'; -$a->strings['Pacific/Efate'] = 'Pacific/Efate'; -$a->strings['Pacific/Enderbury'] = 'Pacific/Enderbury'; -$a->strings['Pacific/Fakaofo'] = 'Pacific/Fakaofo'; -$a->strings['Pacific/Fiji'] = 'Pacific/Fiji'; -$a->strings['Pacific/Funafuti'] = 'Pacific/Funafuti'; -$a->strings['Pacific/Galapagos'] = 'Pacific/Galapagos'; -$a->strings['Pacific/Gambier'] = 'Pacific/Gambier'; -$a->strings['Pacific/Guadalcanal'] = 'Pacific/Guadalcanal'; -$a->strings['Pacific/Guam'] = 'Pacific/Guam'; -$a->strings['Pacific/Honolulu'] = 'Pacific/Honolulu'; -$a->strings['Pacific/Johnston'] = 'Pacific/Johnston'; -$a->strings['Pacific/Kiritimati'] = 'Pacific/Kiritimati'; -$a->strings['Pacific/Kosrae'] = 'Pacific/Kosrae'; -$a->strings['Pacific/Kwajalein'] = 'Pacific/Kwajalein'; -$a->strings['Pacific/Majuro'] = 'Pacific/Majuro'; -$a->strings['Pacific/Marquesas'] = 'Pacific/Marquesas'; -$a->strings['Pacific/Midway'] = 'Pacific/Midway'; -$a->strings['Pacific/Nauru'] = 'Pacific/Nauru'; -$a->strings['Pacific/Niue'] = 'Pacific/Niue'; -$a->strings['Pacific/Norfolk'] = 'Pacific/Norfolk'; -$a->strings['Pacific/Noumea'] = 'Pacific/Noumea'; -$a->strings['Pacific/Pago_Pago'] = 'Pacific/Pago_Pago'; -$a->strings['Pacific/Palau'] = 'Pacific/Palau'; -$a->strings['Pacific/Pitcairn'] = 'Pacific/Pitcairn'; -$a->strings['Pacific/Ponape'] = 'Pacific/Ponape'; -$a->strings['Pacific/Port_Moresby'] = 'Pacific/Port_Moresby'; -$a->strings['Pacific/Rarotonga'] = 'Pacific/Rarotonga'; -$a->strings['Pacific/Saipan'] = 'Pacific/Saipan'; -$a->strings['Pacific/Samoa'] = 'Pacific/Samoa'; -$a->strings['Pacific/Tahiti'] = 'Pacific/Tahiti'; -$a->strings['Pacific/Tarawa'] = 'Pacific/Tarawa'; -$a->strings['Pacific/Tongatapu'] = 'Pacific/Tongatapu'; -$a->strings['Pacific/Truk'] = 'Pacific/Truk'; -$a->strings['Pacific/Wake'] = 'Pacific/Wake'; -$a->strings['Pacific/Wallis'] = 'Pacific/Wallis'; -$a->strings['Pacific/Yap'] = 'Pacific/Yap'; -$a->strings['Poland'] = 'Poland'; -$a->strings['Portugal'] = 'Portugal'; -$a->strings['PRC'] = 'PRC'; -$a->strings['PST8PDT'] = 'PST8PDT'; -$a->strings['ROC'] = 'ROC'; -$a->strings['ROK'] = 'ROK'; -$a->strings['Singapore'] = 'Singapore'; -$a->strings['Turkey'] = 'Turkey'; -$a->strings['UCT'] = 'UCT'; -$a->strings['Universal'] = 'Universal'; -$a->strings['US/Alaska'] = 'US/Alaska'; -$a->strings['US/Aleutian'] = 'US/Aleutian'; -$a->strings['US/Arizona'] = 'US/Arizona'; -$a->strings['US/Central'] = 'US/Central'; -$a->strings['US/East-Indiana'] = 'US/East-Indiana'; -$a->strings['US/Eastern'] = 'US/Eastern'; -$a->strings['US/Hawaii'] = 'US/Hawaii'; -$a->strings['US/Indiana-Starke'] = 'US/Indiana-Starke'; -$a->strings['US/Michigan'] = 'US/Michigan'; -$a->strings['US/Mountain'] = 'US/Mountain'; -$a->strings['US/Pacific'] = 'US/Pacific'; -$a->strings['US/Pacific-New'] = 'US/Pacific-New'; -$a->strings['US/Samoa'] = 'US/Samoa'; -$a->strings['UTC'] = 'UTC'; -$a->strings['W-SU'] = 'W-SU'; -$a->strings['WET'] = 'WET'; -$a->strings['Zulu'] = 'Zulu'; +$a->strings["Monday"] = ""; +$a->strings["Tuesday"] = ""; +$a->strings["Wednesday"] = ""; +$a->strings["Thursday"] = ""; +$a->strings["Friday"] = ""; +$a->strings["Saturday"] = ""; +$a->strings["Sunday"] = ""; +$a->strings["January"] = ""; +$a->strings["February"] = ""; +$a->strings["March"] = ""; +$a->strings["April"] = ""; +$a->strings["May"] = ""; +$a->strings["June"] = ""; +$a->strings["July"] = ""; +$a->strings["August"] = ""; +$a->strings["September"] = ""; +$a->strings["October"] = ""; +$a->strings["November"] = ""; +$a->strings["December"] = ""; +$a->strings["bytes"] = ""; +$a->strings["Select an alternate language"] = ""; +$a->strings["Sharing notification from Diaspora network"] = ""; +$a->strings["Embedding disabled"] = ""; +$a->strings["Create a new group"] = ""; +$a->strings["Everybody"] = ""; +$a->strings["Logout"] = ""; +$a->strings["End this session"] = ""; +$a->strings["Login"] = ""; +$a->strings["Sign in"] = ""; +$a->strings["Home"] = ""; +$a->strings["Home Page"] = ""; +$a->strings["Create an account"] = ""; +$a->strings["Help and documentation"] = ""; +$a->strings["Apps"] = ""; +$a->strings["Addon applications, utilities, games"] = ""; +$a->strings["Search site content"] = ""; +$a->strings["Conversations on this site"] = ""; +$a->strings["Directory"] = ""; +$a->strings["People directory"] = ""; +$a->strings["Network"] = ""; +$a->strings["Conversations from your friends"] = ""; +$a->strings["Your posts and conversations"] = ""; +$a->strings["Notifications"] = ""; +$a->strings["Friend requests"] = ""; +$a->strings["Private mail"] = ""; +$a->strings["Manage"] = ""; +$a->strings["Manage other pages"] = ""; +$a->strings["Manage/edit profiles"] = ""; +$a->strings["Manage/edit friends and contacts"] = ""; +$a->strings["Admin"] = ""; +$a->strings["Site setup and configuration"] = ""; +$a->strings["Logged out."] = ""; +$a->strings["Miscellaneous"] = ""; +$a->strings["year"] = ""; +$a->strings["month"] = ""; +$a->strings["day"] = ""; +$a->strings["never"] = ""; +$a->strings["less than a second ago"] = ""; +$a->strings["years"] = ""; +$a->strings["months"] = ""; +$a->strings["week"] = ""; +$a->strings["weeks"] = ""; +$a->strings["days"] = ""; +$a->strings["hour"] = ""; +$a->strings["hours"] = ""; +$a->strings["minute"] = ""; +$a->strings["minutes"] = ""; +$a->strings["second"] = ""; +$a->strings["seconds"] = ""; +$a->strings[" ago"] = ""; +$a->strings["From: "] = ""; +$a->strings["Image/photo"] = ""; +$a->strings["Cannot locate DNS info for database server '%s'"] = ""; +$a->strings["Visible to everybody"] = ""; +$a->strings["show"] = ""; +$a->strings["don't show"] = ""; +$a->strings["(no subject)"] = ""; +$a->strings["You have a new follower at "] = ""; +$a->strings["event"] = ""; +$a->strings["View %s's profile"] = ""; +$a->strings["%s from %s"] = ""; +$a->strings["View in context"] = ""; +$a->strings["See more posts like this"] = ""; +$a->strings["See all %d comments"] = ""; +$a->strings["Select"] = ""; +$a->strings["toggle star status"] = ""; +$a->strings["to"] = ""; +$a->strings["Wall-to-Wall"] = ""; +$a->strings["via Wall-To-Wall:"] = ""; +$a->strings["Delete Selected Items"] = ""; +$a->strings["View status"] = ""; +$a->strings["View profile"] = ""; +$a->strings["View photos"] = ""; +$a->strings["View recent"] = ""; +$a->strings["Send PM"] = ""; +$a->strings["%s likes this."] = ""; +$a->strings["%s doesn't like this."] = ""; +$a->strings["%2\$d people like this."] = ""; +$a->strings["%2\$d people don't like this."] = ""; +$a->strings["and"] = ""; +$a->strings[", and %d other people"] = ""; +$a->strings["%s like this."] = ""; +$a->strings["%s don't like this."] = ""; +$a->strings["Visible to everybody"] = ""; +$a->strings["Please enter a YouTube link:"] = ""; +$a->strings["Please enter a video(.ogg) link/URL:"] = ""; +$a->strings["Please enter an audio(.ogg) link/URL:"] = ""; +$a->strings["Where are you right now?"] = ""; +$a->strings["Enter a title for this item"] = ""; +$a->strings["Set title"] = ""; +$a->strings["Delete this item?"] = ""; +$a->strings["Create a New Account"] = ""; +$a->strings["Nickname or Email address: "] = ""; +$a->strings["Password: "] = ""; +$a->strings["Nickname/Email/OpenID: "] = ""; +$a->strings["Password (if not OpenID): "] = ""; +$a->strings["Forgot your password?"] = ""; +$a->strings["Connect"] = ""; +$a->strings[", "] = ""; +$a->strings["Status:"] = ""; +$a->strings["g A l F d"] = ""; +$a->strings["Birthday Reminders"] = ""; +$a->strings["Birthdays this week:"] = ""; +$a->strings["(Adjusted for local time)"] = ""; +$a->strings["[today]"] = ""; +$a->strings["Not Found"] = ""; +$a->strings["Page not found."] = ""; diff --git a/view/apiconfig.tpl b/view/api_config_xml.tpl similarity index 75% rename from view/apiconfig.tpl rename to view/api_config_xml.tpl index 71ab241ce0..3281e59dd3 100644 --- a/view/apiconfig.tpl +++ b/view/api_config_xml.tpl @@ -1,25 +1,24 @@ - - $sitedesc - $sitename + $config.site.name + $config.site.server default - $sitelogo + $config.site.logo true en - $adminemail + $config.site.email UTC - $siteclosed + $config.site.closed false - $siteprivate - $textlimit - $has_ssl - $ssl_server + $config.site.private + $config.site.textlimit + $config.site.ssl + $config.site.sslserver 30 diff --git a/view/api_timeline_atom.tpl b/view/api_timeline_atom.tpl index bd674f3302..0e427feaaa 100644 --- a/view/api_timeline_atom.tpl +++ b/view/api_timeline_atom.tpl @@ -1,10 +1,10 @@ StatusNet - tag:friendika:PublicTimeline - Network on Friendika - Your network updates on Friendika + $rss.self + Friendika + Friendika API feed $rss.logo - $rss.updated + $rss.atom_updated @@ -53,28 +53,17 @@ {{ for $statuses as $status }} $status.objecttype - $status.id + $status.message_id $status.text - $status.html + $status.statusnet_html $status.verb $status.published $status.updated - - + @@ -82,10 +71,8 @@ $status.user.url $status.user.name - - - + $status.user.screen_name $status.user.name @@ -95,29 +82,7 @@ $status.user.url true - - - - http://activitystrea.ms/schema/1.0/person - $status.user.contact_url - $status.user.name - - - - - - - $status.user.screen_name - $status.user.name - - - homepage - $status.user.url - true - - - diff --git a/view/api_timeline_xml.tpl b/view/api_timeline_xml.tpl index 9914f64759..17860ca613 100644 --- a/view/api_timeline_xml.tpl +++ b/view/api_timeline_xml.tpl @@ -4,6 +4,7 @@ $status.created_at $status.id $status.text + $status.statusnet_html $status.source $status.truncated $status.url diff --git a/view/api_user_xml.tpl b/view/api_user_xml.tpl index 15517fc42e..78cc1f5306 100644 --- a/view/api_user_xml.tpl +++ b/view/api_user_xml.tpl @@ -7,7 +7,7 @@ $user.profile_image_url $user.url $user.protected - $user.followers + $user.followers_count $user.profile_background_color $user.profile_text_color $user.profile_link_color @@ -21,10 +21,10 @@ $user.profile_background_image_url $user.profile_background_tile $user.profile_use_background_image - + $user.notifications $user.geo_enabled $user.verified - + $user.following $user.statuses_count $user.lang $user.contributors_enabled diff --git a/view/atom_feed.tpl b/view/atom_feed.tpl index 3d6bcc5b5a..c7cc082976 100644 --- a/view/atom_feed.tpl +++ b/view/atom_feed.tpl @@ -19,10 +19,10 @@ $feed_updated - + $name $profile_page $birthday - + diff --git a/view/atom_feed_dfrn.tpl b/view/atom_feed_dfrn.tpl new file mode 100644 index 0000000000..3d6bcc5b5a --- /dev/null +++ b/view/atom_feed_dfrn.tpl @@ -0,0 +1,28 @@ + + + + $feed_id + $feed_title + Friendika + + $hub + $salmon + + $feed_updated + + + $name + $profile_page + + + $birthday + diff --git a/view/de/messages.po b/view/de/messages.po index 068303d248..98e8e6f22c 100644 --- a/view/de/messages.po +++ b/view/de/messages.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: friendika\n" "Report-Msgid-Bugs-To: http://bugs.friendika.com/\n" -"POT-Creation-Date: 2011-05-26 06:46-0700\n" -"PO-Revision-Date: 2011-06-20 07:28+0000\n" +"POT-Creation-Date: 2011-08-07 04:50-0700\n" +"PO-Revision-Date: 2011-08-09 13:51+0000\n" "Last-Translator: bavatar \n" "Language-Team: German (http://www.transifex.net/projects/p/friendika/team/de/)\n" "MIME-Version: 1.0\n" @@ -31,26 +31,27 @@ msgid "Contact update failed." msgstr "Konnte den Kontakt nicht aktualisieren." #: ../../mod/crepair.php:54 ../../mod/wall_attach.php:43 -#: ../../mod/photos.php:89 ../../mod/photos.php:802 ../../mod/editpost.php:10 -#: ../../mod/install.php:93 ../../mod/notifications.php:56 -#: ../../mod/contacts.php:106 ../../mod/settings.php:15 -#: ../../mod/settings.php:20 ../../mod/settings.php:251 -#: ../../mod/manage.php:75 ../../mod/network.php:6 ../../mod/notes.php:20 -#: ../../mod/attach.php:64 ../../mod/group.php:19 +#: ../../mod/fsuggest.php:78 ../../mod/events.php:102 ../../mod/photos.php:122 +#: ../../mod/photos.php:849 ../../mod/editpost.php:10 ../../mod/install.php:96 +#: ../../mod/notifications.php:62 ../../mod/contacts.php:132 +#: ../../mod/settings.php:41 ../../mod/settings.php:46 +#: ../../mod/settings.php:305 ../../mod/manage.php:75 ../../mod/network.php:6 +#: ../../mod/notes.php:20 ../../mod/attach.php:33 ../../mod/group.php:19 #: ../../mod/viewcontacts.php:21 ../../mod/register.php:27 -#: ../../mod/regmod.php:18 ../../mod/item.php:57 ../../mod/item.php:801 +#: ../../mod/regmod.php:111 ../../mod/item.php:110 #: ../../mod/profile_photo.php:19 ../../mod/profile_photo.php:133 #: ../../mod/profile_photo.php:144 ../../mod/profile_photo.php:155 -#: ../../mod/message.php:8 ../../mod/message.php:116 +#: ../../mod/message.php:8 ../../mod/message.php:116 ../../mod/admin.php:10 #: ../../mod/wall_upload.php:42 ../../mod/follow.php:8 -#: ../../mod/display.php:138 ../../mod/profiles.php:7 -#: ../../mod/profiles.php:230 ../../mod/invite.php:13 ../../mod/invite.php:54 -#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:242 -#: ../../index.php:256 +#: ../../mod/display.php:108 ../../mod/profiles.php:7 +#: ../../mod/profiles.php:226 ../../mod/invite.php:13 ../../mod/invite.php:81 +#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:308 +#: ../../include/items.php:1916 ../../index.php:266 msgid "Permission denied." msgstr "Zugriff verweigert." -#: ../../mod/crepair.php:68 ../../mod/contacts.php:214 +#: ../../mod/crepair.php:68 ../../mod/fsuggest.php:20 +#: ../../mod/fsuggest.php:92 ../../mod/contacts.php:240 #: ../../mod/dfrn_confirm.php:114 msgid "Contact not found." msgstr "Kontakt nicht gefunden." @@ -76,7 +77,7 @@ msgstr "" "Bitte nutze den Zurück-Button deines Browsers jetzt wenn du" " dir unsicher bist was auf dieser Seite gemacht wird." -#: ../../mod/crepair.php:85 +#: ../../mod/crepair.php:85 ../../mod/admin.php:464 ../../mod/admin.php:473 msgid "Name" msgstr "Name" @@ -104,20 +105,25 @@ msgstr "URL Endpunkt für Benachrichtigungen" msgid "Poll/Feed URL" msgstr "Pull/Feed URL" -#: ../../mod/crepair.php:100 ../../mod/photos.php:830 ../../mod/photos.php:887 -#: ../../mod/photos.php:1095 ../../mod/photos.php:1135 -#: ../../mod/photos.php:1174 ../../mod/photos.php:1205 -#: ../../mod/install.php:133 ../../mod/contacts.php:264 -#: ../../mod/settings.php:426 ../../mod/manage.php:106 ../../mod/group.php:76 -#: ../../mod/group.php:159 ../../mod/profiles.php:383 ../../mod/invite.php:68 -#: ../../addon/facebook/facebook.php:289 -#: ../../addon/randplace/randplace.php:179 ../../addon/oembed/oembed.php:49 -#: ../../addon/statusnet/statusnet.php:216 -#: ../../addon/statusnet/statusnet.php:230 -#: ../../addon/statusnet/statusnet.php:256 +#: ../../mod/crepair.php:100 ../../mod/fsuggest.php:107 +#: ../../mod/events.php:333 ../../mod/photos.php:877 ../../mod/photos.php:934 +#: ../../mod/photos.php:1144 ../../mod/photos.php:1184 +#: ../../mod/photos.php:1223 ../../mod/photos.php:1254 +#: ../../mod/install.php:137 ../../mod/contacts.php:296 +#: ../../mod/settings.php:482 ../../mod/manage.php:106 ../../mod/group.php:84 +#: ../../mod/group.php:167 ../../mod/admin.php:298 ../../mod/admin.php:461 +#: ../../mod/admin.php:587 ../../mod/admin.php:652 ../../mod/profiles.php:372 +#: ../../mod/invite.php:106 ../../addon/facebook/facebook.php:366 +#: ../../addon/randplace/randplace.php:178 +#: ../../addon/impressum/impressum.php:69 ../../addon/oembed/oembed.php:41 +#: ../../addon/statusnet/statusnet.php:223 +#: ../../addon/statusnet/statusnet.php:237 #: ../../addon/statusnet/statusnet.php:263 -#: ../../addon/statusnet/statusnet.php:285 ../../addon/twitter/twitter.php:156 -#: ../../addon/twitter/twitter.php:175 ../../include/conversation.php:383 +#: ../../addon/statusnet/statusnet.php:270 +#: ../../addon/statusnet/statusnet.php:292 +#: ../../addon/statusnet/statusnet.php:414 ../../addon/piwik/piwik.php:76 +#: ../../addon/twitter/twitter.php:171 ../../addon/twitter/twitter.php:194 +#: ../../addon/twitter/twitter.php:276 ../../include/conversation.php:406 msgid "Submit" msgstr "Senden" @@ -138,8 +144,112 @@ msgstr "Die Datei ist größer als das erlaubte Limit von %d" msgid "File upload failed." msgstr "Upload der Datei fehlgeschlagen." +#: ../../mod/fsuggest.php:63 +msgid "Friend suggestion sent." +msgstr "Kontaktvorschlag gesendet." + +#: ../../mod/fsuggest.php:97 +msgid "Suggest Friends" +msgstr "Kontakte vorschlagen" + +#: ../../mod/fsuggest.php:99 +#, php-format +msgid "Suggest a friend for %s" +msgstr "Schlage %s einen Kontakt vor" + +#: ../../mod/events.php:112 ../../mod/photos.php:834 ../../mod/notes.php:46 +#: ../../mod/profile.php:116 +msgid "Status" +msgstr "Status" + +#: ../../mod/events.php:113 ../../mod/photos.php:835 ../../mod/notes.php:47 +#: ../../mod/profperm.php:103 ../../mod/profile.php:117 +#: ../../include/profile_advanced.php:7 +msgid "Profile" +msgstr "Profil" + +#: ../../mod/events.php:114 ../../mod/photos.php:836 ../../mod/notes.php:48 +#: ../../mod/profile.php:118 +msgid "Photos" +msgstr "Bilder" + +#: ../../mod/events.php:115 ../../mod/events.php:120 ../../mod/photos.php:837 +#: ../../mod/notes.php:49 ../../mod/profile.php:119 +msgid "Events" +msgstr "Veranstaltungen" + +#: ../../mod/events.php:116 ../../mod/photos.php:838 ../../mod/notes.php:50 +#: ../../mod/notes.php:55 ../../mod/profile.php:120 +msgid "Personal Notes" +msgstr "Persönliche Notizen" + +#: ../../mod/events.php:210 +msgid "Create New Event" +msgstr "Neue Veranstaltung erstellen" + +#: ../../mod/events.php:213 +msgid "Previous" +msgstr "Vorherige" + +#: ../../mod/events.php:216 +msgid "Next" +msgstr "Nächste" + +#: ../../mod/events.php:223 +msgid "l, F j" +msgstr "l, F j" + +#: ../../mod/events.php:235 +msgid "Edit event" +msgstr "Veranstaltung bearbeiten" + +#: ../../mod/events.php:237 ../../include/text.php:835 +msgid "link to source" +msgstr "Link zum original Posting" + +#: ../../mod/events.php:305 +msgid "hour:minute" +msgstr "Stunde:Minute" + +#: ../../mod/events.php:314 +msgid "Event details" +msgstr "Veranstaltungsdetails" + +#: ../../mod/events.php:315 +#, php-format +msgid "Format is %s %s. Starting date and Description are required." +msgstr "Format ist %s %s. Anfangsdatum und Beschreibung sind notwendig." + +#: ../../mod/events.php:316 +msgid "Event Starts:" +msgstr "Veranstaltungsbeginn:" + +#: ../../mod/events.php:319 +msgid "Finish date/time is not known or not relevant" +msgstr "Enddatum/-zeit ist nicht bekannt oder nicht relevant" + +#: ../../mod/events.php:321 +msgid "Event Finishes:" +msgstr "Veranstaltungsende:" + +#: ../../mod/events.php:324 +msgid "Adjust for viewer timezone" +msgstr "An Zeitzone des Betrachters anpassen" + +#: ../../mod/events.php:326 +msgid "Description:" +msgstr "Beschreibung" + +#: ../../mod/events.php:328 ../../include/event.php:37 ../../boot.php:869 +msgid "Location:" +msgstr "Ort:" + +#: ../../mod/events.php:330 +msgid "Share this event" +msgstr "Veranstaltung teilen" + #: ../../mod/tagrm.php:11 ../../mod/tagrm.php:94 -#: ../../mod/dfrn_request.php:644 ../../addon/js_upload/js_upload.php:41 +#: ../../mod/dfrn_request.php:644 ../../addon/js_upload/js_upload.php:45 msgid "Cancel" msgstr "Abbrechen" @@ -164,206 +274,231 @@ msgstr "Entfernen" msgid "%s welcomes %s" msgstr "%s heißt %s herzlich willkommen" -#: ../../mod/photos.php:34 +#: ../../mod/photos.php:37 msgid "Photo Albums" msgstr "Fotoalben" -#: ../../mod/photos.php:38 ../../mod/photos.php:110 ../../mod/photos.php:810 -#: ../../mod/photos.php:879 ../../mod/photos.php:894 ../../mod/photos.php:1282 -#: ../../mod/photos.php:1293 ../../include/Photo.php:233 -#: ../../include/Photo.php:240 ../../include/Photo.php:247 -#: ../../include/items.php:1041 ../../include/items.php:1044 -#: ../../include/items.php:1047 +#: ../../mod/photos.php:45 ../../mod/photos.php:143 ../../mod/photos.php:857 +#: ../../mod/photos.php:926 ../../mod/photos.php:941 ../../mod/photos.php:1332 +#: ../../mod/photos.php:1344 msgid "Contact Photos" msgstr "Kontaktbilder" -#: ../../mod/photos.php:99 +#: ../../mod/photos.php:57 ../../mod/settings.php:9 +msgid "everybody" +msgstr "jeder" + +#: ../../mod/photos.php:132 msgid "Contact information unavailable" msgstr "Kontakt Informationen nicht verfügbar" -#: ../../mod/photos.php:110 ../../mod/photos.php:535 ../../mod/photos.php:879 -#: ../../mod/photos.php:894 ../../mod/register.php:290 -#: ../../mod/register.php:297 ../../mod/register.php:304 +#: ../../mod/photos.php:143 ../../mod/photos.php:577 ../../mod/photos.php:926 +#: ../../mod/photos.php:941 ../../mod/register.php:316 +#: ../../mod/register.php:323 ../../mod/register.php:330 #: ../../mod/profile_photo.php:58 ../../mod/profile_photo.php:65 #: ../../mod/profile_photo.php:72 ../../mod/profile_photo.php:160 #: ../../mod/profile_photo.php:236 ../../mod/profile_photo.php:245 msgid "Profile Photos" msgstr "Profilbilder" -#: ../../mod/photos.php:120 +#: ../../mod/photos.php:153 msgid "Album not found." msgstr "Album nicht gefunden." -#: ../../mod/photos.php:138 ../../mod/photos.php:888 +#: ../../mod/photos.php:171 ../../mod/photos.php:935 msgid "Delete Album" msgstr "Album löschen" -#: ../../mod/photos.php:201 ../../mod/photos.php:1096 +#: ../../mod/photos.php:234 ../../mod/photos.php:1145 msgid "Delete Photo" msgstr "Foto löschen" -#: ../../mod/photos.php:473 +#: ../../mod/photos.php:508 msgid "was tagged in a" msgstr "was tagged in a" -#: ../../mod/photos.php:473 ../../mod/like.php:110 -#: ../../include/conversation.php:20 +#: ../../mod/photos.php:508 ../../mod/like.php:110 +#: ../../include/conversation.php:31 msgid "photo" msgstr "Foto" -#: ../../mod/photos.php:473 +#: ../../mod/photos.php:508 msgid "by" msgstr "von" -#: ../../mod/photos.php:563 ../../addon/js_upload/js_upload.php:306 +#: ../../mod/photos.php:608 ../../addon/js_upload/js_upload.php:310 msgid "Image exceeds size limit of " msgstr "Die Bildgröße übersteigt das Limit von " -#: ../../mod/photos.php:577 ../../mod/profile_photo.php:118 +#: ../../mod/photos.php:616 +msgid "Image file is empty." +msgstr "Bilddatei ist leer." + +#: ../../mod/photos.php:630 ../../mod/profile_photo.php:118 #: ../../mod/wall_upload.php:65 msgid "Unable to process image." msgstr "Konnte das Bild nicht bearbeiten." -#: ../../mod/photos.php:597 ../../mod/profile_photo.php:241 -#: ../../mod/wall_upload.php:82 +#: ../../mod/photos.php:650 ../../mod/profile_photo.php:241 +#: ../../mod/wall_upload.php:84 msgid "Image upload failed." msgstr "Hochladen des Bildes gescheitert." -#: ../../mod/photos.php:680 ../../mod/dfrn_request.php:591 -#: ../../mod/viewcontacts.php:16 ../../mod/display.php:7 -#: ../../mod/search.php:13 ../../mod/directory.php:20 +#: ../../mod/photos.php:733 ../../mod/community.php:9 +#: ../../mod/dfrn_request.php:591 ../../mod/viewcontacts.php:16 +#: ../../mod/display.php:7 ../../mod/search.php:13 ../../mod/directory.php:20 msgid "Public access denied." msgstr "Öffentlicher Zugriff verweigert." -#: ../../mod/photos.php:690 +#: ../../mod/photos.php:743 msgid "No photos selected" msgstr "Keine Bilder ausgewählt" -#: ../../mod/photos.php:837 +#: ../../mod/photos.php:820 +msgid "Access to this item is restricted." +msgstr "Zugriff zu diesem Eintrag wurde eingeschrängt." + +#: ../../mod/photos.php:884 msgid "Upload Photos" msgstr "Bilder hochladen" -#: ../../mod/photos.php:840 ../../mod/photos.php:883 +#: ../../mod/photos.php:887 ../../mod/photos.php:930 msgid "New album name: " msgstr "Name des neuen Albums: " -#: ../../mod/photos.php:841 +#: ../../mod/photos.php:888 msgid "or existing album name: " msgstr "oder existierender Albumname: " -#: ../../mod/photos.php:843 ../../mod/photos.php:1091 +#: ../../mod/photos.php:890 ../../mod/photos.php:1140 msgid "Permissions" msgstr "Berechtigungen" -#: ../../mod/photos.php:898 +#: ../../mod/photos.php:945 msgid "Edit Album" msgstr "Album bearbeiten" -#: ../../mod/photos.php:908 ../../mod/photos.php:1311 +#: ../../mod/photos.php:955 ../../mod/photos.php:1362 msgid "View Photo" msgstr "Fotos betrachten" -#: ../../mod/photos.php:937 +#: ../../mod/photos.php:984 msgid "Photo not available" msgstr "Foto nicht verfügbar" -#: ../../mod/photos.php:986 +#: ../../mod/photos.php:1033 msgid "Edit photo" msgstr "Foto bearbeiten" -#: ../../mod/photos.php:987 +#: ../../mod/photos.php:1034 msgid "Use as profile photo" msgstr "Als Profilbild verwenden" -#: ../../mod/photos.php:993 ../../include/conversation.php:316 +#: ../../mod/photos.php:1040 ../../include/conversation.php:339 msgid "Private Message" msgstr "Private Nachricht" -#: ../../mod/photos.php:1000 -msgid "<< Prev" -msgstr "<< Vorherige" - -#: ../../mod/photos.php:1004 +#: ../../mod/photos.php:1051 msgid "View Full Size" msgstr "Betrachte Originalgröße" -#: ../../mod/photos.php:1009 -msgid "Next >>" -msgstr "Nächste >>" - -#: ../../mod/photos.php:1071 +#: ../../mod/photos.php:1119 msgid "Tags: " msgstr "Tags: " -#: ../../mod/photos.php:1074 +#: ../../mod/photos.php:1122 msgid "[Remove any tag]" msgstr "[Tag entfernen]" -#: ../../mod/photos.php:1084 +#: ../../mod/photos.php:1133 msgid "New album name" msgstr "Name des neuen Albums" -#: ../../mod/photos.php:1087 +#: ../../mod/photos.php:1136 msgid "Caption" msgstr "Bildunterschrift" -#: ../../mod/photos.php:1089 +#: ../../mod/photos.php:1138 msgid "Add a Tag" msgstr "Tag hinzufügen" -#: ../../mod/photos.php:1093 +#: ../../mod/photos.php:1142 msgid "" "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "" "Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" -#: ../../mod/photos.php:1113 ../../include/conversation.php:364 +#: ../../mod/photos.php:1162 ../../include/conversation.php:387 msgid "I like this (toggle)" msgstr "Ich mag das (toggle)" -#: ../../mod/photos.php:1114 ../../include/conversation.php:365 +#: ../../mod/photos.php:1163 ../../include/conversation.php:388 msgid "I don't like this (toggle)" msgstr "Ich mag das nicht (toggle)" -#: ../../mod/photos.php:1115 ../../include/conversation.php:366 -#: ../../include/conversation.php:731 +#: ../../mod/photos.php:1164 ../../include/conversation.php:389 +#: ../../include/conversation.php:743 msgid "Share" msgstr "Teilen" -#: ../../mod/photos.php:1116 ../../mod/editpost.php:97 +#: ../../mod/photos.php:1165 ../../mod/editpost.php:99 #: ../../mod/message.php:190 ../../mod/message.php:324 -#: ../../include/conversation.php:367 ../../include/conversation.php:741 +#: ../../include/conversation.php:390 ../../include/conversation.php:753 msgid "Please wait" msgstr "Bitte warten" -#: ../../mod/photos.php:1132 ../../mod/photos.php:1171 -#: ../../mod/photos.php:1202 ../../include/conversation.php:380 +#: ../../mod/photos.php:1181 ../../mod/photos.php:1220 +#: ../../mod/photos.php:1251 ../../include/conversation.php:403 msgid "This is you" msgstr "Das bist du" -#: ../../mod/photos.php:1134 ../../mod/photos.php:1173 -#: ../../mod/photos.php:1204 ../../include/conversation.php:382 -#: ../../boot.php:386 +#: ../../mod/photos.php:1183 ../../mod/photos.php:1222 +#: ../../mod/photos.php:1253 ../../include/conversation.php:405 +#: ../../boot.php:412 msgid "Comment" msgstr "Kommentar" -#: ../../mod/photos.php:1232 ../../mod/group.php:146 -#: ../../include/conversation.php:179 ../../include/conversation.php:393 +#: ../../mod/photos.php:1281 ../../mod/group.php:154 ../../mod/admin.php:468 +#: ../../include/conversation.php:424 msgid "Delete" msgstr "Löschen" -#: ../../mod/photos.php:1298 +#: ../../mod/photos.php:1349 msgid "Recent Photos" msgstr "Neuste Fotos" -#: ../../mod/photos.php:1302 +#: ../../mod/photos.php:1353 msgid "Upload New Photos" msgstr "Weitere Fotos hochladen" -#: ../../mod/photos.php:1315 +#: ../../mod/photos.php:1366 msgid "View Album" msgstr "Album betrachten" +#: ../../mod/community.php:14 +msgid "Not available." +msgstr "Nicht verfügbar." + +#: ../../mod/community.php:26 ../../include/nav.php:79 +msgid "Community" +msgstr "Gemeinschaft" + +#: ../../mod/community.php:56 ../../mod/search.php:65 +msgid "No results." +msgstr "Keine Ergebnisse." + +#: ../../mod/community.php:83 ../../mod/network.php:302 +#: ../../mod/register.php:504 ../../mod/profile.php:241 +#: ../../mod/display.php:117 +msgid "" +"Shared content is covered by the Creative Commons " +"Attribution 3.0 license." +msgstr "" +"Geteilte Inhalte innerhalb des Friendika Netzwerks sind unter der Creative Commons " +"Attribution 3.0 verfügbar." + #: ../../mod/editpost.php:17 ../../mod/editpost.php:27 msgid "Item not found" msgstr "Beitrag nicht gefunden" @@ -372,62 +507,62 @@ msgstr "Beitrag nicht gefunden" msgid "Edit post" msgstr "Beitrag bearbeiten" -#: ../../mod/editpost.php:75 ../../include/conversation.php:717 +#: ../../mod/editpost.php:75 ../../include/conversation.php:729 msgid "Post to Email" msgstr "An Email senden" -#: ../../mod/editpost.php:88 ../../include/group.php:169 -#: ../../include/conversation.php:391 +#: ../../mod/editpost.php:90 ../../include/group.php:171 +#: ../../include/group.php:172 ../../include/conversation.php:414 msgid "Edit" msgstr "Bearbeiten" -#: ../../mod/editpost.php:89 ../../mod/message.php:188 -#: ../../mod/message.php:322 ../../include/conversation.php:732 +#: ../../mod/editpost.php:91 ../../mod/message.php:188 +#: ../../mod/message.php:322 ../../include/conversation.php:744 msgid "Upload photo" msgstr "Foto hochladen" -#: ../../mod/editpost.php:90 ../../include/conversation.php:733 +#: ../../mod/editpost.php:92 ../../include/conversation.php:745 msgid "Attach file" msgstr "Datei anhängen" -#: ../../mod/editpost.php:91 ../../mod/message.php:189 -#: ../../mod/message.php:323 ../../include/conversation.php:734 +#: ../../mod/editpost.php:93 ../../mod/message.php:189 +#: ../../mod/message.php:323 ../../include/conversation.php:746 msgid "Insert web link" msgstr "Weblink einfügen" -#: ../../mod/editpost.php:92 ../../include/conversation.php:735 +#: ../../mod/editpost.php:94 ../../include/conversation.php:747 msgid "Insert YouTube video" msgstr "YouTube Video einfügen" -#: ../../mod/editpost.php:93 ../../include/conversation.php:736 +#: ../../mod/editpost.php:95 ../../include/conversation.php:748 msgid "Insert Vorbis [.ogg] video" msgstr "Vorbis [.ogg] Video einfügen" -#: ../../mod/editpost.php:94 ../../include/conversation.php:737 +#: ../../mod/editpost.php:96 ../../include/conversation.php:749 msgid "Insert Vorbis [.ogg] audio" msgstr "Vorbis [.ogg] Audio einfügen" -#: ../../mod/editpost.php:95 ../../include/conversation.php:738 +#: ../../mod/editpost.php:97 ../../include/conversation.php:750 msgid "Set your location" msgstr "Deinen Standort festlegen" -#: ../../mod/editpost.php:96 ../../include/conversation.php:739 +#: ../../mod/editpost.php:98 ../../include/conversation.php:751 msgid "Clear browser location" msgstr "Browser Standort leeren" -#: ../../mod/editpost.php:98 ../../include/conversation.php:742 +#: ../../mod/editpost.php:100 ../../include/conversation.php:754 msgid "Permission settings" msgstr "Berechtigungseinstellungen" -#: ../../mod/editpost.php:106 ../../include/conversation.php:750 +#: ../../mod/editpost.php:108 ../../include/conversation.php:762 msgid "CC: email addresses" msgstr "CC: EMail Addresse" -#: ../../mod/editpost.php:107 ../../include/conversation.php:751 +#: ../../mod/editpost.php:109 ../../include/conversation.php:763 msgid "Public post" msgstr "Öffentlicher Beitrag" -#: ../../mod/editpost.php:109 ../../include/conversation.php:753 +#: ../../mod/editpost.php:111 ../../include/conversation.php:765 msgid "Example: bob@example.com, mary@example.com" msgstr "Z.B.: bob@example.com, mary@example.com" @@ -443,11 +578,15 @@ msgstr "" #: ../../mod/dfrn_request.php:125 ../../mod/dfrn_request.php:356 msgid "Warning: profile location has no identifiable owner name." -msgstr "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:127 ../../mod/dfrn_request.php:358 msgid "Warning: profile location has no profile photo." -msgstr "Warning: profile location has no profile photo." +msgstr "" +"Warnung: Es konnte kein Profilbild bei der angegebenen Profiladresse " +"gefunden werden." #: ../../mod/dfrn_request.php:130 ../../mod/dfrn_request.php:361 #, php-format @@ -508,7 +647,7 @@ msgstr "Ungültige Profil URL." msgid "Disallowed profile URL." msgstr "Nicht erlaubte Profil URL." -#: ../../mod/dfrn_request.php:406 ../../mod/contacts.php:90 +#: ../../mod/dfrn_request.php:406 ../../mod/contacts.php:116 msgid "Failed to update contact record." msgstr "Aktualisierung der Kontaktdaten fehlgeschlagen." @@ -542,7 +681,7 @@ msgstr "Bitte bestätige deine Vorstellung/Verbindungs Anfrage bei %s." msgid "Confirm" msgstr "Bestätigen" -#: ../../mod/dfrn_request.php:542 ../../include/items.php:1440 +#: ../../mod/dfrn_request.php:542 ../../include/items.php:1505 msgid "[Name Withheld]" msgstr "[Name Zurückgehalten]" @@ -550,11 +689,11 @@ msgstr "[Name Zurückgehalten]" msgid "Introduction received at " msgstr "Vorstellung erhalten auf" -#: ../../mod/dfrn_request.php:551 ../../mod/lostpass.php:40 -#: ../../mod/lostpass.php:102 ../../mod/register.php:335 -#: ../../mod/register.php:385 ../../mod/regmod.php:98 -#: ../../mod/dfrn_notify.php:191 ../../mod/dfrn_notify.php:443 -#: ../../mod/dfrn_confirm.php:658 ../../include/items.php:1449 +#: ../../mod/dfrn_request.php:551 ../../mod/lostpass.php:44 +#: ../../mod/lostpass.php:106 ../../mod/register.php:369 +#: ../../mod/register.php:423 ../../mod/regmod.php:54 +#: ../../mod/dfrn_notify.php:291 ../../mod/dfrn_notify.php:547 +#: ../../mod/dfrn_confirm.php:658 ../../include/items.php:1514 msgid "Administrator" msgstr "Administrator" @@ -575,18 +714,21 @@ msgid "Please answer the following:" msgstr "Bitte beantworte folgende Fragen:" #: ../../mod/dfrn_request.php:633 -msgid "Does $name know you?" -msgstr "Kennt $name dich?" +#, php-format +msgid "Does %s know you?" +msgstr "Kennt %s dich?" -#: ../../mod/dfrn_request.php:634 ../../mod/settings.php:350 -#: ../../mod/settings.php:362 ../../mod/register.php:459 -#: ../../mod/profiles.php:358 ../../mod/profiles.php:367 +#: ../../mod/dfrn_request.php:634 ../../mod/settings.php:415 +#: ../../mod/settings.php:421 ../../mod/settings.php:429 +#: ../../mod/settings.php:433 ../../mod/register.php:498 +#: ../../mod/profiles.php:354 msgid "Yes" msgstr "Ja" -#: ../../mod/dfrn_request.php:635 ../../mod/settings.php:351 -#: ../../mod/settings.php:363 ../../mod/register.php:460 -#: ../../mod/profiles.php:359 ../../mod/profiles.php:368 +#: ../../mod/dfrn_request.php:635 ../../mod/settings.php:415 +#: ../../mod/settings.php:421 ../../mod/settings.php:429 +#: ../../mod/settings.php:433 ../../mod/register.php:499 +#: ../../mod/profiles.php:355 msgid "No" msgstr "Nein" @@ -626,44 +768,44 @@ msgstr "Adresse deines Profils:" msgid "Submit Request" msgstr "Anfrage abschicken" -#: ../../mod/install.php:33 +#: ../../mod/install.php:34 msgid "Could not create/connect to database." msgstr "" "Konnte die Verbindung zur Datenbank nicht aufbauen bzw. die Datenbank " "anlegen." -#: ../../mod/install.php:38 +#: ../../mod/install.php:39 msgid "Connected to database." msgstr "Mit der Datenbank verbunden." -#: ../../mod/install.php:72 +#: ../../mod/install.php:75 msgid "Proceed with Installation" msgstr "Mit der Installation fortfahren" -#: ../../mod/install.php:74 +#: ../../mod/install.php:77 msgid "Your Friendika site database has been installed." msgstr "Die Datenbank deiner Friendika Seite wurde erfolgreich installiert." -#: ../../mod/install.php:75 +#: ../../mod/install.php:78 msgid "" "IMPORTANT: You will need to [manually] setup a scheduled task for the " "poller." msgstr "" "WICHTIG: Du musst [manuell] einen cron Job (o.ä.) für den Poller einrichten." -#: ../../mod/install.php:76 ../../mod/install.php:86 ../../mod/install.php:199 +#: ../../mod/install.php:79 ../../mod/install.php:89 ../../mod/install.php:207 msgid "Please see the file \"INSTALL.txt\"." msgstr "Lies bitte die \"INSTALL.txt\"." -#: ../../mod/install.php:78 +#: ../../mod/install.php:81 msgid "Proceed to registration" msgstr "Mit der Registration fortfahren" -#: ../../mod/install.php:84 +#: ../../mod/install.php:87 msgid "Database import failed." msgstr "Import der Datenbank schlug fehl." -#: ../../mod/install.php:85 +#: ../../mod/install.php:88 msgid "" "You may need to import the file \"database.sql\" manually using phpmyadmin " "or mysql." @@ -671,26 +813,27 @@ msgstr "" "Möglicherweise musst du die Datei \"database.sql\" manuell mit phpmyadmin " "oder mysql importieren." -#: ../../mod/install.php:98 +#: ../../mod/install.php:101 msgid "Welcome to Friendika." msgstr "Willkommen bei Friendika." -#: ../../mod/install.php:121 +#: ../../mod/install.php:124 msgid "Friendika Social Network" msgstr "Friendika Soziales Netzwerk" -#: ../../mod/install.php:122 +#: ../../mod/install.php:125 msgid "Installation" msgstr "Installation" -#: ../../mod/install.php:123 +#: ../../mod/install.php:126 msgid "" -"In order to install Friendika we need to know how to contact your database." +"In order to install Friendika we need to know how to connect to your " +"database." msgstr "" -"Um Friendika installieren zu können müssen wir wissen, wie wir die Datenbank" -" erreichen können." +"Um Friendika installieren zu können, müssen wir wissen wie wir deine MySQL " +"Datenbank erreichen." -#: ../../mod/install.php:124 +#: ../../mod/install.php:127 msgid "" "Please contact your hosting provider or site administrator if you have " "questions about these settings." @@ -698,40 +841,49 @@ msgstr "" "Bitte kontaktiere den Hosting Provider oder den Administrator der Seite " "falls du Fragen zu diesen Einstellungen haben solltest." -#: ../../mod/install.php:125 +#: ../../mod/install.php:128 msgid "" -"The database you specify below must already exist. If it does not, please " +"The database you specify below should already exist. If it does not, please " "create it before continuing." msgstr "" -"Die Datenbank die du hier angibst muss bereits existieren. Wenn dies noch " -"nicht der Fall ist lege sie bitte an bevor du fortfährst." +"Die Datenbank die du unten angibst sollte bereits existieren. Ist dies noch " +"nicht der Fall erzeuge sie bitte bevor du mit der Installation vorfährst." -#: ../../mod/install.php:126 +#: ../../mod/install.php:129 msgid "Database Server Name" msgstr "Datenbank Server" -#: ../../mod/install.php:127 +#: ../../mod/install.php:130 msgid "Database Login Name" msgstr "Datenbank Nutzer" -#: ../../mod/install.php:128 +#: ../../mod/install.php:131 msgid "Database Login Password" msgstr "Datenbank Passwort" -#: ../../mod/install.php:129 +#: ../../mod/install.php:132 msgid "Database Name" msgstr "Datenbank Name" -#: ../../mod/install.php:130 +#: ../../mod/install.php:133 msgid "Please select a default timezone for your website" msgstr "Bitte wähle die standard Zeitzone deiner Webseite" -#: ../../mod/install.php:148 +#: ../../mod/install.php:134 +msgid "" +"Site administrator email address. Your account email address must match this" +" in order to use the web admin panel." +msgstr "" +"Email Adresse des Seiten Administrators. Die Email Adresse deines Accounts " +"muss mit dieser übereinstimmen, damit du das Administrationspanel nutzen " +"kannst." + +#: ../../mod/install.php:153 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:149 +#: ../../mod/install.php:154 msgid "" "This is required. Please adjust the configuration file .htconfig.php " "accordingly." @@ -739,7 +891,7 @@ msgstr "" "Diese wird von Friendika benötigt. Bitte passe die Konfigurationsdatei " ".htconfig.php entsprechend an." -#: ../../mod/install.php:156 +#: ../../mod/install.php:161 msgid "" "The command line version of PHP on your system does not have " "\"register_argc_argv\" enabled." @@ -747,11 +899,11 @@ msgstr "" "Die Kommandozeilenversion von PHP auf deinem System hat " "\"register_argc_argv\" nicht aktiviert." -#: ../../mod/install.php:157 +#: ../../mod/install.php:162 msgid "This is required for message delivery to work." msgstr "Dies wird für die Auslieferung von Nachrichten benötigt." -#: ../../mod/install.php:179 +#: ../../mod/install.php:184 msgid "" "Error: the \"openssl_pkey_new\" function on this system is not able to " "generate encryption keys" @@ -759,7 +911,7 @@ msgstr "" "Fehler: Die \"openssl_pkey_new\" Funktion auf diesem System ist nicht in der" " lage Verschlüsselungsschlüssel zu erzeugen" -#: ../../mod/install.php:180 +#: ../../mod/install.php:185 msgid "" "If running under Windows, please see " "\"http://www.php.net/manual/en/openssl.installation.php\"." @@ -767,34 +919,39 @@ msgstr "" "Wenn der Server unter Windows läuft, schau dir bitte " "\"http://www.php.net/manual/en/openssl.installation.php\" an." -#: ../../mod/install.php:189 +#: ../../mod/install.php:194 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:191 +#: ../../mod/install.php:196 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:193 +#: ../../mod/install.php:198 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:195 +#: ../../mod/install.php:200 msgid "Error: openssl PHP module required but not installed." msgstr "Fehler: Das openssl Modul von PHP ist nict installiert." -#: ../../mod/install.php:197 +#: ../../mod/install.php:202 msgid "Error: mysqli PHP module required but not installed." msgstr "Fehler: Das mysqli Modul von PHP ist nicht installiert." -#: ../../mod/install.php:208 +#: ../../mod/install.php:204 +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:216 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." @@ -803,7 +960,7 @@ msgstr "" "Stammverzeichnis deines Webservers anzuliegen ist allerdings derzeit nicht " "in der Lage dies zu tun." -#: ../../mod/install.php:209 +#: ../../mod/install.php:217 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." @@ -811,7 +968,7 @@ 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:210 +#: ../../mod/install.php:218 msgid "" "Please check with your site documentation or support people to see if this " "situation can be corrected." @@ -819,7 +976,7 @@ msgstr "" "Bitte überprüfe die Einstellungen und frage im Zweifelsfall dein Support " "Team um diese Situations zu beheben." -#: ../../mod/install.php:211 +#: ../../mod/install.php:219 msgid "" "If not, you may be required to perform a manual installation. Please see the" " file \"INSTALL.txt\" for instructions." @@ -827,7 +984,7 @@ msgstr "" "Sollte dies nicht möglich sein musst du die Installation manuell " "durchführen. Lies dazu bitte in der Datei \"INSTALL.txt\"." -#: ../../mod/install.php:220 +#: ../../mod/install.php:228 msgid "" "The database configuration file \".htconfig.php\" could not be written. " "Please use the enclosed text to create a configuration file in your web " @@ -837,15 +994,26 @@ msgstr "" "Bitte verwende den angefügten Text um die Datei im Stammverzeichnis deiner " "Friendika Installation zu erzeugen." -#: ../../mod/install.php:235 +#: ../../mod/install.php:243 msgid "Errors encountered creating database tables." msgstr "Fehler aufgetreten wärend der Erzeugung der Datenbank Tabellen." +#: ../../mod/update_community.php:18 ../../mod/update_network.php:22 +#: ../../mod/update_profile.php:41 +msgid "[Embedded content - reload page to view]" +msgstr "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]" + #: ../../mod/match.php:10 msgid "Profile Match" msgstr "Profil Übereinstimmungen" -#: ../../mod/match.php:50 +#: ../../mod/match.php:18 +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." + +#: ../../mod/match.php:54 msgid "No matches" msgstr "Keine Übereinstimmungen" @@ -862,183 +1030,194 @@ msgstr "Sichtbar für:" msgid "Welcome to %s" msgstr "Willkommen zu %s" -#: ../../mod/notifications.php:28 +#: ../../mod/notifications.php:26 msgid "Invalid request identifier." msgstr "Invalid request identifier." -#: ../../mod/notifications.php:31 ../../mod/notifications.php:133 +#: ../../mod/notifications.php:35 ../../mod/notifications.php:118 +#: ../../mod/notifications.php:162 msgid "Discard" msgstr "Verwerfen" -#: ../../mod/notifications.php:41 ../../mod/notifications.php:132 +#: ../../mod/notifications.php:47 ../../mod/notifications.php:117 +#: ../../mod/notifications.php:161 msgid "Ignore" msgstr "Ignorieren" -#: ../../mod/notifications.php:68 +#: ../../mod/notifications.php:74 msgid "Pending Friend/Connect Notifications" msgstr "Anstehende Freundschafts/Kontakt Benachrichtigungen" -#: ../../mod/notifications.php:72 +#: ../../mod/notifications.php:78 msgid "Show Ignored Requests" msgstr "Zeige ignorierte Anfragen" -#: ../../mod/notifications.php:72 +#: ../../mod/notifications.php:78 msgid "Hide Ignored Requests" msgstr "Verberge ignorierte Anfragen" -#: ../../mod/notifications.php:104 -msgid "Claims to be known to you: " -msgstr "Behauptet dich zu kennen: " - -#: ../../mod/notifications.php:104 -msgid "yes" -msgstr "ja" - -#: ../../mod/notifications.php:104 -msgid "no" -msgstr "nein" - -#: ../../mod/notifications.php:110 -msgid "Approve as: " -msgstr "Genehmigen als: " - -#: ../../mod/notifications.php:111 -msgid "Friend" -msgstr "Freund" - -#: ../../mod/notifications.php:112 -msgid "Fan/Admirer" -msgstr "Fan/Verehrer" - -#: ../../mod/notifications.php:119 +#: ../../mod/notifications.php:105 ../../mod/notifications.php:148 msgid "Notification type: " msgstr "Benachrichtigungs Typ: " -#: ../../mod/notifications.php:120 -msgid "Friend/Connect Request" -msgstr "Kontakt-/Freundschaftsanfrage" +#: ../../mod/notifications.php:106 +msgid "Friend Suggestion" +msgstr "Kontakt Vorschlag" -#: ../../mod/notifications.php:120 -msgid "New Follower" -msgstr "Neuer Bewunderer" +#: ../../mod/notifications.php:108 +#, php-format +msgid "suggested by %s" +msgstr "vorgeschlagen von %s" -#: ../../mod/notifications.php:130 ../../mod/notifications.php:153 +#: ../../mod/notifications.php:114 ../../mod/notifications.php:159 +#: ../../mod/admin.php:466 msgid "Approve" msgstr "Genehmigen" +#: ../../mod/notifications.php:133 +msgid "Claims to be known to you: " +msgstr "Behauptet dich zu kennen: " + +#: ../../mod/notifications.php:133 +msgid "yes" +msgstr "ja" + +#: ../../mod/notifications.php:133 +msgid "no" +msgstr "nein" + #: ../../mod/notifications.php:139 +msgid "Approve as: " +msgstr "Genehmigen als: " + +#: ../../mod/notifications.php:140 +msgid "Friend" +msgstr "Freund" + +#: ../../mod/notifications.php:141 +msgid "Fan/Admirer" +msgstr "Fan/Verehrer" + +#: ../../mod/notifications.php:149 +msgid "Friend/Connect Request" +msgstr "Kontakt-/Freundschaftsanfrage" + +#: ../../mod/notifications.php:149 +msgid "New Follower" +msgstr "Neuer Bewunderer" + +#: ../../mod/notifications.php:168 msgid "No notifications." msgstr "Keine Benachrichtigungen." -#: ../../mod/notifications.php:143 -msgid "User registrations waiting for confirm" -msgstr "Neuanmeldungen die auf deine Bestätigung warten" - -#: ../../mod/notifications.php:154 -msgid "Deny" -msgstr "Verwehren" - -#: ../../mod/notifications.php:159 -msgid "No registrations." -msgstr "Keine Neuanmeldungen." - -#: ../../mod/contacts.php:12 +#: ../../mod/contacts.php:26 msgid "Invite Friends" msgstr "Freunde einladen" -#: ../../mod/contacts.php:15 +#: ../../mod/contacts.php:32 +#, php-format +msgid "%d invitation available" +msgid_plural "%d invitations available" +msgstr[0] "%d Einladung verfügbar" +msgstr[1] "%d Einladungen verfügbar" + +#: ../../mod/contacts.php:41 msgid "Find People With Shared Interests" msgstr "Finde Personen die deine Interessen teilen" -#: ../../mod/contacts.php:19 +#: ../../mod/contacts.php:45 msgid "Connect/Follow" msgstr "Verbinden/Folgen" -#: ../../mod/contacts.php:20 +#: ../../mod/contacts.php:46 msgid "Example: bob@example.com, http://example.com/barbara" msgstr "Beispiel: bob@example.com, http://example.com/barbara" -#: ../../mod/contacts.php:21 +#: ../../mod/contacts.php:47 msgid "Follow" msgstr "Folge" -#: ../../mod/contacts.php:43 ../../mod/contacts.php:124 +#: ../../mod/contacts.php:69 ../../mod/contacts.php:150 msgid "Could not access contact record." msgstr "Konnte nicht auf die Kontaktdaten zugreifen." -#: ../../mod/contacts.php:57 +#: ../../mod/contacts.php:83 msgid "Could not locate selected profile." msgstr "Konnte das ausgewählte Profiel nicht finden." -#: ../../mod/contacts.php:88 +#: ../../mod/contacts.php:114 msgid "Contact updated." msgstr "Kontakt aktualisiert." -#: ../../mod/contacts.php:146 +#: ../../mod/contacts.php:172 msgid "Contact has been blocked" msgstr "Kontakt wurde blockiert" -#: ../../mod/contacts.php:146 +#: ../../mod/contacts.php:172 msgid "Contact has been unblocked" msgstr "Kontakt wurde wieder frei gegeben" -#: ../../mod/contacts.php:160 +#: ../../mod/contacts.php:186 msgid "Contact has been ignored" msgstr "Der Kontakt wurde ignoriert" -#: ../../mod/contacts.php:160 +#: ../../mod/contacts.php:186 msgid "Contact has been unignored" msgstr "Kontakt wurde ignoriert" -#: ../../mod/contacts.php:181 +#: ../../mod/contacts.php:207 msgid "stopped following" msgstr "wird nicht mehr gefolgt" -#: ../../mod/contacts.php:200 +#: ../../mod/contacts.php:226 msgid "Contact has been removed." msgstr "Kontakt wurde entfernt." -#: ../../mod/contacts.php:228 ../../mod/contacts.php:363 +#: ../../mod/contacts.php:254 ../../mod/contacts.php:397 msgid "Mutual Friendship" msgstr "Beidseitige Freundschaft" -#: ../../mod/contacts.php:232 ../../mod/contacts.php:367 +#: ../../mod/contacts.php:258 ../../mod/contacts.php:401 msgid "is a fan of yours" msgstr "ist ein Fan von dir" -#: ../../mod/contacts.php:237 ../../mod/contacts.php:371 +#: ../../mod/contacts.php:263 ../../mod/contacts.php:405 msgid "you are a fan of" msgstr "du bist Fan von" -#: ../../mod/contacts.php:252 +#: ../../mod/contacts.php:280 msgid "Privacy Unavailable" msgstr "Privatsphäre nicht verfügbar" -#: ../../mod/contacts.php:253 +#: ../../mod/contacts.php:281 msgid "Private communications are not available for this contact." msgstr "Private Kommunikation ist für diesen Kontakt nicht verfügbar." -#: ../../mod/contacts.php:256 +#: ../../mod/contacts.php:284 msgid "Never" msgstr "Niemals" -#: ../../mod/contacts.php:260 +#: ../../mod/contacts.php:288 msgid "(Update was successful)" msgstr "(Aktualisierung war erfolgreich)" -#: ../../mod/contacts.php:260 +#: ../../mod/contacts.php:288 msgid "(Update was not successful)" msgstr "(Aktualisierung war nicht erfolgreich)" -#: ../../mod/contacts.php:263 +#: ../../mod/contacts.php:291 +msgid "Suggest friends" +msgstr "Kontakte vorschlagen" + +#: ../../mod/contacts.php:295 msgid "Contact Editor" msgstr "Kontakt Editor" -#: ../../mod/contacts.php:265 +#: ../../mod/contacts.php:297 msgid "Profile Visibility" msgstr "Profil Anzeige" -#: ../../mod/contacts.php:266 +#: ../../mod/contacts.php:298 #, php-format msgid "" "Please choose the profile you would like to display to %s when viewing your " @@ -1047,15 +1226,15 @@ msgstr "" "Bitte wähle eines deiner Profile das angezeitgt werden soll, wenn %s dein " "Profil aufruft." -#: ../../mod/contacts.php:267 +#: ../../mod/contacts.php:299 msgid "Contact Information / Notes" msgstr "Kontakt Informationen / Notizen" -#: ../../mod/contacts.php:268 +#: ../../mod/contacts.php:300 msgid "Online Reputation" msgstr "Online Ruf" -#: ../../mod/contacts.php:269 +#: ../../mod/contacts.php:301 msgid "" "Occasionally your friends may wish to inquire about this person's online " "legitimacy." @@ -1063,7 +1242,7 @@ msgstr "" "Es könnte sein, dass deine Freunde etwas über den Ruf einer Peron erfahren " "möchten." -#: ../../mod/contacts.php:270 +#: ../../mod/contacts.php:302 msgid "" "You may help them choose whether or not to interact with this person by " "providing a reputation to guide them." @@ -1072,7 +1251,7 @@ msgstr "" "interagieren sollten oder nicht indem du Informationen über den Ruf" " der Person anbietest." -#: ../../mod/contacts.php:271 +#: ../../mod/contacts.php:303 msgid "" "Please take a moment to elaborate on this selection if you feel it could be " "helpful to others." @@ -1080,109 +1259,110 @@ msgstr "" "Bitte nimm dir einen Moment und fülle diesen Punkt aus wenn du denkst das es" " anderen helfen könnte." -#: ../../mod/contacts.php:272 -msgid "Visit $name's profile" -msgstr "Besuche das Profil von $name" +#: ../../mod/contacts.php:304 ../../mod/contacts.php:421 +#: ../../mod/viewcontacts.php:61 +#, php-format +msgid "Visit %s's profile [%s]" +msgstr "Besuche %ss Profil [%s]" -#: ../../mod/contacts.php:273 +#: ../../mod/contacts.php:305 msgid "Block/Unblock contact" msgstr "Kontakt blockieren/freischalten" -#: ../../mod/contacts.php:274 +#: ../../mod/contacts.php:306 msgid "Ignore contact" msgstr "Ignoriere den Kontakt" -#: ../../mod/contacts.php:275 +#: ../../mod/contacts.php:307 msgid "Repair contact URL settings" msgstr "URL Einstellungen des Kontakts reparieren" -#: ../../mod/contacts.php:276 +#: ../../mod/contacts.php:308 msgid "Repair contact URL settings (WARNING: Advanced)" msgstr "URL Einstellungen des Kontakts reparieren (Achtung: Fortgeschritten)" -#: ../../mod/contacts.php:277 +#: ../../mod/contacts.php:309 msgid "View conversations" msgstr "Unterhaltungen anzeigen" -#: ../../mod/contacts.php:278 +#: ../../mod/contacts.php:312 msgid "Delete contact" msgstr "Lösche den Kontakt" -#: ../../mod/contacts.php:280 +#: ../../mod/contacts.php:314 msgid "Last updated: " msgstr "Letzte Aktualisierung: " -#: ../../mod/contacts.php:281 +#: ../../mod/contacts.php:315 msgid "Update public posts: " msgstr "Aktualisierung öffentlicher Nachrichten: " -#: ../../mod/contacts.php:283 +#: ../../mod/contacts.php:317 ../../mod/admin.php:701 msgid "Update now" msgstr "Jetzt aktualisieren" -#: ../../mod/contacts.php:286 +#: ../../mod/contacts.php:320 msgid "Unblock this contact" msgstr "Blockade dieses Kontakts aufheben" -#: ../../mod/contacts.php:286 +#: ../../mod/contacts.php:320 msgid "Block this contact" msgstr "Diesen Kontakt blockieren" -#: ../../mod/contacts.php:287 +#: ../../mod/contacts.php:321 msgid "Unignore this contact" msgstr "Diesen Kontakt nicht mehr ignorieren" -#: ../../mod/contacts.php:287 +#: ../../mod/contacts.php:321 msgid "Ignore this contact" msgstr "Diesen Kontakt ignorieren" -#: ../../mod/contacts.php:290 +#: ../../mod/contacts.php:324 msgid "Currently blocked" msgstr "Derzeit geblockt" -#: ../../mod/contacts.php:291 +#: ../../mod/contacts.php:325 msgid "Currently ignored" msgstr "Derzeit ignoriert" -#: ../../mod/contacts.php:322 ../../include/nav.php:109 -#: ../../include/acl_selectors.php:141 ../../include/acl_selectors.php:156 +#: ../../mod/contacts.php:356 ../../include/nav.php:110 msgid "Contacts" msgstr "Kontakte" -#: ../../mod/contacts.php:324 +#: ../../mod/contacts.php:358 msgid "Show Blocked Connections" msgstr "Zeige geblockte Verbindungen" -#: ../../mod/contacts.php:324 +#: ../../mod/contacts.php:358 msgid "Hide Blocked Connections" msgstr "Verstecke geblockte Verbindungen" -#: ../../mod/contacts.php:326 ../../mod/directory.php:55 +#: ../../mod/contacts.php:360 ../../mod/directory.php:55 msgid "Finding: " msgstr "Funde: " -#: ../../mod/contacts.php:327 ../../mod/directory.php:57 +#: ../../mod/contacts.php:361 ../../mod/directory.php:57 msgid "Find" msgstr "Finde" -#: ../../mod/contacts.php:387 ../../mod/viewcontacts.php:52 -msgid "Visit $username's profile" -msgstr "Besuche das Profil von $username" - -#: ../../mod/contacts.php:388 ../../include/conversation.php:597 +#: ../../mod/contacts.php:422 ../../include/conversation.php:609 msgid "Edit contact" msgstr "Kontakt bearbeiten" -#: ../../mod/lostpass.php:27 +#: ../../mod/lostpass.php:16 +msgid "No valid account found." +msgstr "Kein gültiger Account gefunden." + +#: ../../mod/lostpass.php:31 msgid "Password reset request issued. Check your email." msgstr "Zurücksetzen des Passworts eingeleitet. Bitte überprüfe deine Email." -#: ../../mod/lostpass.php:38 +#: ../../mod/lostpass.php:42 #, php-format msgid "Password reset requested at %s" msgstr "Anfrage zum Zurücksetzen des Passworts auf %s erhalten" -#: ../../mod/lostpass.php:60 +#: ../../mod/lostpass.php:64 msgid "" "Request could not be verified. (You may have previously submitted it.) " "Password reset failed." @@ -1190,27 +1370,27 @@ msgstr "" "Anfrage konnte nicht verifiziert werden. (Eventuell hast du bereits ähnliche" " Anfrage gestellt.) Zurücksetzen des Passworts gescheitert." -#: ../../mod/lostpass.php:78 ../../boot.php:852 +#: ../../mod/lostpass.php:82 ../../boot.php:655 msgid "Password Reset" msgstr "Passwort zurücksetzen" -#: ../../mod/lostpass.php:79 +#: ../../mod/lostpass.php:83 msgid "Your password has been reset as requested." msgstr "Dein Passwort wurde wie gewünscht zurück gesetzt." -#: ../../mod/lostpass.php:80 +#: ../../mod/lostpass.php:84 msgid "Your new password is" msgstr "Dein neues Passwort lautet" -#: ../../mod/lostpass.php:81 +#: ../../mod/lostpass.php:85 msgid "Save or copy your new password - and then" msgstr "Speichere oder kopiere dein neues Passwort - und dann" -#: ../../mod/lostpass.php:82 +#: ../../mod/lostpass.php:86 msgid "click here to login" msgstr "hier klicken um dich anzumelden" -#: ../../mod/lostpass.php:83 +#: ../../mod/lostpass.php:87 msgid "" "Your password may be changed from the Settings page after " "successful login." @@ -1218,11 +1398,11 @@ msgstr "" "Du kannst das Passwort unter den Einstellungen ändern sobald du " "dich erfolgreich angemeldet hast." -#: ../../mod/lostpass.php:114 +#: ../../mod/lostpass.php:118 msgid "Forgot your Password?" msgstr "Hast du dein Passwort vergessen?" -#: ../../mod/lostpass.php:115 +#: ../../mod/lostpass.php:119 msgid "" "Enter your email address and submit to have your password reset. Then check " "your email for further instructions." @@ -1230,246 +1410,268 @@ msgstr "" "Gib deine Email-Adresse an und fordere ein neues Passwort an. Es werden dir " "dann weitere Informationen per Mail zugesand." -#: ../../mod/lostpass.php:116 +#: ../../mod/lostpass.php:120 msgid "Nickname or Email: " msgstr "Spitzname oder Email:" -#: ../../mod/lostpass.php:117 +#: ../../mod/lostpass.php:121 msgid "Reset" msgstr "Zurücksetzen" -#: ../../mod/settings.php:38 +#: ../../mod/settings.php:64 msgid "Passwords do not match. Password unchanged." msgstr "" "Die Passwörter stimmen nicht überein. Das Passwort bleibt unverändert." -#: ../../mod/settings.php:43 +#: ../../mod/settings.php:69 msgid "Empty passwords are not allowed. Password unchanged." msgstr "Leere Passwörter sind nicht erlaubt. Passwort bleibt unverändert." -#: ../../mod/settings.php:54 +#: ../../mod/settings.php:80 msgid "Password changed." msgstr "Passwort ändern." -#: ../../mod/settings.php:56 +#: ../../mod/settings.php:82 msgid "Password update failed. Please try again." msgstr "" "Aktualisierung des Passworts gescheitert, bitte versuche es noch einmal." -#: ../../mod/settings.php:138 +#: ../../mod/settings.php:161 +msgid "Failed to connect with email account using the settings provided." +msgstr "" +"Konnte das Email Konto mit den angegebenen Einstellungen nicht erreichen." + +#: ../../mod/settings.php:188 msgid " Please use a shorter name." msgstr " Bitte verwende einen kürzeren Namen." -#: ../../mod/settings.php:140 +#: ../../mod/settings.php:190 msgid " Name too short." msgstr " Name ist zu kurz." -#: ../../mod/settings.php:146 +#: ../../mod/settings.php:196 msgid " Not valid email." msgstr " Keine gültige EMail." -#: ../../mod/settings.php:148 +#: ../../mod/settings.php:198 msgid " Cannot change to that email." msgstr " Cannot change to that email." -#: ../../mod/settings.php:206 +#: ../../mod/settings.php:257 ../../addon/facebook/facebook.php:297 +#: ../../addon/impressum/impressum.php:64 ../../addon/piwik/piwik.php:89 +#: ../../addon/twitter/twitter.php:271 msgid "Settings updated." msgstr "Einstellungen aktualisiert." -#: ../../mod/settings.php:256 ../../mod/settings.php:418 -#: ../../addon/widgets/widgets.php:123 -msgid "Plugin Settings" -msgstr "Plugin Einstellungen" - -#: ../../mod/settings.php:257 ../../mod/settings.php:417 -msgid "Account Settings" +#: ../../mod/settings.php:311 ../../include/nav.php:108 +msgid "Account settings" msgstr "Account Einstellungen" -#: ../../mod/settings.php:263 +#: ../../mod/settings.php:312 +msgid "Plugin settings" +msgstr "Plugin Einstellungen" + +#: ../../mod/settings.php:322 msgid "No Plugin settings configured" msgstr "Keine Erweiterungen konfiguriert" -#: ../../mod/settings.php:323 +#: ../../mod/settings.php:329 ../../addon/widgets/widgets.php:122 +msgid "Plugin Settings" +msgstr "Plugin Einstellungen" + +#: ../../mod/settings.php:382 ../../mod/admin.php:133 ../../mod/admin.php:443 msgid "Normal Account" msgstr "Normaler Account" -#: ../../mod/settings.php:324 +#: ../../mod/settings.php:383 msgid "This account is a normal personal profile" msgstr "Dieser Account ist ein normales persönliches Profil" -#: ../../mod/settings.php:325 +#: ../../mod/settings.php:386 ../../mod/admin.php:134 ../../mod/admin.php:444 msgid "Soapbox Account" -msgstr "Sandkasten Accunt" +msgstr "Sandkasten Account" -#: ../../mod/settings.php:326 +#: ../../mod/settings.php:387 msgid "Automatically approve all connection/friend requests as read-only fans" msgstr "Freundschaftsanfragen werden automatisch als Nurlese-Fans akzeptiert" -#: ../../mod/settings.php:327 +#: ../../mod/settings.php:390 ../../mod/admin.php:135 ../../mod/admin.php:445 msgid "Community/Celebrity Account" msgstr "Gemeinschafts/Berühmtheiten Account" -#: ../../mod/settings.php:328 +#: ../../mod/settings.php:391 msgid "" "Automatically approve all connection/friend requests as read-write fans" msgstr "" "Freundschaftsanfragen werden automatisch als Lese-und-Schreib-Fans " "akzeptiert" -#: ../../mod/settings.php:329 +#: ../../mod/settings.php:394 ../../mod/admin.php:136 ../../mod/admin.php:446 msgid "Automatic Friend Account" msgstr "Automatischer Freundes Account" -#: ../../mod/settings.php:330 +#: ../../mod/settings.php:395 msgid "Automatically approve all connection/friend requests as friends" msgstr "Freundschaftsanfragen werden automatisch als Freund akzeptiert" -#: ../../mod/settings.php:339 -msgid "OpenID: " -msgstr "OpenID: " +#: ../../mod/settings.php:405 +msgid "OpenID:" +msgstr "OpenID:" -#: ../../mod/settings.php:339 -msgid " (Optional) Allow this OpenID to login to this account." +#: ../../mod/settings.php:405 +msgid "(Optional) Allow this OpenID to login to this account." msgstr "" -" (Optional) Erlaube dieser OpenID sich für diesen Account anzumelden." +"(Optional) Erlaube die Anmeldung für diesen Account mit dieser OpenID." -#: ../../mod/settings.php:349 -msgid "Publish your default profile in site directory?" -msgstr "Dein Standard-Profil im Verzeichnis dieser Seite veröffentliche?" +#: ../../mod/settings.php:415 +msgid "Publish your default profile in your local site directory?" +msgstr "Veröffentliche dein Standardprofil im Verzeichnis der lokalen Seite?" -#: ../../mod/settings.php:361 -msgid "Publish your default profile in global social directory?" -msgstr "Dein Standard-Profil im weltweiten Verzeichnis veröffentlichen?" +#: ../../mod/settings.php:421 +msgid "Publish your default profile in the global social directory?" +msgstr "Veröffentliche dein Standardprofil im weltweiten Verzeichnis?" -#: ../../mod/settings.php:377 +#: ../../mod/settings.php:429 +msgid "Hide your contact/friend list from viewers of your default profile?" +msgstr "" +"Verberge die Liste deiner Kontakte vor Betrachtern des Standardprofils." + +#: ../../mod/settings.php:433 +msgid "Hide profile details and all your messages from unknown viewers?" +msgstr "" +"Profildetails und all deine Beiträge vor unbekannten Besuchern verbergen?" + +#: ../../mod/settings.php:442 msgid "Profile is not published." msgstr "Profil ist nicht veröffentlicht." -#: ../../mod/settings.php:398 ../../mod/profile_photo.php:196 +#: ../../mod/settings.php:461 ../../mod/profile_photo.php:196 msgid "or" msgstr "oder" -#: ../../mod/settings.php:403 +#: ../../mod/settings.php:466 msgid "Your Identity Address is" msgstr "Die Adresse deines Profils lautet:" -#: ../../mod/settings.php:413 +#: ../../mod/settings.php:480 +msgid "Account Settings" +msgstr "Account Einstellungen" + +#: ../../mod/settings.php:487 msgid "Export Personal Data" msgstr "Perönliche Daten exportieren" -#: ../../mod/settings.php:419 -msgid "Basic Settings" -msgstr "Grundeinstellungen" - -#: ../../mod/settings.php:420 ../../include/profile_advanced.php:10 -msgid "Full Name:" -msgstr "Kompletter Name:" - -#: ../../mod/settings.php:421 -msgid "Email Address:" -msgstr "Email Adresse:" - -#: ../../mod/settings.php:422 -msgid "Your Timezone:" -msgstr "Deine Zeitzone:" - -#: ../../mod/settings.php:423 -msgid "Default Post Location:" -msgstr "Standardstandort:" - -#: ../../mod/settings.php:424 -msgid "Use Browser Location:" -msgstr "Verwende den Standort des Browsers:" - -#: ../../mod/settings.php:425 -msgid "Display Theme:" -msgstr "Theme:" - -#: ../../mod/settings.php:427 -msgid "Security and Privacy Settings" -msgstr "Sicherheits und Privatsphären Einstellungen" - -#: ../../mod/settings.php:428 -msgid "Maximum Friend Requests/Day:" -msgstr "Maximale Anzahl von Freundschaftsanfragen/Tag:" - -#: ../../mod/settings.php:429 -msgid "(to prevent spam abuse)" -msgstr "(um SPAM zu vermeiden)" - -#: ../../mod/settings.php:430 -msgid "Allow friends to post to your profile page:" -msgstr "Erlaube es Freunden Beiträge auf deiner Pinnwand zu posten:" - -#: ../../mod/settings.php:431 -msgid "Automatically expire (delete) posts older than" -msgstr "Automatisch Beiträge verfallen lassen (löschen) die älter sind als" - -#: ../../mod/settings.php:432 ../../include/datetime.php:154 -msgid "days" -msgstr "Tage" - -#: ../../mod/settings.php:433 -msgid "Notification Settings" -msgstr "Benachrichtigungs Einstellungen" - -#: ../../mod/settings.php:434 -msgid "Send a notification email when:" -msgstr "Benachrichtigungs-Email senden wenn:" - -#: ../../mod/settings.php:435 -msgid "You receive an introduction" -msgstr "Du eine Vorstellung erhälst" - -#: ../../mod/settings.php:436 -msgid "Your introductions are confirmed" -msgstr "Eine deiner Vorstellungen angenommen wurde" - -#: ../../mod/settings.php:437 -msgid "Someone writes on your profile wall" -msgstr "Jemand etwas auf deiner Pinnwand postet" - -#: ../../mod/settings.php:438 -msgid "Someone writes a followup comment" -msgstr "Jemand einen Kommentar verfasst" - -#: ../../mod/settings.php:439 -msgid "You receive a private message" -msgstr "Du eine private Nachricht erhälst" - -#: ../../mod/settings.php:440 +#: ../../mod/settings.php:490 msgid "Password Settings" msgstr "Passwort Einstellungen" -#: ../../mod/settings.php:441 -msgid "Leave password fields blank unless changing" -msgstr "Lass die Passwort-Felder leer außer du willst das Passwort ändern" - -#: ../../mod/settings.php:442 +#: ../../mod/settings.php:491 msgid "New Password:" msgstr "Neues Passwort:" -#: ../../mod/settings.php:443 +#: ../../mod/settings.php:492 msgid "Confirm:" msgstr "Bestätigen:" -#: ../../mod/settings.php:444 -msgid "Advanced Page Settings" -msgstr "Erweiterte Seiten Einstellungen" +#: ../../mod/settings.php:492 +msgid "Leave password fields blank unless changing" +msgstr "Lass die Passwort-Felder leer außer du willst das Passwort ändern" -#: ../../mod/settings.php:459 +#: ../../mod/settings.php:496 +msgid "Basic Settings" +msgstr "Grundeinstellungen" + +#: ../../mod/settings.php:497 ../../include/profile_advanced.php:10 +msgid "Full Name:" +msgstr "Kompletter Name:" + +#: ../../mod/settings.php:498 +msgid "Email Address:" +msgstr "Email Adresse:" + +#: ../../mod/settings.php:499 +msgid "Your Timezone:" +msgstr "Deine Zeitzone:" + +#: ../../mod/settings.php:500 +msgid "Default Post Location:" +msgstr "Standardstandort:" + +#: ../../mod/settings.php:501 +msgid "Use Browser Location:" +msgstr "Verwende den Standort des Browsers:" + +#: ../../mod/settings.php:502 +msgid "Display Theme:" +msgstr "Theme:" + +#: ../../mod/settings.php:506 +msgid "Security and Privacy Settings" +msgstr "Sicherheits und Privatsphären Einstellungen" + +#: ../../mod/settings.php:508 +msgid "Maximum Friend Requests/Day:" +msgstr "Maximale Anzahl von Freundschaftsanfragen/Tag:" + +#: ../../mod/settings.php:508 +msgid "(to prevent spam abuse)" +msgstr "(um SPAM zu vermeiden)" + +#: ../../mod/settings.php:509 msgid "Default Post Permissions" msgstr "Grundeinstellung für Veröffentlichungen" -#: ../../mod/settings.php:460 +#: ../../mod/settings.php:510 msgid "(click to open/close)" msgstr "(klicke zum öffnen/schließen)" -#: ../../mod/settings.php:473 +#: ../../mod/settings.php:514 +msgid "Allow friends to post to your profile page:" +msgstr "Erlaube es Freunden Beiträge auf deiner Pinnwand zu posten:" + +#: ../../mod/settings.php:515 +msgid "Automatically expire posts after days:" +msgstr "Einträge verfallen automatisch nach Tagen:" + +#: ../../mod/settings.php:515 +msgid "If empty, posts will not expire. Expired posts will be deleted" +msgstr "" +"Wenn leer verfallen Einträge nie automatisch. Verfallene Einträge werden " +"gelöscht." + +#: ../../mod/settings.php:524 +msgid "Notification Settings" +msgstr "Benachrichtigungs Einstellungen" + +#: ../../mod/settings.php:525 +msgid "Send a notification email when:" +msgstr "Benachrichtigungs-Email senden wenn:" + +#: ../../mod/settings.php:526 +msgid "You receive an introduction" +msgstr "Du eine Vorstellung erhälst" + +#: ../../mod/settings.php:527 +msgid "Your introductions are confirmed" +msgstr "Eine deiner Vorstellungen angenommen wurde" + +#: ../../mod/settings.php:528 +msgid "Someone writes on your profile wall" +msgstr "Jemand etwas auf deiner Pinnwand postet" + +#: ../../mod/settings.php:529 +msgid "Someone writes a followup comment" +msgstr "Jemand einen Kommentar verfasst" + +#: ../../mod/settings.php:530 +msgid "You receive a private message" +msgstr "Du eine private Nachricht erhälst" + +#: ../../mod/settings.php:534 msgid "Email/Mailbox Setup" msgstr "Email/Postfach Einstellungen" -#: ../../mod/settings.php:474 +#: ../../mod/settings.php:535 msgid "" "If you wish to communicate with email contacts using this service " "(optional), please specify how to connect to your mailbox." @@ -1477,37 +1679,49 @@ msgstr "" "Wenn du mit Email Kontakten über diesen Service kommunizieren möchtest " "(optional) gib bitte die Einstellungen für dein Postfach an." -#: ../../mod/settings.php:475 +#: ../../mod/settings.php:536 +msgid "Last successful email check:" +msgstr "Letzter erfolgreicher Email Check" + +#: ../../mod/settings.php:537 +msgid "Email access is disabled on this site." +msgstr "Zugriff auf Emails für diese Seite deaktiviert." + +#: ../../mod/settings.php:538 msgid "IMAP server name:" msgstr "IMAP Server Name:" -#: ../../mod/settings.php:477 +#: ../../mod/settings.php:539 msgid "IMAP port:" msgstr "IMAP Port:" -#: ../../mod/settings.php:479 -msgid "Security (TLS or SSL):" -msgstr "Sicherheit (TLS oder SSL)" +#: ../../mod/settings.php:540 +msgid "Security:" +msgstr "Sicherheit:" -#: ../../mod/settings.php:481 +#: ../../mod/settings.php:540 +msgid "None" +msgstr "Keine" + +#: ../../mod/settings.php:541 msgid "Email login name:" msgstr "Email Login Name:" -#: ../../mod/settings.php:483 +#: ../../mod/settings.php:542 msgid "Email password:" msgstr "Email Passwort:" -#: ../../mod/settings.php:484 -msgid "Reply-to address (Optional):" -msgstr "Reply-to Adresse (Optional)" +#: ../../mod/settings.php:543 +msgid "Reply-to address:" +msgstr "Reply-to Adresse:" -#: ../../mod/settings.php:486 +#: ../../mod/settings.php:544 msgid "Send public posts to all email contacts:" msgstr "Sende öffentliche Einträge an alle Email Kontakte:" -#: ../../mod/settings.php:488 -msgid "Email access is disabled on this site." -msgstr "Zugriff auf Emails für diese Seite deaktiviert." +#: ../../mod/settings.php:549 +msgid "Advanced Page Settings" +msgstr "Erweiterte Seiten Einstellungen" #: ../../mod/manage.php:37 #, php-format @@ -1530,15 +1744,23 @@ msgstr "" msgid "Select an identity to manage: " msgstr "Wähle eine Identität zum Verwalten: " -#: ../../mod/network.php:18 -msgid "Normal View" -msgstr "Normale Ansicht" +#: ../../mod/network.php:27 +msgid "View Conversations" +msgstr "Unterhaltungen anzeigen" -#: ../../mod/network.php:20 -msgid "New Item View" -msgstr "Neue Einträge" +#: ../../mod/network.php:29 +msgid "View New Items" +msgstr "Neue Einträge anzeigen" -#: ../../mod/network.php:64 +#: ../../mod/network.php:35 +msgid "View Any Items" +msgstr "Alle Einträge anzeigen" + +#: ../../mod/network.php:43 +msgid "View Starred Items" +msgstr "Gesternte Einträge anzeigen" + +#: ../../mod/network.php:94 #, php-format msgid "Warning: This group contains %s member from an insecure network." msgid_plural "" @@ -1548,60 +1770,171 @@ msgstr[0] "" msgstr[1] "" "Warnung: Diese Gruppe beinhaltet %s Personen aus unsicheren Netzwerken." -#: ../../mod/network.php:67 +#: ../../mod/network.php:97 msgid "Private messages to this group are at risk of public disclosure." msgstr "" "Private Nachrichten an diese Gruppe könnten an die Öffentlichkeit geraten." -#: ../../mod/network.php:129 +#: ../../mod/network.php:164 msgid "No such group" msgstr "Es gibt keine solche Gruppe" -#: ../../mod/network.php:140 +#: ../../mod/network.php:175 msgid "Group is empty" msgstr "Gruppe ist leer" -#: ../../mod/network.php:144 +#: ../../mod/network.php:180 msgid "Group: " msgstr "Gruppe: " -#: ../../mod/network.php:154 +#: ../../mod/network.php:190 msgid "Contact: " msgstr "Kontakt " -#: ../../mod/network.php:156 +#: ../../mod/network.php:192 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:161 +#: ../../mod/network.php:197 msgid "Invalid contact." msgstr "Ungültiger Kontakt." -#: ../../mod/network.php:262 ../../mod/register.php:465 -#: ../../mod/profile.php:265 ../../mod/display.php:147 -msgid "" -"Shared content is covered by the Creative Commons " -"Attribution 3.0 license." -msgstr "" -"Geteilte Inhalte innerhalb des Friendika Netzwerks sind unter der Creative Commons " -"Attribution 3.0 verfügbar." - -#: ../../mod/notes.php:41 ../../mod/apps.php:8 -msgid "Private Notes" -msgstr "Privater Beitrag" - -#: ../../mod/notes.php:60 +#: ../../mod/notes.php:74 msgid "Save" msgstr "Speichern" -#: ../../mod/attach.php:6 +#: ../../mod/newmember.php:6 +msgid "Welcome to Friendika" +msgstr "Willkommen bei Friendika" + +#: ../../mod/newmember.php:8 +msgid "New Member Checklist" +msgstr "Checkliste für neue Mitglieder" + +#: ../../mod/newmember.php:12 +msgid "" +"We would like to offer some tips and links to help make your experience " +"enjoyable. Click any item to visit the relevant page." +msgstr "" +"Wir möchten dir einige Tipps und Links anbieten um deine Erfahrung mit " +"Friendika so angenehm wie möglich zu machen. Klicke einfach einen Aspekt an " +"um weitere Informationen zu erhalten." + +#: ../../mod/newmember.php:16 +msgid "" +"On your Settings page - change your initial password. Also make a " +"note of your Identity Address. This will be useful in making friends." +msgstr "" +"Ändere dein anfängliches Passwort auf der Einstellungen Seite. Bei " +"dieser Gelegenheit solltest du dir die Adresse deines Profils merken, diese " +"wird benötigt um mit Anderen in Kontakt zu treten." + +#: ../../mod/newmember.php:18 +msgid "" +"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." +msgstr "" +"Überprüfe die restlichen Einstellungen, insbesondere die Einstellungen zur " +"Privatsphäre. Wenn du dein Profil nicht veröffentlichst ist das wie wenn " +"niemand deine Telefonnummer kennt. Im Allgemeinen solltest du es " +"veröffentlichen - außer all deine Freunde und potentiellen Freunde wissen " +"wie man dich findet." + +#: ../../mod/newmember.php:20 +msgid "" +"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." +msgstr "" +"Lade ein Profilbild hoch falls du es noch nicht getan hast. Studien haben " +"gezeigt, das es zehnmal wahrscheinlicher ist neue Freunde zu finden, wenn du" +" ein Bild von dir selbst verwendest als wenn du dies nicht tust." + +#: ../../mod/newmember.php:23 +msgid "" +"Authorise the Facebook Connector if you currently have a Facebook account " +"and we will (optionally) import all your Facebook friends and conversations." +msgstr "" +"Richte die Verbindung zu Facebook ein, wenn du im Augenblick ein Facebook " +"Konto hast und (optional) deine Facebook Freunde und Unterhaltungen " +"importieren willst." + +#: ../../mod/newmember.php:28 +msgid "" +"Enter your email access information on your Settings page if you wish to " +"import and interact with friends or mailing lists from your email INBOX" +msgstr "" +"Gib deine Email Daten in deinen Einstellungen an, wenn du mit deinen Email-" +"Kontakten / Email-Listen interagieren möchtest." + +#: ../../mod/newmember.php:30 +msgid "" +"Edit your default profile to your liking. Review the " +"settings for hiding your list of friends and hiding the profile from unknown" +" visitors." +msgstr "" +"Editiere dein Standard Profil nach deinen Vorlieben. " +"Überprüfe die Einstellungen zum Verbergen deiner Freundesliste vor " +"unbekannten Betrachtern des Profils." + +#: ../../mod/newmember.php:32 +msgid "" +"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." +msgstr "" +"Trage ein paar öffentliche Stichwörter in dein Standardprofil ein die deine " +"Interessen beschreiben. Eventuell sind wir in der Lage Leute zu finden, die " +"deine Interessen teilen und können dir dann Kontakte vorschlagen." + +#: ../../mod/newmember.php:34 +msgid "" +"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 Connect dialog." +msgstr "" +"Deine Kontakte Seite ist die zentrale Stelle um deine Freundschaften zu " +"koordinieren und neuen Kontakte, auch von anderen Netzwerken, zu folgen. " +"Normalerweise gibst du einfach die URL der Seite in den Verbinden " +"Dialog ein." + +#: ../../mod/newmember.php:36 +msgid "" +"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." +msgstr "" +"Über die Verzeichnisseite kannst du andere Personen auf diesem Server oder " +"anderen verteilten Seiten finden. Halte nach einem Verbinden oder " +"Folgen Link auf deren Profilseiten Ausschau und gib deine eigene " +"Profiladresse an falls du danach gefragt wirst." + +#: ../../mod/newmember.php:38 +msgid "" +"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." +msgstr "" +"Sobald du einige Freunde gefunden hast, organisiere sie in Gruppen zur " +"privaten Kommunikation im Seitenmenü der Kontakte-Seite. Du kannst dann mit " +"jeder dieser Gruppen von der Netzwerkseite aus privat interagieren." + +#: ../../mod/newmember.php:40 +msgid "" +"Our help pages may be consulted for detail on other program" +" features and resources." +msgstr "" +"Unsere Hilfe Seiten können herangezogen werden um weitere " +"Einzelheiten zu andern Programm Features zu erhalten." + +#: ../../mod/attach.php:8 msgid "Item not available." msgstr "Beitrag nicht verfügbar." -#: ../../mod/attach.php:16 +#: ../../mod/attach.php:20 msgid "Item was not found." msgstr "Beitrag konnte nicht gefunden werden." @@ -1613,7 +1946,7 @@ msgstr "Gruppe erstellt." msgid "Could not create group." msgstr "Konnte die Gruppe nicht erstellen." -#: ../../mod/group.php:43 ../../mod/group.php:115 +#: ../../mod/group.php:43 ../../mod/group.php:123 msgid "Group not found." msgstr "Gruppe nicht gefunden." @@ -1621,64 +1954,59 @@ msgstr "Gruppe nicht gefunden." msgid "Group name changed." msgstr "Gruppenname geändert." -#: ../../mod/group.php:67 ../../mod/profperm.php:19 ../../index.php:255 +#: ../../mod/group.php:67 ../../mod/profperm.php:19 ../../index.php:265 msgid "Permission denied" msgstr "Zugriff verweigert" -#: ../../mod/group.php:74 +#: ../../mod/group.php:82 msgid "Create a group of contacts/friends." msgstr "Eine Gruppe von Kontakten/Freunden anlegen." -#: ../../mod/group.php:75 ../../mod/group.php:158 +#: ../../mod/group.php:83 ../../mod/group.php:166 msgid "Group Name: " msgstr "Gruppen Name:" -#: ../../mod/group.php:90 +#: ../../mod/group.php:98 msgid "Group removed." msgstr "Gruppe entfernt." -#: ../../mod/group.php:92 +#: ../../mod/group.php:100 msgid "Unable to remove group." msgstr "Konnte die Gruppe nicht entfernen." -#: ../../mod/group.php:156 ../../mod/profperm.php:96 +#: ../../mod/group.php:164 ../../mod/profperm.php:105 msgid "Click on a contact to add or remove." msgstr "Klicke einen Kontakt an um ihn hinzuzufügen oder zu entfernen" -#: ../../mod/group.php:157 +#: ../../mod/group.php:165 msgid "Group Editor" msgstr "Gruppen Editor" -#: ../../mod/group.php:172 +#: ../../mod/group.php:180 msgid "Members" msgstr "Mitglieder" -#: ../../mod/group.php:186 +#: ../../mod/group.php:195 msgid "All Contacts" msgstr "Alle Kontakte" -#: ../../mod/profperm.php:25 ../../mod/profperm.php:46 +#: ../../mod/profperm.php:25 ../../mod/profperm.php:55 msgid "Invalid profile identifier." msgstr "Ungültiger Profil-Bezeichner" -#: ../../mod/profperm.php:92 +#: ../../mod/profperm.php:101 msgid "Profile Visibility Editor" msgstr "Editor für die Profil-Sichtbarkeit" -#: ../../mod/profperm.php:94 ../../mod/profile.php:116 -#: ../../include/profile_advanced.php:7 -msgid "Profile" -msgstr "Profil" - -#: ../../mod/profperm.php:105 +#: ../../mod/profperm.php:114 msgid "Visible To" msgstr "Sichtbar für" -#: ../../mod/profperm.php:116 +#: ../../mod/profperm.php:128 msgid "All Contacts (with secure profile access)" msgstr "Alle Kontakte (mit gesichertem Profil zugriff)" -#: ../../mod/viewcontacts.php:25 ../../boot.php:2059 +#: ../../mod/viewcontacts.php:25 ../../include/text.php:548 msgid "View Contacts" msgstr "Kontakte anzeigen" @@ -1686,39 +2014,47 @@ msgstr "Kontakte anzeigen" msgid "No contacts." msgstr "Keine Kontakte." -#: ../../mod/register.php:49 +#: ../../mod/register.php:53 +msgid "An invitation is required." +msgstr "Du benötigst eine Einladung." + +#: ../../mod/register.php:58 +msgid "Invitation could not be verified." +msgstr "Die Einladung konnte nicht überprüft werden." + +#: ../../mod/register.php:66 msgid "Invalid OpenID url" msgstr "Ungültige OpenID URL" -#: ../../mod/register.php:64 +#: ../../mod/register.php:81 msgid "Please enter the required information." msgstr "Bitte trage die erforderlichen Informationen ein." -#: ../../mod/register.php:76 +#: ../../mod/register.php:95 msgid "Please use a shorter name." msgstr "Bitte verwende einen kürzeren Namen." -#: ../../mod/register.php:78 +#: ../../mod/register.php:97 msgid "Name too short." msgstr "Der Name ist zu kurz." -#: ../../mod/register.php:93 +#: ../../mod/register.php:112 msgid "That doesn't appear to be your full (First Last) name." msgstr "Das scheint nicht dein kompletter Name (Vor- und Nachname) zu sein." -#: ../../mod/register.php:97 +#: ../../mod/register.php:117 msgid "Your email domain is not among those allowed on this site." msgstr "Die Domain deiner EMail Adresse ist nicht erlaubt auf dieser Seite." -#: ../../mod/register.php:100 +#: ../../mod/register.php:120 msgid "Not a valid email address." msgstr "Keine gültige EMail Adresse." -#: ../../mod/register.php:106 +#: ../../mod/register.php:130 msgid "Cannot use that email." msgstr "Konnte diese EMail Adresse nicht verwenden." -#: ../../mod/register.php:111 +#: ../../mod/register.php:136 msgid "" "Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and " "must also begin with a letter." @@ -1726,59 +2062,59 @@ msgstr "" "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\", \"_\" " "und \"-\") bestehen, außerdem muss er mit einem Buchstaben beginnen." -#: ../../mod/register.php:117 ../../mod/register.php:217 +#: ../../mod/register.php:142 ../../mod/register.php:243 msgid "Nickname is already registered. Please choose another." msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen." -#: ../../mod/register.php:136 +#: ../../mod/register.php:161 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "SERIOUS ERROR: Generation of security keys failed." -#: ../../mod/register.php:203 +#: ../../mod/register.php:229 msgid "An error occurred during registration. Please try again." msgstr "" "Wärend der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch " "einmal." -#: ../../mod/register.php:239 +#: ../../mod/register.php:265 msgid "An error occurred creating your default profile. Please try again." msgstr "" "Bei der Erstellung des Standard-Profils ist ein Fehler aufgetreten. Bitte " "versuche es noch einmal." -#: ../../mod/register.php:333 ../../mod/regmod.php:96 +#: ../../mod/register.php:367 ../../mod/regmod.php:52 #, php-format msgid "Registration details for %s" msgstr "Details der Registration von %s" -#: ../../mod/register.php:341 +#: ../../mod/register.php:375 msgid "" "Registration successful. Please check your email for further instructions." msgstr "" "Registration erfolgreich. Eine EMail mit weiteren Anweisungen wurde an dich " "gesendet." -#: ../../mod/register.php:345 +#: ../../mod/register.php:379 msgid "Failed to send email message. Here is the message that failed." msgstr "" "Konnte die EMail nicht versenden. Hier ist die Nachricht die nicht gesendet " "werden konnte." -#: ../../mod/register.php:350 +#: ../../mod/register.php:384 msgid "Your registration can not be processed." msgstr "Deine Registration konnte nicht verarbeitet werden." -#: ../../mod/register.php:383 +#: ../../mod/register.php:421 #, php-format msgid "Registration request at %s" msgstr "Registrationsanfrage auf %s" -#: ../../mod/register.php:392 +#: ../../mod/register.php:430 msgid "Your registration is pending approval by the site owner." msgstr "" "Deine Registration muss noch vom Betreiber der Seite freigegeben werden." -#: ../../mod/register.php:440 +#: ../../mod/register.php:479 msgid "" "You may (optionally) fill in this form via OpenID by supplying your OpenID " "and clicking 'Register'." @@ -1786,7 +2122,7 @@ msgstr "" "Du kannst dieses Formular auch (optional) mit deiner OpenID ausfüllen indem " "du deine OpenID angibst und 'Registrieren' klickst." -#: ../../mod/register.php:441 +#: ../../mod/register.php:480 msgid "" "If you are not familiar with OpenID, please leave that field blank and fill " "in the rest of the items." @@ -1794,27 +2130,36 @@ msgstr "" "Wenn du nicht mit OpenID vertraut bist, lass dieses Feld bitte leer und " "fülle die restlichen Felder aus." -#: ../../mod/register.php:442 +#: ../../mod/register.php:481 msgid "Your OpenID (optional): " msgstr "Deine OpenID (optional): " -#: ../../mod/register.php:456 +#: ../../mod/register.php:495 msgid "Include your profile in member directory?" msgstr "Soll dein Profil im Nutzerverzeichnis angezeigt werden?" -#: ../../mod/register.php:472 +#: ../../mod/register.php:511 +msgid "Membership on this site is by invitation only." +msgstr "" +"Mitgliedschaft auf dieser Seite ist nur nach vorheriger Einladung möglich." + +#: ../../mod/register.php:512 +msgid "Your invitation ID: " +msgstr "ID deiner Einladung: " + +#: ../../mod/register.php:515 ../../mod/admin.php:299 msgid "Registration" msgstr "Registration" -#: ../../mod/register.php:480 +#: ../../mod/register.php:523 msgid "Your Full Name (e.g. Joe Smith): " msgstr "Vollständiger Name (z.B. Joe Smith): " -#: ../../mod/register.php:481 +#: ../../mod/register.php:524 msgid "Your Email Address: " msgstr "Deine EMail Adresse: " -#: ../../mod/register.php:482 +#: ../../mod/register.php:525 msgid "" "Choose a profile nickname. This must begin with a text character. Your " "profile address on this site will then be " @@ -1824,39 +2169,39 @@ msgstr "" "beginnen. Die Adresse deines Profils auf dieser Seite wird " "'spitzname@$sitename' sein." -#: ../../mod/register.php:483 +#: ../../mod/register.php:526 msgid "Choose a nickname: " msgstr "Spitznamen wählen: " -#: ../../mod/register.php:486 ../../include/nav.php:59 ../../boot.php:835 +#: ../../mod/register.php:529 ../../include/nav.php:59 ../../boot.php:638 msgid "Register" msgstr "Registrieren" -#: ../../mod/like.php:110 ../../addon/facebook/facebook.php:774 -#: ../../include/conversation.php:20 +#: ../../mod/like.php:110 ../../addon/facebook/facebook.php:947 +#: ../../include/conversation.php:26 ../../include/conversation.php:35 msgid "status" msgstr "Status" -#: ../../mod/like.php:127 ../../addon/facebook/facebook.php:778 -#: ../../include/conversation.php:25 +#: ../../mod/like.php:127 ../../addon/facebook/facebook.php:951 +#: ../../include/conversation.php:43 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "%1$s mag %2$s's %3$s" -#: ../../mod/like.php:129 ../../include/conversation.php:28 +#: ../../mod/like.php:129 ../../include/conversation.php:46 #, php-format msgid "%1$s doesn't like %2$s's %3$s" msgstr "%1$s mag %2$s's %3$s nicht" -#: ../../mod/friendika.php:43 +#: ../../mod/friendika.php:42 msgid "This is Friendika version" msgstr "Dies ist Friendika Version" -#: ../../mod/friendika.php:44 +#: ../../mod/friendika.php:43 msgid "running at web location" msgstr "die unter folgender Webadresse zu finden ist" -#: ../../mod/friendika.php:46 +#: ../../mod/friendika.php:45 msgid "" "Shared content within the Friendika network is provided under the Creative Commons " @@ -1866,7 +2211,7 @@ msgstr "" "href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons " "Attribution 3.0 license verfügbar" -#: ../../mod/friendika.php:48 +#: ../../mod/friendika.php:47 msgid "" "Please visit Project.Friendika.com to learn " @@ -1876,11 +2221,11 @@ msgstr "" "href=\"http://project.friendika.com\">Project.Friendika.com um mehr über" " Friendika zu erfahren." -#: ../../mod/friendika.php:50 +#: ../../mod/friendika.php:49 msgid "Bug reports and issues: please visit" msgstr "Probleme oder Fehler gefunden? Bitte besuche" -#: ../../mod/friendika.php:51 +#: ../../mod/friendika.php:50 msgid "" "Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - " "dot com" @@ -1888,72 +2233,68 @@ msgstr "" "Vorschläge, Lobeshymnen, Spenden usw. - bitte eine Email an \"Info\" at " "Friendika - dot com (englisch bevorzugt)" -#: ../../mod/friendika.php:56 +#: ../../mod/friendika.php:55 msgid "Installed plugins/addons/apps" msgstr "Installierte Plugins/Erweiterungen/Apps" -#: ../../mod/friendika.php:64 +#: ../../mod/friendika.php:63 msgid "No installed plugins/addons/apps" msgstr "Keine Plugins/Erweiterungen/Apps installiert" -#: ../../mod/regmod.php:12 -msgid "Please login." -msgstr "Bitte melde dich an." +#: ../../mod/regmod.php:61 +msgid "Account approved." +msgstr "Account freigegeben." -#: ../../mod/regmod.php:56 +#: ../../mod/regmod.php:93 #, php-format msgid "Registration revoked for %s" msgstr "Registration für %s wurde zurück gezogen" #: ../../mod/regmod.php:105 -msgid "Account approved." -msgstr "Account freigegeben." +msgid "Please login." +msgstr "Bitte melde dich an." -#: ../../mod/update_network.php:22 ../../mod/update_profile.php:41 -msgid "[Embedded content - reload page to view]" -msgstr "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]" - -#: ../../mod/item.php:37 +#: ../../mod/item.php:81 msgid "Unable to locate original post." msgstr "Konnte das original Posting nicht finden." -#: ../../mod/item.php:128 +#: ../../mod/item.php:182 msgid "Empty post discarded." msgstr "Leere Nachricht wurde verworfen." -#: ../../mod/item.php:214 ../../mod/message.php:93 -#: ../../mod/wall_upload.php:79 ../../mod/wall_upload.php:88 -#: ../../mod/wall_upload.php:95 +#: ../../mod/item.php:282 ../../mod/message.php:93 +#: ../../mod/wall_upload.php:81 ../../mod/wall_upload.php:90 +#: ../../mod/wall_upload.php:97 msgid "Wall Photos" msgstr "Pinnwand Bilder" -#: ../../mod/item.php:517 ../../mod/item.php:560 ../../mod/item.php:583 -#: ../../mod/item.php:624 ../../mod/dfrn_notify.php:193 -#: ../../mod/dfrn_notify.php:401 ../../mod/dfrn_notify.php:444 -#: ../../mod/dfrn_notify.php:530 ../../mod/dfrn_notify.php:571 +#: ../../mod/item.php:605 ../../mod/item.php:650 ../../mod/item.php:673 +#: ../../mod/item.php:716 ../../mod/dfrn_notify.php:293 +#: ../../mod/dfrn_notify.php:503 ../../mod/dfrn_notify.php:548 +#: ../../mod/dfrn_notify.php:634 ../../mod/dfrn_notify.php:677 msgid "noreply" msgstr "noreply" -#: ../../mod/item.php:559 ../../mod/item.php:623 ../../mod/dfrn_notify.php:570 +#: ../../mod/item.php:649 ../../mod/item.php:715 ../../mod/dfrn_notify.php:676 msgid "Administrator@" msgstr "Administrator@" -#: ../../mod/item.php:562 ../../mod/dfrn_notify.php:446 -#: ../../mod/dfrn_notify.php:573 +#: ../../mod/item.php:652 ../../mod/dfrn_notify.php:550 +#: ../../mod/dfrn_notify.php:679 #, php-format msgid "%s commented on an item at %s" msgstr "%s kommentierte einen Beitrag auf %s" -#: ../../mod/item.php:626 +#: ../../mod/item.php:718 #, php-format msgid "%s posted to your profile wall at %s" msgstr "%s hat auf deine Profilwand bei %s gepostet" -#: ../../mod/item.php:655 +#: ../../mod/item.php:747 msgid "System error. Post not saved." msgstr "Systemfehler. Nachricht konnte nicht gespeichert werden." -#: ../../mod/item.php:674 +#: ../../mod/item.php:766 #, php-format msgid "" "This message was sent to you by %s, a member of the Friendika social " @@ -1962,12 +2303,12 @@ msgstr "" "Diese Nachricht wurde dir von %s gesendet, einem Mitglied des Sozialen " "Netzwerks Friendika" -#: ../../mod/item.php:676 +#: ../../mod/item.php:768 #, php-format msgid "You may visit them online at %s" msgstr "Du kannst sie online unter %s besuchen" -#: ../../mod/item.php:677 +#: ../../mod/item.php:769 msgid "" "Please contact the sender by replying to this post if you do not wish to " "receive these messages." @@ -1975,15 +2316,11 @@ msgstr "" "Please contact the sender by replying to this post if you do not wish to " "receive these messages." -#: ../../mod/item.php:679 +#: ../../mod/item.php:771 #, php-format msgid "%s posted an update." msgstr "%s hat ein Update gepostet." -#: ../../mod/item.php:730 ../../mod/display.php:25 ../../mod/display.php:142 -msgid "Item not found." -msgstr "Beitrag nicht gefunden." - #: ../../mod/profile_photo.php:28 msgid "Image uploaded but image cropping failed." msgstr "Bilder hochgeladen aber das Zuschneiden ist fehlgeschlagen." @@ -2077,7 +2414,7 @@ msgstr "Nachricht gesendet." msgid "Message could not be sent." msgstr "Nachricht konnte nicht gesendet werden." -#: ../../mod/message.php:125 ../../include/nav.php:101 +#: ../../mod/message.php:125 ../../include/nav.php:102 msgid "Messages" msgstr "Nachrichten" @@ -2101,7 +2438,7 @@ msgstr "Nachricht gelöscht." msgid "Conversation removed." msgstr "Unterhaltung gelöscht." -#: ../../mod/message.php:172 ../../include/conversation.php:684 +#: ../../mod/message.php:172 ../../include/conversation.php:696 msgid "Please enter a link URL:" msgstr "Bitte gib die URL des Links ein:" @@ -2117,7 +2454,8 @@ msgstr "An:" msgid "Subject:" msgstr "Betreff:" -#: ../../mod/message.php:185 ../../mod/message.php:319 ../../mod/invite.php:63 +#: ../../mod/message.php:185 ../../mod/message.php:319 +#: ../../mod/invite.php:101 msgid "Your message:" msgstr "Deine Nachricht:" @@ -2145,57 +2483,408 @@ msgstr "Nachricht löschen" msgid "Send Reply" msgstr "Antwort senden" -#: ../../mod/profile.php:11 ../../boot.php:2270 +#: ../../mod/admin.php:66 ../../mod/admin.php:297 +msgid "Site" +msgstr "Seite" + +#: ../../mod/admin.php:67 ../../mod/admin.php:460 ../../mod/admin.php:472 +msgid "Users" +msgstr "Nutzer" + +#: ../../mod/admin.php:68 ../../mod/admin.php:549 ../../mod/admin.php:586 +msgid "Plugins" +msgstr "Plugins" + +#: ../../mod/admin.php:69 +msgid "Update" +msgstr "Aktualisierungen" + +#: ../../mod/admin.php:83 ../../mod/admin.php:651 +msgid "Logs" +msgstr "Protokolle" + +#: ../../mod/admin.php:88 +msgid "User registrations waiting for confirmation" +msgstr "Nutzeranmeldungen die auf Bestätigung warten" + +#: ../../mod/admin.php:118 ../../mod/admin.php:502 ../../mod/display.php:25 +#: ../../mod/display.php:112 ../../include/items.php:1828 +msgid "Item not found." +msgstr "Beitrag nicht gefunden." + +#: ../../mod/admin.php:151 ../../mod/admin.php:296 ../../mod/admin.php:459 +#: ../../mod/admin.php:548 ../../mod/admin.php:585 ../../mod/admin.php:650 +msgid "Administration" +msgstr "Administration" + +#: ../../mod/admin.php:152 +msgid "Summary" +msgstr "Zusammenfassung" + +#: ../../mod/admin.php:153 +msgid "Registered users" +msgstr "Registrierte Nutzer" + +#: ../../mod/admin.php:155 +msgid "Pending registrations" +msgstr "Anstehende Anmeldungen" + +#: ../../mod/admin.php:156 +msgid "Version" +msgstr "Version" + +#: ../../mod/admin.php:158 +msgid "Active plugins" +msgstr "Aktive Plugins" + +#: ../../mod/admin.php:245 +msgid "Site settings updated." +msgstr "Seiteneinstellungen aktualisiert." + +#: ../../mod/admin.php:289 +msgid "Closed" +msgstr "Geschlossen" + +#: ../../mod/admin.php:290 +msgid "Requires approval" +msgstr "Bedarf Zustimmung" + +#: ../../mod/admin.php:291 +msgid "Open" +msgstr "Offen" + +#: ../../mod/admin.php:300 +msgid "File upload" +msgstr "Datei hochladen" + +#: ../../mod/admin.php:301 +msgid "Policies" +msgstr "Regeln" + +#: ../../mod/admin.php:302 +msgid "Advanced" +msgstr "Erweitert" + +#: ../../mod/admin.php:306 +msgid "Site name" +msgstr "Seiten Name" + +#: ../../mod/admin.php:307 +msgid "Banner/Logo" +msgstr "Banner/Logo" + +#: ../../mod/admin.php:308 +msgid "System language" +msgstr "System Sprache" + +#: ../../mod/admin.php:309 +msgid "System theme" +msgstr "Systemweites Thema" + +#: ../../mod/admin.php:311 +msgid "Maximum image size" +msgstr "Maximale Größe von Bildern" + +#: ../../mod/admin.php:313 +msgid "Register policy" +msgstr "Registrationsmethode" + +#: ../../mod/admin.php:314 +msgid "Register text" +msgstr "Registrationstext" + +#: ../../mod/admin.php:315 +msgid "Allowed friend domains" +msgstr "Erlaubte Domains für Kontakte" + +#: ../../mod/admin.php:316 +msgid "Allowed email domains" +msgstr "Erlaubte Domains für Emails" + +#: ../../mod/admin.php:317 +msgid "Block public" +msgstr "Öffentlichen Zugriff blockieren" + +#: ../../mod/admin.php:318 +msgid "Force publish" +msgstr "Erzwinge Veröffentlichung" + +#: ../../mod/admin.php:319 +msgid "Global directory update URL" +msgstr "URL für Updates beim weltweiten Verzeichnis" + +#: ../../mod/admin.php:321 +msgid "Block multiple registrations" +msgstr "Unterbinde mehrfach Registration" + +#: ../../mod/admin.php:322 +msgid "OpenID support" +msgstr "OpenID Unterstützung" + +#: ../../mod/admin.php:323 +msgid "Gravatar support" +msgstr "Gravatar Unterstützung" + +#: ../../mod/admin.php:324 +msgid "Fullname check" +msgstr "Name auf Vollständigkeit überprüfen" + +#: ../../mod/admin.php:325 +msgid "UTF-8 Regular expressions" +msgstr "UTF-8 Reguläre Ausdrücke" + +#: ../../mod/admin.php:326 +msgid "Show Community Page" +msgstr "Gemeinschaftsseite anzeigen" + +#: ../../mod/admin.php:327 +msgid "Enable OStatus support" +msgstr "OStatus Unterstützung aktivieren" + +#: ../../mod/admin.php:328 +msgid "Only allow Friendika contacts" +msgstr "Erlaube ausschlließlich Friendika Kontakte" + +#: ../../mod/admin.php:329 +msgid "Verify SSL" +msgstr "SSL Überprüfen" + +#: ../../mod/admin.php:330 +msgid "Proxy user" +msgstr "Proxy Nutzer" + +#: ../../mod/admin.php:331 +msgid "Proxy URL" +msgstr "Proxy URL" + +#: ../../mod/admin.php:332 +msgid "Network timeout" +msgstr "Netzwerk Wartezeit" + +#: ../../mod/admin.php:353 +#, php-format +msgid "%s user blocked" +msgid_plural "%s users blocked/unblocked" +msgstr[0] "%s Nutzer gesperrt" +msgstr[1] "%s Nutzer gesperrt/entsperrt" + +#: ../../mod/admin.php:360 +#, 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:394 +#, php-format +msgid "User '%s' deleted" +msgstr "Nutzer '%s' gelöscht" + +#: ../../mod/admin.php:401 +#, php-format +msgid "User '%s' unblocked" +msgstr "Nutzer '%s' entsperrt" + +#: ../../mod/admin.php:401 +#, php-format +msgid "User '%s' blocked" +msgstr "Nutzer '%s' gesperrt" + +#: ../../mod/admin.php:462 +msgid "select all" +msgstr "Alle auswählen" + +#: ../../mod/admin.php:463 +msgid "User registrations waiting for confirm" +msgstr "Neuanmeldungen die auf deine Bestätigung warten" + +#: ../../mod/admin.php:464 +msgid "Request date" +msgstr "Anfrage Datum" + +#: ../../mod/admin.php:464 ../../mod/admin.php:473 +msgid "Email" +msgstr "Email" + +#: ../../mod/admin.php:465 +msgid "No registrations." +msgstr "Keine Neuanmeldungen." + +#: ../../mod/admin.php:467 +msgid "Deny" +msgstr "Verwehren" + +#: ../../mod/admin.php:469 +msgid "Block" +msgstr "Sperren" + +#: ../../mod/admin.php:470 +msgid "Unblock" +msgstr "Entsperren" + +#: ../../mod/admin.php:473 +msgid "Register date" +msgstr "Anmeldedatum" + +#: ../../mod/admin.php:473 +msgid "Last login" +msgstr "Letzte Anmeldung" + +#: ../../mod/admin.php:473 +msgid "Last item" +msgstr "Letzter Beitrag" + +#: ../../mod/admin.php:473 +msgid "Account" +msgstr "Nutzerkonto" + +#: ../../mod/admin.php:475 +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 dir sicher?" + +#: ../../mod/admin.php:476 +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 dir sicher?" + +#: ../../mod/admin.php:512 +#, php-format +msgid "Plugin %s disabled." +msgstr "Plugin %s deaktiviert." + +#: ../../mod/admin.php:516 +#, php-format +msgid "Plugin %s enabled." +msgstr "Plugin %s aktiviert." + +#: ../../mod/admin.php:526 +msgid "Disable" +msgstr "Ausschalten" + +#: ../../mod/admin.php:528 +msgid "Enable" +msgstr "Einschalten" + +#: ../../mod/admin.php:550 +msgid "Toggle" +msgstr "Umschalten" + +#: ../../mod/admin.php:551 ../../include/nav.php:108 +msgid "Settings" +msgstr "Einstellungen" + +#: ../../mod/admin.php:613 +msgid "Log settings updated." +msgstr "Protokolleinstellungen aktualisiert." + +#: ../../mod/admin.php:653 +msgid "Clear" +msgstr "löschen" + +#: ../../mod/admin.php:659 +msgid "Debugging" +msgstr "Protokoll führen" + +#: ../../mod/admin.php:660 +msgid "Log file" +msgstr "Protokolldatei" + +#: ../../mod/admin.php:660 +msgid "Must be writable by web server. Relative to your Friendika index.php." +msgstr "" +"Muss schreibbar durch den Webserver sein. Angabe relativ zu Friendikas " +"indes.php." + +#: ../../mod/admin.php:661 +msgid "Log level" +msgstr "Protokollevel" + +#: ../../mod/admin.php:702 +msgid "Close" +msgstr "Schließen" + +#: ../../mod/admin.php:708 +msgid "FTP Host" +msgstr "FTP Host" + +#: ../../mod/admin.php:709 +msgid "FTP Path" +msgstr "FTP Pfad" + +#: ../../mod/admin.php:710 +msgid "FTP User" +msgstr "FTP Nutzername" + +#: ../../mod/admin.php:711 +msgid "FTP Password" +msgstr "FTP Passwort" + +#: ../../mod/profile.php:11 ../../boot.php:793 msgid "No profile" msgstr "Kein Profil" -#: ../../mod/profile.php:59 +#: ../../mod/profile.php:102 ../../mod/display.php:63 msgid "Access to this profile has been restricted." -msgstr "Der Zugriff zu diesem Profil wurde eingeschrängt." +msgstr "Der Zugriff zu diesem Profil wurde eingeschränkt." -#: ../../mod/profile.php:115 -msgid "Status" -msgstr "Status" +#: ../../mod/profile.php:133 +msgid "Tips for New Members" +msgstr "Tipps für neue Nutzer" -#: ../../mod/profile.php:117 -msgid "Photos" -msgstr "Bilder" - -#: ../../mod/openid.php:62 ../../mod/openid.php:122 ../../include/auth.php:114 -#: ../../include/auth.php:139 ../../include/auth.php:192 +#: ../../mod/openid.php:62 ../../mod/openid.php:122 ../../include/auth.php:120 +#: ../../include/auth.php:145 ../../include/auth.php:198 msgid "Login failed." msgstr "Annmeldung fehlgeschlagen." -#: ../../mod/openid.php:78 ../../include/auth.php:208 +#: ../../mod/openid.php:78 ../../include/auth.php:214 msgid "Welcome " msgstr "Willkommen " -#: ../../mod/openid.php:79 ../../include/auth.php:209 +#: ../../mod/openid.php:79 ../../include/auth.php:215 msgid "Please upload a profile photo." msgstr "Bitte lade ein Profilbild hoch." -#: ../../mod/openid.php:82 ../../include/auth.php:212 +#: ../../mod/openid.php:82 ../../include/auth.php:218 msgid "Welcome back " msgstr "Willkommen zurück " -#: ../../mod/follow.php:43 -msgid "The profile address specified does not provide adequate information." -msgstr "Die angegebene Profiladresse liefert unzureichende Informationen." +#: ../../mod/follow.php:39 +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." -#: ../../mod/follow.php:45 +#: ../../mod/follow.php:40 ../../mod/follow.php:50 msgid "No compatible communication protocols or feeds were discovered." msgstr "" "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden." -#: ../../mod/follow.php:47 +#: ../../mod/follow.php:48 +msgid "The profile address specified does not provide adequate information." +msgstr "Die angegebene Profiladresse liefert unzureichende Informationen." + +#: ../../mod/follow.php:52 msgid "An author or name was not found." msgstr "Es wurde kein Autor oder Name gefunden." -#: ../../mod/follow.php:49 +#: ../../mod/follow.php:54 msgid "No browser URL could be matched to this address." msgstr "Zu dieser Adresse konnte keine passende Browser URL gefunden werden." -#: ../../mod/follow.php:57 +#: ../../mod/follow.php:61 +msgid "Communication options with this network have been restricted." +msgstr "Kommunikations-Optionen mit diesem Netzwerk wurden eingeschränkt." + +#: ../../mod/follow.php:66 msgid "" "Limited profile. This person will be unable to receive direct/personal " "notifications from you." @@ -2203,19 +2892,19 @@ msgstr "" "Eingeschränktes Profil. Diese Person wird keine direkten/privaten " "Nachrichten von dir erhalten können." -#: ../../mod/follow.php:112 +#: ../../mod/follow.php:121 msgid "Unable to retrieve contact information." msgstr "Konnte die Kontaktinformationen nicht empfangen." -#: ../../mod/follow.php:158 +#: ../../mod/follow.php:167 msgid "following" msgstr "folgen" -#: ../../mod/display.php:135 +#: ../../mod/display.php:105 msgid "Item has been removed." msgstr "Eintrag wurde entfernt." -#: ../../mod/dfrn_notify.php:251 +#: ../../mod/dfrn_notify.php:353 msgid "New mail received at " msgstr "New mail received at " @@ -2223,16 +2912,16 @@ msgstr "New mail received at " msgid "Applications" msgstr "Anwendungen" -#: ../../mod/search.php:26 ../../include/nav.php:70 ../../boot.php:2114 +#: ../../mod/apps.php:11 +msgid "No installed applications." +msgstr "Keine Applikationen installiert." + +#: ../../mod/search.php:26 ../../include/text.php:603 ../../include/nav.php:69 msgid "Search" msgstr "Suche" -#: ../../mod/search.php:69 -msgid "No results." -msgstr "Keine Ergebnisse." - -#: ../../mod/profiles.php:21 ../../mod/profiles.php:240 -#: ../../mod/profiles.php:345 ../../mod/dfrn_confirm.php:62 +#: ../../mod/profiles.php:21 ../../mod/profiles.php:236 +#: ../../mod/profiles.php:341 ../../mod/dfrn_confirm.php:62 msgid "Profile not found." msgstr "Profil nicht gefunden." @@ -2240,187 +2929,183 @@ msgstr "Profil nicht gefunden." msgid "Profile Name is required." msgstr "Profilname ist erforderlich." -#: ../../mod/profiles.php:202 +#: ../../mod/profiles.php:198 msgid "Profile updated." msgstr "Profil aktualisiert." -#: ../../mod/profiles.php:257 +#: ../../mod/profiles.php:253 msgid "Profile deleted." msgstr "Profil gelöscht." -#: ../../mod/profiles.php:273 ../../mod/profiles.php:304 +#: ../../mod/profiles.php:269 ../../mod/profiles.php:300 msgid "Profile-" msgstr "Profil-" -#: ../../mod/profiles.php:292 ../../mod/profiles.php:331 +#: ../../mod/profiles.php:288 ../../mod/profiles.php:327 msgid "New profile created." msgstr "Neues Profil angelegt." -#: ../../mod/profiles.php:310 +#: ../../mod/profiles.php:306 msgid "Profile unavailable to clone." msgstr "Profil nicht zum Duplizieren verfügbar." -#: ../../mod/profiles.php:357 +#: ../../mod/profiles.php:353 msgid "Hide your contact/friend list from viewers of this profile?" msgstr "Liste der Kontakte/Freunde vor Betrachtern dieses Profils verbergen?" -#: ../../mod/profiles.php:366 -msgid "Hide profile details and all your messages from unknown viewers?" -msgstr "" -"Profildetails und all deine Beiträge vor unbekannten Besuchern verbergen?" - -#: ../../mod/profiles.php:382 +#: ../../mod/profiles.php:371 msgid "Edit Profile Details" msgstr "Profil bearbeiten" -#: ../../mod/profiles.php:384 +#: ../../mod/profiles.php:373 msgid "View this profile" msgstr "Dieses Profil anzeigen" -#: ../../mod/profiles.php:385 +#: ../../mod/profiles.php:374 msgid "Create a new profile using these settings" msgstr "Neues Profil anlegen und diese Einstellungen verwenden" -#: ../../mod/profiles.php:386 +#: ../../mod/profiles.php:375 msgid "Clone this profile" msgstr "Dieses Profil duplizieren" -#: ../../mod/profiles.php:387 +#: ../../mod/profiles.php:376 msgid "Delete this profile" msgstr "Dieses Profil löschen" -#: ../../mod/profiles.php:388 +#: ../../mod/profiles.php:377 msgid "Profile Name:" msgstr "Profilname:" -#: ../../mod/profiles.php:389 +#: ../../mod/profiles.php:378 msgid "Your Full Name:" msgstr "Dein kompletter Name:" -#: ../../mod/profiles.php:390 +#: ../../mod/profiles.php:379 msgid "Title/Description:" msgstr "Titel/Beschreibung:" -#: ../../mod/profiles.php:391 +#: ../../mod/profiles.php:380 msgid "Your Gender:" msgstr "Dein Geschlecht:" -#: ../../mod/profiles.php:392 -msgid "Birthday (y/m/d):" -msgstr "Geburtstag (y/m/d):" +#: ../../mod/profiles.php:381 +#, php-format +msgid "Birthday (%s):" +msgstr "Geburtstag (%s):" -#: ../../mod/profiles.php:393 +#: ../../mod/profiles.php:382 msgid "Street Address:" msgstr "Adresse:" -#: ../../mod/profiles.php:394 +#: ../../mod/profiles.php:383 msgid "Locality/City:" msgstr "Wohnort/Stadt:" -#: ../../mod/profiles.php:395 +#: ../../mod/profiles.php:384 msgid "Postal/Zip Code:" msgstr "Postleitzahl:" -#: ../../mod/profiles.php:396 +#: ../../mod/profiles.php:385 msgid "Country:" msgstr "Land:" -#: ../../mod/profiles.php:397 +#: ../../mod/profiles.php:386 msgid "Region/State:" msgstr "Region/Bundesstaat:" -#: ../../mod/profiles.php:398 +#: ../../mod/profiles.php:387 msgid " Marital Status:" msgstr " Beziehungs Status:" -#: ../../mod/profiles.php:399 +#: ../../mod/profiles.php:388 msgid "Who: (if applicable)" msgstr "Wer: (falls anwendbar)" -#: ../../mod/profiles.php:400 +#: ../../mod/profiles.php:389 msgid "Examples: cathy123, Cathy Williams, cathy@example.com" msgstr "Beispiel: cathy123, Cathy Williams, cathy@example.com" -#: ../../mod/profiles.php:401 ../../include/profile_advanced.php:90 +#: ../../mod/profiles.php:390 ../../include/profile_advanced.php:90 msgid "Sexual Preference:" msgstr "Sexuelle Vorlieben:" -#: ../../mod/profiles.php:402 +#: ../../mod/profiles.php:391 msgid "Homepage URL:" msgstr "Adresse der Homepage:" -#: ../../mod/profiles.php:403 ../../include/profile_advanced.php:115 +#: ../../mod/profiles.php:392 ../../include/profile_advanced.php:115 msgid "Political Views:" msgstr "Politische Ansichten:" -#: ../../mod/profiles.php:404 +#: ../../mod/profiles.php:393 msgid "Religious Views:" msgstr "Religiöse Ansichten:" -#: ../../mod/profiles.php:405 +#: ../../mod/profiles.php:394 msgid "Public Keywords:" msgstr "Öffentliche Schlüsselwörter:" -#: ../../mod/profiles.php:406 +#: ../../mod/profiles.php:395 msgid "Private Keywords:" msgstr "Private Schlüsselwörter:" -#: ../../mod/profiles.php:407 +#: ../../mod/profiles.php:396 msgid "Example: fishing photography software" msgstr "Beispiel: Fischen Photographie Software" -#: ../../mod/profiles.php:408 +#: ../../mod/profiles.php:397 msgid "(Used for suggesting potential friends, can be seen by others)" msgstr "" "(Wird verwendet um potentielle Freunde zu finden, könnte von Fremden " "eingesehen werden)" -#: ../../mod/profiles.php:409 +#: ../../mod/profiles.php:398 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:410 +#: ../../mod/profiles.php:399 msgid "Tell us about yourself..." msgstr "Erzähle und ein bisschen von dir..." -#: ../../mod/profiles.php:411 +#: ../../mod/profiles.php:400 msgid "Hobbies/Interests" msgstr "Hobbies/Interessen" -#: ../../mod/profiles.php:412 +#: ../../mod/profiles.php:401 msgid "Contact information and Social Networks" msgstr "Kontaktinformationen und Soziale Netzwerke" -#: ../../mod/profiles.php:413 +#: ../../mod/profiles.php:402 msgid "Musical interests" msgstr "Musikalische Interessen" -#: ../../mod/profiles.php:414 +#: ../../mod/profiles.php:403 msgid "Books, literature" msgstr "Literatur/Bücher" -#: ../../mod/profiles.php:415 +#: ../../mod/profiles.php:404 msgid "Television" msgstr "Fernsehen" -#: ../../mod/profiles.php:416 +#: ../../mod/profiles.php:405 msgid "Film/dance/culture/entertainment" msgstr "Filme/Tänze/Kultur/Unterhaltung" -#: ../../mod/profiles.php:417 +#: ../../mod/profiles.php:406 msgid "Love/romance" msgstr "Liebesleben" -#: ../../mod/profiles.php:418 +#: ../../mod/profiles.php:407 msgid "Work/employment" msgstr "Arbeit/Beschäftigung" -#: ../../mod/profiles.php:419 +#: ../../mod/profiles.php:408 msgid "School/education" msgstr "Schule/Ausbildung" -#: ../../mod/profiles.php:424 +#: ../../mod/profiles.php:413 msgid "" "This is your public profile.
It may " "be visible to anybody using the internet." @@ -2428,31 +3113,31 @@ msgstr "" "Dies ist dein öffentliches Profil.
Es " "könnte für jeden Nutzer des Internets sichtbar sein." -#: ../../mod/profiles.php:435 ../../mod/directory.php:112 +#: ../../mod/profiles.php:423 ../../mod/directory.php:112 msgid "Age: " msgstr "Alter: " -#: ../../mod/profiles.php:470 ../../include/nav.php:108 +#: ../../mod/profiles.php:458 ../../include/nav.php:109 msgid "Profiles" msgstr "Profile" -#: ../../mod/profiles.php:471 +#: ../../mod/profiles.php:459 msgid "Change profile photo" msgstr "Profilbild ändern" -#: ../../mod/profiles.php:472 +#: ../../mod/profiles.php:460 msgid "Create New Profile" msgstr "Neues Profil anlegen" -#: ../../mod/profiles.php:482 +#: ../../mod/profiles.php:470 msgid "Profile Image" msgstr "Profilbild" -#: ../../mod/profiles.php:484 -msgid "Visible to everybody" -msgstr "Für jeden sichtbar" +#: ../../mod/profiles.php:472 +msgid "visible to everybody" +msgstr "sichtbar für jeden" -#: ../../mod/profiles.php:485 +#: ../../mod/profiles.php:473 msgid "Edit visibility" msgstr "Sichtbarkeit bearbeiten" @@ -2480,46 +3165,54 @@ msgstr "Geschlecht:" msgid "No entries (some entries may be hidden)." msgstr "Keine Einträge (einige Einträge könnten versteckt sein)." -#: ../../mod/invite.php:28 +#: ../../mod/invite.php:35 #, php-format msgid "%s : Not a valid email address." msgstr "%s: Keine gültige Email Adresse." -#: ../../mod/invite.php:32 +#: ../../mod/invite.php:59 #, php-format msgid "Please join my network on %s" msgstr "Bitte trete meinem Netzwerk auf %s bei" -#: ../../mod/invite.php:42 +#: ../../mod/invite.php:69 #, php-format msgid "%s : Message delivery failed." msgstr "%s: Zustellung der Nachricht fehlgeschlagen." -#: ../../mod/invite.php:46 +#: ../../mod/invite.php:73 #, php-format msgid "%d message sent." msgid_plural "%d messages sent." msgstr[0] "%d Nachricht gesendet." msgstr[1] "%d Nachrichten gesendet." -#: ../../mod/invite.php:61 +#: ../../mod/invite.php:92 +msgid "You have no more invitations available" +msgstr "Du hast keine weiteren Einladungen" + +#: ../../mod/invite.php:99 msgid "Send invitations" msgstr "Einladungen senden" -#: ../../mod/invite.php:62 +#: ../../mod/invite.php:100 msgid "Enter email addresses, one per line:" msgstr "Email Adressen eingeben, eine pro Zeile:" -#: ../../mod/invite.php:64 +#: ../../mod/invite.php:102 #, php-format msgid "Please join my social network on %s" msgstr "Bitte trete meinem Sozialen Netzwerk auf %s bei" -#: ../../mod/invite.php:65 +#: ../../mod/invite.php:103 msgid "To accept this invitation, please visit:" msgstr "Um diese Einladung anzunehmen beuche bitte:" -#: ../../mod/invite.php:66 +#: ../../mod/invite.php:104 +msgid "You will need to supply this invitation code: $invite_code" +msgstr "Du benötigst den folgenden Einladungs Code: $invite_code" + +#: ../../mod/invite.php:104 msgid "" "Once you have registered, please connect with me via my profile page at:" msgstr "" @@ -2556,7 +3249,7 @@ msgstr "Vorstellung schlug fehl oder wurde zurück gezogen." msgid "Unable to set contact photo." msgstr "Konnte das Bild des Kontakts nicht speichern." -#: ../../mod/dfrn_confirm.php:430 ../../include/conversation.php:61 +#: ../../mod/dfrn_confirm.php:430 ../../include/conversation.php:79 #, php-format msgid "%1$s is now friends with %2$s" msgstr "%1$s ist nun mit %2$s befreundet" @@ -2602,47 +3295,66 @@ msgstr "Die Updates für dein Profil konnten nicht gespeichert werden" msgid "Connection accepted at %s" msgstr "Auf %s wurde die Verbindung akzeptiert" -#: ../../addon/facebook/facebook.php:248 +#: ../../addon/facebook/facebook.php:314 msgid "Facebook disabled" msgstr "Facebook deaktiviert" -#: ../../addon/facebook/facebook.php:253 +#: ../../addon/facebook/facebook.php:319 msgid "Updating contacts" msgstr "Aktualisiere Kontakte" -#: ../../addon/facebook/facebook.php:262 +#: ../../addon/facebook/facebook.php:328 msgid "Facebook API key is missing." msgstr "Facebook API Schlüssel nicht gefunden" -#: ../../addon/facebook/facebook.php:269 +#: ../../addon/facebook/facebook.php:335 msgid "Facebook Connect" msgstr "Mit Facebook verbinden" -#: ../../addon/facebook/facebook.php:275 +#: ../../addon/facebook/facebook.php:341 msgid "Install Facebook connector for this account." msgstr "Facebook Connector für diesen Account installieren." -#: ../../addon/facebook/facebook.php:282 +#: ../../addon/facebook/facebook.php:348 msgid "Remove Facebook connector" msgstr "Facebook Connector entfernen" -#: ../../addon/facebook/facebook.php:288 +#: ../../addon/facebook/facebook.php:354 msgid "Post to Facebook by default" msgstr "Sende standardmäßig nach Facebook" -#: ../../addon/facebook/facebook.php:350 +#: ../../addon/facebook/facebook.php:358 +msgid "Link all your Facebook friends and conversations" +msgstr "Verknüpfe all deine Facebook-Freunde und Unterhaltungen" + +#: ../../addon/facebook/facebook.php:363 +msgid "Warning: Your Facebook privacy settings can not be imported." +msgstr "" +"Warnung: Deine Privatsphären Einstellungen können nicht von Facebook " +"importiert werden." + +#: ../../addon/facebook/facebook.php:364 +msgid "" +"Linked Facebook items may be publicly visible, depending on" +" your privacy settings for this website/account." +msgstr "" +"Eingebundene Beiträge von Facebook könnten öffentlich " +"sichtbar sein, abhängig von deinen Privatsphären-Einstellungen für dieses " +"Nutzerkonto." + +#: ../../addon/facebook/facebook.php:419 msgid "Facebook" msgstr "Facebook" -#: ../../addon/facebook/facebook.php:351 +#: ../../addon/facebook/facebook.php:420 msgid "Facebook Connector Settings" msgstr "Facebook Verbindungseinstellungen" -#: ../../addon/facebook/facebook.php:365 +#: ../../addon/facebook/facebook.php:434 msgid "Post to Facebook" msgstr "Zu Facebook posten" -#: ../../addon/facebook/facebook.php:434 +#: ../../addon/facebook/facebook.php:507 msgid "" "Post to Facebook cancelled because of multi-network access permission " "conflict." @@ -2650,43 +3362,51 @@ msgstr "" "Das Senden nach Facebook wurde zurückgezogen da Konflikte bei den Multi-" "Netzwerks-Rechten vorliegen." -#: ../../addon/facebook/facebook.php:500 +#: ../../addon/facebook/facebook.php:573 msgid "Image: " msgstr "Bild" -#: ../../addon/facebook/facebook.php:576 +#: ../../addon/facebook/facebook.php:649 msgid "View on Friendika" msgstr "Auf Friendika ansehen" -#: ../../addon/widgets/widgets.php:41 -msgid "Widgets key: " -msgstr "Widgets Schlüssel: " +#: ../../addon/facebook/facebook.php:680 +msgid "Facebook post failed. Queued for retry." +msgstr "Senden an Facebook gescheitert. Wir versuchen es später erneut." -#: ../../addon/widgets/widgets.php:45 +#: ../../addon/widgets/widgets.php:53 msgid "Generate new key" msgstr "Neuen Schlüssel erstellen" +#: ../../addon/widgets/widgets.php:56 +msgid "Widgets key" +msgstr "Widgets Schlüssel" + +#: ../../addon/widgets/widgets.php:58 +msgid "Widgets available" +msgstr "Verfügbare Widgets" + #: ../../addon/widgets/widget_friends.php:30 msgid "Connect on Friendika!" msgstr "Auf Friendika Verbinden!" -#: ../../addon/tictac/tictac.php:14 +#: ../../addon/tictac/tictac.php:20 msgid "Three Dimensional Tic-Tac-Toe" msgstr "Dreidimensionales Tic-Tac-Toe" -#: ../../addon/tictac/tictac.php:47 +#: ../../addon/tictac/tictac.php:53 msgid "3D Tic-Tac-Toe" msgstr "3D Tic-Tac-Toe" -#: ../../addon/tictac/tictac.php:52 +#: ../../addon/tictac/tictac.php:58 msgid "New game" msgstr "Neues Spiel" -#: ../../addon/tictac/tictac.php:53 +#: ../../addon/tictac/tictac.php:59 msgid "New game with handicap" msgstr "Neues Handicap Spiel" -#: ../../addon/tictac/tictac.php:54 +#: ../../addon/tictac/tictac.php:60 msgid "" "Three dimensional tic-tac-toe is just like the traditional game except that " "it is played on multiple levels simultaneously. " @@ -2694,7 +3414,7 @@ msgstr "" "Drei dimensionales Tic-Tac-Toe ist genauso wie das herkömmliche Spiel, nur " "das man es auf mehreren Ebenen gleichzeitig spielt." -#: ../../addon/tictac/tictac.php:55 +#: ../../addon/tictac/tictac.php:61 msgid "" "In this case there are three levels. You win by getting three in a row on " "any level, as well as up, down, and diagonally across the different levels." @@ -2703,7 +3423,7 @@ msgstr "" "Reihe auf einer beliebigen Reihe schafft, oder drei übereinander oder " "diagonal auf verschiedenen Ebenen." -#: ../../addon/tictac/tictac.php:57 +#: ../../addon/tictac/tictac.php:63 msgid "" "The handicap game disables the center position on the middle level because " "the player claiming this square often has an unfair advantage." @@ -2711,96 +3431,122 @@ msgstr "" "Beim Handicap-Spiel wird die zentrale Position der mittleren Ebene gesperrt " "da der Spieler der diese Ebene besitzt oft einen unfairen Vorteil genießt." -#: ../../addon/tictac/tictac.php:176 +#: ../../addon/tictac/tictac.php:182 msgid "You go first..." msgstr "Du fängst an..." -#: ../../addon/tictac/tictac.php:181 +#: ../../addon/tictac/tictac.php:187 msgid "I'm going first this time..." msgstr "Diesmal fange ich an..." -#: ../../addon/tictac/tictac.php:187 +#: ../../addon/tictac/tictac.php:193 msgid "You won!" msgstr "Du gewinnst!" -#: ../../addon/tictac/tictac.php:193 ../../addon/tictac/tictac.php:218 +#: ../../addon/tictac/tictac.php:199 ../../addon/tictac/tictac.php:224 msgid "\"Cat\" game!" msgstr "Unentschieden!" -#: ../../addon/tictac/tictac.php:216 +#: ../../addon/tictac/tictac.php:222 msgid "I won!" msgstr "Ich gewinne!" -#: ../../addon/randplace/randplace.php:171 +#: ../../addon/randplace/randplace.php:170 msgid "Randplace Settings" msgstr "Randplace Einstellungen" -#: ../../addon/randplace/randplace.php:173 +#: ../../addon/randplace/randplace.php:172 msgid "Enable Randplace Plugin" msgstr "Randplace Erweiterung aktivieren" -#: ../../addon/java_upload/java_upload.php:33 -msgid "Select files to upload: " -msgstr "Wähle Dateien zum Upload aus: " - -#: ../../addon/java_upload/java_upload.php:35 -msgid "" -"Use the following controls only if the Java uploader [above] fails to " -"launch." -msgstr "" -"Verwende die folgenden Kontrollen nur, wenn der Java Uploader [oben] nicht " -"funktioniert." - -#: ../../addon/js_upload/js_upload.php:39 +#: ../../addon/js_upload/js_upload.php:43 msgid "Upload a file" msgstr "Datei hochladen" -#: ../../addon/js_upload/js_upload.php:40 +#: ../../addon/js_upload/js_upload.php:44 msgid "Drop files here to upload" msgstr "Ziehe die Dateien hier her die du hochladen willst" -#: ../../addon/js_upload/js_upload.php:42 +#: ../../addon/js_upload/js_upload.php:46 msgid "Failed" msgstr "Fehlgeschlagen" -#: ../../addon/js_upload/js_upload.php:288 +#: ../../addon/js_upload/js_upload.php:292 msgid "No files were uploaded." msgstr "Keine Dateien hochgeladen." -#: ../../addon/js_upload/js_upload.php:294 +#: ../../addon/js_upload/js_upload.php:298 msgid "Uploaded file is empty" msgstr "Hochgeladene Datei ist leer" -#: ../../addon/js_upload/js_upload.php:299 +#: ../../addon/js_upload/js_upload.php:303 msgid "Uploaded file is too large" msgstr "Hochgeladene Datei ist zu groß" -#: ../../addon/js_upload/js_upload.php:317 +#: ../../addon/js_upload/js_upload.php:321 msgid "File has an invalid extension, it should be one of " msgstr "" "Die Dateiextension ist nicht erlaubt, sie muss eine der folgenden sein " -#: ../../addon/js_upload/js_upload.php:328 +#: ../../addon/js_upload/js_upload.php:332 msgid "Upload was cancelled, or server error encountered" msgstr "Upload abgebrochen oder Serverfehler aufgetreten" -#: ../../addon/oembed/oembed.php:29 +#: ../../addon/impressum/impressum.php:25 +msgid "Impressum" +msgstr "Impressum" + +#: ../../addon/impressum/impressum.php:38 +#: ../../addon/impressum/impressum.php:40 +#: ../../addon/impressum/impressum.php:70 +msgid "Site Owner" +msgstr "Betreiber der Seite" + +#: ../../addon/impressum/impressum.php:38 +#: ../../addon/impressum/impressum.php:74 +msgid "Email Address" +msgstr "Email Adresse" + +#: ../../addon/impressum/impressum.php:43 +#: ../../addon/impressum/impressum.php:72 +msgid "Postal Address" +msgstr "Postalische Anschrift" + +#: ../../addon/impressum/impressum.php:49 +msgid "" +"The impressum addon needs to be configured!
Please add at least the " +"owner variable to your config file. For other variables please " +"refer to the README file of the addon." +msgstr "" +"Das Impressums Plugin muss noch konfiguriert werden.
Bitte gebe " +"mindestens den Betreiber in der Konfiguration an. Alle weiteren " +"Parameter werden in der README Datei des Addons erleutert." + +#: ../../addon/impressum/impressum.php:71 +msgid "Site Owners Profile" +msgstr "Profil des Seitenbetreibers" + +#: ../../addon/impressum/impressum.php:73 +msgid "Notes" +msgstr "Hinweise" + +#: ../../addon/oembed/oembed.php:30 msgid "OEmbed settings updated" msgstr "OEmbed Einstellungen aktualisiert." -#: ../../addon/oembed/oembed.php:42 -msgid "Use OEmbed for YouTube videos: " -msgstr "OEmbed für YouTube videos verwenden: " +#: ../../addon/oembed/oembed.php:43 +msgid "Use OEmbed for YouTube videos" +msgstr "OEmbed für Youtube Videos verwenden" -#: ../../addon/oembed/oembed.php:76 +#: ../../addon/oembed/oembed.php:71 msgid "URL to embed:" msgstr "URL zum Einbetten:" -#: ../../addon/statusnet/statusnet.php:78 +#: ../../addon/statusnet/statusnet.php:82 msgid "Post to StatusNet" msgstr "Nach StatusNet senden" -#: ../../addon/statusnet/statusnet.php:117 +#: ../../addon/statusnet/statusnet.php:124 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." @@ -2808,24 +3554,24 @@ msgstr "" "Bitte kontaktiere den Administrator der Seite.
Die gegebene API URL ist" " nicht gültig." -#: ../../addon/statusnet/statusnet.php:145 +#: ../../addon/statusnet/statusnet.php:152 msgid "We could not contact the StatusNet API with the Path you entered." msgstr "" "Die StatusNet API konnte mit dem angegebenen Pfad nicht erreicht werden." -#: ../../addon/statusnet/statusnet.php:172 +#: ../../addon/statusnet/statusnet.php:179 msgid "StatusNet settings updated." msgstr "StatusNet Einstellungen aktualisiert." -#: ../../addon/statusnet/statusnet.php:195 +#: ../../addon/statusnet/statusnet.php:202 msgid "StatusNet Posting Settings" msgstr "StatusNet Posting Einstellungen" -#: ../../addon/statusnet/statusnet.php:209 +#: ../../addon/statusnet/statusnet.php:216 msgid "Globally Available StatusNet OAuthKeys" msgstr "Verfügbare OAuth Schlüssel für StatusNet" -#: ../../addon/statusnet/statusnet.php:210 +#: ../../addon/statusnet/statusnet.php:217 msgid "" "There are preconfigured OAuth key pairs for some StatusNet servers " "available. If you are useing one of them, please use these credentials. If " @@ -2835,11 +3581,11 @@ msgstr "" " einen dieser Server benutzen, dann verwende doch bitte diese Schlüssel. " "Falls nicht kannst du weiter unten deine eigenen OAuth Schlüssel eintragen." -#: ../../addon/statusnet/statusnet.php:218 +#: ../../addon/statusnet/statusnet.php:225 msgid "Provide your own OAuth Credentials" msgstr "Eigene OAuth Schlüssel eintragen" -#: ../../addon/statusnet/statusnet.php:219 +#: ../../addon/statusnet/statusnet.php:226 msgid "" "No consumer key pair for StatusNet found. Register your Friendika Account as" " an desktop client on your StatusNet account, copy the consumer key pair " @@ -2854,19 +3600,19 @@ msgstr "" "deiner Friendika Seite fragen, ob es für deine bevorzugte StatusNet Instanz " "eventuell bereits ein OAuth Schlüsselpaar gibt." -#: ../../addon/statusnet/statusnet.php:221 +#: ../../addon/statusnet/statusnet.php:228 msgid "OAuth Consumer Key" msgstr "OAuth Consumer Schlüssel" -#: ../../addon/statusnet/statusnet.php:224 +#: ../../addon/statusnet/statusnet.php:231 msgid "OAuth Consumer Secret" msgstr "OAuth Consumer Geheimnis" -#: ../../addon/statusnet/statusnet.php:227 +#: ../../addon/statusnet/statusnet.php:234 msgid "Base API Path (remember the trailing /)" msgstr "Basis-URL der StatusNet API (vergiss den abschließenden / nicht)" -#: ../../addon/statusnet/statusnet.php:248 +#: ../../addon/statusnet/statusnet.php:255 msgid "" "To connect to your StatusNet account click the button below to get a " "security code from StatusNet which you have to copy into the input box below" @@ -2878,59 +3624,78 @@ msgstr "" "diesen in die Eingabebox weiter unten. Es werden ausschließlich deine " "öffentlichen Nachrichten bei StatusNet veröffentllicht." -#: ../../addon/statusnet/statusnet.php:249 +#: ../../addon/statusnet/statusnet.php:256 msgid "Log in with StatusNet" msgstr "Bei StatusNet anmelden" -#: ../../addon/statusnet/statusnet.php:251 +#: ../../addon/statusnet/statusnet.php:258 msgid "Copy the security code from StatusNet here" msgstr "Kopiere den Sicherheitscode von StatusNet hier her" -#: ../../addon/statusnet/statusnet.php:257 +#: ../../addon/statusnet/statusnet.php:264 msgid "Cancel Connection Process" msgstr "Verbindungsprozess abbrechen" -#: ../../addon/statusnet/statusnet.php:259 +#: ../../addon/statusnet/statusnet.php:266 msgid "Current StatusNet API is" msgstr "Derzeitige StatusNet API URL lautet" -#: ../../addon/statusnet/statusnet.php:260 +#: ../../addon/statusnet/statusnet.php:267 msgid "Cancel StatusNet Connection" msgstr "Verbindung zum StatusNet Server abbrechen" -#: ../../addon/statusnet/statusnet.php:271 ../../addon/twitter/twitter.php:165 +#: ../../addon/statusnet/statusnet.php:278 ../../addon/twitter/twitter.php:180 msgid "Currently connected to: " msgstr "Momentan verbunden mit: " -#: ../../addon/statusnet/statusnet.php:272 +#: ../../addon/statusnet/statusnet.php:279 msgid "" -"If enabled all your public postings will be posted to the " -"associated StatusNet account." +"If enabled all your public postings can be posted to the " +"associated StatusNet account. You can choose to do so by default (here) or " +"for every posting separately in the posting options when writing the entry." msgstr "" -"Wenn aktiv, werden alle deine öffentlichen Beiträge auch " -"auf dem verbundenen StatusNet Account veröffentlicht." +"Wenn aktiviert können all deine öffentlichen Einträge auf " +"dem verbundenen StatusNet Konto veröffentlicht werden. Du kannst dies (hier)" +" als Standartverhalten einstellen oder für jeden Eintrag separat in den " +"Beitragsoptionen beim Schreiben des Eintrags festlegen." -#: ../../addon/statusnet/statusnet.php:274 +#: ../../addon/statusnet/statusnet.php:281 msgid "Allow posting to StatusNet" msgstr "Nach StatusNet senden erlauben" -#: ../../addon/statusnet/statusnet.php:277 +#: ../../addon/statusnet/statusnet.php:284 msgid "Send public postings to StatusNet by default" msgstr "Veröffentliche alle öffentlichen Beiträge auch bei StatusNet" -#: ../../addon/statusnet/statusnet.php:282 ../../addon/twitter/twitter.php:172 +#: ../../addon/statusnet/statusnet.php:289 ../../addon/twitter/twitter.php:191 msgid "Clear OAuth configuration" msgstr "OAuth Konfiguration löschen" -#: ../../addon/twitter/twitter.php:64 +#: ../../addon/piwik/piwik.php:77 +msgid "Piwik Base URL" +msgstr "Piwik Basis URL" + +#: ../../addon/piwik/piwik.php:78 +msgid "Site ID" +msgstr "Seiten ID" + +#: ../../addon/piwik/piwik.php:79 +msgid "Show opt-out cookie link?" +msgstr "Link zum Setzen des Opt-Out Cookies anzeigen?" + +#: ../../addon/twitter/twitter.php:70 msgid "Post to Twitter" msgstr "Nach Twitter senden" -#: ../../addon/twitter/twitter.php:122 +#: ../../addon/twitter/twitter.php:115 +msgid "Twitter settings updated." +msgstr "Twitter Einstellungen aktualisiert." + +#: ../../addon/twitter/twitter.php:137 msgid "Twitter Posting Settings" msgstr "Twitter Posting Einstellungen" -#: ../../addon/twitter/twitter.php:129 +#: ../../addon/twitter/twitter.php:144 msgid "" "No consumer key pair for Twitter found. Please contact your site " "administrator." @@ -2938,7 +3703,7 @@ msgstr "" "Kein Consumer Schlüsselpaar für Twitter gefunden. Bitte wende dich an den " "Administrator der Seite." -#: ../../addon/twitter/twitter.php:148 +#: ../../addon/twitter/twitter.php:163 msgid "" "At this Friendika instance the Twitter plugin was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " @@ -2952,31 +3717,46 @@ msgstr "" "die PIN die du auf Twitter erhälst hier ein. Es werden ausschließlich deine " "öffentlichen Nachrichten auf Twitter veröffentlicht." -#: ../../addon/twitter/twitter.php:149 +#: ../../addon/twitter/twitter.php:164 msgid "Log in with Twitter" msgstr "bei Twitter anmelden" -#: ../../addon/twitter/twitter.php:151 +#: ../../addon/twitter/twitter.php:166 msgid "Copy the PIN from Twitter here" msgstr "Kopiere die Twitter PIN hier her" -#: ../../addon/twitter/twitter.php:166 +#: ../../addon/twitter/twitter.php:181 msgid "" -"If enabled all your public postings will be posted to the " -"associated Twitter account as well." +"If enabled all your public postings can be posted to the " +"associated Twitter account. You can choose to do so by default (here) or for" +" every posting separately in the posting options when writing the entry." msgstr "" -"Wenn dies aktiviert ist, werden alle deine öffentlichen " -"Nachricten auch auf dem verbundenen Twitter Account veröffentlicht." +"Wenn aktiviert können all deine öffentlichen Einträge auf " +"dem verbundenen Twitter Konto veröffentlicht werden. Du kannst dies (hier) " +"als Standartverhalten einstellen oder für jeden Eintrag separat in den " +"Beitragsoptionen beim Schreiben des Eintrags festlegen." -#: ../../addon/twitter/twitter.php:168 -msgid "Send public postings to Twitter" -msgstr "Veröffentliche öffentliche Nachrichten auf Twitter" +#: ../../addon/twitter/twitter.php:183 +msgid "Allow posting to Twitter" +msgstr "Nach Twitter senden erlauben" -#: ../../include/profile_advanced.php:23 ../../boot.php:2356 +#: ../../addon/twitter/twitter.php:186 +msgid "Send public postings to Twitter by default" +msgstr "Veröffentliche alle öffentlichen Beiträge auch bei Twitter" + +#: ../../addon/twitter/twitter.php:278 +msgid "Consumer key" +msgstr "Anwender Schlüssel" + +#: ../../addon/twitter/twitter.php:279 +msgid "Consumer secret" +msgstr "Anwender Geheimnis" + +#: ../../include/profile_advanced.php:23 ../../boot.php:881 msgid "Gender:" msgstr "Geschlecht:" -#: ../../include/profile_advanced.php:36 ../../include/items.php:1086 +#: ../../include/profile_advanced.php:36 ../../include/items.php:1123 msgid "Birthday:" msgstr "Geburtstag:" @@ -2996,7 +3776,7 @@ msgstr "Alter:" msgid " Status:" msgstr " Bezieungsstatus:" -#: ../../include/profile_advanced.php:103 ../../boot.php:2362 +#: ../../include/profile_advanced.php:103 ../../boot.php:887 msgid "Homepage:" msgstr "Homepage:" @@ -3304,6 +4084,129 @@ msgstr "Ist mir nicht wichtig" msgid "Ask me" msgstr "Frag mich" +#: ../../include/event.php:11 +msgid "l F d, Y \\@ g:i A" +msgstr "l F d, Y \\@ g:i A" + +#: ../../include/event.php:17 +msgid "Starts:" +msgstr "Beginnt:" + +#: ../../include/event.php:27 +msgid "Finishes:" +msgstr "Endet:" + +#: ../../include/text.php:222 +msgid "prev" +msgstr "vorige" + +#: ../../include/text.php:224 +msgid "first" +msgstr "erste" + +#: ../../include/text.php:253 +msgid "last" +msgstr "letzte" + +#: ../../include/text.php:256 +msgid "next" +msgstr "nächste" + +#: ../../include/text.php:535 +msgid "No contacts" +msgstr "Keine Kontakte" + +#: ../../include/text.php:543 +#, php-format +msgid "%d Contact" +msgid_plural "%d Contacts" +msgstr[0] "%d Kontakt" +msgstr[1] "%d Kontakte" + +#: ../../include/text.php:700 +msgid "Monday" +msgstr "Montag" + +#: ../../include/text.php:700 +msgid "Tuesday" +msgstr "Dienstag" + +#: ../../include/text.php:700 +msgid "Wednesday" +msgstr "Mittwoch" + +#: ../../include/text.php:700 +msgid "Thursday" +msgstr "Donnerstag" + +#: ../../include/text.php:700 +msgid "Friday" +msgstr "Freitag" + +#: ../../include/text.php:700 +msgid "Saturday" +msgstr "Samstag" + +#: ../../include/text.php:700 +msgid "Sunday" +msgstr "Sonntag" + +#: ../../include/text.php:704 +msgid "January" +msgstr "Januar" + +#: ../../include/text.php:704 +msgid "February" +msgstr "Februar" + +#: ../../include/text.php:704 +msgid "March" +msgstr "März" + +#: ../../include/text.php:704 +msgid "April" +msgstr "April" + +#: ../../include/text.php:704 +msgid "May" +msgstr "Mai" + +#: ../../include/text.php:704 +msgid "June" +msgstr "Juni" + +#: ../../include/text.php:704 +msgid "July" +msgstr "Juli" + +#: ../../include/text.php:704 +msgid "August" +msgstr "August" + +#: ../../include/text.php:704 +msgid "September" +msgstr "September" + +#: ../../include/text.php:704 +msgid "October" +msgstr "Oktober" + +#: ../../include/text.php:704 +msgid "November" +msgstr "November" + +#: ../../include/text.php:704 +msgid "December" +msgstr "Dezember" + +#: ../../include/text.php:767 +msgid "bytes" +msgstr "Byte" + +#: ../../include/text.php:850 +msgid "Select an alternate language" +msgstr "Alternative Sprache auswählen" + #: ../../include/oembed.php:95 msgid "Embedding disabled" msgstr "Einbettungen deaktiviert" @@ -3316,41 +4219,109 @@ msgstr "Neue Gruppe erstellen" msgid "Everybody" msgstr "Alle Kontakte" -#: ../../include/nav.php:41 ../../boot.php:865 +#: ../../include/nav.php:41 ../../boot.php:668 msgid "Logout" msgstr "Abmelden" -#: ../../include/nav.php:44 ../../boot.php:843 ../../boot.php:849 +#: ../../include/nav.php:41 +msgid "End this session" +msgstr "Diese Sitzung beenden" + +#: ../../include/nav.php:44 ../../boot.php:646 ../../boot.php:652 msgid "Login" msgstr "Anmeldung" -#: ../../include/nav.php:55 ../../include/nav.php:92 +#: ../../include/nav.php:44 +msgid "Sign in" +msgstr "Anmelden" + +#: ../../include/nav.php:55 ../../include/nav.php:93 msgid "Home" msgstr "Persönlich" -#: ../../include/nav.php:68 +#: ../../include/nav.php:55 +msgid "Home Page" +msgstr "Home Page" + +#: ../../include/nav.php:59 +msgid "Create an account" +msgstr "Account erstellen" + +#: ../../include/nav.php:64 +msgid "Help and documentation" +msgstr "Hilfe und Dokumentation" + +#: ../../include/nav.php:67 msgid "Apps" msgstr "Apps" -#: ../../include/nav.php:80 +#: ../../include/nav.php:67 +msgid "Addon applications, utilities, games" +msgstr "Addon Anwendungen, Dienstprogramme, Spiele" + +#: ../../include/nav.php:69 +msgid "Search site content" +msgstr "Inhalt der Seite durchsuchen" + +#: ../../include/nav.php:79 +msgid "Conversations on this site" +msgstr "Unterhaltungen auf dieser Seite" + +#: ../../include/nav.php:81 msgid "Directory" msgstr "Verzeichnis" -#: ../../include/nav.php:90 +#: ../../include/nav.php:81 +msgid "People directory" +msgstr "Nutzerverzeichnis" + +#: ../../include/nav.php:91 msgid "Network" msgstr "Netzwerk" -#: ../../include/nav.php:98 +#: ../../include/nav.php:91 +msgid "Conversations from your friends" +msgstr "Unterhaltungen deiner Kontakte" + +#: ../../include/nav.php:93 +msgid "Your posts and conversations" +msgstr "Deine Einträge und Unterhaltungen" + +#: ../../include/nav.php:99 msgid "Notifications" msgstr "Benachrichtigungen" -#: ../../include/nav.php:104 +#: ../../include/nav.php:99 +msgid "Friend requests" +msgstr "Kontaktanfragen" + +#: ../../include/nav.php:102 +msgid "Private mail" +msgstr "Private Email" + +#: ../../include/nav.php:105 msgid "Manage" msgstr "Verwalten" -#: ../../include/nav.php:107 -msgid "Settings" -msgstr "Einstellungen" +#: ../../include/nav.php:105 +msgid "Manage other pages" +msgstr "Andere Seiten verwalten" + +#: ../../include/nav.php:109 +msgid "Manage/edit profiles" +msgstr "Profile verwalten/editieren" + +#: ../../include/nav.php:110 +msgid "Manage/edit friends and contacts" +msgstr "Freunde und Kontakte verwalten/editieren" + +#: ../../include/nav.php:117 +msgid "Admin" +msgstr "Administration" + +#: ../../include/nav.php:117 +msgid "Site setup and configuration" +msgstr "Einstellungen der Seite und Konfiguration" #: ../../include/auth.php:27 msgid "Logged out." @@ -3360,71 +4331,79 @@ msgstr "Abgemeldet." msgid "Miscellaneous" msgstr "Verschiedenes" -#: ../../include/datetime.php:148 -msgid "less than a second ago" -msgstr "vor weniger als einer Sekunde" - -#: ../../include/datetime.php:151 +#: ../../include/datetime.php:105 ../../include/datetime.php:237 msgid "year" msgstr "Jahr" -#: ../../include/datetime.php:151 -msgid "years" -msgstr "Jahre" - -#: ../../include/datetime.php:152 +#: ../../include/datetime.php:110 ../../include/datetime.php:238 msgid "month" msgstr "Monat" -#: ../../include/datetime.php:152 -msgid "months" -msgstr "Monate" - -#: ../../include/datetime.php:153 -msgid "week" -msgstr "Woche" - -#: ../../include/datetime.php:153 -msgid "weeks" -msgstr "Wochen" - -#: ../../include/datetime.php:154 +#: ../../include/datetime.php:115 ../../include/datetime.php:240 msgid "day" msgstr "Tag" -#: ../../include/datetime.php:155 +#: ../../include/datetime.php:228 +msgid "never" +msgstr "nie" + +#: ../../include/datetime.php:234 +msgid "less than a second ago" +msgstr "vor weniger als einer Sekunde" + +#: ../../include/datetime.php:237 +msgid "years" +msgstr "Jahre" + +#: ../../include/datetime.php:238 +msgid "months" +msgstr "Monate" + +#: ../../include/datetime.php:239 +msgid "week" +msgstr "Woche" + +#: ../../include/datetime.php:239 +msgid "weeks" +msgstr "Wochen" + +#: ../../include/datetime.php:240 +msgid "days" +msgstr "Tage" + +#: ../../include/datetime.php:241 msgid "hour" msgstr "Stunde" -#: ../../include/datetime.php:155 +#: ../../include/datetime.php:241 msgid "hours" msgstr "Stunden" -#: ../../include/datetime.php:156 +#: ../../include/datetime.php:242 msgid "minute" msgstr "Minute" -#: ../../include/datetime.php:156 +#: ../../include/datetime.php:242 msgid "minutes" msgstr "Minuten" -#: ../../include/datetime.php:157 +#: ../../include/datetime.php:243 msgid "second" msgstr "Sekunde" -#: ../../include/datetime.php:157 +#: ../../include/datetime.php:243 msgid "seconds" msgstr "Sekunden" -#: ../../include/datetime.php:164 +#: ../../include/datetime.php:250 msgid " ago" msgstr " her" -#: ../../include/poller.php:380 +#: ../../include/poller.php:418 msgid "From: " msgstr "Von: " -#: ../../include/bbcode.php:83 +#: ../../include/bbcode.php:116 msgid "Image/photo" msgstr "Bild/Foto" @@ -3434,328 +4413,230 @@ msgid "Cannot locate DNS info for database server '%s'" msgstr "" "Kann die DNS Informationen für den Datenbanken Server '%s' nicht ermitteln." -#: ../../include/acl_selectors.php:133 -msgid "Visible To:" -msgstr "Sichtbar für:" +#: ../../include/acl_selectors.php:279 +msgid "Visible to everybody" +msgstr "Für jeden sichtbar" -#: ../../include/acl_selectors.php:133 -msgid "everybody" -msgstr "jeder" +#: ../../include/acl_selectors.php:280 +msgid "show" +msgstr "anzeigen" -#: ../../include/acl_selectors.php:137 ../../include/acl_selectors.php:152 -msgid "Groups" -msgstr "Gruppen" +#: ../../include/acl_selectors.php:281 +msgid "don't show" +msgstr "nicht anzeigen" -#: ../../include/acl_selectors.php:148 -msgid "Except For:" -msgstr "Abgesehen von:" - -#: ../../include/notifier.php:414 +#: ../../include/notifier.php:459 msgid "(no subject)" msgstr "(kein Betreff)" -#: ../../include/items.php:1447 +#: ../../include/items.php:1512 msgid "You have a new follower at " msgstr "Du hast einen neuen Kontakt auf " -#: ../../include/conversation.php:191 ../../include/conversation.php:451 -#: ../../include/conversation.php:452 +#: ../../include/conversation.php:23 +msgid "event" +msgstr "Veranstaltung" + +#: ../../include/conversation.php:213 ../../include/conversation.php:485 +#: ../../include/conversation.php:486 #, php-format msgid "View %s's profile" msgstr "Betrachte %s's Profil" -#: ../../include/conversation.php:207 +#: ../../include/conversation.php:222 ../../include/conversation.php:498 +#, php-format +msgid "%s from %s" +msgstr "%s von %s" + +#: ../../include/conversation.php:230 msgid "View in context" msgstr "Im Zusammenhang betrachten" -#: ../../include/conversation.php:278 +#: ../../include/conversation.php:301 msgid "See more posts like this" msgstr "Mehr Beiträge wie diesen anzeigen" -#: ../../include/conversation.php:303 +#: ../../include/conversation.php:326 #, php-format msgid "See all %d comments" msgstr "Alle %d Kommentare anzeigen" -#: ../../include/conversation.php:453 +#: ../../include/conversation.php:424 +msgid "Select" +msgstr "Auswählen" + +#: ../../include/conversation.php:426 +msgid "toggle star status" +msgstr "Stern Status umschalten" + +#: ../../include/conversation.php:487 msgid "to" msgstr "to" -#: ../../include/conversation.php:454 +#: ../../include/conversation.php:488 msgid "Wall-to-Wall" msgstr "Wall-to-Wall" -#: ../../include/conversation.php:455 +#: ../../include/conversation.php:489 msgid "via Wall-To-Wall:" msgstr "via Wall-To-Wall:" -#: ../../include/conversation.php:593 +#: ../../include/conversation.php:531 +msgid "Delete Selected Items" +msgstr "Lösche die markierten Beiträge" + +#: ../../include/conversation.php:605 msgid "View status" msgstr "Status anzeigen" -#: ../../include/conversation.php:594 +#: ../../include/conversation.php:606 msgid "View profile" msgstr "Profil anzeigen" -#: ../../include/conversation.php:595 +#: ../../include/conversation.php:607 msgid "View photos" msgstr "Fotos ansehen" -#: ../../include/conversation.php:596 +#: ../../include/conversation.php:608 msgid "View recent" msgstr "Jüngste anzeigen" -#: ../../include/conversation.php:598 +#: ../../include/conversation.php:610 msgid "Send PM" msgstr "Private Nachricht senden" -#: ../../include/conversation.php:648 +#: ../../include/conversation.php:660 #, php-format msgid "%s likes this." msgstr "%s mag dies." -#: ../../include/conversation.php:648 +#: ../../include/conversation.php:660 #, php-format msgid "%s doesn't like this." msgstr "%s mag dies nicht." -#: ../../include/conversation.php:652 +#: ../../include/conversation.php:664 #, php-format msgid "%2$d people like this." msgstr "%2$d Personen mögen dies." -#: ../../include/conversation.php:654 +#: ../../include/conversation.php:666 #, php-format msgid "%2$d people don't like this." msgstr "%2$d Personen mögen dies nicht." -#: ../../include/conversation.php:660 +#: ../../include/conversation.php:672 msgid "and" msgstr "und" -#: ../../include/conversation.php:663 +#: ../../include/conversation.php:675 #, php-format msgid ", and %d other people" msgstr " und %d andere" -#: ../../include/conversation.php:664 +#: ../../include/conversation.php:676 #, php-format msgid "%s like this." msgstr "%s mag dies." -#: ../../include/conversation.php:664 +#: ../../include/conversation.php:676 #, php-format msgid "%s don't like this." msgstr "%s mag dies nicht." -#: ../../include/conversation.php:683 +#: ../../include/conversation.php:695 msgid "Visible to everybody" msgstr "Für Jedermann sichtbar" -#: ../../include/conversation.php:685 +#: ../../include/conversation.php:697 msgid "Please enter a YouTube link:" msgstr "Bitte gebe den YouTube Link ein:" -#: ../../include/conversation.php:686 +#: ../../include/conversation.php:698 msgid "Please enter a video(.ogg) link/URL:" msgstr "Bitte gebe den Link zum Video(.ogg) an:" -#: ../../include/conversation.php:687 +#: ../../include/conversation.php:699 msgid "Please enter an audio(.ogg) link/URL:" msgstr "Bitte gebe den Link zum Audio(.ogg) an:" -#: ../../include/conversation.php:688 +#: ../../include/conversation.php:700 msgid "Where are you right now?" msgstr "Wo hälst du dich jetzt gerade auf?" -#: ../../include/conversation.php:689 +#: ../../include/conversation.php:701 msgid "Enter a title for this item" msgstr "Gib den Titel für diesen Beitrag ein" -#: ../../include/conversation.php:740 +#: ../../include/conversation.php:752 msgid "Set title" msgstr "Titel setzen" -#: ../../boot.php:385 +#: ../../boot.php:411 msgid "Delete this item?" msgstr "Diesen Beitrag löschen?" -#: ../../boot.php:834 +#: ../../boot.php:637 msgid "Create a New Account" msgstr "Neuen Account erstellen" -#: ../../boot.php:841 +#: ../../boot.php:644 msgid "Nickname or Email address: " msgstr "Spitzname oder Email-Adresse: " -#: ../../boot.php:842 +#: ../../boot.php:645 msgid "Password: " msgstr "Passwort: " -#: ../../boot.php:847 +#: ../../boot.php:650 msgid "Nickname/Email/OpenID: " msgstr "Spitzname/Email/OpenID: " -#: ../../boot.php:848 +#: ../../boot.php:651 msgid "Password (if not OpenID): " msgstr "Passwort (falls nicht OpenID): " -#: ../../boot.php:851 +#: ../../boot.php:654 msgid "Forgot your password?" msgstr "Passwort vergessen?" -#: ../../boot.php:1113 -msgid "prev" -msgstr "vorige" - -#: ../../boot.php:1115 -msgid "first" -msgstr "erste" - -#: ../../boot.php:1144 -msgid "last" -msgstr "letzte" - -#: ../../boot.php:1147 -msgid "next" -msgstr "nächste" - -#: ../../boot.php:2046 -msgid "No contacts" -msgstr "Keine Kontakte" - -#: ../../boot.php:2054 -#, php-format -msgid "%d Contact" -msgid_plural "%d Contacts" -msgstr[0] "%d Kontakt" -msgstr[1] "%d Kontakte" - -#: ../../boot.php:2329 +#: ../../boot.php:854 msgid "Connect" msgstr "Verbinden" -#: ../../boot.php:2344 -msgid "Location:" -msgstr "Ort:" - -#: ../../boot.php:2348 +#: ../../boot.php:873 msgid ", " msgstr ", " -#: ../../boot.php:2360 +#: ../../boot.php:885 msgid "Status:" msgstr "Status:" -#: ../../boot.php:2457 -msgid "Monday" -msgstr "Montag" - -#: ../../boot.php:2457 -msgid "Tuesday" -msgstr "Dienstag" - -#: ../../boot.php:2457 -msgid "Wednesday" -msgstr "Mittwoch" - -#: ../../boot.php:2457 -msgid "Thursday" -msgstr "Donnerstag" - -#: ../../boot.php:2457 -msgid "Friday" -msgstr "Freitag" - -#: ../../boot.php:2457 -msgid "Saturday" -msgstr "Samstag" - -#: ../../boot.php:2457 -msgid "Sunday" -msgstr "Sonntag" - -#: ../../boot.php:2461 -msgid "January" -msgstr "Januar" - -#: ../../boot.php:2461 -msgid "February" -msgstr "Februar" - -#: ../../boot.php:2461 -msgid "March" -msgstr "März" - -#: ../../boot.php:2461 -msgid "April" -msgstr "April" - -#: ../../boot.php:2461 -msgid "May" -msgstr "Mai" - -#: ../../boot.php:2461 -msgid "June" -msgstr "Juni" - -#: ../../boot.php:2461 -msgid "July" -msgstr "Juli" - -#: ../../boot.php:2461 -msgid "August" -msgstr "August" - -#: ../../boot.php:2461 -msgid "September" -msgstr "September" - -#: ../../boot.php:2461 -msgid "October" -msgstr "Oktober" - -#: ../../boot.php:2461 -msgid "November" -msgstr "November" - -#: ../../boot.php:2461 -msgid "December" -msgstr "Dezember" - -#: ../../boot.php:2476 +#: ../../boot.php:976 msgid "g A l F d" msgstr "g A l F d" -#: ../../boot.php:2494 +#: ../../boot.php:994 msgid "Birthday Reminders" msgstr "Geburtstagserinnerungen" -#: ../../boot.php:2495 +#: ../../boot.php:995 msgid "Birthdays this week:" msgstr "Geburtstage diese Woche:" -#: ../../boot.php:2496 +#: ../../boot.php:996 msgid "(Adjusted for local time)" msgstr "(an die lokale Zeit angepasst)" -#: ../../boot.php:2507 +#: ../../boot.php:1007 msgid "[today]" msgstr "[heute]" -#: ../../boot.php:2570 -msgid "bytes" -msgstr "Byte" - -#: ../../boot.php:2744 -msgid "link to source" -msgstr "Link zum original Posting" - -#: ../../index.php:199 +#: ../../index.php:209 msgid "Not Found" msgstr "Nicht gefunden" -#: ../../index.php:200 +#: ../../index.php:210 msgid "Page not found." msgstr "Seite nicht gefunden." diff --git a/view/de/strings.php b/view/de/strings.php index 1fd7c3b468..83dc2f2db6 100644 --- a/view/de/strings.php +++ b/view/de/strings.php @@ -24,6 +24,30 @@ $a->strings["Help:"] = "Hilfe:"; $a->strings["Help"] = "Hilfe"; $a->strings["File exceeds size limit of %d"] = "Die Datei ist größer als das erlaubte Limit von %d"; $a->strings["File upload failed."] = "Upload der Datei fehlgeschlagen."; +$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["Status"] = "Status"; +$a->strings["Profile"] = "Profil"; +$a->strings["Photos"] = "Bilder"; +$a->strings["Events"] = "Veranstaltungen"; +$a->strings["Personal Notes"] = "Persönliche Notizen"; +$a->strings["Create New Event"] = "Neue Veranstaltung erstellen"; +$a->strings["Previous"] = "Vorherige"; +$a->strings["Next"] = "Nächste"; +$a->strings["l, F j"] = "l, F j"; +$a->strings["Edit event"] = "Veranstaltung bearbeiten"; +$a->strings["link to source"] = "Link zum original Posting"; +$a->strings["hour:minute"] = "Stunde:Minute"; +$a->strings["Event details"] = "Veranstaltungsdetails"; +$a->strings["Format is %s %s. Starting date and Description are required."] = "Format ist %s %s. Anfangsdatum und Beschreibung sind notwendig."; +$a->strings["Event Starts:"] = "Veranstaltungsbeginn:"; +$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["Location:"] = "Ort:"; +$a->strings["Share this event"] = "Veranstaltung teilen"; $a->strings["Cancel"] = "Abbrechen"; $a->strings["Tag removed"] = "Tag entfernt"; $a->strings["Remove Item Tag"] = "Gegenstands Tag entfernen"; @@ -32,6 +56,7 @@ $a->strings["Remove"] = "Entfernen"; $a->strings["%s welcomes %s"] = "%s heißt %s herzlich willkommen"; $a->strings["Photo Albums"] = "Fotoalben"; $a->strings["Contact Photos"] = "Kontaktbilder"; +$a->strings["everybody"] = "jeder"; $a->strings["Contact information unavailable"] = "Kontakt Informationen nicht verfügbar"; $a->strings["Profile Photos"] = "Profilbilder"; $a->strings["Album not found."] = "Album nicht gefunden."; @@ -41,10 +66,12 @@ $a->strings["was tagged in a"] = "was tagged in a"; $a->strings["photo"] = "Foto"; $a->strings["by"] = "von"; $a->strings["Image exceeds size limit of "] = "Die Bildgröße übersteigt das Limit von "; +$a->strings["Image file is empty."] = "Bilddatei ist leer."; $a->strings["Unable to process image."] = "Konnte das Bild nicht bearbeiten."; $a->strings["Image upload failed."] = "Hochladen des Bildes gescheitert."; $a->strings["Public access denied."] = "Öffentlicher Zugriff verweigert."; $a->strings["No photos selected"] = "Keine Bilder ausgewählt"; +$a->strings["Access to this item is restricted."] = "Zugriff zu diesem Eintrag wurde eingeschrängt."; $a->strings["Upload Photos"] = "Bilder hochladen"; $a->strings["New album name: "] = "Name des neuen Albums: "; $a->strings["or existing album name: "] = "oder existierender Albumname: "; @@ -55,9 +82,7 @@ $a->strings["Photo not available"] = "Foto nicht verfügbar"; $a->strings["Edit photo"] = "Foto bearbeiten"; $a->strings["Use as profile photo"] = "Als Profilbild verwenden"; $a->strings["Private Message"] = "Private Nachricht"; -$a->strings["<< Prev"] = "<< Vorherige"; $a->strings["View Full Size"] = "Betrachte Originalgröße"; -$a->strings["Next >>"] = "Nächste >>"; $a->strings["Tags: "] = "Tags: "; $a->strings["[Remove any tag]"] = "[Tag entfernen]"; $a->strings["New album name"] = "Name des neuen Albums"; @@ -74,6 +99,10 @@ $a->strings["Delete"] = "Löschen"; $a->strings["Recent Photos"] = "Neuste Fotos"; $a->strings["Upload New Photos"] = "Weitere Fotos hochladen"; $a->strings["View Album"] = "Album betrachten"; +$a->strings["Not available."] = "Nicht verfügbar."; +$a->strings["Community"] = "Gemeinschaft"; +$a->strings["No results."] = "Keine Ergebnisse."; +$a->strings["Shared content is covered by the Creative Commons Attribution 3.0 license."] = "Geteilte Inhalte innerhalb des Friendika Netzwerks sind unter der Creative Commons Attribution 3.0 verfügbar."; $a->strings["Item not found"] = "Beitrag nicht gefunden"; $a->strings["Edit post"] = "Beitrag bearbeiten"; $a->strings["Post to Email"] = "An Email senden"; @@ -92,8 +121,8 @@ $a->strings["Public post"] = "Öffentlicher Beitrag"; $a->strings["Example: bob@example.com, mary@example.com"] = "Z.B.: bob@example.com, mary@example.com"; $a->strings["This introduction has already been accepted."] = "Diese Vorstellung wurde bereits abgeschlossen."; $a->strings["Profile location is not valid or does not contain profile information."] = "Profil Adresse ist ungültig oder stellt einige Profildaten nicht zur Verfügung."; -$a->strings["Warning: profile location has no identifiable owner name."] = "Warning: profile location has no identifiable owner name."; -$a->strings["Warning: profile location has no profile photo."] = "Warning: profile location has no profile photo."; +$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 konnte kein Profilbild bei der angegebenen Profiladresse gefunden werden."; $a->strings["%d required parameter was not found at the given location"] = array( 0 => "", 1 => "", @@ -123,7 +152,7 @@ $a->strings["Administrator"] = "Administrator"; $a->strings["Friend/Connection Request"] = "Freundschafts/Kontakt Anfrage"; $a->strings["Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca"] = "Beispiele: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca"; $a->strings["Please answer the following:"] = "Bitte beantworte folgende Fragen:"; -$a->strings["Does \$name know you?"] = "Kennt \$name dich?"; +$a->strings["Does %s know you?"] = "Kennt %s dich?"; $a->strings["Yes"] = "Ja"; $a->strings["No"] = "Nein"; $a->strings["Add a personal note:"] = "Eine persönliche Notiz anfügen:"; @@ -146,14 +175,15 @@ $a->strings["You may need to import the file \"database.sql\" manually using php $a->strings["Welcome to Friendika."] = "Willkommen bei Friendika."; $a->strings["Friendika Social Network"] = "Friendika Soziales Netzwerk"; $a->strings["Installation"] = "Installation"; -$a->strings["In order to install Friendika we need to know how to contact your database."] = "Um Friendika installieren zu können müssen wir wissen, wie wir die Datenbank erreichen können."; +$a->strings["In order to install Friendika we need to know how to connect to your database."] = "Um Friendika installieren zu können, müssen wir wissen wie wir deine MySQL Datenbank erreichen."; $a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Bitte kontaktiere den Hosting Provider oder den Administrator der Seite falls du Fragen zu diesen Einstellungen haben solltest."; -$a->strings["The database you specify below must already exist. If it does not, please create it before continuing."] = "Die Datenbank die du hier angibst muss bereits existieren. Wenn dies noch nicht der Fall ist lege sie bitte an bevor du fortfährst."; +$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "Die Datenbank die du unten angibst sollte bereits existieren. Ist dies noch nicht der Fall erzeuge sie bitte bevor du mit der Installation vorfährst."; $a->strings["Database Server Name"] = "Datenbank Server"; $a->strings["Database Login Name"] = "Datenbank Nutzer"; $a->strings["Database Login Password"] = "Datenbank Passwort"; $a->strings["Database Name"] = "Datenbank Name"; $a->strings["Please select a default timezone for your website"] = "Bitte wähle die standard Zeitzone deiner Webseite"; +$a->strings["Site administrator email address. Your account email address must match this in order to use the web admin panel."] = "Email Adresse des Seiten Administrators. Die Email Adresse deines Accounts muss mit dieser übereinstimmen, damit du das Administrationspanel nutzen kannst."; $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["This is required. Please adjust the configuration file .htconfig.php accordingly."] = "Diese wird von Friendika benötigt. Bitte passe die Konfigurationsdatei .htconfig.php entsprechend an."; $a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Die Kommandozeilenversion von PHP auf deinem System hat \"register_argc_argv\" nicht aktiviert."; @@ -165,13 +195,16 @@ $a->strings["Error: libCURL PHP module required but not installed."] = "Fehler: $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 nict installiert."; $a->strings["Error: mysqli PHP module required but not installed."] = "Fehler: Das mysqli Modul von PHP 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["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 Installationswizzard muss in der Lage sein eine Datei im Stammverzeichnis deines Webservers anzuliegen 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."; $a->strings["Please check with your site documentation or support people to see if this situation can be corrected."] = "Bitte überprüfe die Einstellungen und frage im Zweifelsfall dein Support Team um diese Situations zu beheben."; $a->strings["If not, you may be required to perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Sollte dies nicht möglich sein musst du die Installation manuell durchführen. Lies dazu bitte in der Datei \"INSTALL.txt\"."; $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 Friendika Installation zu erzeugen."; $a->strings["Errors encountered creating database tables."] = "Fehler aufgetreten wärend der Erzeugung der Datenbank Tabellen."; +$a->strings["[Embedded content - reload page to view]"] = "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]"; $a->strings["Profile Match"] = "Profil Übereinstimmungen"; +$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["No matches"] = "Keine Übereinstimmungen"; $a->strings["Remote privacy information not available."] = "Entfernte Privatsphäreneinstellungen nicht verfügbar."; $a->strings["Visible to:"] = "Sichtbar für:"; @@ -182,21 +215,24 @@ $a->strings["Ignore"] = "Ignorieren"; $a->strings["Pending Friend/Connect Notifications"] = "Anstehende Freundschafts/Kontakt Benachrichtigungen"; $a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen"; $a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen"; +$a->strings["Notification type: "] = "Benachrichtigungs Typ: "; +$a->strings["Friend Suggestion"] = "Kontakt Vorschlag"; +$a->strings["suggested by %s"] = "vorgeschlagen von %s"; +$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["Approve as: "] = "Genehmigen als: "; $a->strings["Friend"] = "Freund"; $a->strings["Fan/Admirer"] = "Fan/Verehrer"; -$a->strings["Notification type: "] = "Benachrichtigungs Typ: "; $a->strings["Friend/Connect Request"] = "Kontakt-/Freundschaftsanfrage"; $a->strings["New Follower"] = "Neuer Bewunderer"; -$a->strings["Approve"] = "Genehmigen"; $a->strings["No notifications."] = "Keine Benachrichtigungen."; -$a->strings["User registrations waiting for confirm"] = "Neuanmeldungen die auf deine Bestätigung warten"; -$a->strings["Deny"] = "Verwehren"; -$a->strings["No registrations."] = "Keine Neuanmeldungen."; $a->strings["Invite Friends"] = "Freunde einladen"; +$a->strings["%d invitation available"] = array( + 0 => "%d Einladung verfügbar", + 1 => "%d Einladungen verfügbar", +); $a->strings["Find People With Shared Interests"] = "Finde Personen die deine Interessen teilen"; $a->strings["Connect/Follow"] = "Verbinden/Folgen"; $a->strings["Example: bob@example.com, http://example.com/barbara"] = "Beispiel: bob@example.com, http://example.com/barbara"; @@ -218,6 +254,7 @@ $a->strings["Private communications are not available for this contact."] = "Pri $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["Contact Editor"] = "Kontakt Editor"; $a->strings["Profile Visibility"] = "Profil Anzeige"; $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 angezeitgt werden soll, wenn %s dein Profil aufruft."; @@ -226,7 +263,7 @@ $a->strings["Online Reputation"] = "Online Ruf"; $a->strings["Occasionally your friends may wish to inquire about this person's online legitimacy."] = "Es könnte sein, dass deine Freunde etwas über den Ruf einer Peron erfahren möchten."; $a->strings["You may help them choose whether or not to interact with this person by providing a reputation to guide them."] = "Du kannst ihnen bei der Entscheidung helfen ob sie mit einer Person interagieren sollten oder nicht indem du Informationen über den Ruf der Person anbietest."; $a->strings["Please take a moment to elaborate on this selection if you feel it could be helpful to others."] = "Bitte nimm dir einen Moment und fülle diesen Punkt aus wenn du denkst das es anderen helfen könnte."; -$a->strings["Visit \$name's profile"] = "Besuche das Profil von \$name"; +$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 contact URL settings"] = "URL Einstellungen des Kontakts reparieren"; @@ -247,8 +284,8 @@ $a->strings["Show Blocked Connections"] = "Zeige geblockte Verbindungen"; $a->strings["Hide Blocked Connections"] = "Verstecke geblockte Verbindungen"; $a->strings["Finding: "] = "Funde: "; $a->strings["Find"] = "Finde"; -$a->strings["Visit \$username's profile"] = "Besuche das Profil von \$username"; $a->strings["Edit contact"] = "Kontakt bearbeiten"; +$a->strings["No valid account found."] = "Kein gültiger Account gefunden."; $a->strings["Password reset request issued. Check your email."] = "Zurücksetzen des Passworts eingeleitet. Bitte überprüfe deine Email."; $a->strings["Password reset requested at %s"] = "Anfrage zum Zurücksetzen des Passworts auf %s erhalten"; $a->strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "Anfrage konnte nicht verifiziert werden. (Eventuell hast du bereits ähnliche Anfrage gestellt.) Zurücksetzen des Passworts gescheitert."; @@ -266,30 +303,39 @@ $a->strings["Passwords do not match. Password unchanged."] = "Die Passwörter st $a->strings["Empty passwords are not allowed. Password unchanged."] = "Leere Passwörter sind nicht erlaubt. Passwort bleibt unverändert."; $a->strings["Password changed."] = "Passwort ändern."; $a->strings["Password update failed. Please try again."] = "Aktualisierung des Passworts gescheitert, bitte versuche es noch einmal."; +$a->strings["Failed to connect with email account using the settings provided."] = "Konnte das Email Konto mit den angegebenen Einstellungen nicht erreichen."; $a->strings[" Please use a shorter name."] = " Bitte verwende einen kürzeren Namen."; $a->strings[" Name too short."] = " Name ist zu kurz."; $a->strings[" Not valid email."] = " Keine gültige EMail."; $a->strings[" Cannot change to that email."] = " Cannot change to that email."; $a->strings["Settings updated."] = "Einstellungen aktualisiert."; -$a->strings["Plugin Settings"] = "Plugin Einstellungen"; -$a->strings["Account Settings"] = "Account Einstellungen"; +$a->strings["Account settings"] = "Account Einstellungen"; +$a->strings["Plugin settings"] = "Plugin Einstellungen"; $a->strings["No Plugin settings configured"] = "Keine Erweiterungen konfiguriert"; +$a->strings["Plugin Settings"] = "Plugin Einstellungen"; $a->strings["Normal Account"] = "Normaler Account"; $a->strings["This account is a normal personal profile"] = "Dieser Account ist ein normales persönliches Profil"; -$a->strings["Soapbox Account"] = "Sandkasten Accunt"; +$a->strings["Soapbox Account"] = "Sandkasten Account"; $a->strings["Automatically approve all connection/friend requests as read-only fans"] = "Freundschaftsanfragen werden automatisch als Nurlese-Fans akzeptiert"; $a->strings["Community/Celebrity Account"] = "Gemeinschafts/Berühmtheiten Account"; $a->strings["Automatically approve all connection/friend requests as read-write fans"] = "Freundschaftsanfragen werden automatisch als Lese-und-Schreib-Fans akzeptiert"; $a->strings["Automatic Friend Account"] = "Automatischer Freundes Account"; $a->strings["Automatically approve all connection/friend requests as friends"] = "Freundschaftsanfragen werden automatisch als Freund akzeptiert"; -$a->strings["OpenID: "] = "OpenID: "; -$a->strings[" (Optional) Allow this OpenID to login to this account."] = " (Optional) Erlaube dieser OpenID sich für diesen Account anzumelden."; -$a->strings["Publish your default profile in site directory?"] = "Dein Standard-Profil im Verzeichnis dieser Seite veröffentliche?"; -$a->strings["Publish your default profile in global social directory?"] = "Dein Standard-Profil im weltweiten Verzeichnis veröffentlichen?"; +$a->strings["OpenID:"] = "OpenID:"; +$a->strings["(Optional) Allow this OpenID to login to this account."] = "(Optional) Erlaube die Anmeldung für diesen Account mit dieser OpenID."; +$a->strings["Publish your default profile in your local site directory?"] = "Veröffentliche dein Standardprofil im Verzeichnis der lokalen Seite?"; +$a->strings["Publish your default profile in the global social directory?"] = "Veröffentliche dein Standardprofil im weltweiten Verzeichnis?"; +$a->strings["Hide your contact/friend list from viewers of your default profile?"] = "Verberge die Liste deiner Kontakte vor Betrachtern des Standardprofils."; +$a->strings["Hide profile details and all your messages from unknown viewers?"] = "Profildetails und all deine Beiträge vor unbekannten Besuchern verbergen?"; $a->strings["Profile is not published."] = "Profil ist nicht veröffentlicht."; $a->strings["or"] = "oder"; $a->strings["Your Identity Address is"] = "Die Adresse deines Profils lautet:"; +$a->strings["Account Settings"] = "Account Einstellungen"; $a->strings["Export Personal Data"] = "Perönliche Daten exportieren"; +$a->strings["Password Settings"] = "Passwort Einstellungen"; +$a->strings["New Password:"] = "Neues Passwort:"; +$a->strings["Confirm:"] = "Bestätigen:"; +$a->strings["Leave password fields blank unless changing"] = "Lass die Passwort-Felder leer außer du willst das Passwort ändern"; $a->strings["Basic Settings"] = "Grundeinstellungen"; $a->strings["Full Name:"] = "Kompletter Name:"; $a->strings["Email Address:"] = "Email Adresse:"; @@ -300,9 +346,11 @@ $a->strings["Display Theme:"] = "Theme:"; $a->strings["Security and Privacy Settings"] = "Sicherheits und Privatsphären Einstellungen"; $a->strings["Maximum Friend Requests/Day:"] = "Maximale Anzahl von Freundschaftsanfragen/Tag:"; $a->strings["(to prevent spam abuse)"] = "(um SPAM zu vermeiden)"; +$a->strings["Default Post Permissions"] = "Grundeinstellung für Veröffentlichungen"; +$a->strings["(click to open/close)"] = "(klicke zum öffnen/schließen)"; $a->strings["Allow friends to post to your profile page:"] = "Erlaube es Freunden Beiträge auf deiner Pinnwand zu posten:"; -$a->strings["Automatically expire (delete) posts older than"] = "Automatisch Beiträge verfallen lassen (löschen) die älter sind als"; -$a->strings["days"] = "Tage"; +$a->strings["Automatically expire posts after days:"] = "Einträge verfallen automatisch nach Tagen:"; +$a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "Wenn leer verfallen Einträge nie automatisch. Verfallene Einträge werden gelöscht."; $a->strings["Notification Settings"] = "Benachrichtigungs Einstellungen"; $a->strings["Send a notification email when:"] = "Benachrichtigungs-Email senden wenn:"; $a->strings["You receive an introduction"] = "Du eine Vorstellung erhälst"; @@ -310,29 +358,27 @@ $a->strings["Your introductions are confirmed"] = "Eine deiner Vorstellungen ang $a->strings["Someone writes on your profile wall"] = "Jemand etwas auf deiner Pinnwand postet"; $a->strings["Someone writes a followup comment"] = "Jemand einen Kommentar verfasst"; $a->strings["You receive a private message"] = "Du eine private Nachricht erhälst"; -$a->strings["Password Settings"] = "Passwort Einstellungen"; -$a->strings["Leave password fields blank unless changing"] = "Lass die Passwort-Felder leer außer du willst das Passwort ändern"; -$a->strings["New Password:"] = "Neues Passwort:"; -$a->strings["Confirm:"] = "Bestätigen:"; -$a->strings["Advanced Page Settings"] = "Erweiterte Seiten Einstellungen"; -$a->strings["Default Post Permissions"] = "Grundeinstellung für Veröffentlichungen"; -$a->strings["(click to open/close)"] = "(klicke zum öffnen/schließen)"; $a->strings["Email/Mailbox Setup"] = "Email/Postfach Einstellungen"; $a->strings["If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."] = "Wenn du mit Email Kontakten über diesen Service kommunizieren möchtest (optional) gib bitte die Einstellungen für dein Postfach an."; +$a->strings["Last successful email check:"] = "Letzter erfolgreicher Email Check"; +$a->strings["Email access is disabled on this site."] = "Zugriff auf Emails für diese Seite deaktiviert."; $a->strings["IMAP server name:"] = "IMAP Server Name:"; $a->strings["IMAP port:"] = "IMAP Port:"; -$a->strings["Security (TLS or SSL):"] = "Sicherheit (TLS oder SSL)"; +$a->strings["Security:"] = "Sicherheit:"; +$a->strings["None"] = "Keine"; $a->strings["Email login name:"] = "Email Login Name:"; $a->strings["Email password:"] = "Email Passwort:"; -$a->strings["Reply-to address (Optional):"] = "Reply-to Adresse (Optional)"; +$a->strings["Reply-to address:"] = "Reply-to Adresse:"; $a->strings["Send public posts to all email contacts:"] = "Sende öffentliche Einträge an alle Email Kontakte:"; -$a->strings["Email access is disabled on this site."] = "Zugriff auf Emails für diese Seite deaktiviert."; +$a->strings["Advanced Page Settings"] = "Erweiterte Seiten Einstellungen"; $a->strings["Welcome back %s"] = "Willkommen zurück %s"; $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.)"] = "(Wähle zwischen verschiedenen Identitäten oder Gemeinschafts/Gruppen Seiten die deine Accountdetails teilen.)"; $a->strings["Select an identity to manage: "] = "Wähle eine Identität zum Verwalten: "; -$a->strings["Normal View"] = "Normale Ansicht"; -$a->strings["New Item View"] = "Neue Einträge"; +$a->strings["View Conversations"] = "Unterhaltungen anzeigen"; +$a->strings["View New Items"] = "Neue Einträge anzeigen"; +$a->strings["View Any Items"] = "Alle Einträge anzeigen"; +$a->strings["View Starred Items"] = "Gesternte Einträge anzeigen"; $a->strings["Warning: This group contains %s member from an insecure network."] = array( 0 => "", 1 => "", @@ -344,9 +390,21 @@ $a->strings["Group: "] = "Gruppe: "; $a->strings["Contact: "] = "Kontakt "; $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["Shared content is covered by the Creative Commons Attribution 3.0 license."] = "Geteilte Inhalte innerhalb des Friendika Netzwerks sind unter der Creative Commons Attribution 3.0 verfügbar."; -$a->strings["Private Notes"] = "Privater Beitrag"; $a->strings["Save"] = "Speichern"; +$a->strings["Welcome to Friendika"] = "Willkommen bei Friendika"; +$a->strings["New Member Checklist"] = "Checkliste für neue Mitglieder"; +$a->strings["We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page."] = "Wir möchten dir einige Tipps und Links anbieten um deine Erfahrung mit Friendika so angenehm wie möglich zu machen. Klicke einfach einen Aspekt an um weitere Informationen zu erhalten."; +$a->strings["On your Settings page - change your initial password. Also make a note of your Identity Address. This will be useful in making friends."] = "Ändere dein anfängliches Passwort auf der Einstellungen Seite. Bei dieser Gelegenheit solltest du dir die Adresse deines Profils merken, diese wird benötigt um mit Anderen in Kontakt zu treten."; +$a->strings["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."] = "Überprüfe die restlichen Einstellungen, insbesondere die Einstellungen zur Privatsphäre. Wenn du dein Profil nicht veröffentlichst ist das wie wenn niemand deine Telefonnummer kennt. Im Allgemeinen solltest du es veröffentlichen - außer all deine Freunde und potentiellen Freunde wissen wie man dich findet."; +$a->strings["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."] = "Lade ein Profilbild hoch falls du es noch nicht getan hast. Studien haben gezeigt, das es zehnmal wahrscheinlicher ist neue Freunde zu finden, wenn du ein Bild von dir selbst verwendest als wenn du dies nicht tust."; +$a->strings["Authorise the Facebook Connector if you currently have a Facebook account and we will (optionally) import all your Facebook friends and conversations."] = "Richte die Verbindung zu Facebook ein, wenn du im Augenblick ein Facebook Konto hast und (optional) deine Facebook Freunde und Unterhaltungen importieren willst."; +$a->strings["Enter your email access information on your Settings page if you wish to import and interact with friends or mailing lists from your email INBOX"] = "Gib deine Email Daten in deinen Einstellungen an, wenn du mit deinen Email-Kontakten / Email-Listen interagieren möchtest."; +$a->strings["Edit your default profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors."] = "Editiere dein Standard Profil nach deinen Vorlieben. Überprüfe die Einstellungen zum Verbergen deiner Freundesliste vor unbekannten Betrachtern des Profils."; +$a->strings["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."] = "Trage ein paar öffentliche Stichwörter in dein Standardprofil ein die deine Interessen beschreiben. Eventuell sind wir in der Lage Leute zu finden, die deine Interessen teilen und können dir dann Kontakte vorschlagen."; +$a->strings["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 Connect dialog."] = "Deine Kontakte Seite ist die zentrale Stelle um deine Freundschaften zu koordinieren und neuen Kontakte, auch von anderen Netzwerken, zu folgen. Normalerweise gibst du einfach die URL der Seite in den Verbinden Dialog ein."; +$a->strings["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."] = "Über die Verzeichnisseite kannst du andere Personen auf diesem Server oder anderen verteilten Seiten finden. Halte nach einem Verbinden oder Folgen Link auf deren Profilseiten Ausschau und gib deine eigene Profiladresse an falls du danach gefragt wirst."; +$a->strings["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."] = "Sobald du einige Freunde gefunden hast, organisiere sie in Gruppen zur privaten Kommunikation im Seitenmenü der Kontakte-Seite. Du kannst dann mit jeder dieser Gruppen von der Netzwerkseite aus privat interagieren."; +$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["Item not available."] = "Beitrag nicht verfügbar."; $a->strings["Item was not found."] = "Beitrag konnte nicht gefunden werden."; $a->strings["Group created."] = "Gruppe erstellt."; @@ -364,11 +422,12 @@ $a->strings["Members"] = "Mitglieder"; $a->strings["All Contacts"] = "Alle Kontakte"; $a->strings["Invalid profile identifier."] = "Ungültiger Profil-Bezeichner"; $a->strings["Profile Visibility Editor"] = "Editor für die Profil-Sichtbarkeit"; -$a->strings["Profile"] = "Profil"; $a->strings["Visible To"] = "Sichtbar für"; $a->strings["All Contacts (with secure profile access)"] = "Alle Kontakte (mit gesichertem Profil zugriff)"; $a->strings["View Contacts"] = "Kontakte anzeigen"; $a->strings["No contacts."] = "Keine Kontakte."; +$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."; @@ -392,6 +451,8 @@ $a->strings["You may (optionally) fill in this form via OpenID by supplying your $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): "; $a->strings["Include your profile in member directory?"] = "Soll dein Profil im Nutzerverzeichnis angezeigt werden?"; +$a->strings["Membership on this site is by invitation only."] = "Mitgliedschaft auf dieser Seite ist nur nach vorheriger Einladung möglich."; +$a->strings["Your invitation ID: "] = "ID deiner Einladung: "; $a->strings["Registration"] = "Registration"; $a->strings["Your Full Name (e.g. Joe Smith): "] = "Vollständiger Name (z.B. Joe Smith): "; $a->strings["Your Email Address: "] = "Deine EMail Adresse: "; @@ -409,10 +470,9 @@ $a->strings["Bug reports and issues: please visit"] = "Probleme oder Fehler gefu $a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - dot com"] = "Vorschläge, Lobeshymnen, Spenden usw. - bitte eine Email an \"Info\" at Friendika - dot com (englisch bevorzugt)"; $a->strings["Installed plugins/addons/apps"] = "Installierte Plugins/Erweiterungen/Apps"; $a->strings["No installed plugins/addons/apps"] = "Keine Plugins/Erweiterungen/Apps installiert"; -$a->strings["Please login."] = "Bitte melde dich an."; -$a->strings["Registration revoked for %s"] = "Registration für %s wurde zurück gezogen"; $a->strings["Account approved."] = "Account freigegeben."; -$a->strings["[Embedded content - reload page to view]"] = "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]"; +$a->strings["Registration revoked for %s"] = "Registration für %s wurde zurück gezogen"; +$a->strings["Please login."] = "Bitte melde dich an."; $a->strings["Unable to locate original post."] = "Konnte das original Posting nicht finden."; $a->strings["Empty post discarded."] = "Leere Nachricht wurde verworfen."; $a->strings["Wall Photos"] = "Pinnwand Bilder"; @@ -425,7 +485,6 @@ $a->strings["This message was sent to you by %s, a member of the Friendika socia $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."] = "Please contact the sender by replying to this post if you do not wish to receive these messages."; $a->strings["%s posted an update."] = "%s hat ein Update gepostet."; -$a->strings["Item not found."] = "Beitrag nicht gefunden."; $a->strings["Image uploaded but image cropping failed."] = "Bilder hochgeladen aber das Zuschneiden ist fehlgeschlagen."; $a->strings["Image size reduction [%s] failed."] = "Verkleinern der Bildgröße von [%s] ist gescheitert."; $a->strings["Unable to process image"] = "Bild konnte nicht verarbeitet werden"; @@ -464,26 +523,113 @@ $a->strings["D, d M Y - g:i A"] = "D, d. M Y - g:i A"; $a->strings["Message not available."] = "Nachricht nicht verfügbar."; $a->strings["Delete message"] = "Nachricht löschen"; $a->strings["Send Reply"] = "Antwort senden"; +$a->strings["Site"] = "Seite"; +$a->strings["Users"] = "Nutzer"; +$a->strings["Plugins"] = "Plugins"; +$a->strings["Update"] = "Aktualisierungen"; +$a->strings["Logs"] = "Protokolle"; +$a->strings["User registrations waiting for confirmation"] = "Nutzeranmeldungen die auf Bestätigung warten"; +$a->strings["Item not found."] = "Beitrag nicht gefunden."; +$a->strings["Administration"] = "Administration"; +$a->strings["Summary"] = "Zusammenfassung"; +$a->strings["Registered users"] = "Registrierte Nutzer"; +$a->strings["Pending registrations"] = "Anstehende Anmeldungen"; +$a->strings["Version"] = "Version"; +$a->strings["Active plugins"] = "Aktive Plugins"; +$a->strings["Site settings updated."] = "Seiteneinstellungen aktualisiert."; +$a->strings["Closed"] = "Geschlossen"; +$a->strings["Requires approval"] = "Bedarf Zustimmung"; +$a->strings["Open"] = "Offen"; +$a->strings["File upload"] = "Datei hochladen"; +$a->strings["Policies"] = "Regeln"; +$a->strings["Advanced"] = "Erweitert"; +$a->strings["Site name"] = "Seiten Name"; +$a->strings["Banner/Logo"] = "Banner/Logo"; +$a->strings["System language"] = "System Sprache"; +$a->strings["System theme"] = "Systemweites Thema"; +$a->strings["Maximum image size"] = "Maximale Größe von Bildern"; +$a->strings["Register policy"] = "Registrationsmethode"; +$a->strings["Register text"] = "Registrationstext"; +$a->strings["Allowed friend domains"] = "Erlaubte Domains für Kontakte"; +$a->strings["Allowed email domains"] = "Erlaubte Domains für Emails"; +$a->strings["Block public"] = "Öffentlichen Zugriff blockieren"; +$a->strings["Force publish"] = "Erzwinge Veröffentlichung"; +$a->strings["Global directory update URL"] = "URL für Updates beim weltweiten Verzeichnis"; +$a->strings["Block multiple registrations"] = "Unterbinde mehrfach Registration"; +$a->strings["OpenID support"] = "OpenID Unterstützung"; +$a->strings["Gravatar support"] = "Gravatar Unterstützung"; +$a->strings["Fullname check"] = "Name auf Vollständigkeit überprüfen"; +$a->strings["UTF-8 Regular expressions"] = "UTF-8 Reguläre Ausdrücke"; +$a->strings["Show Community Page"] = "Gemeinschaftsseite anzeigen"; +$a->strings["Enable OStatus support"] = "OStatus Unterstützung aktivieren"; +$a->strings["Only allow Friendika contacts"] = "Erlaube ausschlließlich Friendika Kontakte"; +$a->strings["Verify SSL"] = "SSL Überprüfen"; +$a->strings["Proxy user"] = "Proxy Nutzer"; +$a->strings["Proxy URL"] = "Proxy URL"; +$a->strings["Network timeout"] = "Netzwerk Wartezeit"; +$a->strings["%s user blocked"] = array( + 0 => "%s Nutzer gesperrt", + 1 => "%s Nutzer gesperrt/entsperrt", +); +$a->strings["%s user deleted"] = array( + 0 => "%s Nutzer gelöscht", + 1 => "%s Nutzer gelöscht", +); +$a->strings["User '%s' deleted"] = "Nutzer '%s' gelöscht"; +$a->strings["User '%s' unblocked"] = "Nutzer '%s' entsperrt"; +$a->strings["User '%s' blocked"] = "Nutzer '%s' gesperrt"; +$a->strings["select all"] = "Alle auswählen"; +$a->strings["User registrations waiting for confirm"] = "Neuanmeldungen die auf deine Bestätigung warten"; +$a->strings["Request date"] = "Anfrage Datum"; +$a->strings["Email"] = "Email"; +$a->strings["No registrations."] = "Keine Neuanmeldungen."; +$a->strings["Deny"] = "Verwehren"; +$a->strings["Block"] = "Sperren"; +$a->strings["Unblock"] = "Entsperren"; +$a->strings["Register date"] = "Anmeldedatum"; +$a->strings["Last login"] = "Letzte Anmeldung"; +$a->strings["Last item"] = "Letzter Beitrag"; +$a->strings["Account"] = "Nutzerkonto"; +$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "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 dir sicher?"; +$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Der Nutzer {0} wird gelöscht!\\n\\nAlles was dieser Nutzer auf dieser Seite veröffentlicht hat wird permanent gelöscht!\\n\\nBist du dir sicher?"; +$a->strings["Plugin %s disabled."] = "Plugin %s deaktiviert."; +$a->strings["Plugin %s enabled."] = "Plugin %s aktiviert."; +$a->strings["Disable"] = "Ausschalten"; +$a->strings["Enable"] = "Einschalten"; +$a->strings["Toggle"] = "Umschalten"; +$a->strings["Settings"] = "Einstellungen"; +$a->strings["Log settings updated."] = "Protokolleinstellungen aktualisiert."; +$a->strings["Clear"] = "löschen"; +$a->strings["Debugging"] = "Protokoll führen"; +$a->strings["Log file"] = "Protokolldatei"; +$a->strings["Must be writable by web server. Relative to your Friendika index.php."] = "Muss schreibbar durch den Webserver sein. Angabe relativ zu Friendikas indes.php."; +$a->strings["Log level"] = "Protokollevel"; +$a->strings["Close"] = "Schließen"; +$a->strings["FTP Host"] = "FTP Host"; +$a->strings["FTP Path"] = "FTP Pfad"; +$a->strings["FTP User"] = "FTP Nutzername"; +$a->strings["FTP Password"] = "FTP Passwort"; $a->strings["No profile"] = "Kein Profil"; -$a->strings["Access to this profile has been restricted."] = "Der Zugriff zu diesem Profil wurde eingeschrängt."; -$a->strings["Status"] = "Status"; -$a->strings["Photos"] = "Bilder"; +$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["Login failed."] = "Annmeldung fehlgeschlagen."; $a->strings["Welcome "] = "Willkommen "; $a->strings["Please upload a profile photo."] = "Bitte lade ein Profilbild hoch."; $a->strings["Welcome back "] = "Willkommen zurück "; -$a->strings["The profile address specified does not provide adequate information."] = "Die angegebene Profiladresse liefert unzureichende Informationen."; +$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["Communication options with this network have been restricted."] = "Kommunikations-Optionen mit diesem Netzwerk wurden eingeschränkt."; $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["following"] = "folgen"; $a->strings["Item has been removed."] = "Eintrag wurde entfernt."; $a->strings["New mail received at "] = "New mail received at "; $a->strings["Applications"] = "Anwendungen"; +$a->strings["No installed applications."] = "Keine Applikationen installiert."; $a->strings["Search"] = "Suche"; -$a->strings["No results."] = "Keine Ergebnisse."; $a->strings["Profile not found."] = "Profil nicht gefunden."; $a->strings["Profile Name is required."] = "Profilname ist erforderlich."; $a->strings["Profile updated."] = "Profil aktualisiert."; @@ -492,7 +638,6 @@ $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["Hide your contact/friend list from viewers of this profile?"] = "Liste der Kontakte/Freunde vor Betrachtern dieses Profils verbergen?"; -$a->strings["Hide profile details and all your messages from unknown viewers?"] = "Profildetails und all deine Beiträge vor unbekannten Besuchern verbergen?"; $a->strings["Edit Profile Details"] = "Profil bearbeiten"; $a->strings["View this profile"] = "Dieses Profil anzeigen"; $a->strings["Create a new profile using these settings"] = "Neues Profil anlegen und diese Einstellungen verwenden"; @@ -502,7 +647,7 @@ $a->strings["Profile Name:"] = "Profilname:"; $a->strings["Your Full Name:"] = "Dein kompletter Name:"; $a->strings["Title/Description:"] = "Titel/Beschreibung:"; $a->strings["Your Gender:"] = "Dein Geschlecht:"; -$a->strings["Birthday (y/m/d):"] = "Geburtstag (y/m/d):"; +$a->strings["Birthday (%s):"] = "Geburtstag (%s):"; $a->strings["Street Address:"] = "Adresse:"; $a->strings["Locality/City:"] = "Wohnort/Stadt:"; $a->strings["Postal/Zip Code:"] = "Postleitzahl:"; @@ -536,7 +681,7 @@ $a->strings["Profiles"] = "Profile"; $a->strings["Change profile photo"] = "Profilbild ändern"; $a->strings["Create New Profile"] = "Neues Profil anlegen"; $a->strings["Profile Image"] = "Profilbild"; -$a->strings["Visible to everybody"] = "Für jeden sichtbar"; +$a->strings["visible to everybody"] = "sichtbar für jeden"; $a->strings["Edit visibility"] = "Sichtbarkeit bearbeiten"; $a->strings["Global Directory"] = "Weltweites Verzeichnis"; $a->strings["Normal site view"] = "Normale Seitenansicht"; @@ -551,10 +696,12 @@ $a->strings["%d message sent."] = array( 0 => "%d Nachricht gesendet.", 1 => "%d Nachrichten gesendet.", ); +$a->strings["You have no more invitations available"] = "Du hast keine weiteren Einladungen"; $a->strings["Send invitations"] = "Einladungen senden"; $a->strings["Enter email addresses, one per line:"] = "Email Adressen eingeben, eine pro Zeile:"; $a->strings["Please join my social network on %s"] = "Bitte trete meinem Sozialen Netzwerk auf %s bei"; $a->strings["To accept this invitation, please visit:"] = "Um diese Einladung anzunehmen beuche bitte:"; +$a->strings["You will need to supply this invitation code: \$invite_code"] = "Du benötigst den folgenden Einladungs Code: \$invite_code"; $a->strings["Once you have registered, please connect with me via my profile page at:"] = "Sobald du registriert bist kontaktiere mich bitte auf meiner Profilseite:"; $a->strings["Response from remote site was not understood."] = "Antwort der entfernten Gegenstelle unverständlich."; $a->strings["Unexpected response from remote site: "] = "Unerwartete Antwort der Gegenstelle: "; @@ -579,14 +726,19 @@ $a->strings["Facebook Connect"] = "Mit Facebook verbinden"; $a->strings["Install Facebook connector for this account."] = "Facebook Connector für diesen Account installieren."; $a->strings["Remove Facebook connector"] = "Facebook Connector entfernen"; $a->strings["Post to Facebook by default"] = "Sende standardmäßig nach Facebook"; +$a->strings["Link all your Facebook friends and conversations"] = "Verknüpfe all deine Facebook-Freunde und Unterhaltungen"; +$a->strings["Warning: Your Facebook privacy settings can not be imported."] = "Warnung: Deine Privatsphären Einstellungen können nicht von Facebook importiert werden."; +$a->strings["Linked Facebook items may be publicly visible, depending on your privacy settings for this website/account."] = "Eingebundene Beiträge von Facebook könnten öffentlich sichtbar sein, abhängig von deinen Privatsphären-Einstellungen für dieses Nutzerkonto."; $a->strings["Facebook"] = "Facebook"; $a->strings["Facebook Connector Settings"] = "Facebook Verbindungseinstellungen"; $a->strings["Post to Facebook"] = "Zu Facebook posten"; $a->strings["Post to Facebook cancelled because of multi-network access permission conflict."] = "Das Senden nach Facebook wurde zurückgezogen da Konflikte bei den Multi-Netzwerks-Rechten vorliegen."; $a->strings["Image: "] = "Bild"; $a->strings["View on Friendika"] = "Auf Friendika ansehen"; -$a->strings["Widgets key: "] = "Widgets Schlüssel: "; +$a->strings["Facebook post failed. Queued for retry."] = "Senden an Facebook gescheitert. Wir versuchen es später erneut."; $a->strings["Generate new key"] = "Neuen Schlüssel erstellen"; +$a->strings["Widgets key"] = "Widgets Schlüssel"; +$a->strings["Widgets available"] = "Verfügbare Widgets"; $a->strings["Connect on Friendika!"] = "Auf Friendika Verbinden!"; $a->strings["Three Dimensional Tic-Tac-Toe"] = "Dreidimensionales Tic-Tac-Toe"; $a->strings["3D Tic-Tac-Toe"] = "3D Tic-Tac-Toe"; @@ -602,8 +754,6 @@ $a->strings["\"Cat\" game!"] = "Unentschieden!"; $a->strings["I won!"] = "Ich gewinne!"; $a->strings["Randplace Settings"] = "Randplace Einstellungen"; $a->strings["Enable Randplace Plugin"] = "Randplace Erweiterung aktivieren"; -$a->strings["Select files to upload: "] = "Wähle Dateien zum Upload aus: "; -$a->strings["Use the following controls only if the Java uploader [above] fails to launch."] = "Verwende die folgenden Kontrollen nur, wenn der Java Uploader [oben] nicht funktioniert."; $a->strings["Upload a file"] = "Datei hochladen"; $a->strings["Drop files here to upload"] = "Ziehe die Dateien hier her die du hochladen willst"; $a->strings["Failed"] = "Fehlgeschlagen"; @@ -612,8 +762,15 @@ $a->strings["Uploaded file is empty"] = "Hochgeladene Datei ist leer"; $a->strings["Uploaded file is too large"] = "Hochgeladene Datei ist zu groß"; $a->strings["File has an invalid extension, it should be one of "] = "Die Dateiextension ist nicht erlaubt, sie muss eine der folgenden sein "; $a->strings["Upload was cancelled, or server error encountered"] = "Upload abgebrochen oder Serverfehler aufgetreten"; +$a->strings["Impressum"] = "Impressum"; +$a->strings["Site Owner"] = "Betreiber der Seite"; +$a->strings["Email Address"] = "Email Adresse"; +$a->strings["Postal Address"] = "Postalische Anschrift"; +$a->strings["The impressum addon needs to be configured!
Please add at least the owner variable to your config file. For other variables please refer to the README file of the addon."] = "Das Impressums Plugin muss noch konfiguriert werden.
Bitte gebe mindestens den Betreiber in der Konfiguration an. Alle weiteren Parameter werden in der README Datei des Addons erleutert."; +$a->strings["Site Owners Profile"] = "Profil des Seitenbetreibers"; +$a->strings["Notes"] = "Hinweise"; $a->strings["OEmbed settings updated"] = "OEmbed Einstellungen aktualisiert."; -$a->strings["Use OEmbed for YouTube videos: "] = "OEmbed für YouTube videos verwenden: "; +$a->strings["Use OEmbed for YouTube videos"] = "OEmbed für Youtube Videos verwenden"; $a->strings["URL to embed:"] = "URL zum Einbetten:"; $a->strings["Post to StatusNet"] = "Nach StatusNet senden"; $a->strings["Please contact your site administrator.
The provided API URL is not valid."] = "Bitte kontaktiere den Administrator der Seite.
Die gegebene API URL ist nicht gültig."; @@ -634,18 +791,25 @@ $a->strings["Cancel Connection Process"] = "Verbindungsprozess abbrechen"; $a->strings["Current StatusNet API is"] = "Derzeitige StatusNet API URL lautet"; $a->strings["Cancel StatusNet Connection"] = "Verbindung zum StatusNet Server abbrechen"; $a->strings["Currently connected to: "] = "Momentan verbunden mit: "; -$a->strings["If enabled all your public postings will be posted to the associated StatusNet account."] = "Wenn aktiv, werden alle deine öffentlichen Beiträge auch auf dem verbundenen StatusNet Account veröffentlicht."; +$a->strings["If enabled all your public postings can be posted to the associated StatusNet account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Wenn aktiviert können all deine öffentlichen Einträge auf dem verbundenen StatusNet Konto veröffentlicht werden. Du kannst dies (hier) als Standartverhalten einstellen oder für jeden Eintrag separat in den Beitragsoptionen beim Schreiben des Eintrags festlegen."; $a->strings["Allow posting to StatusNet"] = "Nach StatusNet senden erlauben"; $a->strings["Send public postings to StatusNet by default"] = "Veröffentliche alle öffentlichen Beiträge auch bei StatusNet"; $a->strings["Clear OAuth configuration"] = "OAuth Konfiguration löschen"; +$a->strings["Piwik Base URL"] = "Piwik Basis URL"; +$a->strings["Site ID"] = "Seiten ID"; +$a->strings["Show opt-out cookie link?"] = "Link zum Setzen des Opt-Out Cookies anzeigen?"; $a->strings["Post to Twitter"] = "Nach Twitter senden"; +$a->strings["Twitter settings updated."] = "Twitter Einstellungen aktualisiert."; $a->strings["Twitter Posting Settings"] = "Twitter Posting Einstellungen"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Kein Consumer Schlüsselpaar für Twitter gefunden. Bitte wende dich an den Administrator der Seite."; $a->strings["At this Friendika instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Auf dieser Friendika Instanz wurde das Twitter Plugin aktiviert dein Account ist allerdings noch nicht mit einem Twitter Account verbunden. Um deinen Account mit Twitter zu verbinden, klick auf den Button weiter unten und gib die PIN die du auf Twitter erhälst hier ein. Es werden ausschließlich deine öffentlichen Nachrichten auf Twitter veröffentlicht."; $a->strings["Log in with Twitter"] = "bei Twitter anmelden"; $a->strings["Copy the PIN from Twitter here"] = "Kopiere die Twitter PIN hier her"; -$a->strings["If enabled all your public postings will be posted to the associated Twitter account as well."] = "Wenn dies aktiviert ist, werden alle deine öffentlichen Nachricten auch auf dem verbundenen Twitter Account veröffentlicht."; -$a->strings["Send public postings to Twitter"] = "Veröffentliche öffentliche Nachrichten auf Twitter"; +$a->strings["If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Wenn aktiviert können all deine öffentlichen Einträge auf dem verbundenen Twitter Konto veröffentlicht werden. Du kannst dies (hier) als Standartverhalten einstellen oder für jeden Eintrag separat in den Beitragsoptionen beim Schreiben des Eintrags festlegen."; +$a->strings["Allow posting to Twitter"] = "Nach Twitter senden erlauben"; +$a->strings["Send public postings to Twitter by default"] = "Veröffentliche alle öffentlichen Beiträge auch bei Twitter"; +$a->strings["Consumer key"] = "Anwender Schlüssel"; +$a->strings["Consumer secret"] = "Anwender Geheimnis"; $a->strings["Gender:"] = "Geschlecht:"; $a->strings["Birthday:"] = "Geburtstag:"; $a->strings["j F, Y"] = "j F, Y"; @@ -729,28 +893,80 @@ $a->strings["Uncertain"] = "Unsicher"; $a->strings["Complicated"] = "Kompliziert"; $a->strings["Don't care"] = "Ist mir nicht wichtig"; $a->strings["Ask me"] = "Frag mich"; +$a->strings["l F d, Y \\@ g:i A"] = "l F d, Y \\@ g:i A"; +$a->strings["Starts:"] = "Beginnt:"; +$a->strings["Finishes:"] = "Endet:"; +$a->strings["prev"] = "vorige"; +$a->strings["first"] = "erste"; +$a->strings["last"] = "letzte"; +$a->strings["next"] = "nächste"; +$a->strings["No contacts"] = "Keine Kontakte"; +$a->strings["%d Contact"] = array( + 0 => "%d Kontakt", + 1 => "%d Kontakte", +); +$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["Sunday"] = "Sonntag"; +$a->strings["January"] = "Januar"; +$a->strings["February"] = "Februar"; +$a->strings["March"] = "März"; +$a->strings["April"] = "April"; +$a->strings["May"] = "Mai"; +$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["bytes"] = "Byte"; +$a->strings["Select an alternate language"] = "Alternative Sprache auswählen"; $a->strings["Embedding disabled"] = "Einbettungen deaktiviert"; $a->strings["Create a new group"] = "Neue Gruppe erstellen"; $a->strings["Everybody"] = "Alle Kontakte"; $a->strings["Logout"] = "Abmelden"; +$a->strings["End this session"] = "Diese Sitzung beenden"; $a->strings["Login"] = "Anmeldung"; +$a->strings["Sign in"] = "Anmelden"; $a->strings["Home"] = "Persönlich"; +$a->strings["Home Page"] = "Home Page"; +$a->strings["Create an account"] = "Account erstellen"; +$a->strings["Help and documentation"] = "Hilfe und Dokumentation"; $a->strings["Apps"] = "Apps"; +$a->strings["Addon applications, utilities, games"] = "Addon Anwendungen, Dienstprogramme, Spiele"; +$a->strings["Search site content"] = "Inhalt der Seite durchsuchen"; +$a->strings["Conversations on this site"] = "Unterhaltungen auf dieser Seite"; $a->strings["Directory"] = "Verzeichnis"; +$a->strings["People directory"] = "Nutzerverzeichnis"; $a->strings["Network"] = "Netzwerk"; +$a->strings["Conversations from your friends"] = "Unterhaltungen deiner Kontakte"; +$a->strings["Your posts and conversations"] = "Deine Einträge und Unterhaltungen"; $a->strings["Notifications"] = "Benachrichtigungen"; +$a->strings["Friend requests"] = "Kontaktanfragen"; +$a->strings["Private mail"] = "Private Email"; $a->strings["Manage"] = "Verwalten"; -$a->strings["Settings"] = "Einstellungen"; +$a->strings["Manage other pages"] = "Andere Seiten verwalten"; +$a->strings["Manage/edit profiles"] = "Profile verwalten/editieren"; +$a->strings["Manage/edit friends and contacts"] = "Freunde und Kontakte verwalten/editieren"; +$a->strings["Admin"] = "Administration"; +$a->strings["Site setup and configuration"] = "Einstellungen der Seite und Konfiguration"; $a->strings["Logged out."] = "Abgemeldet."; $a->strings["Miscellaneous"] = "Verschiedenes"; -$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["day"] = "Tag"; +$a->strings["never"] = "nie"; +$a->strings["less than a second ago"] = "vor weniger als einer Sekunde"; +$a->strings["years"] = "Jahre"; $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"; @@ -761,19 +977,23 @@ $a->strings[" ago"] = " her"; $a->strings["From: "] = "Von: "; $a->strings["Image/photo"] = "Bild/Foto"; $a->strings["Cannot locate DNS info for database server '%s'"] = "Kann die DNS Informationen für den Datenbanken Server '%s' nicht ermitteln."; -$a->strings["Visible To:"] = "Sichtbar für:"; -$a->strings["everybody"] = "jeder"; -$a->strings["Groups"] = "Gruppen"; -$a->strings["Except For:"] = "Abgesehen von:"; +$a->strings["Visible to everybody"] = "Für jeden sichtbar"; +$a->strings["show"] = "anzeigen"; +$a->strings["don't show"] = "nicht anzeigen"; $a->strings["(no subject)"] = "(kein Betreff)"; $a->strings["You have a new follower at "] = "Du hast einen neuen Kontakt auf "; +$a->strings["event"] = "Veranstaltung"; $a->strings["View %s's profile"] = "Betrachte %s's Profil"; +$a->strings["%s from %s"] = "%s von %s"; $a->strings["View in context"] = "Im Zusammenhang betrachten"; $a->strings["See more posts like this"] = "Mehr Beiträge wie diesen anzeigen"; $a->strings["See all %d comments"] = "Alle %d Kommentare anzeigen"; +$a->strings["Select"] = "Auswählen"; +$a->strings["toggle star status"] = "Stern Status umschalten"; $a->strings["to"] = "to"; $a->strings["Wall-to-Wall"] = "Wall-to-Wall"; $a->strings["via Wall-To-Wall:"] = "via Wall-To-Wall:"; +$a->strings["Delete Selected Items"] = "Lösche die markierten Beiträge"; $a->strings["View status"] = "Status anzeigen"; $a->strings["View profile"] = "Profil anzeigen"; $a->strings["View photos"] = "Fotos ansehen"; @@ -801,44 +1021,13 @@ $a->strings["Password: "] = "Passwort: "; $a->strings["Nickname/Email/OpenID: "] = "Spitzname/Email/OpenID: "; $a->strings["Password (if not OpenID): "] = "Passwort (falls nicht OpenID): "; $a->strings["Forgot your password?"] = "Passwort vergessen?"; -$a->strings["prev"] = "vorige"; -$a->strings["first"] = "erste"; -$a->strings["last"] = "letzte"; -$a->strings["next"] = "nächste"; -$a->strings["No contacts"] = "Keine Kontakte"; -$a->strings["%d Contact"] = array( - 0 => "%d Kontakt", - 1 => "%d Kontakte", -); $a->strings["Connect"] = "Verbinden"; -$a->strings["Location:"] = "Ort:"; $a->strings[", "] = ", "; $a->strings["Status:"] = "Status:"; -$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["Sunday"] = "Sonntag"; -$a->strings["January"] = "Januar"; -$a->strings["February"] = "Februar"; -$a->strings["March"] = "März"; -$a->strings["April"] = "April"; -$a->strings["May"] = "Mai"; -$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["g A l F d"] = "g A l F d"; $a->strings["Birthday Reminders"] = "Geburtstagserinnerungen"; $a->strings["Birthdays this week:"] = "Geburtstage diese Woche:"; $a->strings["(Adjusted for local time)"] = "(an die lokale Zeit angepasst)"; $a->strings["[today]"] = "[heute]"; -$a->strings["bytes"] = "Byte"; -$a->strings["link to source"] = "Link zum original Posting"; $a->strings["Not Found"] = "Nicht gefunden"; $a->strings["Page not found."] = "Seite nicht gefunden."; diff --git a/view/diaspora_comment.tpl b/view/diaspora_comment.tpl new file mode 100644 index 0000000000..6ef4ab664d --- /dev/null +++ b/view/diaspora_comment.tpl @@ -0,0 +1,11 @@ + + + + $guid + $parent_guid + $authorsig + $body + $handle + + + \ No newline at end of file diff --git a/view/diaspora_comment_relay.tpl b/view/diaspora_comment_relay.tpl new file mode 100644 index 0000000000..e82de1171e --- /dev/null +++ b/view/diaspora_comment_relay.tpl @@ -0,0 +1,12 @@ + + + + $guid + $parent_guid + $parentsig + $authorsig + $body + $handle + + + \ No newline at end of file diff --git a/view/diaspora_like.tpl b/view/diaspora_like.tpl new file mode 100644 index 0000000000..76356eb298 --- /dev/null +++ b/view/diaspora_like.tpl @@ -0,0 +1,12 @@ + + + + $type + $guid + $parent_guid + $authorsig + $positive + $handle + + + diff --git a/view/diaspora_like_relay.tpl b/view/diaspora_like_relay.tpl new file mode 100644 index 0000000000..6feba96ad3 --- /dev/null +++ b/view/diaspora_like_relay.tpl @@ -0,0 +1,13 @@ + + + + $guid + $type + $parent_guid + $parentsig + $authrosig + $positive + $handle + + + \ No newline at end of file diff --git a/view/diaspora_post.tpl b/view/diaspora_post.tpl new file mode 100644 index 0000000000..1ba3ebb1fc --- /dev/null +++ b/view/diaspora_post.tpl @@ -0,0 +1,11 @@ + + + + $body + $guid + $handle + $public + $created + + + \ No newline at end of file diff --git a/view/diaspora_retract.tpl b/view/diaspora_retract.tpl new file mode 100644 index 0000000000..6d5b6e22be --- /dev/null +++ b/view/diaspora_retract.tpl @@ -0,0 +1,9 @@ + + + + $guid + $type + $handle + + + \ No newline at end of file diff --git a/view/diaspora_share.tpl b/view/diaspora_share.tpl new file mode 100644 index 0000000000..c16341b1e1 --- /dev/null +++ b/view/diaspora_share.tpl @@ -0,0 +1,8 @@ + + + + $sender + $recipient + + + \ No newline at end of file diff --git a/view/jot-header.tpl b/view/jot-header.tpl index 795267ee30..6195c5bbc6 100644 --- a/view/jot-header.tpl +++ b/view/jot-header.tpl @@ -11,6 +11,7 @@ function initEditor(cb){ theme : "advanced", mode : "specific_textareas", editor_selector: /(profile-jot-text|prvmail-text)/, + auto_focus: "profile-jot-text", plugins : "bbcode,paste,autoresize", theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code", theme_advanced_buttons2 : "", diff --git a/view/magicsig.tpl b/view/magicsig.tpl index 622e7c5a27..75f9bc475b 100644 --- a/view/magicsig.tpl +++ b/view/magicsig.tpl @@ -5,5 +5,5 @@ $data $encoding $algorithm -$signature +$signature diff --git a/view/profile_edit.tpl b/view/profile_edit.tpl index 053e19594b..8dab726492 100644 --- a/view/profile_edit.tpl +++ b/view/profile_edit.tpl @@ -1,3 +1,5 @@ +$default +

$banner