diff --git a/README b/README index 45b72e9acc..c5adda1776 100644 --- a/README +++ b/README @@ -137,7 +137,9 @@ run correctly. - PHP 5.2.3+. It may be possible to run this software on earlier versions of PHP, but many of the functions used are only available - in PHP 5.2 or above. + in PHP 5.2 or above. 5.2.6 or later is needed for XMPP background + daemons on 64-bit platforms. PHP 5.3.x should work but is known + to cause some failures for OpenID. - MySQL 5.x. The StatusNet database is stored, by default, in a MySQL server. It has been primarily tested on 5.x servers, although it may be possible to install on earlier (or later!) versions. The server diff --git a/actions/apimediaupload.php b/actions/apimediaupload.php new file mode 100644 index 0000000000..ec316edc8d --- /dev/null +++ b/actions/apimediaupload.php @@ -0,0 +1,141 @@ +. + * + * @category API + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +require_once INSTALLDIR . '/lib/apiauth.php'; +require_once INSTALLDIR . '/lib/mediafile.php'; + +/** + * Upload an image via the API. Returns a shortened URL for the image + * to the user. + * + * @category API + * @package StatusNet + * @author Zach Copley + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +class ApiMediaUploadAction extends ApiAuthAction +{ + /** + * Handle the request + * + * Grab the file from the 'media' param, then store, and shorten + * + * @todo Upload throttle! + * + * @param array $args $_REQUEST data (unused) + * + * @return void + */ + + function handle($args) + { + parent::handle($args); + + if ($_SERVER['REQUEST_METHOD'] != 'POST') { + $this->clientError( + _('This method requires a POST.'), + 400, $this->format + ); + return; + } + + // Workaround for PHP returning empty $_POST and $_FILES when POST + // length > post_max_size in php.ini + + if (empty($_FILES) + && empty($_POST) + && ($_SERVER['CONTENT_LENGTH'] > 0) + ) { + $msg = _('The server was unable to handle that much POST ' . + 'data (%s bytes) due to its current configuration.'); + + $this->clientError(sprintf($msg, $_SERVER['CONTENT_LENGTH'])); + return; + } + + $upload = null; + + try { + $upload = MediaFile::fromUpload('media', $this->auth_user); + } catch (ClientException $ce) { + $this->clientError($ce->getMessage()); + return; + } + + if (isset($upload)) { + $this->showResponse($upload); + } else { + $this->clientError('Upload failed.'); + return; + } + } + + /** + * Show a Twitpic-like response with the ID of the media file + * and a (hopefully) shortened URL for it. + * + * @param File $upload the uploaded file + * + * @return void + */ + function showResponse($upload) + { + $this->initDocument(); + $this->elementStart('rsp', array('stat' => 'ok')); + $this->element('mediaid', null, $upload->fileRecord->id); + $this->element('mediaurl', null, $upload->shortUrl()); + $this->elementEnd('rsp'); + $this->endDocument(); + } + + /** + * Overrided clientError to show a more Twitpic-like error + * + * @param String $msg an error message + * + */ + function clientError($msg) + { + $this->initDocument(); + $this->elementStart('rsp', array('stat' => 'fail')); + + // @todo add in error code + $errAttr = array('msg' => $msg); + + $this->element('err', $errAttr, null); + $this->elementEnd('rsp'); + $this->endDocument(); + } + +} diff --git a/actions/apistatusesupdate.php b/actions/apistatusesupdate.php index bf367e1e18..1956c85863 100644 --- a/actions/apistatusesupdate.php +++ b/actions/apistatusesupdate.php @@ -244,11 +244,17 @@ class ApiStatusesUpdateAction extends ApiAuthAction $options = array_merge($options, $locOptions); } - $this->notice = - Notice::saveNew($this->auth_user->id, - $content, - $this->source, - $options); + try { + $this->notice = Notice::saveNew( + $this->auth_user->id, + $content, + $this->source, + $options + ); + } catch (Exception $e) { + $this->clientError($e->getMessage()); + return; + } if (isset($upload)) { $upload->attachToNotice($this->notice); diff --git a/actions/apistatusnetconfig.php b/actions/apistatusnetconfig.php index bff8313b5c..66b23c02d5 100644 --- a/actions/apistatusnetconfig.php +++ b/actions/apistatusnetconfig.php @@ -97,8 +97,6 @@ class ApiStatusnetConfigAction extends ApiAction // XXX: check that all sections and settings are legal XML elements - common_debug(var_export($this->keys, true)); - foreach ($this->keys as $section => $settings) { $this->elementStart($section); foreach ($settings as $setting) { @@ -110,6 +108,14 @@ class ApiStatusnetConfigAction extends ApiAction } else if ($value === true) { $value = 'true'; } + + // return theme logo if there's no site specific one + if (empty($value)) { + if ($section == 'site' && $setting == 'logo') { + $value = Theme::path('logo.png'); + } + } + $this->element($setting, null, $value); } $this->elementEnd($section); diff --git a/actions/apitimelinefavorites.php b/actions/apitimelinefavorites.php index c89d02247a..8cb2e808de 100644 --- a/actions/apitimelinefavorites.php +++ b/actions/apitimelinefavorites.php @@ -23,7 +23,8 @@ * @package StatusNet * @author Craig Andrews * @author Evan Prodromou - * @author Zach Copley * @copyright 2009 StatusNet, Inc. + * @author Zach Copley + * @copyright 2009-2010 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ @@ -123,22 +124,26 @@ class ApiTimelineFavoritesAction extends ApiBareAuthAction ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE); + $link = common_local_url( + 'showfavorites', + array('nickname' => $this->user->nickname) + ); + + $self = $this->getSelfUri(); + switch($this->format) { case 'xml': $this->showXmlTimeline($this->notices); break; case 'rss': - $link = common_local_url( - 'showfavorites', - array('nickname' => $this->user->nickname) - ); $this->showRssTimeline( $this->notices, $title, $link, $subtitle, null, - $logo + $logo, + $self ); break; case 'atom': @@ -153,23 +158,8 @@ class ApiTimelineFavoritesAction extends ApiBareAuthAction $atom->setLogo($logo); $atom->setUpdated('now'); - $atom->addLink( - common_local_url( - 'showfavorites', - array('nickname' => $this->user->nickname) - ) - ); - - $id = $this->arg('id'); - $aargs = array('format' => 'atom'); - if (!empty($id)) { - $aargs['id'] = $id; - } - - $atom->addLink( - $this->getSelfUri('ApiTimelineFavorites', $aargs), - array('rel' => 'self', 'type' => 'application/atom+xml') - ); + $atom->addLink($link); + $atom->setSelfLink($self); $atom->addEntryFromNotices($this->notices); diff --git a/actions/apitimelinefriends.php b/actions/apitimelinefriends.php index 9ef3ace607..ac350ab1b7 100644 --- a/actions/apitimelinefriends.php +++ b/actions/apitimelinefriends.php @@ -117,9 +117,17 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction $subtitle = sprintf( _('Updates from %1$s and friends on %2$s!'), - $this->user->nickname, $sitename + $this->user->nickname, + $sitename ); + $link = common_local_url( + 'all', + array('nickname' => $this->user->nickname) + ); + + $self = $this->getSelfUri(); + $logo = (!empty($avatar)) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE); @@ -130,19 +138,14 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction break; case 'rss': - $link = common_local_url( - 'all', array( - 'nickname' => $this->user->nickname - ) - ); - $this->showRssTimeline( $this->notices, $title, $link, $subtitle, null, - $logo + $logo, + $self ); break; case 'atom': @@ -156,24 +159,8 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction $atom->setSubtitle($subtitle); $atom->setLogo($logo); $atom->setUpdated('now'); - - $atom->addLink( - common_local_url( - 'all', - array('nickname' => $this->user->nickname) - ) - ); - - $id = $this->arg('id'); - $aargs = array('format' => 'atom'); - if (!empty($id)) { - $aargs['id'] = $id; - } - - $atom->addLink( - $this->getSelfUri('ApiTimelineFriends', $aargs), - array('rel' => 'self', 'type' => 'application/atom+xml') - ); + $atom->addLink($link); + $atom->setSelfLink($self); $atom->addEntryFromNotices($this->notices); diff --git a/actions/apitimelinegroup.php b/actions/apitimelinegroup.php index 8f971392bf..da816c40a9 100644 --- a/actions/apitimelinegroup.php +++ b/actions/apitimelinegroup.php @@ -107,6 +107,8 @@ class ApiTimelineGroupAction extends ApiPrivateAuthAction // We'll pull common formatting out of this for other formats $atom = new AtomGroupNoticeFeed($this->group); + $self = $this->getSelfUri(); + switch($this->format) { case 'xml': $this->showXmlTimeline($this->notices); @@ -118,7 +120,8 @@ class ApiTimelineGroupAction extends ApiPrivateAuthAction $this->group->homeUrl(), $atom->subtitle, null, - $atom->logo + $atom->logo, + $self ); break; case 'atom': @@ -126,24 +129,12 @@ class ApiTimelineGroupAction extends ApiPrivateAuthAction header('Content-Type: application/atom+xml; charset=utf-8'); try { - $atom->addAuthorRaw($this->group->asAtomAuthor()); $atom->setActivitySubject($this->group->asActivitySubject()); - - $id = $this->arg('id'); - $aargs = array('format' => 'atom'); - if (!empty($id)) { - $aargs['id'] = $id; - } - $self = $this->getSelfUri('ApiTimelineGroup', $aargs); - $atom->setId($self); $atom->setSelfLink($self); - $atom->addEntryFromNotices($this->notices); - $this->raw($atom->getString()); - } catch (Atom10FeedException $e) { $this->serverError( 'Could not generate feed for group - ' . $e->getMessage() diff --git a/actions/apitimelinehome.php b/actions/apitimelinehome.php index abd3877860..1618c9923c 100644 --- a/actions/apitimelinehome.php +++ b/actions/apitimelinehome.php @@ -72,7 +72,7 @@ class ApiTimelineHomeAction extends ApiBareAuthAction function prepare($args) { parent::prepare($args); - common_debug("api home_timeline"); + $this->user = $this->getTargetUser($this->arg('id')); if (empty($this->user)) { @@ -121,8 +121,15 @@ class ApiTimelineHomeAction extends ApiBareAuthAction $this->user->nickname, $sitename ); - $logo = (!empty($avatar)) - ? $avatar->displayUrl() + $link = common_local_url( + 'all', + array('nickname' => $this->user->nickname) + ); + + $self = $this->getSelfUri(); + + $logo = (!empty($avatar)) + ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE); switch($this->format) { @@ -130,17 +137,14 @@ class ApiTimelineHomeAction extends ApiBareAuthAction $this->showXmlTimeline($this->notices); break; case 'rss': - $link = common_local_url( - 'all', - array('nickname' => $this->user->nickname) - ); $this->showRssTimeline( $this->notices, $title, $link, $subtitle, null, - $logo + $logo, + $self ); break; case 'atom': @@ -155,23 +159,8 @@ class ApiTimelineHomeAction extends ApiBareAuthAction $atom->setLogo($logo); $atom->setUpdated('now'); - $atom->addLink( - common_local_url( - 'all', - array('nickname' => $this->user->nickname) - ) - ); - - $id = $this->arg('id'); - $aargs = array('format' => 'atom'); - if (!empty($id)) { - $aargs['id'] = $id; - } - - $atom->addLink( - $this->getSelfUri('ApiTimelineHome', $aargs), - array('rel' => 'self', 'type' => 'application/atom+xml') - ); + $atom->addLink($link); + $atom->setSelfLink($self); $atom->addEntryFromNotices($this->notices); $this->raw($atom->getString()); diff --git a/actions/apitimelinementions.php b/actions/apitimelinementions.php index 31627ab7bf..c3aec7c5af 100644 --- a/actions/apitimelinementions.php +++ b/actions/apitimelinementions.php @@ -123,6 +123,9 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction 'replies', array('nickname' => $this->user->nickname) ); + + $self = $this->getSelfUri(); + $subtitle = sprintf( _('%1$s updates that reply to updates from %2$s / %3$s.'), $sitename, $this->user->nickname, $profile->getBestName() @@ -134,10 +137,20 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction $this->showXmlTimeline($this->notices); break; case 'rss': - $this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $logo); + $this->showRssTimeline( + $this->notices, + $title, + $link, + $subtitle, + null, + $logo, + $self + ); break; case 'atom': + header('Content-Type: application/atom+xml; charset=utf-8'); + $atom = new AtomNoticeFeed(); $atom->setId($id); @@ -146,23 +159,8 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction $atom->setLogo($logo); $atom->setUpdated('now'); - $atom->addLink( - common_local_url( - 'replies', - array('nickname' => $this->user->nickname) - ) - ); - - $id = $this->arg('id'); - $aargs = array('format' => 'atom'); - if (!empty($id)) { - $aargs['id'] = $id; - } - - $atom->addLink( - $this->getSelfUri('ApiTimelineMentions', $aargs), - array('rel' => 'self', 'type' => 'application/atom+xml') - ); + $atom->addLink($link); + $atom->setSelfLink($self); $atom->addEntryFromNotices($this->notices); $this->raw($atom->getString()); diff --git a/actions/apitimelinepublic.php b/actions/apitimelinepublic.php index 3e4dad690e..9034614253 100644 --- a/actions/apitimelinepublic.php +++ b/actions/apitimelinepublic.php @@ -107,7 +107,8 @@ class ApiTimelinePublicAction extends ApiPrivateAuthAction $title = sprintf(_("%s public timeline"), $sitename); $taguribase = TagURI::base(); $id = "tag:$taguribase:PublicTimeline"; - $link = common_root_url(); + $link = common_local_url('public'); + $self = $this->getSelfUri(); $subtitle = sprintf(_("%s updates from everyone!"), $sitename); switch($this->format) { @@ -115,10 +116,20 @@ class ApiTimelinePublicAction extends ApiPrivateAuthAction $this->showXmlTimeline($this->notices); break; case 'rss': - $this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $sitelogo); + $this->showRssTimeline( + $this->notices, + $title, + $link, + $subtitle, + null, + $sitelogo, + $self + ); break; case 'atom': + header('Content-Type: application/atom+xml; charset=utf-8'); + $atom = new AtomNoticeFeed(); $atom->setId($id); @@ -126,16 +137,8 @@ class ApiTimelinePublicAction extends ApiPrivateAuthAction $atom->setSubtitle($subtitle); $atom->setLogo($sitelogo); $atom->setUpdated('now'); - $atom->addLink(common_local_url('public')); - - $atom->addLink( - $this->getSelfUri( - 'ApiTimelinePublic', array('format' => 'atom') - ), - array('rel' => 'self', 'type' => 'application/atom+xml') - ); - + $atom->setSelfLink($self); $atom->addEntryFromNotices($this->notices); $this->raw($atom->getString()); diff --git a/actions/apitimelinetag.php b/actions/apitimelinetag.php index a29061fccf..fed1437ea8 100644 --- a/actions/apitimelinetag.php +++ b/actions/apitimelinetag.php @@ -25,7 +25,7 @@ * @author Evan Prodromou * @author Jeffery To * @author Zach Copley - * @copyright 2009 StatusNet, Inc. + * @copyright 2009-2010 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ @@ -67,6 +67,8 @@ class ApiTimelineTagAction extends ApiPrivateAuthAction { parent::prepare($args); + common_debug("apitimelinetag prepare()"); + $this->tag = $this->arg('tag'); $this->notices = $this->getNotices(); @@ -108,22 +110,28 @@ class ApiTimelineTagAction extends ApiPrivateAuthAction $taguribase = TagURI::base(); $id = "tag:$taguribase:TagTimeline:".$tag; + $link = common_local_url( + 'tag', + array('tag' => $this->tag) + ); + + $self = $this->getSelfUri(); + + common_debug("self link is: $self"); + switch($this->format) { case 'xml': $this->showXmlTimeline($this->notices); break; case 'rss': - $link = common_local_url( - 'tag', - array('tag' => $this->tag) - ); $this->showRssTimeline( $this->notices, $title, $link, $subtitle, null, - $sitelogo + $sitelogo, + $self ); break; case 'atom': @@ -138,22 +146,8 @@ class ApiTimelineTagAction extends ApiPrivateAuthAction $atom->setLogo($logo); $atom->setUpdated('now'); - $atom->addLink( - common_local_url( - 'tag', - array('tag' => $this->tag) - ) - ); - - $aargs = array('format' => 'atom'); - if (!empty($this->tag)) { - $aargs['tag'] = $this->tag; - } - - $atom->addLink( - $this->getSelfUri('ApiTimelineTag', $aargs), - array('rel' => 'self', 'type' => 'application/atom+xml') - ); + $atom->addLink($link); + $atom->setSelfLink($self); $atom->addEntryFromNotices($this->notices); $this->raw($atom->getString()); diff --git a/actions/apitimelineuser.php b/actions/apitimelineuser.php index 2d0047c046..11431a82ca 100644 --- a/actions/apitimelineuser.php +++ b/actions/apitimelineuser.php @@ -116,13 +116,13 @@ class ApiTimelineUserAction extends ApiBareAuthAction // We'll use the shared params from the Atom stub // for other feed types. $atom = new AtomUserNoticeFeed($this->user); - $title = $atom->title; - $link = common_local_url( + + $link = common_local_url( 'showstream', array('nickname' => $this->user->nickname) ); - $subtitle = $atom->subtitle; - $logo = $atom->logo; + + $self = $this->getSelfUri(); // FriendFeed's SUP protocol // Also added RSS and Atom feeds @@ -136,25 +136,22 @@ class ApiTimelineUserAction extends ApiBareAuthAction break; case 'rss': $this->showRssTimeline( - $this->notices, $title, $link, - $subtitle, $suplink, $logo + $this->notices, + $atom->title, + $link, + $atom->subtitle, + $suplink, + $atom->logo, + $self ); break; case 'atom': header('Content-Type: application/atom+xml; charset=utf-8'); - $id = $this->arg('id'); - $aargs = array('format' => 'atom'); - if (!empty($id)) { - $aargs['id'] = $id; - } - $self = $this->getSelfUri('ApiTimelineUser', $aargs); $atom->setId($self); $atom->setSelfLink($self); - $atom->addEntryFromNotices($this->notices); - $this->raw($atom->getString()); break; diff --git a/actions/avatarsettings.php b/actions/avatarsettings.php index 6a7398746a..d4ea11cb7e 100644 --- a/actions/avatarsettings.php +++ b/actions/avatarsettings.php @@ -301,6 +301,10 @@ class AvatarsettingsAction extends AccountSettingsAction $this->showForm($e->getMessage()); return; } + if ($imagefile === null) { + $this->showForm(_('No file uploaded.')); + return; + } $cur = common_current_user(); diff --git a/actions/deleteuser.php b/actions/deleteuser.php index c4f84fad2d..4e6b273953 100644 --- a/actions/deleteuser.php +++ b/actions/deleteuser.php @@ -162,7 +162,15 @@ class DeleteuserAction extends ProfileFormAction function handlePost() { if (Event::handle('StartDeleteUser', array($this, $this->user))) { - $this->user->delete(); + // Mark the account as deleted and shove low-level deletion tasks + // to background queues. Removing a lot of posts can take a while... + if (!$this->user->hasRole(Profile_role::DELETED)) { + $this->user->grantRole(Profile_role::DELETED); + } + + $qm = QueueManager::get(); + $qm->enqueue($this->user, 'deluser'); + Event::handle('EndDeleteUser', array($this, $this->user)); } } diff --git a/actions/doc.php b/actions/doc.php index 459f5f0968..f876fb8beb 100644 --- a/actions/doc.php +++ b/actions/doc.php @@ -13,7 +13,7 @@ * @link http://status.net/ * * StatusNet - the distributed open-source microblogging tool - * Copyright (C) 2008, 2009, StatusNet, Inc. + * Copyright (C) 2008-2010, StatusNet, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -168,14 +168,28 @@ class DocAction extends Action function getFilename() { - if (file_exists(INSTALLDIR.'/local/doc-src/'.$this->title)) { - $localDef = INSTALLDIR.'/local/doc-src/'.$this->title; - } + $localDef = null; + $local = null; - $local = glob(INSTALLDIR.'/local/doc-src/'.$this->title.'.*'); - if ($local === false) { - // Some systems return false, others array(), if dir didn't exist. - $local = array(); + $site = StatusNet::currentSite(); + + if (!empty($site) && file_exists(INSTALLDIR.'/local/doc-src/'.$site.'/'.$this->title)) { + $localDef = INSTALLDIR.'/local/doc-src/'.$site.'/'.$this->title; + + $local = glob(INSTALLDIR.'/local/doc-src/'.$site.'/'.$this->title.'.*'); + if ($local === false) { + // Some systems return false, others array(), if dir didn't exist. + $local = array(); + } + } else { + if (file_exists(INSTALLDIR.'/local/doc-src/'.$this->title)) { + $localDef = INSTALLDIR.'/local/doc-src/'.$this->title; + } + + $local = glob(INSTALLDIR.'/local/doc-src/'.$this->title.'.*'); + if ($local === false) { + $local = array(); + } } if (count($local) || isset($localDef)) { diff --git a/actions/foaf.php b/actions/foaf.php index e9f67b7f2b..fc2ec9b12f 100644 --- a/actions/foaf.php +++ b/actions/foaf.php @@ -251,7 +251,7 @@ class FoafAction extends Action } // Their account - $this->elementStart('holdsAccount'); + $this->elementStart('account'); $this->elementStart('OnlineAccount', $attr); if ($service) { $this->element('accountServiceHomepage', array('rdf:resource' => @@ -306,7 +306,7 @@ class FoafAction extends Action } $this->elementEnd('OnlineAccount'); - $this->elementEnd('holdsAccount'); + $this->elementEnd('account'); return $person; } diff --git a/actions/foafgroup.php b/actions/foafgroup.php index ebdf1cee25..d685554ac4 100644 --- a/actions/foafgroup.php +++ b/actions/foafgroup.php @@ -146,7 +146,7 @@ class FoafGroupAction extends Action { $this->elementStart('Agent', array('rdf:about' => $uri)); $this->element('nick', null, $details['nickname']); - $this->elementStart('holdsAccount'); + $this->elementStart('account'); $this->elementStart('sioc:User', array('rdf:about'=>$uri.'#acct')); $this->elementStart('sioc:has_function'); $this->elementStart('statusnet:GroupAdminRole'); @@ -154,7 +154,7 @@ class FoafGroupAction extends Action $this->elementEnd('statusnet:GroupAdminRole'); $this->elementEnd('sioc:has_function'); $this->elementEnd('sioc:User'); - $this->elementEnd('holdsAccount'); + $this->elementEnd('account'); $this->elementEnd('Agent'); } else @@ -177,4 +177,4 @@ class FoafGroupAction extends Action $this->elementEnd('Document'); } -} \ No newline at end of file +} diff --git a/actions/otp.php b/actions/otp.php index acf84aee81..1e06603d43 100644 --- a/actions/otp.php +++ b/actions/otp.php @@ -126,6 +126,8 @@ class OtpAction extends Action $this->lt->delete(); $this->lt = null; + common_real_login(true); + if ($this->rememberme) { common_rememberme($this->user); } diff --git a/actions/publictagcloud.php b/actions/publictagcloud.php index 9993b2d3fd..70c356659a 100644 --- a/actions/publictagcloud.php +++ b/actions/publictagcloud.php @@ -109,7 +109,7 @@ class PublictagcloudAction extends Action $cutoff = sprintf("notice_tag.created > '%s'", common_sql_date(time() - common_config('tag', 'cutoff'))); $tags->selectAdd($calc . ' as weight'); - $tags->addWhere($cutoff); + $tags->whereAdd($cutoff); $tags->groupBy('tag'); $tags->orderBy('weight DESC'); diff --git a/actions/recoverpassword.php b/actions/recoverpassword.php index 1e2775e7a7..f9956897f6 100644 --- a/actions/recoverpassword.php +++ b/actions/recoverpassword.php @@ -262,10 +262,20 @@ class RecoverpasswordAction extends Action # See if it's an unconfirmed email address if (!$user) { - $confirm_email = Confirm_address::staticGet('address', common_canonical_email($nore)); - if ($confirm_email && $confirm_email->address_type == 'email') { + // Warning: it may actually be legit to have multiple folks + // who have claimed, but not yet confirmed, the same address. + // We'll only send to the first one that comes up. + $confirm_email = new Confirm_address(); + $confirm_email->address = common_canonical_email($nore); + $confirm_email->address_type = 'email'; + $confirm_email->find(); + if ($confirm_email->fetch()) { $user = User::staticGet($confirm_email->user_id); + } else { + $confirm_email = null; } + } else { + $confirm_email = null; } if (!$user) { @@ -276,9 +286,11 @@ class RecoverpasswordAction extends Action # Try to get an unconfirmed email address if they used a user name if (!$user->email && !$confirm_email) { - $confirm_email = Confirm_address::staticGet('user_id', $user->id); - if ($confirm_email && $confirm_email->address_type != 'email') { - # Skip non-email confirmations + $confirm_email = new Confirm_address(); + $confirm_email->user_id = $user->id; + $confirm_email->address_type = 'email'; + $confirm_email->find(); + if (!$confirm_email->fetch()) { $confirm_email = null; } } @@ -294,7 +306,7 @@ class RecoverpasswordAction extends Action $confirm->code = common_confirmation_code(128); $confirm->address_type = 'recover'; $confirm->user_id = $user->id; - $confirm->address = (isset($user->email)) ? $user->email : $confirm_email->address; + $confirm->address = (!empty($user->email)) ? $user->email : $confirm_email->address; if (!$confirm->insert()) { common_log_db_error($confirm, 'INSERT', __FILE__); @@ -319,7 +331,8 @@ class RecoverpasswordAction extends Action $body .= common_config('site', 'name'); $body .= "\n"; - mail_to_user($user, _('Password recovery requested'), $body, $confirm->address); + $headers = _mail_prepare_headers('recoverpassword', $user->nickname, $user->nickname); + mail_to_user($user, _('Password recovery requested'), $body, $headers, $confirm->address); $this->mode = 'sent'; $this->msg = _('Instructions for recovering your password ' . diff --git a/actions/showgroup.php b/actions/showgroup.php index 5704b13d14..a0d05ba37a 100644 --- a/actions/showgroup.php +++ b/actions/showgroup.php @@ -221,7 +221,8 @@ class ShowgroupAction extends GroupDesignAction function showGroupProfile() { - $this->elementStart('div', 'entity_profile vcard author'); + $this->elementStart('div', array('id' => 'i', + 'class' => 'entity_profile vcard author')); $this->element('h2', null, _('Group profile')); diff --git a/actions/shownotice.php b/actions/shownotice.php index d0528a9f0f..12e1d77f80 100644 --- a/actions/shownotice.php +++ b/actions/shownotice.php @@ -103,11 +103,6 @@ class ShownoticeAction extends OwnerDesignAction $this->user = User::staticGet('id', $this->profile->id); - if ($this->notice->is_local == Notice::REMOTE_OMB) { - common_redirect($this->notice->uri); - return false; - } - $this->avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE); return true; @@ -172,7 +167,7 @@ class ShownoticeAction extends OwnerDesignAction function title() { if (!empty($this->profile->fullname)) { - $base = $this->profile->fullname . ' (' . $this->profile->nickname . ') '; + $base = $this->profile->fullname . ' (' . $this->profile->nickname . ')'; } else { $base = $this->profile->nickname; } @@ -198,13 +193,20 @@ class ShownoticeAction extends OwnerDesignAction if ($this->notice->is_local == Notice::REMOTE_OMB) { if (!empty($this->notice->url)) { - common_redirect($this->notice->url, 301); + $target = $this->notice->url; } else if (!empty($this->notice->uri) && preg_match('/^https?:/', $this->notice->uri)) { - common_redirect($this->notice->uri, 301); + // Old OMB posts saved the remote URL only into the URI field. + $target = $this->notice->uri; + } else { + // Shouldn't happen. + $target = false; + } + if ($target && $target != $this->selfUrl()) { + common_redirect($target, 301); + return false; } - } else { - $this->showPage(); } + $this->showPage(); } /** diff --git a/actions/siteadminpanel.php b/actions/siteadminpanel.php index cb3c2e8fde..e5482987fb 100644 --- a/actions/siteadminpanel.php +++ b/actions/siteadminpanel.php @@ -161,8 +161,8 @@ class SiteadminpanelAction extends AdminPanelAction // Validate text limit - if (!Validate::number($values['site']['textlimit'], array('min' => 140))) { - $this->clientError(_("Minimum text limit is 140 characters.")); + if (!Validate::number($values['site']['textlimit'], array('min' => 0))) { + $this->clientError(_("Minimum text limit is 0 (unlimited).")); } // Validate dupe limit diff --git a/actions/sitenoticeadminpanel.php b/actions/sitenoticeadminpanel.php index 3931aa9825..a68cc699ca 100644 --- a/actions/sitenoticeadminpanel.php +++ b/actions/sitenoticeadminpanel.php @@ -93,7 +93,7 @@ class SitenoticeadminpanelAction extends AdminPanelAction // assert(all values are valid); // This throws an exception on validation errors - $this->validate(&$siteNotice); + $this->validate($siteNotice); $config = new Config(); diff --git a/classes/File.php b/classes/File.php index 4ecd3b959a..33273bbdcc 100644 --- a/classes/File.php +++ b/classes/File.php @@ -67,7 +67,14 @@ class File extends Memcached_DataObject return $att; } - function saveNew($redir_data, $given_url) { + /** + * Save a new file record. + * + * @param array $redir_data lookup data eg from File_redirection::where() + * @param string $given_url + * @return File + */ + function saveNew(array $redir_data, $given_url) { $x = new File; $x->url = $given_url; if (!empty($redir_data['protected'])) $x->protected = $redir_data['protected']; @@ -77,19 +84,36 @@ class File extends Memcached_DataObject if (isset($redir_data['time']) && $redir_data['time'] > 0) $x->date = intval($redir_data['time']); $file_id = $x->insert(); + $x->saveOembed($redir_data, $given_url); + return $x; + } + + /** + * Save embedding information for this file, if applicable. + * + * Normally this won't need to be called manually, as File::saveNew() + * takes care of it. + * + * @param array $redir_data lookup data eg from File_redirection::where() + * @param string $given_url + * @return boolean success + */ + public function saveOembed($redir_data, $given_url) + { if (isset($redir_data['type']) && (('text/html' === substr($redir_data['type'], 0, 9) || 'application/xhtml+xml' === substr($redir_data['type'], 0, 21))) && ($oembed_data = File_oembed::_getOembed($given_url))) { - $fo = File_oembed::staticGet('file_id', $file_id); + $fo = File_oembed::staticGet('file_id', $this->id); if (empty($fo)) { - File_oembed::saveNew($oembed_data, $file_id); + File_oembed::saveNew($oembed_data, $this->id); + return true; } else { common_log(LOG_WARNING, "Strangely, a File_oembed object exists for new file $file_id", __FILE__); } } - return $x; + return false; } function processNew($given_url, $notice_id=null) { @@ -105,6 +129,7 @@ class File extends Memcached_DataObject $redir_url = $redir_data['url']; } elseif (is_string($redir_data)) { $redir_url = $redir_data; + $redir_data = array(); } else { throw new ServerException("Can't process url '$given_url'"); } @@ -260,7 +285,7 @@ class File extends Memcached_DataObject $enclosure->mimetype=$this->mimetype; if(! isset($this->filename)){ - $notEnclosureMimeTypes = array('text/html','application/xhtml+xml'); + $notEnclosureMimeTypes = array(null,'text/html','application/xhtml+xml'); $mimetype = strtolower($this->mimetype); $semicolon = strpos($mimetype,';'); if($semicolon){ diff --git a/classes/File_oembed.php b/classes/File_oembed.php index 11f160718e..041b447404 100644 --- a/classes/File_oembed.php +++ b/classes/File_oembed.php @@ -81,6 +81,12 @@ class File_oembed extends Memcached_DataObject } } + /** + * Save embedding info for a new file. + * + * @param object $data Services_oEmbed_Object_* + * @param int $file_id + */ function saveNew($data, $file_id) { $file_oembed = new File_oembed; $file_oembed->file_id = $file_id; diff --git a/classes/File_redirection.php b/classes/File_redirection.php index 08a6e8d8be..f128b3e07c 100644 --- a/classes/File_redirection.php +++ b/classes/File_redirection.php @@ -58,24 +58,30 @@ class File_redirection extends Memcached_DataObject return $request; } - function _redirectWhere_imp($short_url, $redirs = 10, $protected = false) { + /** + * Check if this URL is a redirect and return redir info. + * + * Most code should call File_redirection::where instead, to check if we + * already know that redirection and avoid extra hits to the web. + * + * The URL is hit and any redirects are followed, up to 10 levels or until + * a protected URL is reached. + * + * @param string $in_url + * @return mixed one of: + * string - target URL, if this is a direct link or can't be followed + * array - redirect info if this is an *unknown* redirect: + * associative array with the following elements: + * code: HTTP status code + * redirects: count of redirects followed + * url: URL string of final target + * type (optional): MIME type from Content-Type header + * size (optional): byte size from Content-Length header + * time (optional): timestamp from Last-Modified header + */ + public function lookupWhere($short_url, $redirs = 10, $protected = false) { if ($redirs < 0) return false; - // let's see if we know this... - $a = File::staticGet('url', $short_url); - - if (!empty($a)) { - // this is a direct link to $a->url - return $a->url; - } else { - $b = File_redirection::staticGet('url', $short_url); - if (!empty($b)) { - // this is a redirect to $b->file_id - $a = File::staticGet('id', $b->file_id); - return $a->url; - } - } - if(strpos($short_url,'://') === false){ return $short_url; } @@ -93,12 +99,13 @@ class File_redirection extends Memcached_DataObject } } catch (Exception $e) { // Invalid URL or failure to reach server + common_log(LOG_ERR, "Error while following redirects for $short_url: " . $e->getMessage()); return $short_url; } if ($response->getRedirectCount() && File::isProtected($response->getUrl())) { // Bump back up the redirect chain until we find a non-protected URL - return self::_redirectWhere_imp($short_url, $response->getRedirectCount() - 1, true); + return self::lookupWhere($short_url, $response->getRedirectCount() - 1, true); } $ret = array('code' => $response->getStatus() @@ -115,11 +122,60 @@ class File_redirection extends Memcached_DataObject return $ret; } - function where($in_url) { - $ret = File_redirection::_redirectWhere_imp($in_url); + /** + * Check if this URL is a redirect and return redir info. + * If a File record is present for this URL, it is not considered a redirect. + * If a File_redirection record is present for this URL, the recorded target is returned. + * + * If no File or File_redirect record is present, the URL is hit and any + * redirects are followed, up to 10 levels or until a protected URL is + * reached. + * + * @param string $in_url + * @return mixed one of: + * string - target URL, if this is a direct link or a known redirect + * array - redirect info if this is an *unknown* redirect: + * associative array with the following elements: + * code: HTTP status code + * redirects: count of redirects followed + * url: URL string of final target + * type (optional): MIME type from Content-Type header + * size (optional): byte size from Content-Length header + * time (optional): timestamp from Last-Modified header + */ + public function where($in_url) { + // let's see if we know this... + $a = File::staticGet('url', $in_url); + + if (!empty($a)) { + // this is a direct link to $a->url + return $a->url; + } else { + $b = File_redirection::staticGet('url', $in_url); + if (!empty($b)) { + // this is a redirect to $b->file_id + $a = File::staticGet('id', $b->file_id); + return $a->url; + } + } + + $ret = File_redirection::lookupWhere($in_url); return $ret; } + /** + * Shorten a URL with the current user's configured shortening + * options, if applicable. + * + * If it cannot be shortened or the "short" URL is longer than the + * original, the original is returned. + * + * If the referenced item has not been seen before, embedding data + * may be saved. + * + * @param string $long_url + * @return string + */ function makeShort($long_url) { $canon = File_redirection::_canonUrl($long_url); @@ -141,11 +197,20 @@ class File_redirection extends Memcached_DataObject // store it $file = File::staticGet('url', $long_url); if (empty($file)) { + // Check if the target URL is itself a redirect... $redir_data = File_redirection::where($long_url); - $file = File::saveNew($redir_data, $long_url); - $file_id = $file->id; - if (!empty($redir_data['oembed']['json'])) { - File_oembed::saveNew($redir_data['oembed']['json'], $file_id); + if (is_array($redir_data)) { + // We haven't seen the target URL before. + // Save file and embedding data about it! + $file = File::saveNew($redir_data, $long_url); + $file_id = $file->id; + if (!empty($redir_data['oembed']['json'])) { + File_oembed::saveNew($redir_data['oembed']['json'], $file_id); + } + } else if (is_string($redir_data)) { + // The file is a known redirect target. + $file = File::staticGet('url', $redir_data); + $file_id = $file->id; } } else { $file_id = $file->id; diff --git a/classes/Foreign_user.php b/classes/Foreign_user.php index 8b3e03dfb3..0dd94ffb99 100644 --- a/classes/Foreign_user.php +++ b/classes/Foreign_user.php @@ -41,6 +41,7 @@ class Foreign_user extends Memcached_DataObject function updateKeys(&$orig) { + $this->_connect(); $parts = array(); foreach (array('id', 'service', 'uri', 'nickname') as $k) { if (strcmp($this->$k, $orig->$k) != 0) { diff --git a/classes/Notice.php b/classes/Notice.php index 4c7e6ab4b7..f7194e3394 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -119,6 +119,9 @@ class Notice extends Memcached_DataObject // NOTE: we don't clear queue items $result = parent::delete(); + + $this->blowOnDelete(); + return $result; } /** @@ -421,6 +424,18 @@ class Notice extends Memcached_DataObject $profile->blowNoticeCount(); } + /** + * Clear cache entries related to this notice at delete time. + * Necessary to avoid breaking paging on public, profile timelines. + */ + function blowOnDelete() + { + $this->blowOnInsert(); + + self::blow('profile:notice_ids:%d;last', $this->profile_id); + self::blow('public;last'); + } + /** save all urls in the notice to the db * * follow redirects and save all available file information @@ -589,7 +604,6 @@ class Notice extends Memcached_DataObject array(), 'public', $offset, $limit, $since_id, $max_id); - return Notice::getStreamByIds($ids); } @@ -1128,6 +1142,7 @@ class Notice extends Memcached_DataObject if ($source) { $xs->elementStart('source'); + $xs->element('id', null, $profile->profileurl); $xs->element('title', null, $profile->nickname . " - " . common_config('site', 'name')); $xs->element('link', array('href' => $profile->profileurl)); $user = User::staticGet('id', $profile->id); @@ -1143,13 +1158,14 @@ class Notice extends Memcached_DataObject } $xs->element('icon', null, $profile->avatarUrl(AVATAR_PROFILE_SIZE)); + $xs->element('updated', null, common_date_w3dtf($this->created)); } if ($source) { $xs->elementEnd('source'); } - $xs->element('title', null, $this->content); + $xs->element('title', null, common_xml_safe_str($this->content)); if ($author) { $xs->raw($profile->asAtomAuthor()); @@ -1225,7 +1241,11 @@ class Notice extends Memcached_DataObject } } - $xs->element('content', array('type' => 'html'), $this->rendered); + $xs->element( + 'content', + array('type' => 'html'), + common_xml_safe_str($this->rendered) + ); $tag = new Notice_tag(); $tag->notice_id = $this->id; diff --git a/classes/Profile.php b/classes/Profile.php index 0322c93588..eded1ff71f 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -147,14 +147,16 @@ class Profile extends Memcached_DataObject return ($this->fullname) ? $this->fullname : $this->nickname; } - # Get latest notice on or before date; default now - function getCurrentNotice($dt=null) + /** + * Get the most recent notice posted by this user, if any. + * + * @return mixed Notice or null + */ + function getCurrentNotice() { $notice = new Notice(); $notice->profile_id = $this->id; - if ($dt) { - $notice->whereAdd('created < "' . $dt . '"'); - } + // @fixme change this to sort on notice.id only when indexes are updated $notice->orderBy('created DESC, notice.id DESC'); $notice->limit(1); if ($notice->find(true)) { @@ -730,6 +732,9 @@ class Profile extends Memcached_DataObject function hasRight($right) { $result = false; + if ($this->hasRole(Profile_role::DELETED)) { + return false; + } if (Event::handle('UserRightsCheck', array($this, $right, &$result))) { switch ($right) { diff --git a/classes/Profile_role.php b/classes/Profile_role.php index d0a0b31f0f..e7aa1f0f06 100644 --- a/classes/Profile_role.php +++ b/classes/Profile_role.php @@ -53,6 +53,7 @@ class Profile_role extends Memcached_DataObject const ADMINISTRATOR = 'administrator'; const SANDBOXED = 'sandboxed'; const SILENCED = 'silenced'; + const DELETED = 'deleted'; // Pending final deletion of notices... public static function isValid($role) { diff --git a/classes/Safe_DataObject.php b/classes/Safe_DataObject.php index 021f7b5064..e926cb0d58 100644 --- a/classes/Safe_DataObject.php +++ b/classes/Safe_DataObject.php @@ -42,6 +42,25 @@ class Safe_DataObject extends DB_DataObject } } + /** + * Magic function called at clone() time. + * + * We use this to drop connection with some global resources. + * This supports the fairly common pattern where individual + * items being read in a loop via a single object are cloned + * for individual processing, then fall out of scope when the + * loop comes around again. + * + * As that triggers the destructor, we want to make sure that + * the original object doesn't have its database result killed. + * It will still be freed properly when the original object + * gets destroyed. + */ + function __clone() + { + $this->_DB_resultid = false; + } + /** * Magic function called at serialize() time. * @@ -77,6 +96,30 @@ class Safe_DataObject extends DB_DataObject $this->_link_loaded = false; } + /** + * Magic function called when someone attempts to call a method + * that doesn't exist. DB_DataObject uses this to implement + * setters and getters for fields, but neglects to throw an error + * when you just misspell an actual method name. This leads to + * silent failures which can cause all kinds of havoc. + * + * @param string $method + * @param array $params + * @return mixed + * @throws Exception + */ + function __call($method, $params) + { + $return = null; + // Yes, that's _call with one underscore, which does the + // actual implementation. + if ($this->_call($method, $params, $return)) { + return $return; + } else { + throw new Exception('Call to undefined method ' . + get_class($this) . '::' . $method); + } + } /** * Work around memory-leak bugs... diff --git a/classes/Subscription.php b/classes/Subscription.php index 9cef2df1ad..0679c09250 100644 --- a/classes/Subscription.php +++ b/classes/Subscription.php @@ -62,6 +62,14 @@ class Subscription extends Memcached_DataObject static function start($subscriber, $other) { + // @fixme should we enforce this as profiles in callers instead? + if ($subscriber instanceof User) { + $subscriber = $subscriber->getProfile(); + } + if ($other instanceof User) { + $other = $other->getProfile(); + } + if (!$subscriber->hasRight(Right::SUBSCRIBE)) { throw new Exception(_('You have been banned from subscribing.')); } @@ -75,26 +83,13 @@ class Subscription extends Memcached_DataObject } if (Event::handle('StartSubscribe', array($subscriber, $other))) { - - $sub = new Subscription(); - - $sub->subscriber = $subscriber->id; - $sub->subscribed = $other->id; - $sub->created = common_sql_now(); - - $result = $sub->insert(); - - if (!$result) { - common_log_db_error($sub, 'INSERT', __FILE__); - throw new Exception(_('Could not save subscription.')); - } - + $sub = self::saveNew($subscriber->id, $other->id); $sub->notify(); self::blow('user:notices_with_friends:%d', $subscriber->id); - $subscriber->blowSubscriptionsCount(); - $other->blowSubscribersCount(); + $subscriber->blowSubscriptionCount(); + $other->blowSubscriberCount(); $otherUser = User::staticGet('id', $other->id); @@ -103,20 +98,11 @@ class Subscription extends Memcached_DataObject !self::exists($other, $subscriber) && !$subscriber->hasBlocked($other)) { - $auto = new Subscription(); - - $auto->subscriber = $subscriber->id; - $auto->subscribed = $other->id; - $auto->created = common_sql_now(); - - $result = $auto->insert(); - - if (!$result) { - common_log_db_error($auto, 'INSERT', __FILE__); - throw new Exception(_('Could not save subscription.')); + try { + self::start($other, $subscriber); + } catch (Exception $e) { + common_log(LOG_ERR, "Exception during autosubscribe of {$other->nickname} to profile {$subscriber->id}: {$e->getMessage()}"); } - - $auto->notify(); } Event::handle('EndSubscribe', array($subscriber, $other)); @@ -125,6 +111,30 @@ class Subscription extends Memcached_DataObject return true; } + /** + * Low-level subscription save. + * Outside callers should use Subscription::start() + */ + protected function saveNew($subscriber_id, $other_id) + { + $sub = new Subscription(); + + $sub->subscriber = $subscriber_id; + $sub->subscribed = $other_id; + $sub->jabber = 1; + $sub->sms = 1; + $sub->created = common_sql_now(); + + $result = $sub->insert(); + + if (!$result) { + common_log_db_error($sub, 'INSERT', __FILE__); + throw new Exception(_('Could not save subscription.')); + } + + return $sub; + } + function notify() { # XXX: add other notifications (Jabber, SMS) here @@ -203,8 +213,8 @@ class Subscription extends Memcached_DataObject self::blow('user:notices_with_friends:%d', $subscriber->id); - $subscriber->blowSubscriptionsCount(); - $other->blowSubscribersCount(); + $subscriber->blowSubscriptionCount(); + $other->blowSubscriberCount(); Event::handle('EndUnsubscribe', array($subscriber, $other)); } diff --git a/classes/User.php b/classes/User.php index 15ec4ad946..1ba940a696 100644 --- a/classes/User.php +++ b/classes/User.php @@ -70,7 +70,11 @@ class User extends Memcached_DataObject function getProfile() { - return Profile::staticGet('id', $this->id); + $profile = Profile::staticGet('id', $this->id); + if (empty($profile)) { + throw new UserNoProfileException($this); + } + return $profile; } function isSubscribed($other) @@ -82,6 +86,7 @@ class User extends Memcached_DataObject function updateKeys(&$orig) { + $this->_connect(); $parts = array(); foreach (array('nickname', 'email', 'incomingemail', 'sms', 'carrier', 'smsemail', 'language', 'timezone') as $k) { if (strcmp($this->$k, $orig->$k) != 0) { @@ -127,13 +132,15 @@ class User extends Memcached_DataObject return !in_array($nickname, $blacklist); } - function getCurrentNotice($dt=null) + /** + * Get the most recent notice posted by this user, if any. + * + * @return mixed Notice or null + */ + function getCurrentNotice() { $profile = $this->getProfile(); - if (!$profile) { - return null; - } - return $profile->getCurrentNotice($dt); + return $profile->getCurrentNotice(); } function getCarrier() @@ -141,19 +148,12 @@ class User extends Memcached_DataObject return Sms_carrier::staticGet('id', $this->carrier); } + /** + * @deprecated use Subscription::start($sub, $other); + */ function subscribeTo($other) { - $sub = new Subscription(); - $sub->subscriber = $this->id; - $sub->subscribed = $other->id; - - $sub->created = common_sql_now(); // current time - - if (!$sub->insert()) { - return false; - } - - return true; + return Subscription::start($this->getProfile(), $other); } function hasBlocked($other) @@ -334,17 +334,7 @@ class User extends Memcached_DataObject common_log(LOG_WARNING, sprintf("Default user %s does not exist.", $defnick), __FILE__); } else { - $defsub = new Subscription(); - $defsub->subscriber = $user->id; - $defsub->subscribed = $defuser->id; - $defsub->created = $user->created; - - $result = $defsub->insert(); - - if (!$result) { - common_log_db_error($defsub, 'INSERT', __FILE__); - return false; - } + Subscription::start($user, $defuser); } } @@ -460,21 +450,13 @@ class User extends Memcached_DataObject function getTaggedNotices($tag, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0) { $profile = $this->getProfile(); - if (!$profile) { - return null; - } else { - return $profile->getTaggedNotices($tag, $offset, $limit, $since_id, $before_id); - } + return $profile->getTaggedNotices($tag, $offset, $limit, $since_id, $before_id); } function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0) { $profile = $this->getProfile(); - if (!$profile) { - return null; - } else { - return $profile->getNotices($offset, $limit, $since_id, $before_id); - } + return $profile->getNotices($offset, $limit, $since_id, $before_id); } function favoriteNotices($offset=0, $limit=NOTICES_PER_PAGE, $own=false) @@ -615,14 +597,12 @@ class User extends Memcached_DataObject function getSubscriptions($offset=0, $limit=null) { $profile = $this->getProfile(); - assert(!empty($profile)); return $profile->getSubscriptions($offset, $limit); } function getSubscribers($offset=0, $limit=null) { $profile = $this->getProfile(); - assert(!empty($profile)); return $profile->getSubscribers($offset, $limit); } @@ -686,9 +666,7 @@ class User extends Memcached_DataObject function delete() { $profile = $this->getProfile(); - if ($profile) { - $profile->delete(); - } + $profile->delete(); $related = array('Fave', 'Confirm_address', diff --git a/classes/User_group.php b/classes/User_group.php index 7be55163a3..110f083012 100644 --- a/classes/User_group.php +++ b/classes/User_group.php @@ -295,7 +295,7 @@ class User_group extends Memcached_DataObject } // If not, check local groups. - + $group = Local_group::staticGet('nickname', $nickname); if (!empty($group)) { return User_group::staticGet('id', $group->group_id); @@ -371,16 +371,15 @@ class User_group extends Memcached_DataObject if ($source) { $xs->elementStart('source'); + $xs->element('id', null, $this->permalink()); $xs->element('title', null, $profile->nickname . " - " . common_config('site', 'name')); $xs->element('link', array('href' => $this->permalink())); - } - - if ($source) { + $xs->element('updated', null, $this->modified); $xs->elementEnd('source'); } $xs->element('title', null, $this->nickname); - $xs->element('summary', null, $this->description); + $xs->element('summary', null, common_xml_safe_str($this->description)); $xs->element('link', array('rel' => 'alternate', 'href' => $this->permalink())); @@ -390,7 +389,11 @@ class User_group extends Memcached_DataObject $xs->element('published', null, common_date_w3dtf($this->created)); $xs->element('updated', null, common_date_w3dtf($this->modified)); - $xs->element('content', array('type' => 'html'), $this->description); + $xs->element( + 'content', + array('type' => 'html'), + common_xml_safe_str($this->description) + ); $xs->elementEnd('entry'); @@ -455,7 +458,7 @@ class User_group extends Memcached_DataObject $group = new User_group(); $group->query('BEGIN'); - + if (empty($uri)) { // fill in later... $uri = null; diff --git a/config.php.sample b/config.php.sample index 75f5c7d557..20de7ffedf 100644 --- a/config.php.sample +++ b/config.php.sample @@ -197,7 +197,7 @@ $config['sphinx']['port'] = 3312; // // $config['twitterimport']['enabled'] = true; -// Twitter OAuth settings +// Twitter OAuth settings. Documentation is at http://apiwiki.twitter.com/OAuth-FAQ // $config['twitter']['consumer_key'] = 'YOURKEY'; // $config['twitter']['consumer_secret'] = 'YOURSECRET'; diff --git a/htaccess.sample b/htaccess.sample index 37eb8e01ec..18a868698c 100644 --- a/htaccess.sample +++ b/htaccess.sample @@ -5,6 +5,11 @@ RewriteBase /mublog/ + ## Uncomment these if having trouble with API authentication + ## when PHP is running in CGI or FastCGI mode. + #RewriteCond %{HTTP:Authorization} ^(.*) + #RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] + RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) index.php?p=$1 [L,QSA] diff --git a/index.php b/index.php index 65f251bcce..6bfbc11da8 100644 --- a/index.php +++ b/index.php @@ -37,6 +37,8 @@ define('INSTALLDIR', dirname(__FILE__)); define('STATUSNET', true); define('LACONICA', true); // compatibility +require_once INSTALLDIR . '/lib/common.php'; + $user = null; $action = null; @@ -66,69 +68,52 @@ function getPath($req) */ function handleError($error) { - try { - - if ($error->getCode() == DB_DATAOBJECT_ERROR_NODATA) { - return; - } - - $logmsg = "PEAR error: " . $error->getMessage(); - if ($error instanceof PEAR_Exception && common_config('site', 'logdebug')) { - $logmsg .= " : ". $error->toText(); - } - // DB queries often end up with a lot of newlines; merge to a single line - // for easier grepability... - $logmsg = str_replace("\n", " ", $logmsg); - common_log(LOG_ERR, $logmsg); - - // @fixme backtrace output should be consistent with exception handling - if (common_config('site', 'logdebug')) { - $bt = $error->getTrace(); - foreach ($bt as $n => $line) { - common_log(LOG_ERR, formatBacktraceLine($n, $line)); - } - } - if ($error instanceof DB_DataObject_Error - || $error instanceof DB_Error - || ($error instanceof PEAR_Exception && $error->getCode() == -24) - ) { - //If we run into a DB error, assume we can't connect to the DB at all - //so set the current user to null, so we don't try to access the DB - //while rendering the error page. - global $_cur; - $_cur = null; - - $msg = sprintf( - _( - 'The database for %s isn\'t responding correctly, '. - 'so the site won\'t work properly. '. - 'The site admins probably know about the problem, '. - 'but you can contact them at %s to make sure. '. - 'Otherwise, wait a few minutes and try again.' - ), - common_config('site', 'name'), - common_config('site', 'email') - ); - } else { - $msg = _( - 'An important error occured, probably related to email setup. '. - 'Check logfiles for more info..' - ); - } - - $dac = new DBErrorAction($msg, 500); - $dac->showPage(); - - } catch (Exception $e) { - echo _('An error occurred.'); + if ($error->getCode() == DB_DATAOBJECT_ERROR_NODATA) { + return; } + + $logmsg = "PEAR error: " . $error->getMessage(); + if (common_config('site', 'logdebug')) { + $logmsg .= " : ". $error->getDebugInfo(); + } + // DB queries often end up with a lot of newlines; merge to a single line + // for easier grepability... + $logmsg = str_replace("\n", " ", $logmsg); + common_log(LOG_ERR, $logmsg); + + // @fixme backtrace output should be consistent with exception handling + if (common_config('site', 'logdebug')) { + $bt = $error->getBacktrace(); + foreach ($bt as $n => $line) { + common_log(LOG_ERR, formatBacktraceLine($n, $line)); + } + } + if ($error instanceof DB_DataObject_Error + || $error instanceof DB_Error + ) { + $msg = sprintf( + _( + 'The database for %s isn\'t responding correctly, '. + 'so the site won\'t work properly. '. + 'The site admins probably know about the problem, '. + 'but you can contact them at %s to make sure. '. + 'Otherwise, wait a few minutes and try again.' + ), + common_config('site', 'name'), + common_config('site', 'email') + ); + } else { + $msg = _( + 'An important error occured, probably related to email setup. '. + 'Check logfiles for more info..' + ); + } + + $dac = new DBErrorAction($msg, 500); + $dac->showPage(); exit(-1); } -set_exception_handler('handleError'); - -require_once INSTALLDIR . '/lib/common.php'; - /** * Format a backtrace line for debug output roughly like debug_print_backtrace() does. * Exceptions already have this built in, but PEAR error objects just give us the array. @@ -200,7 +185,7 @@ function checkMirror($action_obj, $args) function isLoginAction($action) { - static $loginActions = array('login', 'recoverpassword', 'api', 'doc', 'register', 'publicxrds', 'otp'); + static $loginActions = array('login', 'recoverpassword', 'api', 'doc', 'register', 'publicxrds', 'otp', 'opensearch'); $login = null; @@ -253,6 +238,10 @@ function main() return; } + // For database errors + + PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handleError'); + // Make sure RW database is setup setupRW(); @@ -335,10 +324,10 @@ function main() $cac = new ClientErrorAction($cex->getMessage(), $cex->getCode()); $cac->showPage(); } catch (ServerException $sex) { // snort snort guffaw - $sac = new ServerErrorAction($sex->getMessage(), $sex->getCode()); + $sac = new ServerErrorAction($sex->getMessage(), $sex->getCode(), $sex); $sac->showPage(); } catch (Exception $ex) { - $sac = new ServerErrorAction($ex->getMessage()); + $sac = new ServerErrorAction($ex->getMessage(), 500, $ex); $sac->showPage(); } } diff --git a/install.php b/install.php index 929277e5e8..9a7e27fa2c 100644 --- a/install.php +++ b/install.php @@ -483,6 +483,7 @@ function showForm() $dbRadios .= " $info[name]
\n"; } } + echo<< @@ -559,6 +560,11 @@ function showForm()

Optional email address for the initial StatusNet user (administrator)

+
  • + + +

    Release and security feed from update@status.net (recommended)

    +
  • @@ -583,10 +589,11 @@ function handlePost() $sitename = $_POST['sitename']; $fancy = !empty($_POST['fancy']); - $adminNick = $_POST['admin_nickname']; + $adminNick = strtolower($_POST['admin_nickname']); $adminPass = $_POST['admin_password']; $adminPass2 = $_POST['admin_password2']; $adminEmail = $_POST['admin_email']; + $adminUpdates = $_POST['admin_updates']; $server = $_SERVER['HTTP_HOST']; $path = substr(dirname($_SERVER['PHP_SELF']), 1); @@ -623,6 +630,19 @@ STR; updateStatus("No initial StatusNet user nickname specified.", true); $fail = true; } + if ($adminNick && !preg_match('/^[0-9a-z]{1,64}$/', $adminNick)) { + updateStatus('The user nickname "' . htmlspecialchars($adminNick) . + '" is invalid; should be plain letters and numbers no longer than 64 characters.', true); + $fail = true; + } + // @fixme hardcoded list; should use User::allowed_nickname() + // if/when it's safe to have loaded the infrastructure here + $blacklist = array('main', 'admin', 'twitter', 'settings', 'rsd.xml', 'favorited', 'featured', 'favoritedrss', 'featuredrss', 'rss', 'getfile', 'api', 'groups', 'group', 'peopletag', 'tag', 'user', 'message', 'conversation', 'bookmarklet', 'notice', 'attachment', 'search', 'index.php', 'doc', 'opensearch', 'robots.txt', 'xd_receiver.html', 'facebook'); + if (in_array($adminNick, $blacklist)) { + updateStatus('The user nickname "' . htmlspecialchars($adminNick) . + '" is reserved.', true); + $fail = true; + } if (empty($adminPass)) { updateStatus("No initial StatusNet user password specified.", true); @@ -657,7 +677,7 @@ STR; } // Okay, cross fingers and try to register an initial user - if (registerInitialUser($adminNick, $adminPass, $adminEmail)) { + if (registerInitialUser($adminNick, $adminPass, $adminEmail, $adminUpdates)) { updateStatus( "An initial user with the administrator role has been created." ); @@ -854,7 +874,7 @@ function runDbScript($filename, $conn, $type = 'mysqli') return true; } -function registerInitialUser($nickname, $password, $email) +function registerInitialUser($nickname, $password, $email, $adminUpdates) { define('STATUSNET', true); define('LACONICA', true); // compatibility @@ -882,7 +902,7 @@ function registerInitialUser($nickname, $password, $email) // Attempt to do a remote subscribe to update@status.net // Will fail if instance is on a private network. - if (class_exists('Ostatus_profile')) { + if (class_exists('Ostatus_profile') && $adminUpdates) { try { $oprofile = Ostatus_profile::ensureProfile('http://update.status.net/'); Subscription::start($user->getProfile(), $oprofile->localProfile()); diff --git a/js/util.js b/js/util.js index 3efda0d7b9..60eeb418f6 100644 --- a/js/util.js +++ b/js/util.js @@ -61,10 +61,8 @@ var SN = { // StatusNet U: { // Utils FormNoticeEnhancements: function(form) { - form_id = form.attr('id'); - if (jQuery.data(form[0], 'ElementData') === undefined) { - MaxLength = $('#'+form_id+' #'+SN.C.S.NoticeTextCount).text(); + MaxLength = form.find('#'+SN.C.S.NoticeTextCount).text(); if (typeof(MaxLength) == 'undefined') { MaxLength = SN.C.I.MaxLength; } @@ -72,7 +70,7 @@ var SN = { // StatusNet SN.U.Counter(form); - NDT = $('#'+form_id+' #'+SN.C.S.NoticeDataText); + NDT = form.find('#'+SN.C.S.NoticeDataText); NDT.bind('keyup', function(e) { SN.U.Counter(form); @@ -83,11 +81,11 @@ var SN = { // StatusNet }); } else { - $('#'+form_id+' #'+SN.C.S.NoticeTextCount).text(jQuery.data(form[0], 'ElementData').MaxLength); + form.find('#'+SN.C.S.NoticeTextCount).text(jQuery.data(form[0], 'ElementData').MaxLength); } - if ($('body')[0].id != 'conversation') { - $('#'+form_id+' textarea').focus(); + if ($('body')[0].id != 'conversation' && window.location.hash.length === 0) { + form.find('textarea').focus(); } }, @@ -105,7 +103,6 @@ var SN = { // StatusNet Counter: function(form) { SN.C.I.FormNoticeCurrent = form; - form_id = form.attr('id'); var MaxLength = jQuery.data(form[0], 'ElementData').MaxLength; @@ -113,8 +110,8 @@ var SN = { // StatusNet return; } - var remaining = MaxLength - $('#'+form_id+' #'+SN.C.S.NoticeDataText).val().length; - var counter = $('#'+form_id+' #'+SN.C.S.NoticeTextCount); + var remaining = MaxLength - form.find('#'+SN.C.S.NoticeDataText).val().length; + var counter = form.find('#'+SN.C.S.NoticeTextCount); if (remaining.toString() != counter.text()) { if (!SN.C.I.CounterBlackout || remaining === 0) { @@ -174,7 +171,6 @@ var SN = { // StatusNet FormNoticeXHR: function(form) { SN.C.I.NoticeDataGeo = {}; - form_id = form.attr('id'); form.append(''); form.ajaxForm({ dataType: 'xml', @@ -403,58 +399,71 @@ var SN = { // StatusNet return; } - $.fn.jOverlay.options = { - method : 'GET', - data : '', - url : '', - color : '#000', - opacity : '0.6', - zIndex : 9999, - center : false, - imgLoading : $('address .url')[0].href+'theme/base/images/illustrations/illu_progress_loading-01.gif', - bgClickToClose : true, - success : function() { - $('#jOverlayContent').append(''); - $('#jOverlayContent button').click($.closeOverlay); - }, - timeout : 0, - autoHide : true, - css : {'max-width':'542px', 'top':'5%', 'left':'32.5%'} - }; + var attachment_more = notice.find('.attachment.more'); + if (attachment_more.length > 0) { + attachment_more.click(function() { + $(this).addClass(SN.C.S.Processing); + $.get($(this).attr('href')+'/ajax', null, function(data) { + notice.find('.entry-title .entry-content').html($(data).find('#attachment_view .entry-content').html()); + }); - notice.find('a.attachment').click(function() { - var attachId = ($(this).attr('id').substring('attachment'.length + 1)); - if (attachId) { - $().jOverlay({url: $('address .url')[0].href+'attachment/' + attachId + '/ajax'}); return false; - } - }); - - if ($('#shownotice').length == 0) { - var t; - notice.find('a.thumbnail').hover( - function() { - var anchor = $(this); - $('a.thumbnail').children('img').hide(); - anchor.closest(".entry-title").addClass('ov'); - - if (anchor.children('img').length === 0) { - t = setTimeout(function() { - $.get($('address .url')[0].href+'attachment/' + (anchor.attr('id').substring('attachment'.length + 1)) + '/thumbnail', null, function(data) { - anchor.append(data); - }); - }, 500); - } - else { - anchor.children('img').show(); - } + }); + } + else { + $.fn.jOverlay.options = { + method : 'GET', + data : '', + url : '', + color : '#000', + opacity : '0.6', + zIndex : 9999, + center : false, + imgLoading : $('address .url')[0].href+'theme/base/images/illustrations/illu_progress_loading-01.gif', + bgClickToClose : true, + success : function() { + $('#jOverlayContent').append(''); + $('#jOverlayContent button').click($.closeOverlay); }, - function() { - clearTimeout(t); - $('a.thumbnail').children('img').hide(); - $(this).closest('.entry-title').removeClass('ov'); + timeout : 0, + autoHide : true, + css : {'max-width':'542px', 'top':'5%', 'left':'32.5%'} + }; + + notice.find('a.attachment').click(function() { + var attachId = ($(this).attr('id').substring('attachment'.length + 1)); + if (attachId) { + $().jOverlay({url: $('address .url')[0].href+'attachment/' + attachId + '/ajax'}); + return false; } - ); + }); + + if ($('#shownotice').length == 0) { + var t; + notice.find('a.thumbnail').hover( + function() { + var anchor = $(this); + $('a.thumbnail').children('img').hide(); + anchor.closest(".entry-title").addClass('ov'); + + if (anchor.children('img').length === 0) { + t = setTimeout(function() { + $.get($('address .url')[0].href+'attachment/' + (anchor.attr('id').substring('attachment'.length + 1)) + '/thumbnail', null, function(data) { + anchor.append(data); + }); + }, 500); + } + else { + anchor.children('img').show(); + } + }, + function() { + clearTimeout(t); + $('a.thumbnail').children('img').hide(); + $(this).closest('.entry-title').removeClass('ov'); + } + ); + } } }, diff --git a/lib/action.php b/lib/action.php index 10394c7895..491d7d4810 100644 --- a/lib/action.php +++ b/lib/action.php @@ -798,11 +798,14 @@ class Action extends HTMLOutputter // lawsuit { $this->element('dt', array('id' => 'site_statusnet_license'), _('StatusNet software license')); $this->elementStart('dd', null); + // @fixme drop the final spaces in the messages when at good spot + // to let translations get updated. if (common_config('site', 'broughtby')) { $instr = _('**%%site.name%%** is a microblogging service brought to you by [%%site.broughtby%%](%%site.broughtbyurl%%). '); } else { $instr = _('**%%site.name%%** is a microblogging service. '); } + $instr .= ' '; $instr .= sprintf(_('It runs the [StatusNet](http://status.net/) microblogging software, version %s, available under the [GNU Affero General Public License](http://www.fsf.org/licensing/licenses/agpl-3.0.html).'), STATUSNET_VERSION); $output = common_markup_to_html($instr); $this->raw($output); diff --git a/lib/activity.php b/lib/activity.php index 2cb80f9e1a..bd1d5d56c0 100644 --- a/lib/activity.php +++ b/lib/activity.php @@ -32,971 +32,6 @@ if (!defined('STATUSNET')) { exit(1); } -class PoCoURL -{ - const URLS = 'urls'; - const TYPE = 'type'; - const VALUE = 'value'; - const PRIMARY = 'primary'; - - public $type; - public $value; - public $primary; - - function __construct($type, $value, $primary = false) - { - $this->type = $type; - $this->value = $value; - $this->primary = $primary; - } - - function asString() - { - $xs = new XMLStringer(true); - $xs->elementStart('poco:urls'); - $xs->element('poco:type', null, $this->type); - $xs->element('poco:value', null, $this->value); - if (!empty($this->primary)) { - $xs->element('poco:primary', null, 'true'); - } - $xs->elementEnd('poco:urls'); - return $xs->getString(); - } -} - -class PoCoAddress -{ - const ADDRESS = 'address'; - const FORMATTED = 'formatted'; - - public $formatted; - - // @todo Other address fields - - function asString() - { - if (!empty($this->formatted)) { - $xs = new XMLStringer(true); - $xs->elementStart('poco:address'); - $xs->element('poco:formatted', null, $this->formatted); - $xs->elementEnd('poco:address'); - return $xs->getString(); - } - - return null; - } -} - -class PoCo -{ - const NS = 'http://portablecontacts.net/spec/1.0'; - - const USERNAME = 'preferredUsername'; - const DISPLAYNAME = 'displayName'; - const NOTE = 'note'; - - public $preferredUsername; - public $displayName; - public $note; - public $address; - public $urls = array(); - - function __construct($element = null) - { - if (empty($element)) { - return; - } - - $this->preferredUsername = ActivityUtils::childContent( - $element, - self::USERNAME, - self::NS - ); - - $this->displayName = ActivityUtils::childContent( - $element, - self::DISPLAYNAME, - self::NS - ); - - $this->note = ActivityUtils::childContent( - $element, - self::NOTE, - self::NS - ); - - $this->address = $this->_getAddress($element); - $this->urls = $this->_getURLs($element); - } - - private function _getURLs($element) - { - $urlEls = $element->getElementsByTagnameNS(self::NS, PoCoURL::URLS); - $urls = array(); - - foreach ($urlEls as $urlEl) { - - $type = ActivityUtils::childContent( - $urlEl, - PoCoURL::TYPE, - PoCo::NS - ); - - $value = ActivityUtils::childContent( - $urlEl, - PoCoURL::VALUE, - PoCo::NS - ); - - $primary = ActivityUtils::childContent( - $urlEl, - PoCoURL::PRIMARY, - PoCo::NS - ); - - $isPrimary = false; - - if (isset($primary) && $primary == 'true') { - $isPrimary = true; - } - - // @todo check to make sure a primary hasn't already been added - - array_push($urls, new PoCoURL($type, $value, $isPrimary)); - } - return $urls; - } - - private function _getAddress($element) - { - $addressEl = ActivityUtils::child( - $element, - PoCoAddress::ADDRESS, - PoCo::NS - ); - - if (!empty($addressEl)) { - $formatted = ActivityUtils::childContent( - $addressEl, - PoCoAddress::FORMATTED, - self::NS - ); - - if (!empty($formatted)) { - $address = new PoCoAddress(); - $address->formatted = $formatted; - return $address; - } - } - - return null; - } - - function fromProfile($profile) - { - if (empty($profile)) { - return null; - } - - $poco = new PoCo(); - - $poco->preferredUsername = $profile->nickname; - $poco->displayName = $profile->getBestName(); - - $poco->note = $profile->bio; - - $paddy = new PoCoAddress(); - $paddy->formatted = $profile->location; - $poco->address = $paddy; - - if (!empty($profile->homepage)) { - array_push( - $poco->urls, - new PoCoURL( - 'homepage', - $profile->homepage, - true - ) - ); - } - - return $poco; - } - - function fromGroup($group) - { - if (empty($group)) { - return null; - } - - $poco = new PoCo(); - - $poco->preferredUsername = $group->nickname; - $poco->displayName = $group->getBestName(); - - $poco->note = $group->description; - - $paddy = new PoCoAddress(); - $paddy->formatted = $group->location; - $poco->address = $paddy; - - if (!empty($group->homepage)) { - array_push( - $poco->urls, - new PoCoURL( - 'homepage', - $group->homepage, - true - ) - ); - } - - return $poco; - } - - function getPrimaryURL() - { - foreach ($this->urls as $url) { - if ($url->primary) { - return $url; - } - } - } - - function asString() - { - $xs = new XMLStringer(true); - $xs->element( - 'poco:preferredUsername', - null, - $this->preferredUsername - ); - - $xs->element( - 'poco:displayName', - null, - $this->displayName - ); - - if (!empty($this->note)) { - $xs->element('poco:note', null, $this->note); - } - - if (!empty($this->address)) { - $xs->raw($this->address->asString()); - } - - foreach ($this->urls as $url) { - $xs->raw($url->asString()); - } - - return $xs->getString(); - } -} - -/** - * Utilities for turning DOMish things into Activityish things - * - * Some common functions that I didn't have the bandwidth to try to factor - * into some kind of reasonable superclass, so just dumped here. Might - * be useful to have an ActivityObject parent class or something. - * - * @category OStatus - * @package StatusNet - * @author Evan Prodromou - * @copyright 2010 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 - * @link http://status.net/ - */ - -class ActivityUtils -{ - const ATOM = 'http://www.w3.org/2005/Atom'; - - const LINK = 'link'; - const REL = 'rel'; - const TYPE = 'type'; - const HREF = 'href'; - - const CONTENT = 'content'; - const SRC = 'src'; - - /** - * Get the permalink for an Activity object - * - * @param DOMElement $element A DOM element - * - * @return string related link, if any - */ - - static function getPermalink($element) - { - return self::getLink($element, 'alternate', 'text/html'); - } - - /** - * Get the permalink for an Activity object - * - * @param DOMElement $element A DOM element - * - * @return string related link, if any - */ - - static function getLink(DOMNode $element, $rel, $type=null) - { - $els = $element->childNodes; - - foreach ($els as $link) { - if ($link->localName == self::LINK && $link->namespaceURI == self::ATOM) { - - $linkRel = $link->getAttribute(self::REL); - $linkType = $link->getAttribute(self::TYPE); - - if ($linkRel == $rel && - (is_null($type) || $linkType == $type)) { - return $link->getAttribute(self::HREF); - } - } - } - - return null; - } - - static function getLinks(DOMNode $element, $rel, $type=null) - { - $els = $element->childNodes; - $out = array(); - - foreach ($els as $link) { - if ($link->localName == self::LINK && $link->namespaceURI == self::ATOM) { - - $linkRel = $link->getAttribute(self::REL); - $linkType = $link->getAttribute(self::TYPE); - - if ($linkRel == $rel && - (is_null($type) || $linkType == $type)) { - $out[] = $link; - } - } - } - - return $out; - } - - /** - * Gets the first child element with the given tag - * - * @param DOMElement $element element to pick at - * @param string $tag tag to look for - * @param string $namespace Namespace to look under - * - * @return DOMElement found element or null - */ - - static function child(DOMNode $element, $tag, $namespace=self::ATOM) - { - $els = $element->childNodes; - if (empty($els) || $els->length == 0) { - return null; - } else { - for ($i = 0; $i < $els->length; $i++) { - $el = $els->item($i); - if ($el->localName == $tag && $el->namespaceURI == $namespace) { - return $el; - } - } - } - } - - /** - * Grab the text content of a DOM element child of the current element - * - * @param DOMElement $element Element whose children we examine - * @param string $tag Tag to look up - * @param string $namespace Namespace to use, defaults to Atom - * - * @return string content of the child - */ - - static function childContent(DOMNode $element, $tag, $namespace=self::ATOM) - { - $el = self::child($element, $tag, $namespace); - - if (empty($el)) { - return null; - } else { - return $el->textContent; - } - } - - /** - * Get the content of an atom:entry-like object - * - * @param DOMElement $element The element to examine. - * - * @return string unencoded HTML content of the element, like "This -< is HTML." - * - * @todo handle remote content - * @todo handle embedded XML mime types - * @todo handle base64-encoded non-XML and non-text mime types - */ - - static function getContent($element) - { - $contentEl = ActivityUtils::child($element, self::CONTENT); - - if (!empty($contentEl)) { - - $src = $contentEl->getAttribute(self::SRC); - - if (!empty($src)) { - throw new ClientException(_("Can't handle remote content yet.")); - } - - $type = $contentEl->getAttribute(self::TYPE); - - // slavishly following http://atompub.org/rfc4287.html#rfc.section.4.1.3.3 - - if ($type == 'text') { - return $contentEl->textContent; - } else if ($type == 'html') { - $text = $contentEl->textContent; - return htmlspecialchars_decode($text, ENT_QUOTES); - } else if ($type == 'xhtml') { - $divEl = ActivityUtils::child($contentEl, 'div'); - if (empty($divEl)) { - return null; - } - $doc = $divEl->ownerDocument; - $text = ''; - $children = $divEl->childNodes; - - for ($i = 0; $i < $children->length; $i++) { - $child = $children->item($i); - $text .= $doc->saveXML($child); - } - return trim($text); - } else if (in_array(array('text/xml', 'application/xml'), $type) || - preg_match('#(+|/)xml$#', $type)) { - throw new ClientException(_("Can't handle embedded XML content yet.")); - } else if (strncasecmp($type, 'text/', 5)) { - return $contentEl->textContent; - } else { - throw new ClientException(_("Can't handle embedded Base64 content yet.")); - } - } - } -} - -// XXX: Arg! This wouldn't be necessary if we used Avatars conistently -class AvatarLink -{ - public $url; - public $type; - public $size; - public $width; - public $height; - - function __construct($element=null) - { - if ($element) { - // @fixme use correct namespaces - $this->url = $element->getAttribute('href'); - $this->type = $element->getAttribute('type'); - $width = $element->getAttribute('media:width'); - if ($width != null) { - $this->width = intval($width); - } - $height = $element->getAttribute('media:height'); - if ($height != null) { - $this->height = intval($height); - } - } - } - - static function fromAvatar($avatar) - { - if (empty($avatar)) { - return null; - } - $alink = new AvatarLink(); - $alink->type = $avatar->mediatype; - $alink->height = $avatar->height; - $alink->width = $avatar->width; - $alink->url = $avatar->displayUrl(); - return $alink; - } - - static function fromFilename($filename, $size) - { - $alink = new AvatarLink(); - $alink->url = $filename; - $alink->height = $size; - if (!empty($filename)) { - $alink->width = $size; - $alink->type = self::mediatype($filename); - } else { - $alink->url = User_group::defaultLogo($size); - $alink->type = 'image/png'; - } - return $alink; - } - - // yuck! - static function mediatype($filename) { - $ext = strtolower(end(explode('.', $filename))); - if ($ext == 'jpeg') { - $ext = 'jpg'; - } - // hope we don't support any others - $types = array('png', 'gif', 'jpg', 'jpeg'); - if (in_array($ext, $types)) { - return 'image/' . $ext; - } - return null; - } -} - -/** - * A noun-ish thing in the activity universe - * - * The activity streams spec talks about activity objects, while also having - * a tag activity:object, which is in fact an activity object. Aaaaaah! - * - * This is just a thing in the activity universe. Can be the subject, object, - * or indirect object (target!) of an activity verb. Rotten name, and I'm - * propagating it. *sigh* - * - * @category OStatus - * @package StatusNet - * @author Evan Prodromou - * @copyright 2010 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 - * @link http://status.net/ - */ - -class ActivityObject -{ - const ARTICLE = 'http://activitystrea.ms/schema/1.0/article'; - const BLOGENTRY = 'http://activitystrea.ms/schema/1.0/blog-entry'; - const NOTE = 'http://activitystrea.ms/schema/1.0/note'; - const STATUS = 'http://activitystrea.ms/schema/1.0/status'; - const FILE = 'http://activitystrea.ms/schema/1.0/file'; - const PHOTO = 'http://activitystrea.ms/schema/1.0/photo'; - const ALBUM = 'http://activitystrea.ms/schema/1.0/photo-album'; - const PLAYLIST = 'http://activitystrea.ms/schema/1.0/playlist'; - const VIDEO = 'http://activitystrea.ms/schema/1.0/video'; - const AUDIO = 'http://activitystrea.ms/schema/1.0/audio'; - const BOOKMARK = 'http://activitystrea.ms/schema/1.0/bookmark'; - const PERSON = 'http://activitystrea.ms/schema/1.0/person'; - const GROUP = 'http://activitystrea.ms/schema/1.0/group'; - const PLACE = 'http://activitystrea.ms/schema/1.0/place'; - const COMMENT = 'http://activitystrea.ms/schema/1.0/comment'; - // ^^^^^^^^^^ tea! - - // Atom elements we snarf - - const TITLE = 'title'; - const SUMMARY = 'summary'; - const ID = 'id'; - const SOURCE = 'source'; - - const NAME = 'name'; - const URI = 'uri'; - const EMAIL = 'email'; - - public $element; - public $type; - public $id; - public $title; - public $summary; - public $content; - public $link; - public $source; - public $avatarLinks = array(); - public $geopoint; - public $poco; - public $displayName; - - /** - * Constructor - * - * This probably needs to be refactored - * to generate a local class (ActivityPerson, ActivityFile, ...) - * based on the object type. - * - * @param DOMElement $element DOM thing to turn into an Activity thing - */ - - function __construct($element = null) - { - if (empty($element)) { - return; - } - - $this->element = $element; - - $this->geopoint = $this->_childContent( - $element, - ActivityContext::POINT, - ActivityContext::GEORSS - ); - - if ($element->tagName == 'author') { - - $this->type = self::PERSON; // XXX: is this fair? - $this->title = $this->_childContent($element, self::NAME); - $this->id = $this->_childContent($element, self::URI); - - if (empty($this->id)) { - $email = $this->_childContent($element, self::EMAIL); - if (!empty($email)) { - // XXX: acct: ? - $this->id = 'mailto:'.$email; - } - } - - } else { - - $this->type = $this->_childContent($element, Activity::OBJECTTYPE, - Activity::SPEC); - - if (empty($this->type)) { - $this->type = ActivityObject::NOTE; - } - - $this->id = $this->_childContent($element, self::ID); - $this->title = $this->_childContent($element, self::TITLE); - $this->summary = $this->_childContent($element, self::SUMMARY); - - $this->source = $this->_getSource($element); - - $this->content = ActivityUtils::getContent($element); - - $this->link = ActivityUtils::getPermalink($element); - - } - - // Some per-type attributes... - if ($this->type == self::PERSON || $this->type == self::GROUP) { - $this->displayName = $this->title; - - $avatars = ActivityUtils::getLinks($element, 'avatar'); - foreach ($avatars as $link) { - $this->avatarLinks[] = new AvatarLink($link); - } - - $this->poco = new PoCo($element); - } - } - - private function _childContent($element, $tag, $namespace=ActivityUtils::ATOM) - { - return ActivityUtils::childContent($element, $tag, $namespace); - } - - // Try to get a unique id for the source feed - - private function _getSource($element) - { - $sourceEl = ActivityUtils::child($element, 'source'); - - if (empty($sourceEl)) { - return null; - } else { - $href = ActivityUtils::getLink($sourceEl, 'self'); - if (!empty($href)) { - return $href; - } else { - return ActivityUtils::childContent($sourceEl, 'id'); - } - } - } - - static function fromNotice($notice) - { - $object = new ActivityObject(); - - $object->type = ActivityObject::NOTE; - - $object->id = $notice->uri; - $object->title = $notice->content; - $object->content = $notice->rendered; - $object->link = $notice->bestUrl(); - - return $object; - } - - static function fromProfile($profile) - { - $object = new ActivityObject(); - - $object->type = ActivityObject::PERSON; - $object->id = $profile->getUri(); - $object->title = $profile->getBestName(); - $object->link = $profile->profileurl; - - $orig = $profile->getOriginalAvatar(); - - if (!empty($orig)) { - $object->avatarLinks[] = AvatarLink::fromAvatar($orig); - } - - $sizes = array( - AVATAR_PROFILE_SIZE, - AVATAR_STREAM_SIZE, - AVATAR_MINI_SIZE - ); - - foreach ($sizes as $size) { - - $alink = null; - $avatar = $profile->getAvatar($size); - - if (!empty($avatar)) { - $alink = AvatarLink::fromAvatar($avatar); - } else { - $alink = new AvatarLink(); - $alink->type = 'image/png'; - $alink->height = $size; - $alink->width = $size; - $alink->url = Avatar::defaultImage($size); - } - - $object->avatarLinks[] = $alink; - } - - if (isset($profile->lat) && isset($profile->lon)) { - $object->geopoint = (float)$profile->lat - . ' ' . (float)$profile->lon; - } - - $object->poco = PoCo::fromProfile($profile); - - return $object; - } - - static function fromGroup($group) - { - $object = new ActivityObject(); - - $object->type = ActivityObject::GROUP; - $object->id = $group->getUri(); - $object->title = $group->getBestName(); - $object->link = $group->getUri(); - - $object->avatarLinks[] = AvatarLink::fromFilename( - $group->homepage_logo, - AVATAR_PROFILE_SIZE - ); - - $object->avatarLinks[] = AvatarLink::fromFilename( - $group->stream_logo, - AVATAR_STREAM_SIZE - ); - - $object->avatarLinks[] = AvatarLink::fromFilename( - $group->mini_logo, - AVATAR_MINI_SIZE - ); - - $object->poco = PoCo::fromGroup($group); - - return $object; - } - - - function asString($tag='activity:object') - { - $xs = new XMLStringer(true); - - $xs->elementStart($tag); - - $xs->element('activity:object-type', null, $this->type); - - $xs->element(self::ID, null, $this->id); - - if (!empty($this->title)) { - $xs->element(self::TITLE, null, $this->title); - } - - if (!empty($this->summary)) { - $xs->element(self::SUMMARY, null, $this->summary); - } - - if (!empty($this->content)) { - // XXX: assuming HTML content here - $xs->element(ActivityUtils::CONTENT, array('type' => 'html'), $this->content); - } - - if (!empty($this->link)) { - $xs->element( - 'link', - array( - 'rel' => 'alternate', - 'type' => 'text/html', - 'href' => $this->link - ), - null - ); - } - - if ($this->type == ActivityObject::PERSON - || $this->type == ActivityObject::GROUP) { - - foreach ($this->avatarLinks as $avatar) { - $xs->element( - 'link', array( - 'rel' => 'avatar', - 'type' => $avatar->type, - 'media:width' => $avatar->width, - 'media:height' => $avatar->height, - 'href' => $avatar->url - ), - null - ); - } - } - - if (!empty($this->geopoint)) { - $xs->element( - 'georss:point', - null, - $this->geopoint - ); - } - - if (!empty($this->poco)) { - $xs->raw($this->poco->asString()); - } - - $xs->elementEnd($tag); - - return $xs->getString(); - } -} - -/** - * Utility class to hold a bunch of constant defining default verb types - * - * @category OStatus - * @package StatusNet - * @author Evan Prodromou - * @copyright 2010 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 - * @link http://status.net/ - */ - -class ActivityVerb -{ - const POST = 'http://activitystrea.ms/schema/1.0/post'; - const SHARE = 'http://activitystrea.ms/schema/1.0/share'; - const SAVE = 'http://activitystrea.ms/schema/1.0/save'; - const FAVORITE = 'http://activitystrea.ms/schema/1.0/favorite'; - const PLAY = 'http://activitystrea.ms/schema/1.0/play'; - const FOLLOW = 'http://activitystrea.ms/schema/1.0/follow'; - const FRIEND = 'http://activitystrea.ms/schema/1.0/make-friend'; - const JOIN = 'http://activitystrea.ms/schema/1.0/join'; - const TAG = 'http://activitystrea.ms/schema/1.0/tag'; - - // Custom OStatus verbs for the flipside until they're standardized - const DELETE = 'http://ostatus.org/schema/1.0/unfollow'; - const UNFAVORITE = 'http://ostatus.org/schema/1.0/unfavorite'; - const UNFOLLOW = 'http://ostatus.org/schema/1.0/unfollow'; - const LEAVE = 'http://ostatus.org/schema/1.0/leave'; - - // For simple profile-update pings; no content to share. - const UPDATE_PROFILE = 'http://ostatus.org/schema/1.0/update-profile'; -} - -class ActivityContext -{ - public $replyToID; - public $replyToUrl; - public $location; - public $attention = array(); - public $conversation; - - const THR = 'http://purl.org/syndication/thread/1.0'; - const GEORSS = 'http://www.georss.org/georss'; - const OSTATUS = 'http://ostatus.org/schema/1.0'; - - const INREPLYTO = 'in-reply-to'; - const REF = 'ref'; - const HREF = 'href'; - - const POINT = 'point'; - - const ATTENTION = 'ostatus:attention'; - const CONVERSATION = 'ostatus:conversation'; - - function __construct($element) - { - $replyToEl = ActivityUtils::child($element, self::INREPLYTO, self::THR); - - if (!empty($replyToEl)) { - $this->replyToID = $replyToEl->getAttribute(self::REF); - $this->replyToUrl = $replyToEl->getAttribute(self::HREF); - } - - $this->location = $this->getLocation($element); - - $this->conversation = ActivityUtils::getLink($element, self::CONVERSATION); - - // Multiple attention links allowed - - $links = $element->getElementsByTagNameNS(ActivityUtils::ATOM, ActivityUtils::LINK); - - for ($i = 0; $i < $links->length; $i++) { - - $link = $links->item($i); - - $linkRel = $link->getAttribute(ActivityUtils::REL); - - if ($linkRel == self::ATTENTION) { - $this->attention[] = $link->getAttribute(self::HREF); - } - } - } - - /** - * Parse location given as a GeoRSS-simple point, if provided. - * http://www.georss.org/simple - * - * @param feed item $entry - * @return mixed Location or false - */ - function getLocation($dom) - { - $points = $dom->getElementsByTagNameNS(self::GEORSS, self::POINT); - - for ($i = 0; $i < $points->length; $i++) { - $point = $points->item($i)->textContent; - return self::locationFromPoint($point); - } - - return null; - } - - // XXX: Move to ActivityUtils or Location? - static function locationFromPoint($point) - { - $point = str_replace(',', ' ', $point); // per spec "treat commas as whitespace" - $point = preg_replace('/\s+/', ' ', $point); - $point = trim($point); - $coords = explode(' ', $point); - if (count($coords) == 2) { - list($lat, $lon) = $coords; - if (is_numeric($lat) && is_numeric($lon)) { - common_log(LOG_INFO, "Looking up location for $lat $lon from georss point"); - return Location::fromLatLon($lat, $lon); - } - } - common_log(LOG_ERR, "Ignoring bogus georss:point value $point"); - return null; - } -} - /** * An activity in the ActivityStrea.ms world * @@ -1033,6 +68,21 @@ class Activity const PUBLISHED = 'published'; const UPDATED = 'updated'; + const RSS = null; // no namespace! + + const PUBDATE = 'pubDate'; + const DESCRIPTION = 'description'; + const GUID = 'guid'; + const SELF = 'self'; + const IMAGE = 'image'; + const URL = 'url'; + + const DC = 'http://purl.org/dc/elements/1.1/'; + + const CREATOR = 'creator'; + + const CONTENTNS = 'http://purl.org/rss/1.0/modules/content/'; + public $actor; // an ActivityObject public $verb; // a string (the URL) public $object; // an ActivityObject @@ -1063,21 +113,29 @@ class Activity return; } - $this->entry = $entry; - - // @fixme Don't send in a DOMDocument + // Insist on a feed's root DOMElement; don't allow a DOMDocument if ($feed instanceof DOMDocument) { - common_log( - LOG_WARNING, - 'Activity::__construct() - ' - . 'DOMDocument passed in for feed by mistake. ' - . "Expecting a 'feed' DOMElement." + throw new ClientException( + _("Expecting a root feed element but got a whole XML document.") ); - $feed = $feed->getElementsByTagName('feed')->item(0); } + $this->entry = $entry; $this->feed = $feed; + if ($entry->namespaceURI == Activity::ATOM && + $entry->localName == 'entry') { + $this->_fromAtomEntry($entry, $feed); + } else if ($entry->namespaceURI == Activity::RSS && + $entry->localName == 'item') { + $this->_fromRssItem($entry, $feed); + } else { + throw new Exception("Unknown DOM element: {$entry->namespaceURI} {$entry->localName}"); + } + } + + function _fromAtomEntry($entry, $feed) + { $pubEl = $this->_child($entry, self::PUBLISHED, self::ATOM); if (!empty($pubEl)) { @@ -1163,6 +221,69 @@ class Activity } } + function _fromRssItem($item, $channel) + { + $verbEl = $this->_child($item, self::VERB); + + if (!empty($verbEl)) { + $this->verb = trim($verbEl->textContent); + } else { + $this->verb = ActivityVerb::POST; + // XXX: do other implied stuff here + } + + $pubDateEl = $this->_child($item, self::PUBDATE, self::RSS); + + if (!empty($pubDateEl)) { + $this->time = strtotime($pubDateEl->textContent); + } + + if ($authorEl = $this->_child($item, self::AUTHOR, self::RSS)) { + $this->actor = ActivityObject::fromRssAuthor($authorEl); + } else if ($dcCreatorEl = $this->_child($item, self::CREATOR, self::DC)) { + $this->actor = ActivityObject::fromDcCreator($dcCreatorEl); + } else if ($posterousEl = $this->_child($item, ActivityObject::AUTHOR, ActivityObject::POSTEROUS)) { + // Special case for Posterous.com + $this->actor = ActivityObject::fromPosterousAuthor($posterousEl); + } else if (!empty($channel)) { + $this->actor = ActivityObject::fromRssChannel($channel); + } else { + // No actor! + } + + $this->title = ActivityUtils::childContent($item, ActivityObject::TITLE, self::RSS); + + $contentEl = ActivityUtils::child($item, ActivityUtils::CONTENT, self::CONTENTNS); + + if (!empty($contentEl)) { + $this->content = htmlspecialchars_decode($contentEl->textContent, ENT_QUOTES); + } else { + $descriptionEl = ActivityUtils::child($item, self::DESCRIPTION, self::RSS); + if (!empty($descriptionEl)) { + $this->content = htmlspecialchars_decode($descriptionEl->textContent, ENT_QUOTES); + } + } + + $this->link = ActivityUtils::childContent($item, ActivityUtils::LINK, self::RSS); + + // @fixme enclosures + // @fixme thumbnails... maybe + + $guidEl = ActivityUtils::child($item, self::GUID, self::RSS); + + if (!empty($guidEl)) { + $this->id = $guidEl->textContent; + + if ($guidEl->hasAttribute('isPermaLink') && $guidEl->getAttribute('isPermaLink') != 'false') { + // overwrites + $this->link = $this->id; + } + } + + $this->object = new ActivityObject($item); + $this->context = new ActivityContext($item); + } + /** * Returns an Atom based on this activity * @@ -1241,48 +362,3 @@ class Activity } } -class AtomCategory -{ - public $term; - public $scheme; - public $label; - - function __construct($element=null) - { - if ($element && $element->attributes) { - $this->term = $this->extract($element, 'term'); - $this->scheme = $this->extract($element, 'scheme'); - $this->label = $this->extract($element, 'label'); - } - } - - protected function extract($element, $attrib) - { - $node = $element->attributes->getNamedItemNS(Activity::ATOM, $attrib); - if ($node) { - return trim($node->textContent); - } - $node = $element->attributes->getNamedItem($attrib); - if ($node) { - return trim($node->textContent); - } - return null; - } - - function asString() - { - $attribs = array(); - if ($this->term !== null) { - $attribs['term'] = $this->term; - } - if ($this->scheme !== null) { - $attribs['scheme'] = $this->scheme; - } - if ($this->label !== null) { - $attribs['label'] = $this->label; - } - $xs = new XMLStringer(); - $xs->element('category', $attribs); - return $xs->asString(); - } -} diff --git a/lib/activitycontext.php b/lib/activitycontext.php new file mode 100644 index 0000000000..2df7613f7d --- /dev/null +++ b/lib/activitycontext.php @@ -0,0 +1,121 @@ +. + * + * @category Feed + * @package StatusNet + * @author Evan Prodromou + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class ActivityContext +{ + public $replyToID; + public $replyToUrl; + public $location; + public $attention = array(); + public $conversation; + + const THR = 'http://purl.org/syndication/thread/1.0'; + const GEORSS = 'http://www.georss.org/georss'; + const OSTATUS = 'http://ostatus.org/schema/1.0'; + + const INREPLYTO = 'in-reply-to'; + const REF = 'ref'; + const HREF = 'href'; + + const POINT = 'point'; + + const ATTENTION = 'ostatus:attention'; + const CONVERSATION = 'ostatus:conversation'; + + function __construct($element) + { + $replyToEl = ActivityUtils::child($element, self::INREPLYTO, self::THR); + + if (!empty($replyToEl)) { + $this->replyToID = $replyToEl->getAttribute(self::REF); + $this->replyToUrl = $replyToEl->getAttribute(self::HREF); + } + + $this->location = $this->getLocation($element); + + $this->conversation = ActivityUtils::getLink($element, self::CONVERSATION); + + // Multiple attention links allowed + + $links = $element->getElementsByTagNameNS(ActivityUtils::ATOM, ActivityUtils::LINK); + + for ($i = 0; $i < $links->length; $i++) { + + $link = $links->item($i); + + $linkRel = $link->getAttribute(ActivityUtils::REL); + + if ($linkRel == self::ATTENTION) { + $this->attention[] = $link->getAttribute(self::HREF); + } + } + } + + /** + * Parse location given as a GeoRSS-simple point, if provided. + * http://www.georss.org/simple + * + * @param feed item $entry + * @return mixed Location or false + */ + function getLocation($dom) + { + $points = $dom->getElementsByTagNameNS(self::GEORSS, self::POINT); + + for ($i = 0; $i < $points->length; $i++) { + $point = $points->item($i)->textContent; + return self::locationFromPoint($point); + } + + return null; + } + + // XXX: Move to ActivityUtils or Location? + static function locationFromPoint($point) + { + $point = str_replace(',', ' ', $point); // per spec "treat commas as whitespace" + $point = preg_replace('/\s+/', ' ', $point); + $point = trim($point); + $coords = explode(' ', $point); + if (count($coords) == 2) { + list($lat, $lon) = $coords; + if (is_numeric($lat) && is_numeric($lon)) { + common_log(LOG_INFO, "Looking up location for $lat $lon from georss point"); + return Location::fromLatLon($lat, $lon); + } + } + common_log(LOG_ERR, "Ignoring bogus georss:point value $point"); + return null; + } +} diff --git a/lib/activityobject.php b/lib/activityobject.php new file mode 100644 index 0000000000..0a358ccabb --- /dev/null +++ b/lib/activityobject.php @@ -0,0 +1,548 @@ +. + * + * @category Feed + * @package StatusNet + * @author Evan Prodromou + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * A noun-ish thing in the activity universe + * + * The activity streams spec talks about activity objects, while also having + * a tag activity:object, which is in fact an activity object. Aaaaaah! + * + * This is just a thing in the activity universe. Can be the subject, object, + * or indirect object (target!) of an activity verb. Rotten name, and I'm + * propagating it. *sigh* + * + * @category OStatus + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +class ActivityObject +{ + const ARTICLE = 'http://activitystrea.ms/schema/1.0/article'; + const BLOGENTRY = 'http://activitystrea.ms/schema/1.0/blog-entry'; + const NOTE = 'http://activitystrea.ms/schema/1.0/note'; + const STATUS = 'http://activitystrea.ms/schema/1.0/status'; + const FILE = 'http://activitystrea.ms/schema/1.0/file'; + const PHOTO = 'http://activitystrea.ms/schema/1.0/photo'; + const ALBUM = 'http://activitystrea.ms/schema/1.0/photo-album'; + const PLAYLIST = 'http://activitystrea.ms/schema/1.0/playlist'; + const VIDEO = 'http://activitystrea.ms/schema/1.0/video'; + const AUDIO = 'http://activitystrea.ms/schema/1.0/audio'; + const BOOKMARK = 'http://activitystrea.ms/schema/1.0/bookmark'; + const PERSON = 'http://activitystrea.ms/schema/1.0/person'; + const GROUP = 'http://activitystrea.ms/schema/1.0/group'; + const PLACE = 'http://activitystrea.ms/schema/1.0/place'; + const COMMENT = 'http://activitystrea.ms/schema/1.0/comment'; + // ^^^^^^^^^^ tea! + + // Atom elements we snarf + + const TITLE = 'title'; + const SUMMARY = 'summary'; + const ID = 'id'; + const SOURCE = 'source'; + + const NAME = 'name'; + const URI = 'uri'; + const EMAIL = 'email'; + + const POSTEROUS = 'http://posterous.com/help/rss/1.0'; + const AUTHOR = 'author'; + const USERIMAGE = 'userImage'; + const PROFILEURL = 'profileUrl'; + const NICKNAME = 'nickName'; + const DISPLAYNAME = 'displayName'; + + public $element; + public $type; + public $id; + public $title; + public $summary; + public $content; + public $link; + public $source; + public $avatarLinks = array(); + public $geopoint; + public $poco; + public $displayName; + + /** + * Constructor + * + * This probably needs to be refactored + * to generate a local class (ActivityPerson, ActivityFile, ...) + * based on the object type. + * + * @param DOMElement $element DOM thing to turn into an Activity thing + */ + + function __construct($element = null) + { + if (empty($element)) { + return; + } + + $this->element = $element; + + $this->geopoint = $this->_childContent( + $element, + ActivityContext::POINT, + ActivityContext::GEORSS + ); + + if ($element->tagName == 'author') { + $this->_fromAuthor($element); + } else if ($element->tagName == 'item') { + $this->_fromRssItem($element); + } else { + $this->_fromAtomEntry($element); + } + + // Some per-type attributes... + if ($this->type == self::PERSON || $this->type == self::GROUP) { + $this->displayName = $this->title; + + $photos = ActivityUtils::getLinks($element, 'photo'); + if (count($photos)) { + foreach ($photos as $link) { + $this->avatarLinks[] = new AvatarLink($link); + } + } else { + $avatars = ActivityUtils::getLinks($element, 'avatar'); + foreach ($avatars as $link) { + $this->avatarLinks[] = new AvatarLink($link); + } + } + + $this->poco = new PoCo($element); + } + } + + private function _fromAuthor($element) + { + $this->type = self::PERSON; // XXX: is this fair? + $this->title = $this->_childContent($element, self::NAME); + + $id = $this->_childContent($element, self::URI); + if (ActivityUtils::validateUri($id)) { + $this->id = $id; + } + + if (empty($this->id)) { + $email = $this->_childContent($element, self::EMAIL); + if (!empty($email)) { + // XXX: acct: ? + $this->id = 'mailto:'.$email; + } + } + } + + private function _fromAtomEntry($element) + { + if ($element->localName == 'actor') { + // Old-fashioned ... + // First pull anything from , then we'll add on top. + $author = ActivityUtils::child($element->parentNode, 'author'); + if ($author) { + $this->_fromAuthor($author); + } + } + + $this->type = $this->_childContent($element, Activity::OBJECTTYPE, + Activity::SPEC); + + if (empty($this->type)) { + $this->type = ActivityObject::NOTE; + } + + $id = $this->_childContent($element, self::ID); + if (ActivityUtils::validateUri($id)) { + $this->id = $id; + } + + $this->summary = ActivityUtils::childHtmlContent($element, self::SUMMARY); + $this->content = ActivityUtils::getContent($element); + + // We don't like HTML in our titles, although it's technically allowed + + $title = ActivityUtils::childHtmlContent($element, self::TITLE); + + $this->title = html_entity_decode(strip_tags($title)); + + $this->source = $this->_getSource($element); + + $this->link = ActivityUtils::getPermalink($element); + } + + // @fixme rationalize with Activity::_fromRssItem() + + private function _fromRssItem($item) + { + $this->title = ActivityUtils::childContent($item, ActivityObject::TITLE, Activity::RSS); + + $contentEl = ActivityUtils::child($item, ActivityUtils::CONTENT, Activity::CONTENTNS); + + if (!empty($contentEl)) { + $this->content = htmlspecialchars_decode($contentEl->textContent, ENT_QUOTES); + } else { + $descriptionEl = ActivityUtils::child($item, Activity::DESCRIPTION, Activity::RSS); + if (!empty($descriptionEl)) { + $this->content = htmlspecialchars_decode($descriptionEl->textContent, ENT_QUOTES); + } + } + + $this->link = ActivityUtils::childContent($item, ActivityUtils::LINK, Activity::RSS); + + $guidEl = ActivityUtils::child($item, Activity::GUID, Activity::RSS); + + if (!empty($guidEl)) { + $this->id = $guidEl->textContent; + + if ($guidEl->hasAttribute('isPermaLink')) { + // overwrites + $this->link = $this->id; + } + } + } + + public static function fromRssAuthor($el) + { + $text = $el->textContent; + + if (preg_match('/^(.*?) \((.*)\)$/', $text, $match)) { + $email = $match[1]; + $name = $match[2]; + } else if (preg_match('/^(.*?) <(.*)>$/', $text, $match)) { + $name = $match[1]; + $email = $match[2]; + } else if (preg_match('/.*@.*/', $text)) { + $email = $text; + $name = null; + } else { + $name = $text; + $email = null; + } + + // Not really enough info + + $obj = new ActivityObject(); + + $obj->element = $el; + + $obj->type = ActivityObject::PERSON; + $obj->title = $name; + + if (!empty($email)) { + $obj->id = 'mailto:'.$email; + } + + return $obj; + } + + public static function fromDcCreator($el) + { + // Not really enough info + + $text = $el->textContent; + + $obj = new ActivityObject(); + + $obj->element = $el; + + $obj->title = $text; + $obj->type = ActivityObject::PERSON; + + return $obj; + } + + public static function fromRssChannel($el) + { + $obj = new ActivityObject(); + + $obj->element = $el; + + $obj->type = ActivityObject::PERSON; // @fixme guess better + + $obj->title = ActivityUtils::childContent($el, ActivityObject::TITLE, Activity::RSS); + $obj->link = ActivityUtils::childContent($el, ActivityUtils::LINK, Activity::RSS); + $obj->id = ActivityUtils::getLink($el, Activity::SELF); + + if (empty($obj->id)) { + $obj->id = $obj->link; + } + + $desc = ActivityUtils::childContent($el, Activity::DESCRIPTION, Activity::RSS); + + if (!empty($desc)) { + $obj->content = htmlspecialchars_decode($desc, ENT_QUOTES); + } + + $imageEl = ActivityUtils::child($el, Activity::IMAGE, Activity::RSS); + + if (!empty($imageEl)) { + $url = ActivityUtils::childContent($imageEl, Activity::URL, Activity::RSS); + $al = new AvatarLink(); + $al->url = $url; + $obj->avatarLinks[] = $al; + } + + return $obj; + } + + public static function fromPosterousAuthor($el) + { + $obj = new ActivityObject(); + + $obj->type = ActivityObject::PERSON; // @fixme any others...? + + $userImage = ActivityUtils::childContent($el, self::USERIMAGE, self::POSTEROUS); + + if (!empty($userImage)) { + $al = new AvatarLink(); + $al->url = $userImage; + $obj->avatarLinks[] = $al; + } + + $obj->link = ActivityUtils::childContent($el, self::PROFILEURL, self::POSTEROUS); + $obj->id = $obj->link; + + $obj->poco = new PoCo(); + + $obj->poco->preferredUsername = ActivityUtils::childContent($el, self::NICKNAME, self::POSTEROUS); + $obj->poco->displayName = ActivityUtils::childContent($el, self::DISPLAYNAME, self::POSTEROUS); + + $obj->title = $obj->poco->displayName; + + return $obj; + } + + private function _childContent($element, $tag, $namespace=ActivityUtils::ATOM) + { + return ActivityUtils::childContent($element, $tag, $namespace); + } + + // Try to get a unique id for the source feed + + private function _getSource($element) + { + $sourceEl = ActivityUtils::child($element, 'source'); + + if (empty($sourceEl)) { + return null; + } else { + $href = ActivityUtils::getLink($sourceEl, 'self'); + if (!empty($href)) { + return $href; + } else { + return ActivityUtils::childContent($sourceEl, 'id'); + } + } + } + + static function fromNotice(Notice $notice) + { + $object = new ActivityObject(); + + $object->type = ActivityObject::NOTE; + + $object->id = $notice->uri; + $object->title = $notice->content; + $object->content = $notice->rendered; + $object->link = $notice->bestUrl(); + + return $object; + } + + static function fromProfile(Profile $profile) + { + $object = new ActivityObject(); + + $object->type = ActivityObject::PERSON; + $object->id = $profile->getUri(); + $object->title = $profile->getBestName(); + $object->link = $profile->profileurl; + + $orig = $profile->getOriginalAvatar(); + + if (!empty($orig)) { + $object->avatarLinks[] = AvatarLink::fromAvatar($orig); + } + + $sizes = array( + AVATAR_PROFILE_SIZE, + AVATAR_STREAM_SIZE, + AVATAR_MINI_SIZE + ); + + foreach ($sizes as $size) { + + $alink = null; + $avatar = $profile->getAvatar($size); + + if (!empty($avatar)) { + $alink = AvatarLink::fromAvatar($avatar); + } else { + $alink = new AvatarLink(); + $alink->type = 'image/png'; + $alink->height = $size; + $alink->width = $size; + $alink->url = Avatar::defaultImage($size); + } + + $object->avatarLinks[] = $alink; + } + + if (isset($profile->lat) && isset($profile->lon)) { + $object->geopoint = (float)$profile->lat + . ' ' . (float)$profile->lon; + } + + $object->poco = PoCo::fromProfile($profile); + + return $object; + } + + static function fromGroup($group) + { + $object = new ActivityObject(); + + $object->type = ActivityObject::GROUP; + $object->id = $group->getUri(); + $object->title = $group->getBestName(); + $object->link = $group->getUri(); + + $object->avatarLinks[] = AvatarLink::fromFilename( + $group->homepage_logo, + AVATAR_PROFILE_SIZE + ); + + $object->avatarLinks[] = AvatarLink::fromFilename( + $group->stream_logo, + AVATAR_STREAM_SIZE + ); + + $object->avatarLinks[] = AvatarLink::fromFilename( + $group->mini_logo, + AVATAR_MINI_SIZE + ); + + $object->poco = PoCo::fromGroup($group); + + return $object; + } + + function asString($tag='activity:object') + { + $xs = new XMLStringer(true); + + $xs->elementStart($tag); + + $xs->element('activity:object-type', null, $this->type); + + $xs->element(self::ID, null, $this->id); + + if (!empty($this->title)) { + $xs->element( + self::TITLE, + null, + common_xml_safe_str($this->title) + ); + } + + if (!empty($this->summary)) { + $xs->element( + self::SUMMARY, + null, + common_xml_safe_str($this->summary) + ); + } + + if (!empty($this->content)) { + // XXX: assuming HTML content here + $xs->element( + ActivityUtils::CONTENT, + array('type' => 'html'), + common_xml_safe_str($this->content) + ); + } + + if (!empty($this->link)) { + $xs->element( + 'link', + array( + 'rel' => 'alternate', + 'type' => 'text/html', + 'href' => $this->link + ), + null + ); + } + + if ($this->type == ActivityObject::PERSON + || $this->type == ActivityObject::GROUP) { + + foreach ($this->avatarLinks as $avatar) { + $xs->element( + 'link', array( + 'rel' => 'avatar', + 'type' => $avatar->type, + 'media:width' => $avatar->width, + 'media:height' => $avatar->height, + 'href' => $avatar->url + ), + null + ); + } + } + + if (!empty($this->geopoint)) { + $xs->element( + 'georss:point', + null, + $this->geopoint + ); + } + + if (!empty($this->poco)) { + $xs->raw($this->poco->asString()); + } + + $xs->elementEnd($tag); + + return $xs->getString(); + } +} diff --git a/lib/activityutils.php b/lib/activityutils.php new file mode 100644 index 0000000000..a7e99fb11e --- /dev/null +++ b/lib/activityutils.php @@ -0,0 +1,265 @@ +. + * + * @category Feed + * @package StatusNet + * @author Evan Prodromou + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Utilities for turning DOMish things into Activityish things + * + * Some common functions that I didn't have the bandwidth to try to factor + * into some kind of reasonable superclass, so just dumped here. Might + * be useful to have an ActivityObject parent class or something. + * + * @category OStatus + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +class ActivityUtils +{ + const ATOM = 'http://www.w3.org/2005/Atom'; + + const LINK = 'link'; + const REL = 'rel'; + const TYPE = 'type'; + const HREF = 'href'; + + const CONTENT = 'content'; + const SRC = 'src'; + + /** + * Get the permalink for an Activity object + * + * @param DOMElement $element A DOM element + * + * @return string related link, if any + */ + + static function getPermalink($element) + { + return self::getLink($element, 'alternate', 'text/html'); + } + + /** + * Get the permalink for an Activity object + * + * @param DOMElement $element A DOM element + * + * @return string related link, if any + */ + + static function getLink(DOMNode $element, $rel, $type=null) + { + $els = $element->childNodes; + + foreach ($els as $link) { + + if (!($link instanceof DOMElement)) { + continue; + } + + if ($link->localName == self::LINK && $link->namespaceURI == self::ATOM) { + + $linkRel = $link->getAttribute(self::REL); + $linkType = $link->getAttribute(self::TYPE); + + if ($linkRel == $rel && + (is_null($type) || $linkType == $type)) { + return $link->getAttribute(self::HREF); + } + } + } + + return null; + } + + static function getLinks(DOMNode $element, $rel, $type=null) + { + $els = $element->childNodes; + $out = array(); + + foreach ($els as $link) { + if ($link->localName == self::LINK && $link->namespaceURI == self::ATOM) { + + $linkRel = $link->getAttribute(self::REL); + $linkType = $link->getAttribute(self::TYPE); + + if ($linkRel == $rel && + (is_null($type) || $linkType == $type)) { + $out[] = $link; + } + } + } + + return $out; + } + + /** + * Gets the first child element with the given tag + * + * @param DOMElement $element element to pick at + * @param string $tag tag to look for + * @param string $namespace Namespace to look under + * + * @return DOMElement found element or null + */ + + static function child(DOMNode $element, $tag, $namespace=self::ATOM) + { + $els = $element->childNodes; + if (empty($els) || $els->length == 0) { + return null; + } else { + for ($i = 0; $i < $els->length; $i++) { + $el = $els->item($i); + if ($el->localName == $tag && $el->namespaceURI == $namespace) { + return $el; + } + } + } + } + + /** + * Grab the text content of a DOM element child of the current element + * + * @param DOMElement $element Element whose children we examine + * @param string $tag Tag to look up + * @param string $namespace Namespace to use, defaults to Atom + * + * @return string content of the child + */ + + static function childContent(DOMNode $element, $tag, $namespace=self::ATOM) + { + $el = self::child($element, $tag, $namespace); + + if (empty($el)) { + return null; + } else { + return $el->textContent; + } + } + + static function childHtmlContent(DOMNode $element, $tag, $namespace=self::ATOM) + { + $el = self::child($element, $tag, $namespace); + + if (empty($el)) { + return null; + } else { + return self::textConstruct($el); + } + } + + /** + * Get the content of an atom:entry-like object + * + * @param DOMElement $element The element to examine. + * + * @return string unencoded HTML content of the element, like "This -< is HTML." + * + * @todo handle remote content + * @todo handle embedded XML mime types + * @todo handle base64-encoded non-XML and non-text mime types + */ + + static function getContent($element) + { + return self::childHtmlContent($element, self::CONTENT, self::ATOM); + } + + static function textConstruct($el) + { + $src = $el->getAttribute(self::SRC); + + if (!empty($src)) { + throw new ClientException(_("Can't handle remote content yet.")); + } + + $type = $el->getAttribute(self::TYPE); + + // slavishly following http://atompub.org/rfc4287.html#rfc.section.4.1.3.3 + + if (empty($type) || $type == 'text') { + return $el->textContent; + } else if ($type == 'html') { + $text = $el->textContent; + return htmlspecialchars_decode($text, ENT_QUOTES); + } else if ($type == 'xhtml') { + $divEl = ActivityUtils::child($el, 'div', 'http://www.w3.org/1999/xhtml'); + if (empty($divEl)) { + return null; + } + $doc = $divEl->ownerDocument; + $text = ''; + $children = $divEl->childNodes; + + for ($i = 0; $i < $children->length; $i++) { + $child = $children->item($i); + $text .= $doc->saveXML($child); + } + return trim($text); + } else if (in_array($type, array('text/xml', 'application/xml')) || + preg_match('#(+|/)xml$#', $type)) { + throw new ClientException(_("Can't handle embedded XML content yet.")); + } else if (strncasecmp($type, 'text/', 5)) { + return $el->textContent; + } else { + throw new ClientException(_("Can't handle embedded Base64 content yet.")); + } + } + + /** + * Is this a valid URI for remote profile/notice identification? + * Does not have to be a resolvable URL. + * @param string $uri + * @return boolean + */ + static function validateUri($uri) + { + if (Validate::uri($uri)) { + return true; + } + + // Possibly an upstream bug; tag: URIs aren't validated properly + // unless you explicitly ask for them. All other schemes are accepted + // for basic URI validation without asking. + if (Validate::uri($uri, array('allowed_scheme' => array('tag')))) { + return true; + } + + return false; + } +} diff --git a/lib/activityverb.php b/lib/activityverb.php new file mode 100644 index 0000000000..76f2b84e9c --- /dev/null +++ b/lib/activityverb.php @@ -0,0 +1,66 @@ +. + * + * @category Feed + * @package StatusNet + * @author Evan Prodromou + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Utility class to hold a bunch of constant defining default verb types + * + * @category OStatus + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +class ActivityVerb +{ + const POST = 'http://activitystrea.ms/schema/1.0/post'; + const SHARE = 'http://activitystrea.ms/schema/1.0/share'; + const SAVE = 'http://activitystrea.ms/schema/1.0/save'; + const FAVORITE = 'http://activitystrea.ms/schema/1.0/favorite'; + const PLAY = 'http://activitystrea.ms/schema/1.0/play'; + const FOLLOW = 'http://activitystrea.ms/schema/1.0/follow'; + const FRIEND = 'http://activitystrea.ms/schema/1.0/make-friend'; + const JOIN = 'http://activitystrea.ms/schema/1.0/join'; + const TAG = 'http://activitystrea.ms/schema/1.0/tag'; + + // Custom OStatus verbs for the flipside until they're standardized + const DELETE = 'http://ostatus.org/schema/1.0/unfollow'; + const UNFAVORITE = 'http://ostatus.org/schema/1.0/unfavorite'; + const UNFOLLOW = 'http://ostatus.org/schema/1.0/unfollow'; + const LEAVE = 'http://ostatus.org/schema/1.0/leave'; + + // For simple profile-update pings; no content to share. + const UPDATE_PROFILE = 'http://ostatus.org/schema/1.0/update-profile'; +} diff --git a/lib/apiaction.php b/lib/apiaction.php index e4a1df3d19..e6aaf93161 100644 --- a/lib/apiaction.php +++ b/lib/apiaction.php @@ -491,7 +491,7 @@ class ApiAction extends Action $this->showXmlAttachments($twitter_status['attachments']); break; case 'geo': - $this->showGeoRSS($value); + $this->showGeoXML($value); break; case 'retweeted_status': $this->showTwitterXmlStatus($value, 'retweeted_status'); @@ -539,7 +539,7 @@ class ApiAction extends Action } } - function showGeoRSS($geo) + function showGeoXML($geo) { if (empty($geo)) { // empty geo element @@ -551,6 +551,17 @@ class ApiAction extends Action } } + function showGeoRSS($geo) + { + if (!empty($geo)) { + $this->element( + 'georss:point', + null, + $geo['coordinates'][0] . ' ' . $geo['coordinates'][1] + ); + } + } + function showTwitterRssItem($entry) { $this->elementStart('item'); @@ -619,13 +630,25 @@ class ApiAction extends Action $this->endDocument('xml'); } - function showRssTimeline($notice, $title, $link, $subtitle, $suplink=null, $logo=null) + function showRssTimeline($notice, $title, $link, $subtitle, $suplink = null, $logo = null, $self = null) { $this->initDocument('rss'); $this->element('title', null, $title); $this->element('link', null, $link); + + if (!is_null($self)) { + $this->element( + 'atom:link', + array( + 'type' => 'application/rss+xml', + 'href' => $self, + 'rel' => 'self' + ) + ); + } + if (!is_null($suplink)) { // For FriendFeed's SUP protocol $this->element('link', array('xmlns' => 'http://www.w3.org/2005/Atom', @@ -732,8 +755,12 @@ class ApiAction extends Action function showTwitterAtomEntry($entry) { $this->elementStart('entry'); - $this->element('title', null, $entry['title']); - $this->element('content', array('type' => 'html'), $entry['content']); + $this->element('title', null, common_xml_safe_str($entry['title'])); + $this->element( + 'content', + array('type' => 'html'), + common_xml_safe_str($entry['content']) + ); $this->element('id', null, $entry['id']); $this->element('published', null, $entry['published']); $this->element('updated', null, $entry['updated']); @@ -848,7 +875,7 @@ class ApiAction extends Action $this->initDocument('atom'); - $this->element('title', null, $title); + $this->element('title', null, common_xml_safe_str($title)); $this->element('id', null, $id); $this->element('link', array('href' => $link, 'rel' => 'alternate', 'type' => 'text/html'), null); @@ -858,7 +885,7 @@ class ApiAction extends Action } $this->element('updated', null, common_date_iso8601('now')); - $this->element('subtitle', null, $subtitle); + $this->element('subtitle', null, common_xml_safe_str($subtitle)); if (is_array($group)) { foreach ($group as $g) { @@ -1138,7 +1165,14 @@ class ApiAction extends Action function initTwitterRss() { $this->startXML(); - $this->elementStart('rss', array('version' => '2.0', 'xmlns:atom'=>'http://www.w3.org/2005/Atom')); + $this->elementStart( + 'rss', + array( + 'version' => '2.0', + 'xmlns:atom' => 'http://www.w3.org/2005/Atom', + 'xmlns:georss' => 'http://www.georss.org/georss' + ) + ); $this->elementStart('channel'); Event::handle('StartApiRss', array($this)); } @@ -1336,8 +1370,27 @@ class ApiAction extends Action } } - function getSelfUri($action, $aargs) + /** + * Calculate the complete URI that called up this action. Used for + * Atom rel="self" links. Warning: this is funky. + * + * @return string URL a URL suitable for rel="self" Atom links + */ + function getSelfUri() { + $action = mb_substr(get_class($this), 0, -6); // remove 'Action' + + $id = $this->arg('id'); + $aargs = array('format' => $this->format); + if (!empty($id)) { + $aargs['id'] = $id; + } + + $tag = $this->arg('tag'); + if (!empty($tag)) { + $aargs['tag'] = $tag; + } + parse_str($_SERVER['QUERY_STRING'], $params); $pstring = ''; if (!empty($params)) { diff --git a/lib/apiauth.php b/lib/apiauth.php index 5090871cfe..17f803a1ca 100644 --- a/lib/apiauth.php +++ b/lib/apiauth.php @@ -235,9 +235,13 @@ class ApiAuthAction extends ApiAction { $this->basicAuthProcessHeader(); - $realm = common_config('site', 'name') . ' API'; + $realm = common_config('api', 'realm'); - if (!isset($this->auth_user_nickname) && $required) { + if (empty($realm)) { + $realm = common_config('site', 'name') . ' API'; + } + + if (empty($this->auth_user_nickname) && $required) { header('WWW-Authenticate: Basic realm="' . $realm . '"'); // show error if the user clicks 'cancel' @@ -290,11 +294,15 @@ class ApiAuthAction extends ApiAction function basicAuthProcessHeader() { - if (isset($_SERVER['AUTHORIZATION']) - || isset($_SERVER['HTTP_AUTHORIZATION']) - ) { - $authorization_header = isset($_SERVER['HTTP_AUTHORIZATION']) - ? $_SERVER['HTTP_AUTHORIZATION'] : $_SERVER['AUTHORIZATION']; + $authHeaders = array('AUTHORIZATION', + 'HTTP_AUTHORIZATION', + 'REDIRECT_HTTP_AUTHORIZATION'); // rewrite for CGI + $authorization_header = null; + foreach ($authHeaders as $header) { + if (isset($_SERVER[$header])) { + $authorization_header = $_SERVER[$header]; + break; + } } if (isset($_SERVER['PHP_AUTH_USER'])) { diff --git a/lib/atom10feed.php b/lib/atom10feed.php index 2d342e7854..a46d49f350 100644 --- a/lib/atom10feed.php +++ b/lib/atom10feed.php @@ -178,7 +178,7 @@ class Atom10Feed extends XMLStringer $this->element( 'generator', array( - 'url' => 'http://status.net', + 'uri' => 'http://status.net', 'version' => STATUSNET_VERSION ), 'StatusNet' diff --git a/lib/atomcategory.php b/lib/atomcategory.php new file mode 100644 index 0000000000..4cc3b4f4d4 --- /dev/null +++ b/lib/atomcategory.php @@ -0,0 +1,77 @@ +. + * + * @category Feed + * @package StatusNet + * @author Evan Prodromou + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class AtomCategory +{ + public $term; + public $scheme; + public $label; + + function __construct($element=null) + { + if ($element && $element->attributes) { + $this->term = $this->extract($element, 'term'); + $this->scheme = $this->extract($element, 'scheme'); + $this->label = $this->extract($element, 'label'); + } + } + + protected function extract($element, $attrib) + { + $node = $element->attributes->getNamedItemNS(Activity::ATOM, $attrib); + if ($node) { + return trim($node->textContent); + } + $node = $element->attributes->getNamedItem($attrib); + if ($node) { + return trim($node->textContent); + } + return null; + } + + function asString() + { + $attribs = array(); + if ($this->term !== null) { + $attribs['term'] = $this->term; + } + if ($this->scheme !== null) { + $attribs['scheme'] = $this->scheme; + } + if ($this->label !== null) { + $attribs['label'] = $this->label; + } + $xs = new XMLStringer(); + $xs->element('category', $attribs); + return $xs->asString(); + } +} diff --git a/lib/attachmentlist.php b/lib/attachmentlist.php index 51ceca8576..d29a5fa2fd 100644 --- a/lib/attachmentlist.php +++ b/lib/attachmentlist.php @@ -248,9 +248,7 @@ class Attachment extends AttachmentListItem $this->out->elementStart('div', array('id' => 'attachment_view', 'class' => 'hentry')); $this->out->elementStart('div', 'entry-title'); - $this->out->elementStart('a', $this->linkAttr()); - $this->out->element('span', null, $this->linkTitle()); - $this->out->elementEnd('a'); + $this->out->element('a', $this->linkAttr(), $this->linkTitle()); $this->out->elementEnd('div'); $this->out->elementStart('div', 'entry-content'); @@ -296,7 +294,7 @@ class Attachment extends AttachmentListItem } function linkAttr() { - return array('class' => 'external', 'href' => $this->attachment->url); + return array('rel' => 'external', 'href' => $this->attachment->url); } function linkTitle() { @@ -306,7 +304,7 @@ class Attachment extends AttachmentListItem function showRepresentation() { if (empty($this->oembed->type)) { if (empty($this->attachment->mimetype)) { - $this->out->element('pre', null, 'oh well... not sure how to handle the following: ' . print_r($this->attachment, true)); + $this->showFallback(); } else { switch ($this->attachment->mimetype) { case 'image/gif': @@ -332,6 +330,17 @@ class Attachment extends AttachmentListItem $this->out->element('param', array('name' => 'autoStart', 'value' => 1)); $this->out->elementEnd('object'); break; + + case 'text/html': + if ($this->attachment->filename) { + // Locally-uploaded HTML. Scrub and display inline. + $this->showHtmlFile($this->attachment); + break; + } + // Fall through to default + + default: + $this->showFallback(); } } } else { @@ -354,9 +363,76 @@ class Attachment extends AttachmentListItem break; default: - $this->out->element('pre', null, 'oh well... not sure how to handle the following oembed: ' . print_r($this->oembed, true)); + $this->showFallback(); } } } + + protected function showHtmlFile(File $attachment) + { + $body = $this->scrubHtmlFile($attachment); + if ($body) { + $this->out->raw($body); + } + } + + /** + * @return mixed false on failure, HTML fragment string on success + */ + protected function scrubHtmlFile(File $attachment) + { + $path = File::path($attachment->filename); + if (!file_exists($path) || !is_readable($path)) { + common_log(LOG_ERR, "Missing local HTML attachment $path"); + return false; + } + $raw = file_get_contents($path); + + // Normalize... + $dom = new DOMDocument(); + if(!$dom->loadHTML($raw)) { + common_log(LOG_ERR, "Bad HTML in local HTML attachment $path"); + return false; + } + + // Remove '); + } } diff --git a/lib/authorizationplugin.php b/lib/authorizationplugin.php index 07da9b2d12..3790bccf4b 100644 --- a/lib/authorizationplugin.php +++ b/lib/authorizationplugin.php @@ -67,7 +67,7 @@ abstract class AuthorizationPlugin extends Plugin //------------Below are the methods that connect StatusNet to the implementing Auth plugin------------\\ - function onStartSetUser(&$user) { + function onStartSetUser($user) { $loginAllowed = $this->loginAllowed($user); if($loginAllowed === true){ return; @@ -84,7 +84,7 @@ abstract class AuthorizationPlugin extends Plugin } } - function onStartSetApiUser(&$user) { + function onStartSetApiUser($user) { return $this->onStartSetUser($user); } diff --git a/lib/avatarlink.php b/lib/avatarlink.php new file mode 100644 index 0000000000..e67799e2eb --- /dev/null +++ b/lib/avatarlink.php @@ -0,0 +1,102 @@ +. + * + * @category Feed + * @package StatusNet + * @author Evan Prodromou + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +// XXX: Arg! This wouldn't be necessary if we used Avatars conistently +class AvatarLink +{ + public $url; + public $type; + public $size; + public $width; + public $height; + + function __construct($element=null) + { + if ($element) { + // @fixme use correct namespaces + $this->url = $element->getAttribute('href'); + $this->type = $element->getAttribute('type'); + $width = $element->getAttribute('media:width'); + if ($width != null) { + $this->width = intval($width); + } + $height = $element->getAttribute('media:height'); + if ($height != null) { + $this->height = intval($height); + } + } + } + + static function fromAvatar($avatar) + { + if (empty($avatar)) { + return null; + } + $alink = new AvatarLink(); + $alink->type = $avatar->mediatype; + $alink->height = $avatar->height; + $alink->width = $avatar->width; + $alink->url = $avatar->displayUrl(); + return $alink; + } + + static function fromFilename($filename, $size) + { + $alink = new AvatarLink(); + $alink->url = $filename; + $alink->height = $size; + if (!empty($filename)) { + $alink->width = $size; + $alink->type = self::mediatype($filename); + } else { + $alink->url = User_group::defaultLogo($size); + $alink->type = 'image/png'; + } + return $alink; + } + + // yuck! + static function mediatype($filename) { + $ext = strtolower(end(explode('.', $filename))); + if ($ext == 'jpeg') { + $ext = 'jpg'; + } + // hope we don't support any others + $types = array('png', 'gif', 'jpg', 'jpeg'); + if (in_array($ext, $types)) { + return 'image/' . $ext; + } + return null; + } +} diff --git a/lib/channel.php b/lib/channel.php index 05437b4e9e..e83960ac54 100644 --- a/lib/channel.php +++ b/lib/channel.php @@ -47,6 +47,25 @@ class Channel } } +class CLIChannel extends Channel +{ + function source() + { + return 'cli'; + } + + function output($user, $text) + { + $site = common_config('site', 'name'); + print "[{$user->nickname}@{$site}] $text\n"; + } + + function error($user, $text) + { + $this->output($user, $text); + } +} + class WebChannel extends Channel { var $out = null; diff --git a/lib/command.php b/lib/command.php index 5be9cd6e85..c2116828c0 100644 --- a/lib/command.php +++ b/lib/command.php @@ -1,7 +1,7 @@ user = $user; } - function execute($channel) + /** + * Execute the command and send success or error results + * back via the given communications channel. + * + * @param Channel + */ + public function execute($channel) + { + try { + $this->handle($channel); + } catch (CommandException $e) { + $channel->error($this->user, $e->getMessage()); + } catch (Exception $e) { + common_log(LOG_ERR, "Error handling " . get_class($this) . ": " . $e->getMessage()); + $channel->error($this->user, $e->getMessage()); + } + } + + + /** + * Override this with the meat! + * + * An error to send back to the user may be sent by throwing + * a CommandException with a formatted message. + * + * @param Channel + * @throws CommandException + */ + function handle($channel) { return false; } + + /** + * Look up a notice from an argument, by poster's name to get last post + * or notice_id prefixed with #. + * + * @return Notice + * @throws CommandException + */ + function getNotice($arg) + { + $notice = null; + if (Event::handle('StartCommandGetNotice', array($this, $arg, &$notice))) { + if(substr($this->other,0,1)=='#'){ + // A specific notice_id #123 + + $notice = Notice::staticGet(substr($arg,1)); + if (!$notice) { + throw new CommandException(_('Notice with that id does not exist')); + } + } + + if (Validate::uri($this->other)) { + // A specific notice by URI lookup + $notice = Notice::staticGet('uri', $arg); + } + + if (!$notice) { + // Local or remote profile name to get their last notice. + // May throw an exception and report 'no such user' + $recipient = $this->getProfile($arg); + + $notice = $recipient->getCurrentNotice(); + if (!$notice) { + throw new CommandException(_('User has no last notice')); + } + } + } + Event::handle('EndCommandGetNotice', array($this, $arg, &$notice)); + if (!$notice) { + throw new CommandException(_('Notice with that id does not exist')); + } + return $notice; + } + + /** + * Look up a local or remote profile by nickname. + * + * @return Profile + * @throws CommandException + */ + function getProfile($arg) + { + $profile = null; + if (Event::handle('StartCommandGetProfile', array($this, $arg, &$profile))) { + $profile = + common_relative_profile($this->user, common_canonical_nickname($arg)); + } + Event::handle('EndCommandGetProfile', array($this, $arg, &$profile)); + if (!$profile) { + throw new CommandException(sprintf(_('Could not find a user with nickname %s'), $arg)); + } + return $profile; + } + + /** + * Get a local user by name + * @return User + * @throws CommandException + */ + function getUser($arg) + { + $user = null; + if (Event::handle('StartCommandGetUser', array($this, $arg, &$user))) { + $user = User::staticGet('nickname', $arg); + } + Event::handle('EndCommandGetUser', array($this, $arg, &$user)); + if (!$user){ + throw new CommandException(sprintf(_('Could not find a local user with nickname %s'), + $arg)); + } + return $user; + } + + /** + * Get a local or remote group by name. + * @return User_group + * @throws CommandException + */ + function getGroup($arg) + { + $group = null; + if (Event::handle('StartCommandGetGroup', array($this, $arg, &$group))) { + $group = User_group::getForNickname($arg, $this->user->getProfile()); + } + Event::handle('EndCommandGetGroup', array($this, $arg, &$group)); + if (!$group) { + throw new CommandException(_('No such group.')); + } + return $group; + } +} + +class CommandException extends Exception +{ } class UnimplementedCommand extends Command { - function execute($channel) + function handle($channel) { $channel->error($this->user, _("Sorry, this command is not yet implemented.")); } @@ -81,24 +213,20 @@ class NudgeCommand extends Command parent::__construct($user); $this->other = $other; } - function execute($channel) + + function handle($channel) { - $recipient = User::staticGet('nickname', $this->other); - if(! $recipient){ - $channel->error($this->user, sprintf(_('Could not find a user with nickname %s'), - $this->other)); - }else{ - if ($recipient->id == $this->user->id) { - $channel->error($this->user, _('It does not make a lot of sense to nudge yourself!')); - }else{ - if ($recipient->email && $recipient->emailnotifynudge) { - mail_notify_nudge($this->user, $recipient); - } - // XXX: notify by IM - // XXX: notify by SMS - $channel->output($this->user, sprintf(_('Nudge sent to %s'), - $recipient->nickname)); + $recipient = $this->getUser($this->other); + if ($recipient->id == $this->user->id) { + throw new CommandException(_('It does not make a lot of sense to nudge yourself!')); + } else { + if ($recipient->email && $recipient->emailnotifynudge) { + mail_notify_nudge($this->user, $recipient); } + // XXX: notify by IM + // XXX: notify by SMS + $channel->output($this->user, sprintf(_('Nudge sent to %s'), + $recipient->nickname)); } } } @@ -115,7 +243,7 @@ class InviteCommand extends UnimplementedCommand class StatsCommand extends Command { - function execute($channel) + function handle($channel) { $profile = $this->user->getProfile(); @@ -142,34 +270,9 @@ class FavCommand extends Command $this->other = $other; } - function execute($channel) + function handle($channel) { - if(substr($this->other,0,1)=='#'){ - //favoriting a specific notice_id - - $notice = Notice::staticGet(substr($this->other,1)); - if (!$notice) { - $channel->error($this->user, _('Notice with that id does not exist')); - return; - } - $recipient = $notice->getProfile(); - }else{ - //favoriting a given user's last notice - - $recipient = - common_relative_profile($this->user, common_canonical_nickname($this->other)); - - if (!$recipient) { - $channel->error($this->user, _('No such user.')); - return; - } - $notice = $recipient->getCurrentNotice(); - if (!$notice) { - $channel->error($this->user, _('User has no last notice')); - return; - } - } - + $notice = $this->getNotice($this->other); $fave = Fave::addNew($this->user, $notice); if (!$fave) { @@ -177,7 +280,10 @@ class FavCommand extends Command return; } - $other = User::staticGet('id', $recipient->id); + // @fixme favorite notification should be triggered + // at a lower level + + $other = User::staticGet('id', $notice->profile_id); if ($other && $other->id != $user->id) { if ($other->email && $other->emailnotifyfav) { @@ -191,6 +297,7 @@ class FavCommand extends Command } } + class JoinCommand extends Command { var $other = null; @@ -201,17 +308,10 @@ class JoinCommand extends Command $this->other = $other; } - function execute($channel) + function handle($channel) { - - $nickname = common_canonical_nickname($this->other); - $group = User_group::staticGet('nickname', $nickname); - $cur = $this->user; - - if (!$group) { - $channel->error($cur, _('No such group.')); - return; - } + $group = $this->getGroup($this->other); + $cur = $this->user; if ($cur->isMember($group)) { $channel->error($cur, _('You are already a member of that group')); @@ -249,12 +349,10 @@ class DropCommand extends Command $this->other = $other; } - function execute($channel) + function handle($channel) { - - $nickname = common_canonical_nickname($this->other); - $group = User_group::staticGet('nickname', $nickname); - $cur = $this->user; + $group = $this->getGroup($this->other); + $cur = $this->user; if (!$group) { $channel->error($cur, _('No such group.')); @@ -293,15 +391,9 @@ class WhoisCommand extends Command $this->other = $other; } - function execute($channel) + function handle($channel) { - $recipient = - common_relative_profile($this->user, common_canonical_nickname($this->other)); - - if (!$recipient) { - $channel->error($this->user, _('No such user.')); - return; - } + $recipient = $this->getProfile($this->other); $whois = sprintf(_("%1\$s (%2\$s)"), $recipient->nickname, $recipient->profileurl); @@ -332,9 +424,18 @@ class MessageCommand extends Command $this->text = $text; } - function execute($channel) + function handle($channel) { - $other = User::staticGet('nickname', common_canonical_nickname($this->other)); + try { + $other = $this->getUser($this->other); + } catch (CommandException $e) { + try { + $profile = $this->getProfile($this->other); + } catch (CommandException $f) { + throw $e; + } + throw new CommandException(sprintf(_('%s is a remote profile; you can only send direct messages to users on the same server.'), $this->other)); + } $len = mb_strlen($this->text); @@ -380,33 +481,9 @@ class RepeatCommand extends Command $this->other = $other; } - function execute($channel) + function handle($channel) { - if(substr($this->other,0,1)=='#'){ - //repeating a specific notice_id - - $notice = Notice::staticGet(substr($this->other,1)); - if (!$notice) { - $channel->error($this->user, _('Notice with that id does not exist')); - return; - } - $recipient = $notice->getProfile(); - }else{ - //repeating a given user's last notice - - $recipient = - common_relative_profile($this->user, common_canonical_nickname($this->other)); - - if (!$recipient) { - $channel->error($this->user, _('No such user.')); - return; - } - $notice = $recipient->getCurrentNotice(); - if (!$notice) { - $channel->error($this->user, _('User has no last notice')); - return; - } - } + $notice = $this->getNotice($this->other); if($this->user->id == $notice->profile_id) { @@ -414,7 +491,7 @@ class RepeatCommand extends Command return; } - if ($recipient->hasRepeated($notice->id)) { + if ($this->user->getProfile()->hasRepeated($notice->id)) { $channel->error($this->user, _('Already repeated that notice')); return; } @@ -441,33 +518,10 @@ class ReplyCommand extends Command $this->text = $text; } - function execute($channel) + function handle($channel) { - if(substr($this->other,0,1)=='#'){ - //replying to a specific notice_id - - $notice = Notice::staticGet(substr($this->other,1)); - if (!$notice) { - $channel->error($this->user, _('Notice with that id does not exist')); - return; - } - $recipient = $notice->getProfile(); - }else{ - //replying to a given user's last notice - - $recipient = - common_relative_profile($this->user, common_canonical_nickname($this->other)); - - if (!$recipient) { - $channel->error($this->user, _('No such user.')); - return; - } - $notice = $recipient->getCurrentNotice(); - if (!$notice) { - $channel->error($this->user, _('User has no last notice')); - return; - } - } + $notice = $this->getNotice($this->other); + $recipient = $notice->getProfile(); $len = mb_strlen($this->text); @@ -507,17 +561,10 @@ class GetCommand extends Command $this->other = $other; } - function execute($channel) + function handle($channel) { - $target_nickname = common_canonical_nickname($this->other); + $target = $this->getProfile($this->other); - $target = - common_relative_profile($this->user, $target_nickname); - - if (!$target) { - $channel->error($this->user, _('No such user.')); - return; - } $notice = $target->getCurrentNotice(); if (!$notice) { $channel->error($this->user, _('User has no last notice')); @@ -525,7 +572,7 @@ class GetCommand extends Command } $notice_content = $notice->content; - $channel->output($this->user, $target_nickname . ": " . $notice_content); + $channel->output($this->user, $target->nickname . ": " . $notice_content); } } @@ -540,7 +587,7 @@ class SubCommand extends Command $this->other = $other; } - function execute($channel) + function handle($channel) { if (!$this->other) { @@ -548,16 +595,16 @@ class SubCommand extends Command return; } - $otherUser = User::staticGet('nickname', $this->other); + $target = $this->getProfile($this->other); - if (empty($otherUser)) { - $channel->error($this->user, _('No such user')); - return; + $remote = Remote_profile::staticGet('id', $target->id); + if ($remote) { + throw new CommandException(_("Can't subscribe to OMB profiles by command.")); } try { Subscription::start($this->user->getProfile(), - $otherUser->getProfile()); + $target); $channel->output($this->user, sprintf(_('Subscribed to %s'), $this->other)); } catch (Exception $e) { $channel->error($this->user, $e->getMessage()); @@ -576,22 +623,18 @@ class UnsubCommand extends Command $this->other = $other; } - function execute($channel) + function handle($channel) { if(!$this->other) { $channel->error($this->user, _('Specify the name of the user to unsubscribe from')); return; } - $otherUser = User::staticGet('nickname', $this->other); - - if (empty($otherUser)) { - $channel->error($this->user, _('No such user')); - } + $target = $this->getProfile($this->other); try { Subscription::cancel($this->user->getProfile(), - $otherUser->getProfile()); + $target); $channel->output($this->user, sprintf(_('Unsubscribed from %s'), $this->other)); } catch (Exception $e) { $channel->error($this->user, $e->getMessage()); @@ -607,7 +650,7 @@ class OffCommand extends Command parent::__construct($user); $this->other = $other; } - function execute($channel) + function handle($channel) { if ($this->other) { $channel->error($this->user, _("Command not yet implemented.")); @@ -630,7 +673,7 @@ class OnCommand extends Command $this->other = $other; } - function execute($channel) + function handle($channel) { if ($this->other) { $channel->error($this->user, _("Command not yet implemented.")); @@ -646,7 +689,7 @@ class OnCommand extends Command class LoginCommand extends Command { - function execute($channel) + function handle($channel) { $disabled = common_config('logincommand','disabled'); $disabled = isset($disabled) && $disabled; @@ -686,7 +729,7 @@ class LoseCommand extends Command return; } - $result=subs_unsubscribe_from($this->user, $this->other); + $result = Subscription::cancel($this->getProfile($this->other), $this->user->getProfile()); if ($result) { $channel->output($this->user, sprintf(_('Unsubscribed %s'), $this->other)); @@ -698,7 +741,7 @@ class LoseCommand extends Command class SubscriptionsCommand extends Command { - function execute($channel) + function handle($channel) { $profile = $this->user->getSubscriptions(0); $nicknames=array(); @@ -720,7 +763,7 @@ class SubscriptionsCommand extends Command class SubscribersCommand extends Command { - function execute($channel) + function handle($channel) { $profile = $this->user->getSubscribers(); $nicknames=array(); @@ -742,7 +785,7 @@ class SubscribersCommand extends Command class GroupsCommand extends Command { - function execute($channel) + function handle($channel) { $group = $this->user->getGroups(); $groups=array(); @@ -763,7 +806,7 @@ class GroupsCommand extends Command class HelpCommand extends Command { - function execute($channel) + function handle($channel) { $channel->output($this->user, _("Commands:\n". diff --git a/lib/common.php b/lib/common.php index 047dc5a7bc..334a88ffd5 100644 --- a/lib/common.php +++ b/lib/common.php @@ -71,7 +71,6 @@ if (!function_exists('dl')) { # global configuration object require_once('PEAR.php'); -require_once('PEAR/Exception.php'); require_once('DB/DataObject.php'); require_once('DB/DataObject/Cast.php'); # for dates @@ -124,22 +123,10 @@ require_once INSTALLDIR.'/lib/util.php'; require_once INSTALLDIR.'/lib/action.php'; require_once INSTALLDIR.'/lib/mail.php'; require_once INSTALLDIR.'/lib/subs.php'; -require_once INSTALLDIR.'/lib/activity.php'; require_once INSTALLDIR.'/lib/clientexception.php'; require_once INSTALLDIR.'/lib/serverexception.php'; - -//set PEAR error handling to use regular PHP exceptions -function PEAR_ErrorToPEAR_Exception($err) -{ - if ($err->getCode()) { - throw new PEAR_Exception($err->getMessage(), $err->getCode()); - } - throw new PEAR_Exception($err->getMessage()); -} -PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'PEAR_ErrorToPEAR_Exception'); - try { StatusNet::init(@$server, @$path, @$conffile); } catch (NoConfigException $e) { diff --git a/lib/default.php b/lib/default.php index f22d8b24a9..10f3f1a97e 100644 --- a/lib/default.php +++ b/lib/default.php @@ -294,4 +294,6 @@ $default = array('crawldelay' => 0, 'disallow' => array('main', 'settings', 'admin', 'search', 'message') ), + 'api' => + array('realm' => null), ); diff --git a/lib/deluserqueuehandler.php b/lib/deluserqueuehandler.php new file mode 100644 index 0000000000..4a1233a5ef --- /dev/null +++ b/lib/deluserqueuehandler.php @@ -0,0 +1,95 @@ +. + */ + +/** + * Background job to delete prolific users without disrupting front-end too much. + * + * Up to 50 messages are deleted on each run through; when all messages are gone, + * the actual account is deleted. + * + * @package QueueHandler + * @maintainer Brion Vibber + */ + +class DelUserQueueHandler extends QueueHandler +{ + const DELETION_WINDOW = 50; + + public function transport() + { + return 'deluser'; + } + + public function handle($user) + { + if (!($user instanceof User)) { + common_log(LOG_ERR, "Got a bogus user, not deleting"); + return true; + } + + $user = User::staticGet('id', $user->id); + if (!$user) { + common_log(LOG_INFO, "User {$user->nickname} was deleted before we got here."); + return true; + } + + if (!$user->hasRole(Profile_role::DELETED)) { + common_log(LOG_INFO, "User {$user->nickname} is not pending deletion; aborting."); + return true; + } + + $notice = $this->getNextBatch($user); + if ($notice->N) { + common_log(LOG_INFO, "Deleting next {$notice->N} notices by {$user->nickname}"); + while ($notice->fetch()) { + $del = clone($notice); + $del->delete(); + } + + // @todo improve reliability in case we died during the above deletions + // with a fatal error. If the job is lost, we should perform some kind + // of garbage collection later. + + // Queue up the next batch. + $qm = QueueManager::get(); + $qm->enqueue($user, 'deluser'); + } else { + // Out of notices? Let's finish deleting this guy! + $user->delete(); + common_log(LOG_INFO, "User $user->id $user->nickname deleted."); + return true; + } + + return true; + } + + /** + * Fetch the next self::DELETION_WINDOW messages for this user. + * @return Notice + */ + protected function getNextBatch(User $user) + { + $notice = new Notice(); + $notice->profile_id = $user->id; + $notice->limit(self::DELETION_WINDOW); + $notice->find(); + return $notice; + } + +} diff --git a/lib/httpclient.php b/lib/httpclient.php index 4c3af8d7dd..64a51353c7 100644 --- a/lib/httpclient.php +++ b/lib/httpclient.php @@ -120,6 +120,16 @@ class HTTPClient extends HTTP_Request2 { $this->config['max_redirs'] = 10; $this->config['follow_redirects'] = true; + + // We've had some issues with keepalive breaking with + // HEAD requests, such as to youtube which seems to be + // emitting chunked encoding info for an empty body + // instead of not emitting anything. This may be a + // bug on YouTube's end, but the upstream libray + // ought to be investigated to see if we can handle + // it gracefully in that case as well. + $this->config['protocol_version'] = '1.0'; + parent::__construct($url, $method, $config); $this->setHeader('User-Agent', $this->userAgent()); } diff --git a/lib/imagefile.php b/lib/imagefile.php index 7b04794552..e472877410 100644 --- a/lib/imagefile.php +++ b/lib/imagefile.php @@ -60,6 +60,19 @@ class ImageFile $this->filepath = $filepath; $info = @getimagesize($this->filepath); + + if (!( + ($info[2] == IMAGETYPE_GIF && function_exists('imagecreatefromgif')) || + ($info[2] == IMAGETYPE_JPEG && function_exists('imagecreatefromjpeg')) || + $info[2] == IMAGETYPE_BMP || + ($info[2] == IMAGETYPE_WBMP && function_exists('imagecreatefromwbmp')) || + ($info[2] == IMAGETYPE_XBM && function_exists('imagecreatefromxbm')) || + ($info[2] == IMAGETYPE_PNG && function_exists('imagecreatefrompng')))) { + + throw new Exception(_('Unsupported image file format.')); + return; + } + $this->type = ($info) ? $info[2]:$type; $this->width = ($info) ? $info[0]:$width; $this->height = ($info) ? $info[1]:$height; @@ -97,19 +110,6 @@ class ImageFile return; } - if ($info[2] !== IMAGETYPE_GIF && - $info[2] !== IMAGETYPE_JPEG && - $info[2] !== IMAGETYPE_BMP && - $info[2] !== IMAGETYPE_WBMP && - $info[2] !== IMAGETYPE_XBM && - $info[2] !== IMAGETYPE_XPM && - $info[2] !== IMAGETYPE_PNG) { - - @unlink($_FILES[$param]['tmp_name']); - throw new Exception(_('Unsupported image file format.')); - return; - } - return new ImageFile(null, $_FILES[$param]['tmp_name']); } @@ -159,9 +159,6 @@ class ImageFile case IMAGETYPE_XBM: $image_src = imagecreatefromxbm($this->filepath); break; - case IMAGETYPE_XPM: - $image_src = imagecreatefromxpm($this->filepath); - break; default: throw new Exception(_('Unknown file type')); return; @@ -204,10 +201,6 @@ class ImageFile //we don't want to save XBM... it's a rare format that we can't guarantee clients will support //save png instead $this->type = IMAGETYPE_PNG; - } else if($this->type == IMAGETYPE_XPM) { - //we don't want to save XPM... it's a rare format that we can't guarantee clients will support - //save png instead - $this->type = IMAGETYPE_PNG; } $outname = Avatar::filename($this->id, diff --git a/lib/language.php b/lib/language.php index 64b59e7396..76c7880257 100644 --- a/lib/language.php +++ b/lib/language.php @@ -202,16 +202,19 @@ function _mdomain($backtrace) static $cached; $path = $backtrace[0]['file']; if (!isset($cached[$path])) { + $final = 'statusnet'; // assume default domain if (DIRECTORY_SEPARATOR !== '/') { $path = strtr($path, DIRECTORY_SEPARATOR, '/'); } - $cut = strpos($path, '/plugins/') + 9; - $cut2 = strpos($path, '/', $cut); - if ($cut && $cut2) { - $cached[$path] = substr($path, $cut, $cut2 - $cut); - } else { - return null; + $cut = strpos($path, '/plugins/'); + if ($cut) { + $cut += strlen('/plugins/'); + $cut2 = strpos($path, '/', $cut); + if ($cut && $cut2) { + $final = substr($path, $cut, $cut2 - $cut); + } } + $cached[$path] = $final; } return $cached[$path]; } diff --git a/lib/mysqlschema.php b/lib/mysqlschema.php index 485096ac42..4556953667 100644 --- a/lib/mysqlschema.php +++ b/lib/mysqlschema.php @@ -90,15 +90,24 @@ class MysqlSchema extends Schema * @param string $name Name of the table to get * * @return TableDef tabledef for that table. + * @throws SchemaTableMissingException */ public function getTableDef($name) { - $res = $this->conn->query('DESCRIBE ' . $name); + $query = "SELECT * FROM INFORMATION_SCHEMA.COLUMNS " . + "WHERE TABLE_SCHEMA='%s' AND TABLE_NAME='%s'"; + $schema = $this->conn->dsn['database']; + $sql = sprintf($query, $schema, $name); + $res = $this->conn->query($sql); if (PEAR::isError($res)) { throw new Exception($res->getMessage()); } + if ($res->numRows() == 0) { + $res->free(); + throw new SchemaTableMissingException("No such table: $name"); + } $td = new TableDef(); @@ -111,9 +120,9 @@ class MysqlSchema extends Schema $cd = new ColumnDef(); - $cd->name = $row['Field']; + $cd->name = $row['COLUMN_NAME']; - $packed = $row['Type']; + $packed = $row['COLUMN_TYPE']; if (preg_match('/^(\w+)\((\d+)\)$/', $packed, $match)) { $cd->type = $match[1]; @@ -122,17 +131,57 @@ class MysqlSchema extends Schema $cd->type = $packed; } - $cd->nullable = ($row['Null'] == 'YES') ? true : false; - $cd->key = $row['Key']; - $cd->default = $row['Default']; - $cd->extra = $row['Extra']; + $cd->nullable = ($row['IS_NULLABLE'] == 'YES') ? true : false; + $cd->key = $row['COLUMN_KEY']; + $cd->default = $row['COLUMN_DEFAULT']; + $cd->extra = $row['EXTRA']; + + // Autoincrement is stuck into the extra column. + // Pull it out so we don't accidentally mod it every time... + $extra = preg_replace('/(^|\s)auto_increment(\s|$)/i', '$1$2', $cd->extra); + if ($extra != $cd->extra) { + $cd->extra = trim($extra); + $cd->auto_increment = true; + } + + // mysql extensions -- not (yet) used by base class + $cd->charset = $row['CHARACTER_SET_NAME']; + $cd->collate = $row['COLLATION_NAME']; $td->columns[] = $cd; } + $res->free(); return $td; } + /** + * Pull the given table properties from INFORMATION_SCHEMA. + * Most of the good stuff is MySQL extensions. + * + * @return array + * @throws Exception if table info can't be looked up + */ + + function getTableProperties($table, $props) + { + $query = "SELECT %s FROM INFORMATION_SCHEMA.TABLES " . + "WHERE TABLE_SCHEMA='%s' AND TABLE_NAME='%s'"; + $schema = $this->conn->dsn['database']; + $sql = sprintf($query, implode(',', $props), $schema, $table); + $res = $this->conn->query($sql); + + $row = array(); + $ok = $res->fetchInto($row, DB_FETCHMODE_ASSOC); + $res->free(); + + if ($ok) { + return $row; + } else { + throw new SchemaTableMissingException("No such table: $table"); + } + } + /** * Gets a ColumnDef object for a single column. * @@ -185,35 +234,26 @@ class MysqlSchema extends Schema } $sql .= $this->_columnSql($cd); - - switch ($cd->key) { - case 'UNI': - $uniques[] = $cd->name; - break; - case 'PRI': - $primary[] = $cd->name; - break; - case 'MUL': - $indices[] = $cd->name; - break; - } } - if (count($primary) > 0) { // it really should be... - $sql .= ",\nconstraint primary key (" . implode(',', $primary) . ")"; + $idx = $this->_indexList($columns); + + if ($idx['primary']) { + $sql .= ",\nconstraint primary key (" . implode(',', $idx['primary']) . ")"; } - foreach ($uniques as $u) { - $sql .= ",\nunique index {$name}_{$u}_idx ($u)"; + foreach ($idx['uniques'] as $u) { + $key = $this->_uniqueKey($name, $u); + $sql .= ",\nunique index $key ($u)"; } - foreach ($indices as $i) { - $sql .= ",\nindex {$name}_{$i}_idx ($i)"; + foreach ($idx['indices'] as $i) { + $key = $this->_key($name, $i); + $sql .= ",\nindex $key ($i)"; } - $sql .= "); "; + $sql .= ") ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; "; - common_log(LOG_INFO, $sql); $res = $this->conn->query($sql); if (PEAR::isError($res)) { @@ -223,6 +263,47 @@ class MysqlSchema extends Schema return true; } + /** + * Look over a list of column definitions and list up which + * indices will be present + */ + private function _indexList(array $columns) + { + $list = array('uniques' => array(), + 'primary' => array(), + 'indices' => array()); + foreach ($columns as $cd) { + switch ($cd->key) { + case 'UNI': + $list['uniques'][] = $cd->name; + break; + case 'PRI': + $list['primary'][] = $cd->name; + break; + case 'MUL': + $list['indices'][] = $cd->name; + break; + } + } + return $list; + } + + /** + * Get the unique index key name for a given column on this table + */ + function _uniqueKey($tableName, $columnName) + { + return $this->_key($tableName, $columnName); + } + + /** + * Get the index key name for a given column on this table + */ + function _key($tableName, $columnName) + { + return "{$tableName}_{$columnName}_idx"; + } + /** * Drops a table from the schema * @@ -394,21 +475,20 @@ class MysqlSchema extends Schema try { $td = $this->getTableDef($tableName); - } catch (Exception $e) { - if (preg_match('/no such table/', $e->getMessage())) { - return $this->createTable($tableName, $columns); - } else { - throw $e; - } + } catch (SchemaTableMissingException $e) { + return $this->createTable($tableName, $columns); } $cur = $this->_names($td->columns); $new = $this->_names($columns); - $toadd = array_diff($new, $cur); - $todrop = array_diff($cur, $new); - $same = array_intersect($new, $cur); - $tomod = array(); + $dropIndex = array(); + $toadd = array_diff($new, $cur); + $todrop = array_diff($cur, $new); + $same = array_intersect($new, $cur); + $tomod = array(); + $addIndex = array(); + $tableProps = array(); foreach ($same as $m) { $curCol = $this->_byName($td->columns, $m); @@ -416,10 +496,64 @@ class MysqlSchema extends Schema if (!$newCol->equals($curCol)) { $tomod[] = $newCol->name; + continue; + } + + // Earlier versions may have accidentally left tables at default + // charsets which might be latin1 or other freakish things. + if ($this->_isString($curCol)) { + if ($curCol->charset != 'utf8') { + $tomod[] = $newCol->name; + continue; + } } } - if (count($toadd) + count($todrop) + count($tomod) == 0) { + // Find any indices we have to change... + $curIdx = $this->_indexList($td->columns); + $newIdx = $this->_indexList($columns); + + if ($curIdx['primary'] != $newIdx['primary']) { + if ($curIdx['primary']) { + $dropIndex[] = 'drop primary key'; + } + if ($newIdx['primary']) { + $keys = implode(',', $newIdx['primary']); + $addIndex[] = "add constraint primary key ($keys)"; + } + } + + $dropUnique = array_diff($curIdx['uniques'], $newIdx['uniques']); + $addUnique = array_diff($newIdx['uniques'], $curIdx['uniques']); + foreach ($dropUnique as $columnName) { + $dropIndex[] = 'drop key ' . $this->_uniqueKey($tableName, $columnName); + } + foreach ($addUnique as $columnName) { + $addIndex[] = 'add constraint unique key ' . $this->_uniqueKey($tableName, $columnName) . " ($columnName)";; + } + + $dropMultiple = array_diff($curIdx['indices'], $newIdx['indices']); + $addMultiple = array_diff($newIdx['indices'], $curIdx['indices']); + foreach ($dropMultiple as $columnName) { + $dropIndex[] = 'drop key ' . $this->_key($tableName, $columnName); + } + foreach ($addMultiple as $columnName) { + $addIndex[] = 'add key ' . $this->_key($tableName, $columnName) . " ($columnName)"; + } + + // Check for table properties: make sure we're using a sane + // engine type and charset/collation. + // @fixme make the default engine configurable? + $oldProps = $this->getTableProperties($tableName, array('ENGINE', 'TABLE_COLLATION')); + if (strtolower($oldProps['ENGINE']) != 'innodb') { + $tableProps['ENGINE'] = 'InnoDB'; + } + if (strtolower($oldProps['TABLE_COLLATION']) != 'utf8_bin') { + $tableProps['DEFAULT CHARSET'] = 'utf8'; + $tableProps['COLLATE'] = 'utf8_bin'; + } + + if (count($dropIndex) + count($toadd) + count($todrop) + count($tomod) + count($addIndex) + count($tableProps) == 0) { // nothing to do return true; } @@ -429,6 +563,10 @@ class MysqlSchema extends Schema $phrase = array(); + foreach ($dropIndex as $indexSql) { + $phrase[] = $indexSql; + } + foreach ($toadd as $columnName) { $cd = $this->_byName($columns, $columnName); @@ -445,8 +583,17 @@ class MysqlSchema extends Schema $phrase[] = 'MODIFY COLUMN ' . $this->_columnSql($cd); } + foreach ($addIndex as $indexSql) { + $phrase[] = $indexSql; + } + + foreach ($tableProps as $key => $val) { + $phrase[] = "$key=$val"; + } + $sql = 'ALTER TABLE ' . $tableName . ' ' . implode(', ', $phrase); + common_log(LOG_DEBUG, __METHOD__ . ': ' . $sql); $res = $this->conn->query($sql); if (PEAR::isError($res)) { @@ -519,6 +666,10 @@ class MysqlSchema extends Schema $sql .= "{$cd->type} "; } + if ($this->_isString($cd)) { + $sql .= " CHARACTER SET utf8 "; + } + if (!empty($cd->default)) { $sql .= "default {$cd->default} "; } else { @@ -535,4 +686,13 @@ class MysqlSchema extends Schema return $sql; } + + /** + * Is this column a string type? + */ + private function _isString(ColumnDef $cd) + { + $strings = array('char', 'varchar', 'text'); + return in_array(strtolower($cd->type), $strings); + } } diff --git a/lib/noticelist.php b/lib/noticelist.php index 88a9252414..0d4cd4dd91 100644 --- a/lib/noticelist.php +++ b/lib/noticelist.php @@ -442,11 +442,14 @@ class NoticeListItem extends Widget 'title' => $latlon), $name); } else { - $this->out->elementStart('a', array('href' => $url)); - $this->out->element('abbr', array('class' => 'geo', - 'title' => $latlon), - $name); - $this->out->elementEnd('a'); + $xstr = new XMLStringer(false); + $xstr->elementStart('a', array('href' => $url, + 'rel' => 'external')); + $xstr->element('abbr', array('class' => 'geo', + 'title' => $latlon), + $name); + $xstr->elementEnd('a'); + $this->out->raw($xstr->getString()); } $this->out->elementEnd('span'); } diff --git a/lib/pgsqlschema.php b/lib/pgsqlschema.php index 91bc09667c..715065d774 100644 --- a/lib/pgsqlschema.php +++ b/lib/pgsqlschema.php @@ -61,7 +61,8 @@ class PgsqlSchema extends Schema public function getTableDef($name) { - $res = $this->conn->query("select *, column_default as default, is_nullable as Null, udt_name as Type, column_name AS Field from INFORMATION_SCHEMA.COLUMNS where table_name = '$name'"); + $res = $this->conn->query("SELECT *, column_default as default, is_nullable as Null, + udt_name as Type, column_name AS Field from INFORMATION_SCHEMA.COLUMNS where table_name = '$name'"); if (PEAR::isError($res)) { throw new Exception($res->getMessage()); @@ -72,6 +73,9 @@ class PgsqlSchema extends Schema $td->name = $name; $td->columns = array(); + if ($res->numRows() == 0 ) { + throw new Exception('no such table'); //pretend to be the msyql error. yeah, this sucks. + } $row = array(); while ($res->fetchInto($row, DB_FETCHMODE_ASSOC)) { @@ -166,12 +170,10 @@ class PgsqlSchema extends Schema } if (count($primary) > 0) { // it really should be... - $sql .= ",\nconstraint primary key (" . implode(',', $primary) . ")"; + $sql .= ",\n primary key (" . implode(',', $primary) . ")"; } - foreach ($uniques as $u) { - $sql .= ",\nunique index {$name}_{$u}_idx ($u)"; - } + foreach ($indices as $i) { $sql .= ",\nindex {$name}_{$i}_idx ($i)"; @@ -179,6 +181,10 @@ class PgsqlSchema extends Schema $sql .= "); "; + + foreach ($uniques as $u) { + $sql .= "\n CREATE index {$name}_{$u}_idx ON {$name} ($u); "; + } $res = $this->conn->query($sql); if (PEAR::isError($res)) { @@ -209,6 +215,22 @@ class PgsqlSchema extends Schema return true; } + /** + * Translate the (mostly) mysql-ish column types into somethings more standard + * @param string column type + * + * @return string postgres happy column type + */ + private function _columnTypeTranslation($type) { + $map = array( + 'datetime' => 'timestamp' + ); + if(!empty($map[$type])) { + return $map[$type]; + } + return $type; + } + /** * Adds an index to a table. * @@ -359,6 +381,7 @@ class PgsqlSchema extends Schema try { $td = $this->getTableDef($tableName); + } catch (Exception $e) { if (preg_match('/no such table/', $e->getMessage())) { return $this->createTable($tableName, $columns); @@ -477,11 +500,12 @@ class PgsqlSchema extends Schema private function _columnSql($cd) { $sql = "{$cd->name} "; + $type = $this->_columnTypeTranslation($cd->type); if (!empty($cd->size)) { - $sql .= "{$cd->type}({$cd->size}) "; + $sql .= "{$type}({$cd->size}) "; } else { - $sql .= "{$cd->type} "; + $sql .= "{$type} "; } if (!empty($cd->default)) { diff --git a/lib/poco.php b/lib/poco.php new file mode 100644 index 0000000000..2157062b37 --- /dev/null +++ b/lib/poco.php @@ -0,0 +1,240 @@ +. + * + * @category Feed + * @package StatusNet + * @author Evan Prodromou + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class PoCo +{ + const NS = 'http://portablecontacts.net/spec/1.0'; + + const USERNAME = 'preferredUsername'; + const DISPLAYNAME = 'displayName'; + const NOTE = 'note'; + + public $preferredUsername; + public $displayName; + public $note; + public $address; + public $urls = array(); + + function __construct($element = null) + { + if (empty($element)) { + return; + } + + $this->preferredUsername = ActivityUtils::childContent( + $element, + self::USERNAME, + self::NS + ); + + $this->displayName = ActivityUtils::childContent( + $element, + self::DISPLAYNAME, + self::NS + ); + + $this->note = ActivityUtils::childContent( + $element, + self::NOTE, + self::NS + ); + + $this->address = $this->_getAddress($element); + $this->urls = $this->_getURLs($element); + } + + private function _getURLs($element) + { + $urlEls = $element->getElementsByTagnameNS(self::NS, PoCoURL::URLS); + $urls = array(); + + foreach ($urlEls as $urlEl) { + + $type = ActivityUtils::childContent( + $urlEl, + PoCoURL::TYPE, + PoCo::NS + ); + + $value = ActivityUtils::childContent( + $urlEl, + PoCoURL::VALUE, + PoCo::NS + ); + + $primary = ActivityUtils::childContent( + $urlEl, + PoCoURL::PRIMARY, + PoCo::NS + ); + + $isPrimary = false; + + if (isset($primary) && $primary == 'true') { + $isPrimary = true; + } + + // @todo check to make sure a primary hasn't already been added + + array_push($urls, new PoCoURL($type, $value, $isPrimary)); + } + return $urls; + } + + private function _getAddress($element) + { + $addressEl = ActivityUtils::child( + $element, + PoCoAddress::ADDRESS, + PoCo::NS + ); + + if (!empty($addressEl)) { + $formatted = ActivityUtils::childContent( + $addressEl, + PoCoAddress::FORMATTED, + self::NS + ); + + if (!empty($formatted)) { + $address = new PoCoAddress(); + $address->formatted = $formatted; + return $address; + } + } + + return null; + } + + function fromProfile($profile) + { + if (empty($profile)) { + return null; + } + + $poco = new PoCo(); + + $poco->preferredUsername = $profile->nickname; + $poco->displayName = $profile->getBestName(); + + $poco->note = $profile->bio; + + $paddy = new PoCoAddress(); + $paddy->formatted = $profile->location; + $poco->address = $paddy; + + if (!empty($profile->homepage)) { + array_push( + $poco->urls, + new PoCoURL( + 'homepage', + $profile->homepage, + true + ) + ); + } + + return $poco; + } + + function fromGroup($group) + { + if (empty($group)) { + return null; + } + + $poco = new PoCo(); + + $poco->preferredUsername = $group->nickname; + $poco->displayName = $group->getBestName(); + + $poco->note = $group->description; + + $paddy = new PoCoAddress(); + $paddy->formatted = $group->location; + $poco->address = $paddy; + + if (!empty($group->homepage)) { + array_push( + $poco->urls, + new PoCoURL( + 'homepage', + $group->homepage, + true + ) + ); + } + + return $poco; + } + + function getPrimaryURL() + { + foreach ($this->urls as $url) { + if ($url->primary) { + return $url; + } + } + } + + function asString() + { + $xs = new XMLStringer(true); + $xs->element( + 'poco:preferredUsername', + null, + $this->preferredUsername + ); + + $xs->element( + 'poco:displayName', + null, + $this->displayName + ); + + if (!empty($this->note)) { + $xs->element('poco:note', null, common_xml_safe_str($this->note)); + } + + if (!empty($this->address)) { + $xs->raw($this->address->asString()); + } + + foreach ($this->urls as $url) { + $xs->raw($url->asString()); + } + + return $xs->getString(); + } +} diff --git a/lib/pocoaddress.php b/lib/pocoaddress.php new file mode 100644 index 0000000000..60873bdc42 --- /dev/null +++ b/lib/pocoaddress.php @@ -0,0 +1,56 @@ +. + * + * @category Feed + * @package StatusNet + * @author Evan Prodromou + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class PoCoAddress +{ + const ADDRESS = 'address'; + const FORMATTED = 'formatted'; + + public $formatted; + + // @todo Other address fields + + function asString() + { + if (!empty($this->formatted)) { + $xs = new XMLStringer(true); + $xs->elementStart('poco:address'); + $xs->element('poco:formatted', null, common_xml_safe_str($this->formatted)); + $xs->elementEnd('poco:address'); + return $xs->getString(); + } + + return null; + } +} diff --git a/lib/pocourl.php b/lib/pocourl.php new file mode 100644 index 0000000000..803484d760 --- /dev/null +++ b/lib/pocourl.php @@ -0,0 +1,65 @@ +. + * + * @category Feed + * @package StatusNet + * @author Evan Prodromou + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class PoCoURL +{ + const URLS = 'urls'; + const TYPE = 'type'; + const VALUE = 'value'; + const PRIMARY = 'primary'; + + public $type; + public $value; + public $primary; + + function __construct($type, $value, $primary = false) + { + $this->type = $type; + $this->value = $value; + $this->primary = $primary; + } + + function asString() + { + $xs = new XMLStringer(true); + $xs->elementStart('poco:urls'); + $xs->element('poco:type', null, $this->type); + $xs->element('poco:value', null, $this->value); + if (!empty($this->primary)) { + $xs->element('poco:primary', null, 'true'); + } + $xs->elementEnd('poco:urls'); + return $xs->getString(); + } +} diff --git a/lib/processmanager.php b/lib/processmanager.php new file mode 100644 index 0000000000..6032bfc5c6 --- /dev/null +++ b/lib/processmanager.php @@ -0,0 +1,84 @@ +. + * + * @category QueueManager + * @package StatusNet + * @author Brion Vibber + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +class ProcessManager extends IoManager +{ + protected $socket; + + public static function get() + { + throw new Exception("Must pass ProcessManager per-instance"); + } + + public function __construct($socket) + { + $this->socket = $socket; + } + + /** + * Tell the i/o queue master if and how we can handle multi-site + * processes. + * + * Return one of: + * IoManager::SINGLE_ONLY + * IoManager::INSTANCE_PER_SITE + * IoManager::INSTANCE_PER_PROCESS + */ + public static function multiSite() + { + return IoManager::INSTANCE_PER_PROCESS; + } + + /** + * We won't get any input on it, but if it's broken we'll + * know something's gone horribly awry. + * + * @return array of resources + */ + function getSockets() + { + return array($this->socket); + } + + /** + * See if the parent died and request a shutdown... + * + * @param resource $socket + * @return boolean success + */ + function handleInput($socket) + { + if (feof($socket)) { + common_log(LOG_INFO, "Parent process exited; shutting down child."); + $this->master->requestShutdown(); + } + return true; + } +} + diff --git a/lib/queuemanager.php b/lib/queuemanager.php index fe45e8bbff..6666a6cb5a 100644 --- a/lib/queuemanager.php +++ b/lib/queuemanager.php @@ -239,6 +239,9 @@ abstract class QueueManager extends IoManager $this->connect('sms', 'SmsQueueHandler'); } + // Background user management tasks... + $this->connect('deluser', 'DelUserQueueHandler'); + // Broadcasting profile updates to OMB remote subscribers $this->connect('profile', 'ProfileQueueHandler'); diff --git a/lib/router.php b/lib/router.php index 706120e0bf..a48ee875e1 100644 --- a/lib/router.php +++ b/lib/router.php @@ -628,6 +628,12 @@ class Router array('action' => 'ApiTimelineTag', 'format' => '(xmljson|rss|atom)')); + // media related + $m->connect( + 'api/statusnet/media/upload', + array('action' => 'ApiMediaUpload') + ); + // search $m->connect('api/search.atom', array('action' => 'twitapisearchatom')); $m->connect('api/search.json', array('action' => 'twitapisearchjson')); diff --git a/lib/schema.php b/lib/schema.php index 137b814e02..1503c96d4f 100644 --- a/lib/schema.php +++ b/lib/schema.php @@ -485,3 +485,9 @@ class Schema return $sql; } } + +class SchemaTableMissingException extends Exception +{ + // no-op +} + diff --git a/lib/servererroraction.php b/lib/servererroraction.php index 0993a63bca..9b5a553dc6 100644 --- a/lib/servererroraction.php +++ b/lib/servererroraction.php @@ -62,15 +62,18 @@ class ServerErrorAction extends ErrorAction 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported'); - function __construct($message='Error', $code=500) + function __construct($message='Error', $code=500, $ex=null) { parent::__construct($message, $code); $this->default = 500; // Server errors must be logged. - - common_log(LOG_ERR, "ServerErrorAction: $code $message"); + $log = "ServerErrorAction: $code $message"; + if ($ex) { + $log .= "\n" . $ex->getTraceAsString(); + } + common_log(LOG_ERR, $log); } // XXX: Should these error actions even be invokable via URI? diff --git a/lib/spawningdaemon.php b/lib/spawningdaemon.php index fd9ae43556..2f9f6e32e3 100644 --- a/lib/spawningdaemon.php +++ b/lib/spawningdaemon.php @@ -71,6 +71,8 @@ abstract class SpawningDaemon extends Daemon */ function run() { + $this->initPipes(); + $children = array(); for ($i = 1; $i <= $this->threads; $i++) { $pid = pcntl_fork(); @@ -128,6 +130,34 @@ abstract class SpawningDaemon extends Daemon return true; } + /** + * Create an IPC socket pair which child processes can use to detect + * if the parent process has been killed. + */ + function initPipes() + { + $sockets = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0); + if ($sockets) { + $this->parentWriter = $sockets[0]; + $this->parentReader = $sockets[1]; + } else { + $this->log(LOG_ERROR, "Couldn't create inter-process sockets"); + exit(1); + } + } + + /** + * Build an IOManager that simply ensures that we have a connection + * to the parent process open. If it breaks, the child process will + * die. + * + * @return ProcessManager + */ + public function processManager() + { + return new ProcessManager($this->parentReader); + } + /** * Determine whether to respawn an exited subprocess based on its exit code. * Otherwise we'll respawn all exits by default. @@ -152,6 +182,8 @@ abstract class SpawningDaemon extends Daemon */ protected function initAndRunChild($thread) { + // Close the writer end of our parent<->children pipe. + fclose($this->parentWriter); $this->set_id($this->get_id() . "." . $thread); $this->resetDb(); $exitCode = $this->runThread(); diff --git a/lib/statusnet.php b/lib/statusnet.php index afb8f5af02..776cfb579b 100644 --- a/lib/statusnet.php +++ b/lib/statusnet.php @@ -341,11 +341,7 @@ class StatusNet // Backwards compatibility if (array_key_exists('memcached', $config)) { if ($config['memcached']['enabled']) { - if(class_exists('Memcached')) { - addPlugin('Memcached', array('servers' => $config['memcached']['server'])); - } else { - addPlugin('Memcache', array('servers' => $config['memcached']['server'])); - } + addPlugin('Memcache', array('servers' => $config['memcached']['server'])); } if (!empty($config['memcached']['base'])) { diff --git a/lib/subs.php b/lib/subs.php index e2ce0667eb..165bbaa8ff 100644 --- a/lib/subs.php +++ b/lib/subs.php @@ -43,46 +43,3 @@ function subs_unsubscribe_to($user, $other) return $e->getMessage(); } } - -function subs_unsubscribe_from($user, $other){ - $local = User::staticGet("nickname",$other); - if($local){ - return subs_unsubscribe_to($local,$user); - } else { - try { - $remote = Profile::staticGet("nickname",$other); - if(is_string($remote)){ - return $remote; - } - if (Event::handle('StartUnsubscribe', array($remote,$user))) { - - $sub = DB_DataObject::factory('subscription'); - - $sub->subscriber = $remote->id; - $sub->subscribed = $user->id; - - $sub->find(true); - - // note we checked for existence above - - if (!$sub->delete()) - return _('Couldn\'t delete subscription.'); - - $cache = common_memcache(); - - if ($cache) { - $cache->delete(common_cache_key('user:notices_with_friends:' . $remote->id)); - } - - - $user->blowSubscribersCount(); - $remote->blowSubscribersCount(); - - Event::handle('EndUnsubscribe', array($remote, $user)); - } - } catch (Exception $e) { - return $e->getMessage(); - } - } -} - diff --git a/lib/usernoprofileexception.php b/lib/usernoprofileexception.php new file mode 100644 index 0000000000..6744d2529d --- /dev/null +++ b/lib/usernoprofileexception.php @@ -0,0 +1,74 @@ +. + * + * @category Exception + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Class for an exception when the user profile is missing + * + * @category Exception + * @package StatusNet + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +class UserNoProfileException extends ServerException +{ + var $user = null; + + /** + * constructor + * + * @param User $user User that's missing a profile + */ + + public function __construct($user) + { + $this->user = $user; + + $message = sprintf(_("User %s (%d) has no profile record."), + $user->nickname, $user->id); + + parent::__construct($message); + } + + /** + * Accessor for user + * + * @return User the user that triggered this exception + */ + + public function getUser() + { + return $this->user; + } +} diff --git a/lib/userprofile.php b/lib/userprofile.php index 8464c24464..ca060842b6 100644 --- a/lib/userprofile.php +++ b/lib/userprofile.php @@ -71,7 +71,8 @@ class UserProfile extends Widget { if (Event::handle('StartProfilePageProfileSection', array(&$this->out, $this->profile))) { - $this->out->elementStart('div', 'entity_profile vcard author'); + $this->out->elementStart('div', array('id' => 'i', + 'class' => 'entity_profile vcard author')); $this->out->element('h2', null, _('User profile')); if (Event::handle('StartProfilePageProfileElements', array(&$this->out, $this->profile))) { @@ -228,6 +229,17 @@ class UserProfile extends Widget function showEntityActions() { + if ($this->profile->hasRole(Profile_role::DELETED)) { + $this->out->elementStart('div', 'entity_actions'); + $this->out->element('h2', null, _('User actions')); + $this->out->elementStart('ul'); + $this->out->elementStart('p', array('class' => 'profile_deleted')); + $this->out->text(_('User deletion in progress...')); + $this->out->elementEnd('p'); + $this->out->elementEnd('ul'); + $this->out->elementEnd('div'); + return; + } if (Event::handle('StartProfilePageActionsSection', array(&$this->out, $this->profile))) { $cur = common_current_user(); diff --git a/lib/util.php b/lib/util.php index 6a84942758..0f639df388 100644 --- a/lib/util.php +++ b/lib/util.php @@ -52,17 +52,43 @@ function common_init_language() { mb_internal_encoding('UTF-8'); - // gettext seems very picky... We first need to setlocale() - // to a locale which _does_ exist on the system, and _then_ - // we can set in another locale that may not be set up - // (say, ga_ES for Galego/Galician) it seems to take it. - common_init_locale("en_US"); - // Note that this setlocale() call may "fail" but this is harmless; // gettext will still select the right language. $language = common_language(); $locale_set = common_init_locale($language); + if (!$locale_set) { + // The requested locale doesn't exist on the system. + // + // gettext seems very picky... We first need to setlocale() + // to a locale which _does_ exist on the system, and _then_ + // we can set in another locale that may not be set up + // (say, ga_ES for Galego/Galician) it seems to take it. + // + // For some reason C and POSIX which are guaranteed to work + // don't do the job. en_US.UTF-8 should be there most of the + // time, but not guaranteed. + $ok = common_init_locale("en_US"); + if (!$ok) { + // Try to find a complete, working locale... + // @fixme shelling out feels awfully inefficient + // but I don't think there's a more standard way. + $all = `locale -a`; + foreach (explode("\n", $all) as $locale) { + if (preg_match('/\.utf[-_]?8$/i', $locale)) { + $ok = setlocale(LC_ALL, $locale); + if ($ok) { + break; + } + } + } + if (!$ok) { + common_log(LOG_ERR, "Unable to find a UTF-8 locale on this system; UI translations may not work."); + } + } + $locale_set = common_init_locale($language); + } + setlocale(LC_CTYPE, 'C'); // So we do not have to make people install the gettext locales $path = common_config('site','locale_path'); @@ -133,6 +159,11 @@ function common_munge_password($password, $id) function common_check_user($nickname, $password) { + // empty nickname always unacceptable + if (empty($nickname)) { + return false; + } + $authenticatedUser = false; if (Event::handle('StartCheckPassword', array($nickname, $password, &$authenticatedUser))) { @@ -1453,7 +1484,15 @@ function common_copy_args($from) $to = array(); $strip = get_magic_quotes_gpc(); foreach ($from as $k => $v) { - $to[$k] = ($strip) ? stripslashes($v) : $v; + if($strip) { + if(is_array($v)) { + $to[$k] = common_copy_args($v); + } else { + $to[$k] = stripslashes($v); + } + } else { + $to[$k] = $v; + } } return $to; } diff --git a/locale/ar/LC_MESSAGES/statusnet.po b/locale/ar/LC_MESSAGES/statusnet.po index 56029bc82d..16ea19752c 100644 --- a/locale/ar/LC_MESSAGES/statusnet.po +++ b/locale/ar/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:49:16+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:39:53+0000\n" "Language-Team: Arabic\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ar\n" "X-Message-Group: out-statusnet\n" @@ -94,7 +94,7 @@ msgstr "لا صÙحة كهذه" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -103,10 +103,8 @@ msgstr "لا صÙحة كهذه" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "لا مستخدم كهذا." @@ -197,14 +195,14 @@ msgstr "" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "لم يتم العثور على وسيلة API." @@ -217,8 +215,8 @@ msgstr "لم يتم العثور على وسيلة API." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "تتطلب هذه الطريقة POST." @@ -247,7 +245,7 @@ msgid "Could not save profile." msgstr "لم يمكن Ø­Ùظ الملÙ." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -331,7 +329,7 @@ msgstr "" msgid "This status is already a favorite." msgstr "هذه الحالة Ù…Ùضلة بالÙعل." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "تعذّر إنشاء Ù…Ùضلة." @@ -448,7 +446,7 @@ msgstr "لم توجد المجموعة!" msgid "You are already a member of that group." msgstr "" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -499,7 +497,7 @@ msgstr "حجم غير صالح." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -565,9 +563,9 @@ msgstr "الحساب" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "الاسم المستعار" @@ -636,12 +634,12 @@ msgstr "" msgid "Unsupported format." msgstr "نسق غير مدعوم." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "" @@ -651,7 +649,7 @@ msgstr "" msgid "%1$s / Updates mentioning %2$s" msgstr "" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "" @@ -661,7 +659,7 @@ msgstr "" msgid "%s public timeline" msgstr "مسار %s الزمني العام" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "" @@ -676,12 +674,12 @@ msgstr "كرر إلى %s" msgid "Repeats of %s" msgstr "تكرارات %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "الإشعارات الموسومة ب%s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "" @@ -709,7 +707,7 @@ msgstr "لا حجم." msgid "Invalid size." msgstr "حجم غير صالح." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Ø£Ùتار" @@ -741,7 +739,7 @@ msgid "Preview" msgstr "معاينة" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "احذÙ" @@ -821,8 +819,8 @@ msgstr "Ùشل Ø­Ùظ معلومات المنع." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "لا مجموعة كهذه." @@ -923,7 +921,7 @@ msgstr "أنت لست مالك هذا التطبيق." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "" @@ -979,7 +977,7 @@ msgstr "أمتأكد من أنك تريد حذ٠هذا الإشعار؟" msgid "Do not delete this notice" msgstr "لا تحذ٠هذا الإشعار" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "احذ٠هذا الإشعار" @@ -1228,7 +1226,7 @@ msgstr "" msgid "Could not update group." msgstr "تعذر تحديث المجموعة." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "تعذّر إنشاء الكنى." @@ -1892,7 +1890,7 @@ msgstr "دعوة مستخدمين جدد" msgid "You are already subscribed to these users:" msgstr "" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -1993,7 +1991,7 @@ msgstr "%1$s انضم للمجموعة %2$s" msgid "You must be logged in to leave a group." msgstr "يجب أن تلج لتغادر مجموعة." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "لست عضوا ÙÙŠ تلك المجموعة." @@ -2103,12 +2101,12 @@ msgstr "استخدم هذا النموذج لإنشاء مجموعة جديدة. msgid "New message" msgstr "رسالة جديدة" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "لا يمكنك إرسال رسائل إلى هذا المستخدم." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "لا محتوى!" @@ -2116,7 +2114,7 @@ msgstr "لا محتوى!" msgid "No recipient specified." msgstr "لا مستلم Ø­Ùدّد." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2130,7 +2128,7 @@ msgstr "Ø£Ùرسلت الرسالة" msgid "Direct message to %s sent." msgstr "رسالة مباشرة Ù„%s تم إرسالها." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "خطأ أجاكس" @@ -2243,7 +2241,7 @@ msgstr "" msgid "Notice has no profile" msgstr "" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "حالة %1$s ÙÙŠ يوم %2$s" @@ -2256,8 +2254,8 @@ msgstr "نوع المحتوى " msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "ليس نسق بيانات مدعوم." @@ -2388,7 +2386,7 @@ msgstr "كلمة السر القديمة غير صحيحة" msgid "Error saving user; invalid." msgstr "خطأ أثناء Ø­Ùظ المستخدم؛ غير صالح." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "تعذّر Ø­Ùظ كلمة السر الجديدة." @@ -2597,8 +2595,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 حرÙًا إنجليزيًا أو رقمًا بدون نقاط أو مساÙات" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "الاسم الكامل" @@ -2625,9 +2623,9 @@ msgid "Bio" msgstr "السيرة" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "الموقع" @@ -2641,7 +2639,7 @@ msgstr "شارك مكاني الحالي عند إرسال إشعارات" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "الوسوم" @@ -2872,7 +2870,7 @@ msgstr "أعد ضبط كلمة السر" msgid "Recover password" msgstr "استعد كلمة السر" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Ø·Ùلبت استعادة كلمة السر" @@ -2892,41 +2890,41 @@ msgstr "أعد الضبط" msgid "Enter a nickname or email address." msgstr "أدخل اسمًا مستعارًا أو عنوان بريد إلكتروني." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "" -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "خطأ أثناء Ø­Ùظ تأكيد العنوان." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." msgstr "" -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "" -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "يجب أن تكون كلمة السر 6 محار٠أو أكثر." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "" -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "خطأ أثناء ضبط المستخدم." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "" @@ -3065,7 +3063,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "اشترك" @@ -3101,7 +3099,7 @@ msgstr "لا يمكنك تكرار ملاحظتك الشخصية." msgid "You already repeated that notice." msgstr "أنت كررت هذه الملاحظة بالÙعل." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "مكرر" @@ -3241,7 +3239,7 @@ msgstr "المنظمة" msgid "Description" msgstr "الوصÙ" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "إحصاءات" @@ -3357,67 +3355,67 @@ msgstr "مجموعة %s" msgid "%1$s group, page %2$d" msgstr "%1$s أعضاء المجموعة, الصÙحة %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "مل٠المجموعة الشخصي" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "مسار" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "ملاحظة" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "الكنى" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "الأعضاء" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(لا شيء)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "جميع الأعضاء" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "أنشئ" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3432,7 +3430,7 @@ msgstr "" "[انضم الآن](%%%%action.register%%%%) لتصبح عضوًا ÙÙŠ هذه المجموعة ومجموعات " "أخرى عديدة! ([اقرأ المزيد](%%%%doc.help%%%%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3444,7 +3442,7 @@ msgstr "" "en.wikipedia.org/wiki/Micro-blogging) المبنية على البرنامج الحر [StatusNet]" "(http://status.net/). يتشارك أعضاؤها رسائل قصيرة عن حياتهم واهتماماتهم. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "الإداريون" @@ -3969,12 +3967,12 @@ msgstr "لا مدخل هوية." msgid "Tag %s" msgstr "" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "مل٠المستخدم الشخصي" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "صورة" @@ -4288,19 +4286,19 @@ msgstr "النسخة" msgid "Author(s)" msgstr "المؤلÙ(ون)" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4338,44 +4336,44 @@ msgstr "تعذّر إدراج الرسالة." msgid "Could not update message with new URI." msgstr "" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "مشكلة ÙÙŠ Ø­Ùظ الإشعار. طويل جدًا." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "مشكلة ÙÙŠ Ø­Ùظ الإشعار. مستخدم غير معروÙ." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "مشكلة أثناء Ø­Ùظ الإشعار." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "مشكلة أثناء Ø­Ùظ الإشعار." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "آر تي @%1$s %2$s" @@ -4405,29 +4403,29 @@ msgstr "لم يمكن حذ٠اشتراك ذاتي." msgid "Couldn't delete subscription OMB token." msgstr "تعذّر حذ٠الاشتراك." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "تعذّر حذ٠الاشتراك." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "أهلا بكم ÙÙŠ %1$s يا @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "تعذّر إنشاء المجموعة." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "تعذّر ضبط عضوية المجموعة." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "تعذّر ضبط عضوية المجموعة." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "تعذّر Ø­Ùظ الاشتراك." @@ -4633,7 +4631,7 @@ msgstr "الجسر" msgid "StatusNet software license" msgstr "رخصة برنامج StatusNet" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4642,12 +4640,12 @@ msgstr "" "**%%site.name%%** خدمة تدوين مصغر يقدمها لك [%%site.broughtby%%](%%site." "broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "" -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4658,41 +4656,41 @@ msgstr "" "المتوÙر تحت [رخصة غنو Ø£Ùيرو العمومية](http://www.fsf.org/licensing/licenses/" "agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "رخصة محتوى الموقع" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "الرخصة." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "بعد" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "قبل" @@ -4708,6 +4706,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -4795,7 +4797,7 @@ msgstr "ضبط المسارات" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -4823,7 +4825,7 @@ msgstr "مسار المصدر" #: lib/applicationeditform.php:218 msgid "URL of the homepage of this application" -msgstr "" +msgstr "مسار صÙحة هذا التطبيق" #: lib/applicationeditform.php:224 msgid "Organization responsible for this application" @@ -4869,11 +4871,11 @@ msgstr "اسحب" msgid "Attachments" msgstr "مرÙقات" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "المؤلÙ" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "المزود" @@ -4893,37 +4895,50 @@ msgstr "تغيير كلمة السر Ùشل" msgid "Password changing is not allowed" msgstr "تغيير كلمة السر غير مسموح به" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "نتائج الأمر" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "اكتمل الأمر" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Ùشل الأمر" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "" +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "الملاحظة بهذا الرقم غير موجودة" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "ليس للمستخدم إشعار أخير" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "لم يمكن إيجاد مستخدم بالاسم %s" -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "لم يمكن إيجاد مستخدم بالاسم %s" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "" + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "التنبيه تم إرساله إلى %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -4934,169 +4949,167 @@ msgstr "" "المشتركون: %2$s\n" "الإشعارات: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "الملاحظة بهذا الرقم غير موجودة" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "ليس للمستخدم إشعار أخير" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "" -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "أنت بالÙعل عضو ÙÙŠ هذه المجموعة" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "لم يمكن ضم المستخدم %s إلى المجموعة %s" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s انضم إلى مجموعة %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "لم يمكن إزالة المستخدم %s من المجموعة %s" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s ترك المجموعة %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "الاسم الكامل: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "الموقع: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "الصÙحة الرئيسية: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "عن: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "رسالة مباشرة إلى %s تم إرسالها" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "" -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "لا يمكنك تكرار ملاحظتك الخاصة" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "كرر بالÙعل هذا الإشعار" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "الإشعار من %s مكرر" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "خطأ تكرار الإشعار." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "رÙد على رسالة %s" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "خطأ أثناء Ø­Ùظ الإشعار." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "لا مستخدم كهذا" +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Ù…Ùشترك ب%s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "الأمر لم ÙŠÙجهزّ بعد." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "الإشعار Ù…ÙØ·ÙØ£." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "تعذّر إطÙاء الإشعارات." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "الإشعار يعمل." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "تعذّر تشغيل الإشعار." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "ألغ٠الاشتراك" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "لست Ù…Ùشتركًا بأي أحد." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "لست مشتركًا بأحد." @@ -5106,11 +5119,11 @@ msgstr[3] "أنت مشترك بهؤلاء الأشخاص:" msgstr[4] "" msgstr[5] "" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "لا أحد مشترك بك." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "لا أحد مشترك بك." @@ -5120,11 +5133,11 @@ msgstr[3] "هؤلاء الأشخاص مشتركون بك:" msgstr[4] "" msgstr[5] "" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "لست عضوًا ÙÙŠ أي مجموعة." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "لست عضوًا ÙÙŠ أي مجموعة." @@ -5134,7 +5147,7 @@ msgstr[3] "أنت عضو ÙÙŠ هذه المجموعات:" msgstr[4] "" msgstr[5] "" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5175,20 +5188,58 @@ msgid "" "tracks - not yet implemented.\n" "tracking - not yet implemented.\n" msgstr "" +"الأوامر:\n" +"on - شغّل الإشعار\n" +"off - أطÙئ الإشعار\n" +"help - أظهر هذه المساعدة\n" +"follow - اشترك بالمستخدم\n" +"groups - اسرد المجموعات التي أنا عضو Ùيها\n" +"subscriptions - اسرد الذين أتابعهم\n" +"subscribers - اسرد الذين يتابعونني\n" +"leave - ألغ٠الاشتراك بمستخدم\n" +"d - وجّه رسالة مباشرة إلى مستخدم\n" +"get - اجلب آخر رسالة من مستخدم\n" +"whois - اجلب معلومات مل٠المستخدم\n" +"lose - أجبر المستخدم على عدم تتبعك\n" +"fav - اجعل آخر إشعار من المستخدم Ù…Ùضلًا\n" +"fav # - اجعل الإشعار ذا رقم الهوية المعطى Ù…Ùضلا\n" +"repeat # - كرّر الإشعار ذا رقم الهوية المعطى\n" +"repeat - كرّر آخر إشعار من المستخدم\n" +"reply # - رÙد على الإشعار ذي رقم الهوية المعطى\n" +"reply - رÙد على آخر إشعار من المستخدم\n" +"join - انضم إلى مجموعة\n" +"login - اجلب وصلة الولوج إلى واجهة الوب\n" +"drop - اترك المجموعة\n" +"stats - اجلب إحصاءاتك\n" +"stop - مثل 'off'\n" +"quit - مثل 'off'\n" +"sub - مثل 'follow'\n" +"unsub - مثل 'leave'\n" +"last - مثل 'get'\n" +"on - لم يطبق بعد.\n" +"off - لم يطبق بعد.\n" +"nudge - ذكّر مستخدمًا بإشعار أرسلته.\n" +"invite - لم يطبق بعد.\n" +"track - لم يطبق بعد.\n" +"untrack - لم يطبق بعد.\n" +"track off - لم يطبق بعد.\n" +"untrack all - لم يطبق بعد.\n" +"tracks - لم يطبق بعد.\n" +"tracking - لم يطبق بعد.\n" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "" -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "اذهب إلى المÙثبّت." @@ -5362,49 +5413,49 @@ msgstr "وسوم ÙÙŠ إشعارات المجموعة %s" msgid "This page is not available in a media type you accept" msgstr "" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "" + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "هذا المل٠كبير جدًا. إن أقصى حجم للملÙات هو %s." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "" -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "" -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "" -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "" - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "" -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "نوع مل٠غير معروÙ" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "ميجابايت" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "كيلوبايت" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "مصدر صندوق وارد غير معرو٠%d." @@ -5621,7 +5672,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "من" @@ -5771,23 +5822,23 @@ msgstr "غ" msgid "at" msgstr "ÙÙŠ" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "ÙÙŠ السياق" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "مكرر بواسطة" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "رÙد على هذا الإشعار" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "رÙد" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "الإشعار مكرر" @@ -5929,7 +5980,7 @@ msgstr "كرّر هذا الإشعار" msgid "Revoke the \"%s\" role from this user" msgstr "امنع هذا المستخدم من هذه المجموعة" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6055,90 +6106,94 @@ msgstr "ألغ٠الاشتراك مع هذا المستخدم" msgid "Unsubscribe" msgstr "ألغ٠الاشتراك" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "عدّل الأÙتار" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "تصرÙات المستخدم" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "عدّل إعدادات المل٠الشخصي" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "عدّل" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "أرسل رسالة مباشرة إلى هذا المستخدم" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "رسالة" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "مل٠المستخدم الشخصي" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "إداري" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "مراقب" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "قبل لحظات قليلة" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "قبل دقيقة تقريبًا" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "قبل ساعة تقريبًا" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "قبل يوم تقريبا" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "قبل شهر تقريبًا" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "قبل سنة تقريبًا" @@ -6152,7 +6207,7 @@ msgstr "%s ليس لونًا صحيحًا!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/arz/LC_MESSAGES/statusnet.po b/locale/arz/LC_MESSAGES/statusnet.po index aaf1d89bd2..1426c4d049 100644 --- a/locale/arz/LC_MESSAGES/statusnet.po +++ b/locale/arz/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:49:19+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:39:57+0000\n" "Language-Team: Egyptian Spoken Arabic\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: arz\n" "X-Message-Group: out-statusnet\n" @@ -100,7 +100,7 @@ msgstr "لا صÙحه كهذه" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -109,10 +109,8 @@ msgstr "لا صÙحه كهذه" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "لا مستخدم كهذا." @@ -203,14 +201,14 @@ msgstr "" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "الـ API method مش موجوده." @@ -223,8 +221,8 @@ msgstr "الـ API method مش موجوده." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "تتطلب هذه الطريقه POST." @@ -253,7 +251,7 @@ msgid "Could not save profile." msgstr "لم يمكن Ø­Ùظ الملÙ." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -337,7 +335,7 @@ msgstr "" msgid "This status is already a favorite." msgstr "الحاله دى موجوده Ùعلا ÙÙ‰ التÙضيلات." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "تعذّر إنشاء Ù…Ùضله." @@ -454,7 +452,7 @@ msgstr "لم توجد المجموعة!" msgid "You are already a member of that group." msgstr "" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -505,7 +503,7 @@ msgstr "حجم غير صالح." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -571,9 +569,9 @@ msgstr "الحساب" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "الاسم المستعار" @@ -642,12 +640,12 @@ msgstr "" msgid "Unsupported format." msgstr "نسق غير مدعوم." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "" @@ -657,7 +655,7 @@ msgstr "" msgid "%1$s / Updates mentioning %2$s" msgstr "" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "" @@ -667,7 +665,7 @@ msgstr "" msgid "%s public timeline" msgstr "مسار %s الزمنى العام" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "" @@ -682,12 +680,12 @@ msgstr "كرر إلى %s" msgid "Repeats of %s" msgstr "تكرارات %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "الإشعارات الموسومه ب%s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "" @@ -715,7 +713,7 @@ msgstr "لا حجم." msgid "Invalid size." msgstr "حجم غير صالح." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Ø£Ùتار" @@ -747,7 +745,7 @@ msgid "Preview" msgstr "عاين" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "احذÙ" @@ -827,8 +825,8 @@ msgstr "Ùشل Ø­Ùظ معلومات المنع." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "لا مجموعه كهذه." @@ -931,7 +929,7 @@ msgstr "انت مش بتملك الapplication دى." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "" @@ -990,7 +988,7 @@ msgstr "أمتأكد من أنك تريد حذ٠هذا الإشعار؟" msgid "Do not delete this notice" msgstr "لا تحذ٠هذا الإشعار" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "احذ٠هذا الإشعار" @@ -1240,7 +1238,7 @@ msgstr "" msgid "Could not update group." msgstr "تعذر تحديث المجموعه." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "تعذّر إنشاء الكنى." @@ -1904,7 +1902,7 @@ msgstr "دعوه مستخدمين جدد" msgid "You are already subscribed to these users:" msgstr "" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2006,7 +2004,7 @@ msgstr "%1$s دخل جروپ %2$s" msgid "You must be logged in to leave a group." msgstr "" -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "لست عضوا ÙÙ‰ تلك المجموعه." @@ -2116,12 +2114,12 @@ msgstr "استخدم هذا النموذج لإنشاء مجموعه جديده. msgid "New message" msgstr "رساله جديدة" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "" -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "لا محتوى!" @@ -2129,7 +2127,7 @@ msgstr "لا محتوى!" msgid "No recipient specified." msgstr "لا مستلم Ø­Ùدّد." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2143,7 +2141,7 @@ msgstr "Ø£Ùرسلت الرسالة" msgid "Direct message to %s sent." msgstr "رساله مباشره اتبعتت لـ%s." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "خطأ أجاكس" @@ -2254,7 +2252,7 @@ msgstr "" msgid "Notice has no profile" msgstr "" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "" @@ -2267,8 +2265,8 @@ msgstr "نوع المحتوى " msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr " مش نظام بيانات مدعوم." @@ -2399,7 +2397,7 @@ msgstr "كلمه السر القديمه غير صحيحة" msgid "Error saving user; invalid." msgstr "خطأ أثناء Ø­Ùظ المستخدم؛ غير صالح." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "تعذّر Ø­Ùظ كلمه السر الجديده." @@ -2608,8 +2606,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "الاسم الكامل" @@ -2636,9 +2634,9 @@ msgid "Bio" msgstr "السيرة" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "الموقع" @@ -2652,7 +2650,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "الوسوم" @@ -2882,7 +2880,7 @@ msgstr "أعد ضبط كلمه السر" msgid "Recover password" msgstr "استعد كلمه السر" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Ø·Ùلبت استعاده كلمه السر" @@ -2902,41 +2900,41 @@ msgstr "أعد الضبط" msgid "Enter a nickname or email address." msgstr "أدخل اسمًا مستعارًا أو عنوان بريد إلكترونى." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "" -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "خطأ أثناء Ø­Ùظ تأكيد العنوان." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." msgstr "" -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "" -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "يجب أن تكون كلمه السر 6 محار٠أو أكثر." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "" -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "خطأ أثناء ضبط المستخدم." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "" @@ -3075,7 +3073,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "اشترك" @@ -3111,7 +3109,7 @@ msgstr "ما ينÙعش تكرر الملاحظه بتاعتك." msgid "You already repeated that notice." msgstr "انت عيدت الملاحظه دى Ùعلا." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "مكرر" @@ -3251,7 +3249,7 @@ msgstr "المنظمه" msgid "Description" msgstr "الوصÙ" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "إحصاءات" @@ -3367,67 +3365,67 @@ msgstr "مجموعه %s" msgid "%1$s group, page %2$d" msgstr "%1$s أعضاء المجموعة, الصÙحه %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "مل٠المجموعه الشخصي" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "مسار" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "ملاحظة" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "الكنى" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "الأعضاء" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(لا شيء)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "جميع الأعضاء" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "أنشئ" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3437,7 +3435,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3446,7 +3444,7 @@ msgid "" "their life and interests. " msgstr "" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "الإداريون" @@ -3973,12 +3971,12 @@ msgstr "لا مدخل هويه." msgid "Tag %s" msgstr "" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "مل٠المستخدم الشخصي" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "صورة" @@ -4291,19 +4289,19 @@ msgstr "النسخه" msgid "Author(s)" msgstr "المؤلÙ/ين" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4342,44 +4340,44 @@ msgstr "تعذّر إدراج الرساله." msgid "Could not update message with new URI." msgstr "" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "مشكله ÙÙ‰ Ø­Ùظ الإشعار. طويل جدًا." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "مشكله ÙÙ‰ Ø­Ùظ الإشعار. مستخدم غير معروÙ." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "مشكله أثناء Ø­Ùظ الإشعار." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "مشكله أثناء Ø­Ùظ الإشعار." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "آر تى @%1$s %2$s" @@ -4409,29 +4407,29 @@ msgstr "ما Ù†Ùعش يمسح الاشتراك الشخصى." msgid "Couldn't delete subscription OMB token." msgstr "تعذّر حذ٠الاشتراك." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "تعذّر حذ٠الاشتراك." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "أهلا بكم ÙÙ‰ %1$s يا @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "تعذّر إنشاء المجموعه." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "تعذّر ضبط عضويه المجموعه." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "تعذّر ضبط عضويه المجموعه." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "تعذّر Ø­Ùظ الاشتراك." @@ -4653,7 +4651,7 @@ msgstr "" msgid "StatusNet software license" msgstr "" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4662,12 +4660,12 @@ msgstr "" "**%%site.name%%** خدمه تدوين مصغر يقدمها لك [%%site.broughtby%%](%%site." "broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "" -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4678,41 +4676,41 @@ msgstr "" "المتوÙر تحت [رخصه غنو Ø£Ùيرو العمومية](http://www.fsf.org/licensing/licenses/" "agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "رخصه محتوى الموقع" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "الرخصه." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "بعد" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "قبل" @@ -4728,6 +4726,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -4821,7 +4823,7 @@ msgstr "ضبط المسارات" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -4895,11 +4897,11 @@ msgstr "بطّل" msgid "Attachments" msgstr "مرÙقات" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "المؤلÙ" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "المزود" @@ -4919,37 +4921,50 @@ msgstr "تغيير الپاسوورد Ùشل" msgid "Password changing is not allowed" msgstr "تغيير الپاسوورد مش مسموح" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "نتائج الأمر" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "اكتمل الأمر" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Ùشل الأمر" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "" +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "الملاحظه بالـID ده مالهاش وجود" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "ليس للمستخدم إشعار أخير" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "ما Ù†Ùعش يلاقى يوزر بإسم %s" -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "ما Ù†Ùعش يلاقى يوزر بإسم %s" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "" + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "Nudge اتبعتت لـ %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -4960,170 +4975,167 @@ msgstr "" "المشتركون: %2$s\n" "الإشعارات: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "الملاحظه بالـID ده مالهاش وجود" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "ليس للمستخدم إشعار أخير" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "" -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "انت اصلا عضو ÙÙ‰ الجروپ ده" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "ما Ù†Ùعش يدخل اليوزر %s لجروپ %s" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s انضم إلى مجموعه %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "ما Ù†Ùعش يشيل اليوزر %s لجروپ %s" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s ساب الجروپ %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "الاسم الكامل: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "الموقع: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "الصÙحه الرئيسية: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "عن: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "رساله مباشره اتبعتت لـ %s" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "" -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "الملاحظه بتاعتك مش ناÙعه تتكرر" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "كرر بالÙعل هذا الإشعار" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "الإشعار من %s مكرر" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "خطأ تكرار الإشعار." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "رÙد على رساله %s" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "خطأ أثناء Ø­Ùظ الإشعار." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "" -#: lib/command.php:554 lib/command.php:589 -#, fuzzy -msgid "No such user" -msgstr "لا مستخدم كهذا." +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Ù…Ùشترك ب%s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "" -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "" -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "" -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "" -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "ألغ٠الاشتراك" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "لست Ù…Ùشتركًا بأى أحد." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "لست مشتركًا بأحد." @@ -5133,11 +5145,11 @@ msgstr[3] "أنت مشترك بهؤلاء الأشخاص:" msgstr[4] "" msgstr[5] "" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "لا أحد مشترك بك." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "لا أحد مشترك بك." @@ -5147,11 +5159,11 @@ msgstr[3] "هؤلاء الأشخاص مشتركون بك:" msgstr[4] "" msgstr[5] "" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "لست عضوًا ÙÙ‰ أى مجموعه." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "لست عضوًا ÙÙ‰ أى مجموعه." @@ -5161,7 +5173,7 @@ msgstr[3] "أنت عضو ÙÙ‰ هذه المجموعات:" msgstr[4] "" msgstr[5] "" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5203,19 +5215,19 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "" -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "اذهب إلى المÙثبّت." @@ -5389,49 +5401,49 @@ msgstr "" msgid "This page is not available in a media type you accept" msgstr "" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "" + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "هذا المل٠كبير جدًا. إن أقصى حجم للملÙات هو %s." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "" -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "" -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "" -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "" - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "" -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "نوع مل٠غير معروÙ" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "ميجابايت" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "كيلوبايت" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "مصدر الـinbox مش معرو٠%d." @@ -5626,7 +5638,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "من" @@ -5777,23 +5789,23 @@ msgstr "غ" msgid "at" msgstr "ÙÙŠ" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "ÙÙ‰ السياق" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "متكرر من" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "رÙد على هذا الإشعار" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "رÙد" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "الإشعار مكرر" @@ -5935,7 +5947,7 @@ msgstr "كرر هذا الإشعار" msgid "Revoke the \"%s\" role from this user" msgstr "امنع هذا المستخدم من هذه المجموعة" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6061,91 +6073,95 @@ msgstr "ألغ٠الاشتراك مع هذا المستخدم" msgid "Unsubscribe" msgstr "ألغ٠الاشتراك" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "عدّل الأÙتار" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "تصرÙات المستخدم" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "عدّل إعدادات المل٠الشخصي" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "عدّل" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "أرسل رساله مباشره إلى هذا المستخدم" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "رسالة" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "مل٠المستخدم الشخصي" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 #, fuzzy msgctxt "role" msgid "Administrator" msgstr "الإداريون" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "قبل لحظات قليلة" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "قبل دقيقه تقريبًا" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "قبل ساعه تقريبًا" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "قبل يوم تقريبا" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "قبل شهر تقريبًا" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "قبل سنه تقريبًا" @@ -6159,7 +6175,7 @@ msgstr "%s ليس لونًا صحيحًا!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/bg/LC_MESSAGES/statusnet.po b/locale/bg/LC_MESSAGES/statusnet.po index 3a6b5b0472..83acdaab6c 100644 --- a/locale/bg/LC_MESSAGES/statusnet.po +++ b/locale/bg/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:49:22+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:00+0000\n" "Language-Team: Bulgarian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: bg\n" "X-Message-Group: out-statusnet\n" @@ -95,7 +95,7 @@ msgstr "ÐÑма такака Ñтраница." #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -104,10 +104,8 @@ msgstr "ÐÑма такака Ñтраница." #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "ÐÑма такъв потребител" @@ -198,14 +196,14 @@ msgstr "Бележки от %1$s и приÑтели в %2$s." #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "Ðе е открит методът в API." @@ -218,8 +216,8 @@ msgstr "Ðе е открит методът в API." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Този метод изиÑква заÑвка POST." @@ -248,7 +246,7 @@ msgid "Could not save profile." msgstr "Грешка при запазване на профила." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -337,7 +335,7 @@ msgstr "Ðе е открита бележка Ñ Ñ‚Ð°ÐºÑŠÐ² идентифика msgid "This status is already a favorite." msgstr "Тази бележка вече е отбелÑзана като любима!" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Грешка при отбелÑзване като любима." @@ -459,7 +457,7 @@ msgstr "Групата не е открита." msgid "You are already a member of that group." msgstr "Вече членувате в тази група." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -510,7 +508,7 @@ msgstr "Ðеправилен размер." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -577,9 +575,9 @@ msgstr "Сметка" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "ПÑевдоним" @@ -649,12 +647,12 @@ msgstr "" msgid "Unsupported format." msgstr "Ðеподдържан формат." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, fuzzy, php-format msgid "%1$s / Favorites from %2$s" msgstr "%s / ОтбелÑзани като любими от %s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%s бележки отбелÑзани като любими от %s / %s." @@ -664,7 +662,7 @@ msgstr "%s бележки отбелÑзани като любими от %s / % msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Реплики на %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s реплики на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚ %2$s / %3$s." @@ -674,7 +672,7 @@ msgstr "%1$s реплики на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚ %2$s / %3$s." msgid "%s public timeline" msgstr "Общ поток на %s" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "" @@ -689,12 +687,12 @@ msgstr "Повторено за %s" msgid "Repeats of %s" msgstr "ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ Ð½Ð° %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Бележки Ñ ÐµÑ‚Ð¸ÐºÐµÑ‚ %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, fuzzy, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Бележки от %1$s в %2$s." @@ -723,7 +721,7 @@ msgstr "ÐÑма размер." msgid "Invalid size." msgstr "Ðеправилен размер." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Ðватар" @@ -756,7 +754,7 @@ msgid "Preview" msgstr "Преглед" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Изтриване" @@ -836,8 +834,8 @@ msgstr "Грешка при запиÑване данните за блокир #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "ÐÑма такава група" @@ -943,7 +941,7 @@ msgstr "Ðе членувате в тази група." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Имаше проблем ÑÑŠÑ ÑеÑиÑта ви в Ñайта." @@ -1002,7 +1000,7 @@ msgstr "ÐаиÑтина ли иÑкате да изтриете тази бел msgid "Do not delete this notice" msgstr "Да не Ñе изтрива бележката" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Изтриване на бележката" @@ -1268,7 +1266,7 @@ msgstr "ОпиÑанието е твърде дълго (до %d Ñимвола) msgid "Could not update group." msgstr "Грешка при обновÑване на групата." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 #, fuzzy msgid "Could not create aliases." msgstr "Грешка при отбелÑзване като любима." @@ -1969,7 +1967,7 @@ msgstr "Покани за нови потребители" msgid "You are already subscribed to these users:" msgstr "Вече Ñте абонирани за Ñледните потребители:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2101,7 +2099,7 @@ msgstr "%s Ñе приÑъедини към групата %s" msgid "You must be logged in to leave a group." msgstr "За напуÑнете група, Ñ‚Ñ€Ñбва да Ñте влезли." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Ðе членувате в тази група." @@ -2219,12 +2217,12 @@ msgstr "Използвайте тази бланка за Ñъздаване н msgid "New message" msgstr "Ðово Ñъобщение" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Ðе може да изпращате ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð¾ този потребител." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "ÐÑма Ñъдържание!" @@ -2232,7 +2230,7 @@ msgstr "ÐÑма Ñъдържание!" msgid "No recipient specified." msgstr "Ðе е указан получател." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2248,7 +2246,7 @@ msgstr "Съобщението е изпратено" msgid "Direct message to %s sent." msgstr "ПрÑкото Ñъобщение до %s е изпратено." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Грешка в Ajax" @@ -2364,7 +2362,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Бележката нÑма профил" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "Бележка на %1$s от %2$s" @@ -2377,8 +2375,8 @@ msgstr "вид Ñъдържание " msgid "Only " msgstr "Само " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Ðеподдържан формат на данните" @@ -2516,7 +2514,7 @@ msgstr "Грешна Ñтара парола" msgid "Error saving user; invalid." msgstr "Грешка при запазване на потребител — невалидноÑÑ‚." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Грешка при запазване на новата парола." @@ -2727,8 +2725,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "От 1 до 64 малки букви или цифри, без Ð¿ÑƒÐ½ÐºÑ‚Ð¾Ð°Ñ†Ð¸Ñ Ð¸ интервали" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Пълно име" @@ -2755,9 +2753,9 @@ msgid "Bio" msgstr "За мен" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "МеÑтоположение" @@ -2771,7 +2769,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Етикети" @@ -2999,7 +2997,7 @@ msgstr "Ðова парола" msgid "Recover password" msgstr "ВъзÑтановÑване на паролата" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "ПоиÑкано е възÑтановÑване на парола" @@ -3019,19 +3017,19 @@ msgstr "ОбновÑване" msgid "Enter a nickname or email address." msgstr "Въведете пÑевдоним или е-поща." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "ÐÑма потребител Ñ Ñ‚Ð°ÐºÐ°Ð²Ð° е-поща или потребителÑко име." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "ÐÑма указана е-поща за този потребител." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Грешка при запазване на потвърждение за адреÑ" -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3039,23 +3037,23 @@ msgstr "" "Ðа е-пощата, Ñ ÐºÐ¾Ñто Ñте региÑтрирани Ñа изпратени инÑтрукции за " "възÑтановÑване на паролата." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Ðеочаквано подновÑване на паролата." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Паролата Ñ‚Ñ€Ñбва да е от поне 6 знака." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Паролата и потвърждението й не Ñъвпадат." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Грешка в наÑтройките на потребителÑ." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Ðовата парола е запазена. ВлÑзохте уÑпешно." @@ -3218,7 +3216,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° профила ви в друга, ÑъвмеÑтима уÑлуга за микроблогване" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Ðбониране" @@ -3256,7 +3254,7 @@ msgstr "Ðе можете да повтарÑте ÑобÑтвена бележ msgid "You already repeated that notice." msgstr "Вече Ñте повторили тази бележка." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Повторено" @@ -3400,7 +3398,7 @@ msgstr "ОрганизациÑ" msgid "Description" msgstr "ОпиÑание" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "СтатиÑтики" @@ -3513,67 +3511,67 @@ msgstr "Група %s" msgid "%1$s group, page %2$d" msgstr "Членове на групата %s, Ñтраница %d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Профил на групата" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Бележка" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "ПÑевдоними" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "ЕмиÑÐ¸Ñ Ñ Ð±ÐµÐ»ÐµÐ¶ÐºÐ¸ на %s" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "ЕмиÑÐ¸Ñ Ñ Ð±ÐµÐ»ÐµÐ¶ÐºÐ¸ на %s" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "ЕмиÑÐ¸Ñ Ñ Ð±ÐµÐ»ÐµÐ¶ÐºÐ¸ на %s" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "ИзходÑща ÐºÑƒÑ‚Ð¸Ñ Ð·Ð° %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Членове" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Ð’Ñички членове" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Създадена на" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3583,7 +3581,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3592,7 +3590,7 @@ msgid "" "their life and interests. " msgstr "" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "ÐдминиÑтратори" @@ -4134,12 +4132,12 @@ msgstr "ÐÑма такъв документ." msgid "Tag %s" msgstr "Етикети" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "ПотребителÑки профил" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Снимка" @@ -4471,19 +4469,19 @@ msgstr "ВерÑиÑ" msgid "Author(s)" msgstr "Ðвтор(и)" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4526,28 +4524,28 @@ msgstr "Грешка при вмъкване на Ñъобщението." msgid "Could not update message with new URI." msgstr "Грешка при обновÑване на бележката Ñ Ð½Ð¾Ð² URL-адреÑ." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "" -#: classes/Notice.php:241 +#: classes/Notice.php:244 #, fuzzy msgid "Problem saving notice. Too long." msgstr "Проблем при запиÑване на бележката." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Грешка при запиÑване на бележката. Ðепознат потребител." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Твърде много бележки за кратко време. Спрете, поемете дъх и публикувайте " "отново Ñлед нÑколко минути." -#: classes/Notice.php:256 +#: classes/Notice.php:259 #, fuzzy msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " @@ -4556,20 +4554,20 @@ msgstr "" "Твърде много бележки за кратко време. Спрете, поемете дъх и публикувайте " "отново Ñлед нÑколко минути." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Забранено ви е да публикувате бележки в този Ñайт." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Проблем при запиÑване на бележката." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "Проблем при запиÑване на бележката." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4602,30 +4600,30 @@ msgstr "Грешка при изтриване на абонамента." msgid "Couldn't delete subscription OMB token." msgstr "Грешка при изтриване на абонамента." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Грешка при изтриване на абонамента." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Добре дошли в %1$s, @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Грешка при Ñъздаване на групата." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "Грешка при Ñъздаване на нов абонамент." -#: classes/User_group.php:507 +#: classes/User_group.php:510 #, fuzzy msgid "Could not set group membership." msgstr "Грешка при Ñъздаване на нов абонамент." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "Грешка при Ñъздаване на нов абонамент." @@ -4850,7 +4848,7 @@ msgstr "Табелка" msgid "StatusNet software license" msgstr "Лиценз на програмата StatusNet" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4859,12 +4857,12 @@ msgstr "" "**%%site.name%%** е уÑлуга за микроблогване, предоÑтавена ви от [%%site." "broughtby%%](%%site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** е уÑлуга за микроблогване. " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4875,41 +4873,41 @@ msgstr "" "доÑтъпна под [GNU Affero General Public License](http://www.fsf.org/" "licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Лиценз на Ñъдържанието" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Ð’Ñички " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "лиценз." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Страниране" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "След" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Преди" @@ -4925,6 +4923,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5022,7 +5024,7 @@ msgstr "ÐаÑтройка на пътищата" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5101,11 +5103,11 @@ msgstr "Премахване" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Ðвтор" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "ДоÑтавчик" @@ -5127,37 +5129,51 @@ msgstr "Паролата е запиÑана." msgid "Password changing is not allowed" msgstr "Паролата е запиÑана." -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Резултат от командата" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Командата е изпълнена" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Грешка при изпълнение на командата" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "За Ñъжаление тази команда вÑе още не Ñе поддържа." +#: lib/command.php:83 lib/command.php:105 +#, fuzzy +msgid "Notice with that id does not exist" +msgstr "Ðе е открита бележка Ñ Ñ‚Ð°ÐºÑŠÐ² идентификатор." -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "ПотребителÑÑ‚ нÑма поÑледна бележка" + +#: lib/command.php:125 #, fuzzy, php-format msgid "Could not find a user with nickname %s" msgstr "Грешка при обновÑване на потребител Ñ Ð¿Ð¾Ñ‚Ð²ÑŠÑ€Ð´ÐµÐ½ email адреÑ." -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Грешка при обновÑване на потребител Ñ Ð¿Ð¾Ñ‚Ð²ÑŠÑ€Ð´ÐµÐ½ email адреÑ." + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "За Ñъжаление тази команда вÑе още не Ñе поддържа." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "Изпратено е побутване на %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5168,198 +5184,196 @@ msgstr "" "Ðбонати: %2$s\n" "Бележки: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -#, fuzzy -msgid "Notice with that id does not exist" -msgstr "Ðе е открита бележка Ñ Ñ‚Ð°ÐºÑŠÐ² идентификатор." - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "ПотребителÑÑ‚ нÑма поÑледна бележка" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Бележката е отбелÑзана като любима." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Вече членувате в тази група." -#: lib/command.php:231 +#: lib/command.php:331 #, fuzzy, php-format msgid "Could not join user %s to group %s" msgstr "Грешка при проÑледÑване — потребителÑÑ‚ не е намерен." -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s Ñе приÑъедини към групата %s" -#: lib/command.php:275 +#: lib/command.php:373 #, fuzzy, php-format msgid "Could not remove user %s to group %s" msgstr "Грешка при проÑледÑване — потребителÑÑ‚ не е намерен." -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s напуÑна групата %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Пълно име: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "МеÑтоположение: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Домашна Ñтраница: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "ОтноÑно: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, fuzzy, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" "Съобщението е твърде дълго. Ðай-много може да е 140 знака, а Ñте въвели %d." -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "ПрÑкото Ñъобщение до %s е изпратено." -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Грешка при изпращане на прÑкото Ñъобщение" -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "Ðе можете да повтарÑте ÑобÑтвена бележка" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "Вече Ñте повторили тази бележка." -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "Бележката от %s е повторена" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "Грешка при повтарÑне на бележката." -#: lib/command.php:482 +#: lib/command.php:536 #, fuzzy, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" "Съобщението е твърде дълго. Ðай-много може да е 140 знака, а Ñте въвели %d." -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "Отговорът до %s е изпратен" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "Грешка при запиÑване на бележката." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Уточнете името на потребителÑ, за когото Ñе абонирате." -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "ÐÑма такъв потребител" +#: lib/command.php:602 +#, fuzzy +msgid "Can't subscribe to OMB profiles by command." +msgstr "Ðе Ñте абонирани за този профил" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Ðбонирани Ñте за %s." -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Уточнете името на потребителÑ, от когото Ñе отпиÑвате." -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "ОтпиÑани Ñте от %s." -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Командата вÑе още не Ñе поддържа." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Уведомлението е изключено." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Грешка при изключване на уведомлението." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Уведомлението е включено." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Грешка при включване на уведомлението." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "ОтпиÑани Ñте от %s." -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "Ðе Ñте абонирани за никого." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Вече Ñте абонирани за Ñледните потребители:" msgstr[1] "Вече Ñте абонирани за Ñледните потребители:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "Ðикой не е абониран за ваÑ." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Грешка при абониране на друг потребител за ваÑ." msgstr[1] "Грешка при абониране на друг потребител за ваÑ." -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "Ðе членувате в нито една група." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Ðе членувате в тази група." msgstr[1] "Ðе членувате в тази група." -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5401,19 +5415,19 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Ðе е открит файл Ñ Ð½Ð°Ñтройки. " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 #, fuzzy msgid "Go to the installer." msgstr "Влизане в Ñайта" @@ -5593,50 +5607,50 @@ msgstr "Етикети в бележките към групата %s" msgid "This page is not available in a media type you accept" msgstr "Страницата не е доÑтъпна във вида медиÑ, който приемате" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Форматът на файла Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÑ‚Ð¾ не Ñе поддържа." + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Може да качите лого за групата ви." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "ЧаÑтично качване на файла." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "СиÑтемна грешка при качване на файл." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Файлът не е изображение или е повреден." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Форматът на файла Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÑ‚Ð¾ не Ñе поддържа." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 #, fuzzy msgid "Lost our file." msgstr "ÐÑма такава бележка." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Ðеподдържан вид файл" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "MB" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "kB" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, fuzzy, php-format msgid "Unknown inbox source %d." msgstr "Ðепознат език \"%s\"" @@ -5841,7 +5855,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "от" @@ -5995,23 +6009,23 @@ msgstr "З" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "в контекÑÑ‚" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Повторено от" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "ОтговарÑне на тази бележка" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Отговор" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Бележката е повторена." @@ -6157,7 +6171,7 @@ msgstr "ПовтарÑне на тази бележка" msgid "Revoke the \"%s\" role from this user" msgstr "СпиÑък Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ð¸Ñ‚Ðµ в тази група." -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6289,91 +6303,95 @@ msgstr "ОтпиÑване от този потребител" msgid "Unsubscribe" msgstr "ОтпиÑване" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Редактиране на аватара" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "ПотребителÑки дейÑтвиÑ" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Редактиране на профила" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Редактиране" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Изпращате на прÑко Ñъобщение до този потребител." -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Съобщение" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "ПотребителÑки профил" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 #, fuzzy msgctxt "role" msgid "Administrator" msgstr "ÐдминиÑтратори" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "преди нÑколко Ñекунди" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "преди около минута" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "преди около %d минути" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "преди около чаÑ" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "преди около %d чаÑа" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "преди около ден" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "преди около %d дни" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "преди около меÑец" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "преди около %d меÑеца" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "преди около година" @@ -6387,7 +6405,7 @@ msgstr "%s не е допуÑтим цвÑÑ‚!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s не е допуÑтим цвÑÑ‚! Използвайте 3 или 6 шеÑтнадеÑетични знака." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, fuzzy, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/br/LC_MESSAGES/statusnet.po b/locale/br/LC_MESSAGES/statusnet.po index 2197b9e743..6e241f553c 100644 --- a/locale/br/LC_MESSAGES/statusnet.po +++ b/locale/br/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:49:25+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:14+0000\n" "Language-Team: Dutch\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: br\n" "X-Message-Group: out-statusnet\n" @@ -93,7 +93,7 @@ msgstr "N'eus ket eus ar bajenn-se" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -102,10 +102,8 @@ msgstr "N'eus ket eus ar bajenn-se" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "N'eus ket eus an implijer-se." @@ -196,14 +194,14 @@ msgstr "Hizivadennoù %1$s ha mignoned e %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "N'eo ket bet kavet an hentenn API !" @@ -216,8 +214,8 @@ msgstr "N'eo ket bet kavet an hentenn API !" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Ezhomm en deus an argerzh-mañ eus ur POST." @@ -246,7 +244,7 @@ msgid "Could not save profile." msgstr "Diposubl eo enrollañ ar profil." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -278,11 +276,11 @@ msgstr "Ne c'helloc'h ket ho stankañ ho unan !" #: actions/apiblockcreate.php:126 msgid "Block user failed." -msgstr "N'eo ket bet stanke an implijer." +msgstr "N'eus ket bet tu da stankañ an implijer." #: actions/apiblockdestroy.php:114 msgid "Unblock user failed." -msgstr "N'eus ket bet tu distankañ an implijer." +msgstr "N'eus ket bet tu da zistankañ an implijer." #: actions/apidirectmessage.php:89 #, php-format @@ -332,7 +330,7 @@ msgstr "N'eo bet kavet statud ebet gant an ID-mañ." msgid "This status is already a favorite." msgstr "Ur pennroll eo dija an ali-mañ." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Diposupl eo krouiñ ar pennroll-mañ." @@ -450,7 +448,7 @@ msgstr "N'eo ket bet kavet ar strollad" msgid "You are already a member of that group." msgstr "Un ezel eus ar strollad-mañ eo dija." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "Stanket oc'h bet eus ar strollad-mañ gant ur merour." @@ -500,7 +498,7 @@ msgstr "Fichenn direizh." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -564,9 +562,9 @@ msgstr "Kont" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Lesanv" @@ -635,12 +633,12 @@ msgstr "" msgid "Unsupported format." msgstr "Diembreget eo ar furmad-se." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Pennroll %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%1$s statud pennroll da %2$s / %2$s." @@ -650,7 +648,7 @@ msgstr "%1$s statud pennroll da %2$s / %2$s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Hizivadennoù a veneg %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "" @@ -660,7 +658,7 @@ msgstr "" msgid "%s public timeline" msgstr "Oberezhioù publik %s" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s statud an holl !" @@ -675,12 +673,12 @@ msgstr "Adkemeret evit %s" msgid "Repeats of %s" msgstr "Adkemeret eus %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Alioù merket gant %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "" @@ -708,7 +706,7 @@ msgstr "Ment ebet." msgid "Invalid size." msgstr "Ment direizh." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Avatar" @@ -740,7 +738,7 @@ msgid "Preview" msgstr "Rakwelet" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Diverkañ" @@ -820,8 +818,8 @@ msgstr "Diposubl eo enrollañ an titouroù stankañ." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "N'eus ket eus ar strollad-se." @@ -850,7 +848,7 @@ msgstr "Distankañ" #: actions/blockedfromgroup.php:320 lib/unblockform.php:80 msgid "Unblock this user" -msgstr "Distankañ an implijer-se" +msgstr "Distankañ an implijer-mañ" #: actions/bookmarklet.php:50 msgid "Post to " @@ -923,7 +921,7 @@ msgstr "N'oc'h ket perc'henn ar poellad-se." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "" @@ -979,13 +977,13 @@ msgstr "Ha sur oc'h ho peus c'hoant dilemel an ali-mañ ?" msgid "Do not delete this notice" msgstr "Arabat dilemel an ali-mañ" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Dilemel an ali-mañ" #: actions/deleteuser.php:67 msgid "You cannot delete users." -msgstr "Ne c'helloc'h ket diverkañ implijerien" +msgstr "N'hallit ket diverkañ implijerien." #: actions/deleteuser.php:74 msgid "You can only delete local users." @@ -1003,7 +1001,7 @@ msgstr "" #: actions/deleteuser.php:151 lib/deleteuserform.php:77 msgid "Delete this user" -msgstr "Diverkañ an implijer-se" +msgstr "Diverkañ an implijer-mañ" #: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124 #: lib/groupnav.php:119 @@ -1228,7 +1226,7 @@ msgstr "re hir eo an deskrivadur (%d arouezenn d'ar muiañ)." msgid "Could not update group." msgstr "Diposubl eo hizivaat ar strollad." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Diposubl eo krouiñ an aliasoù." @@ -1341,7 +1339,7 @@ msgstr "Penndibaboù enrollet" #: actions/emailsettings.php:320 msgid "No email address." -msgstr "N'eus chomlec'h postel ebet." +msgstr "Chomlec'h postel ebet." #: actions/emailsettings.php:327 msgid "Cannot normalize that email address" @@ -1881,7 +1879,7 @@ msgstr "Fall eo ar postel : %s" #: actions/invite.php:110 msgid "Invitation(s) sent" -msgstr "Kaset eo bet ar bedadenn(où)" +msgstr "Pedadenn(où) kaset" #: actions/invite.php:112 msgid "Invite new users" @@ -1891,7 +1889,7 @@ msgstr "Pediñ implijerien nevez" msgid "You are already subscribed to these users:" msgstr "Koumanantet oc'h dija d'an implijerien-mañ :" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -1928,7 +1926,7 @@ msgstr "Chomlec'hioù an implijerien da bediñ (unan dre linenn)" #: actions/invite.php:192 msgid "Personal message" -msgstr "Kemenadenn bersonel" +msgstr "Kemennadenn bersonel" #: actions/invite.php:194 msgid "Optionally add a personal message to the invitation." @@ -1993,7 +1991,7 @@ msgstr "%1$s a zo bet er strollad %2$s" msgid "You must be logged in to leave a group." msgstr "Ret eo deoc'h bezañ kevreet evit kuitaat ur strollad" -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "N'oc'h ket un ezel eus ar strollad-mañ." @@ -2110,12 +2108,12 @@ msgstr "Implijit ar furmskrid-mañ a-benn krouiñ ur strollad nevez." msgid "New message" msgstr "Kemennadenn nevez" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Ne c'helloc'h ket kas kemennadennoù d'an implijer-mañ." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Goullo eo !" @@ -2123,7 +2121,7 @@ msgstr "Goullo eo !" msgid "No recipient specified." msgstr "N'o peus ket lakaet a resever." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2132,14 +2130,14 @@ msgstr "" #: actions/newmessage.php:181 msgid "Message sent" -msgstr "Kaset eo bet ar gemenadenn" +msgstr "Kemennadenn kaset" #: actions/newmessage.php:185 #, php-format msgid "Direct message to %s sent." msgstr "Kaset eo bet da %s ar gemennadenn war-eeun." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Fazi Ajax" @@ -2250,7 +2248,7 @@ msgstr "" msgid "Notice has no profile" msgstr "N'en deus ket an ali a profil" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "Statud %1$s war %2$s" @@ -2263,8 +2261,8 @@ msgstr "seurt an danvez " msgid "Only " msgstr "Hepken " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "" @@ -2352,7 +2350,7 @@ msgstr "Kemmañ ho ger tremen." #: actions/passwordsettings.php:96 actions/recoverpassword.php:231 msgid "Password change" -msgstr "Kemmañ ar ger-tremen" +msgstr "Kemmañ ger-tremen" #: actions/passwordsettings.php:104 msgid "Old password" @@ -2389,13 +2387,13 @@ msgstr "Ne glot ket ar gerioù-tremen." #: actions/passwordsettings.php:165 msgid "Incorrect old password" -msgstr "ger-termen kozh amreizh" +msgstr "Ger-termen kozh direizh" #: actions/passwordsettings.php:181 msgid "Error saving user; invalid." msgstr "Ur fazi 'zo bet e-pad enolladenn an implijer ; diwiriek." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Dibosupl eo enrollañ ar ger-tremen nevez." @@ -2538,7 +2536,7 @@ msgstr "Atav" #: actions/pathsadminpanel.php:329 msgid "Use SSL" -msgstr "Implij SSl" +msgstr "Implijout SSL" #: actions/pathsadminpanel.php:330 msgid "When to use SSL" @@ -2604,8 +2602,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Anv klok" @@ -2632,9 +2630,9 @@ msgid "Bio" msgstr "Buhezskrid" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Lec'hiadur" @@ -2648,7 +2646,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Balizennoù" @@ -2872,7 +2870,7 @@ msgstr "Adderaouekaat ar ger-tremen" msgid "Recover password" msgstr "Adtapout ar ger-tremen" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Goulennet eo an adtapout gerioù-tremen" @@ -2892,41 +2890,41 @@ msgstr "Adderaouekaat" msgid "Enter a nickname or email address." msgstr "Lakait ul lesanv pe ur chomlec'h postel." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "" -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "" -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." msgstr "" -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "" -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "" -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "" -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "" -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "" @@ -3065,7 +3063,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "En em enskrivañ" @@ -3101,7 +3099,7 @@ msgstr "Ne c'helloc'h ket adkemer ho ali deoc'h." msgid "You already repeated that notice." msgstr "Adkemeret o peus dija an ali-mañ." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Adlavaret" @@ -3159,7 +3157,7 @@ msgstr "" #: actions/repliesrss.php:72 #, php-format msgid "Replies to %1$s on %2$s!" -msgstr "" +msgstr "Respontoù da %1$s war %2$s !" #: actions/revokerole.php:75 #, fuzzy @@ -3168,7 +3166,7 @@ msgstr "Ne c'helloc'h ket kas kemennadennoù d'an implijer-mañ." #: actions/revokerole.php:82 msgid "User doesn't have this role." -msgstr "" +msgstr "n'en deus ket an implijer-mañ ar rol-se." #: actions/rsd.php:146 actions/version.php:157 msgid "StatusNet" @@ -3239,7 +3237,7 @@ msgstr "" msgid "Description" msgstr "" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Stadegoù" @@ -3350,67 +3348,67 @@ msgstr "strollad %s" msgid "%1$s group, page %2$d" msgstr "" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Profil ar strollad" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Notenn" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Aliasoù" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Oberoù ar strollad" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Izili" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(hini ebet)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "An holl izili" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Krouet" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3420,7 +3418,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3429,7 +3427,7 @@ msgid "" "their life and interests. " msgstr "" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Merourien" @@ -3528,7 +3526,7 @@ msgstr "" #: actions/showstream.php:305 #, php-format msgid "Repeat of %s" -msgstr "" +msgstr "Adkemeret eus %s" #: actions/silence.php:65 actions/unsilence.php:65 msgid "You cannot silence users on this site." @@ -3638,9 +3636,8 @@ msgid "How long users must wait (in seconds) to post the same thing again." msgstr "" #: actions/sitenoticeadminpanel.php:56 -#, fuzzy msgid "Site Notice" -msgstr "Ali" +msgstr "Ali al lec'hienn" #: actions/sitenoticeadminpanel.php:67 #, fuzzy @@ -3954,12 +3951,12 @@ msgstr "" msgid "Tag %s" msgstr "" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Skeudenn" @@ -4271,19 +4268,19 @@ msgstr "Stumm" msgid "Author(s)" msgstr "Aozer(ien)" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4321,43 +4318,43 @@ msgstr "Diposubl eo ensoc'hañ ur gemenadenn" msgid "Could not update message with new URI." msgstr "" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "" -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "" -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "" -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "" -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4387,28 +4384,28 @@ msgstr "" msgid "Couldn't delete subscription OMB token." msgstr "Diposubl eo dilemel ar postel kadarnadur." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "" -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "" -#: classes/User_group.php:486 +#: classes/User_group.php:489 msgid "Could not set group URI." msgstr "" -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "" -#: classes/User_group.php:521 +#: classes/User_group.php:524 msgid "Could not save local group info." msgstr "" @@ -4612,19 +4609,19 @@ msgstr "" msgid "StatusNet software license" msgstr "" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." "broughtby%%](%%site.broughtbyurl%%). " msgstr "" -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "" -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4632,41 +4629,41 @@ msgid "" "org/licensing/licenses/agpl-3.0.html)." msgstr "" -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Pep tra " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "aotre implijout." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Pajennadur" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "War-lerc'h" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Kent" @@ -4682,6 +4679,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -4769,7 +4770,7 @@ msgstr "" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -4843,11 +4844,11 @@ msgstr "" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Aozer" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Pourvezer" @@ -4867,37 +4868,50 @@ msgstr "" msgid "Password changing is not allowed" msgstr "" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" msgstr "" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "" -#: lib/command.php:92 +#: lib/command.php:143 +#, php-format +msgid "Could not find a local user with nickname %s" +msgstr "" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "" + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -4905,198 +4919,196 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "" -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" -msgstr "%s zo emezelet er strollad %s" +msgstr "emezelet eo %s er strollad %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s {{Gender:.|en|he}} deus kuitaet ar strollad %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Anv klok : %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Diwar-benn : %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "" -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "" -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "" -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." msgstr "" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "" -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "" -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "" -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "" -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, php-format msgid "Unsubscribed %s" msgstr "" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "" -#: lib/command.php:711 +#: lib/command.php:754 #, fuzzy msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "You are subscribed to this person:" msgstr[1] "You are subscribed to these people:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "" -#: lib/command.php:733 +#: lib/command.php:776 #, fuzzy msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "This person is subscribed to you:" msgstr[1] "These people are subscribed to you:" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "" -#: lib/command.php:755 +#: lib/command.php:798 #, fuzzy msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "You are a member of this group:" msgstr[1] "You are a member of these groups:" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5138,19 +5150,19 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "" -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "" @@ -5324,49 +5336,49 @@ msgstr "" msgid "This page is not available in a media type you accept" msgstr "" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "" + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "" -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "" -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "" -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "" -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "" - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "" -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "Mo" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "Ko" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5561,7 +5573,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "eus" @@ -5711,23 +5723,23 @@ msgstr "K" msgid "at" msgstr "e" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Respont" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "" @@ -5869,7 +5881,7 @@ msgstr "Adkregiñ gant an ali-mañ" msgid "Revoke the \"%s\" role from this user" msgstr "Stankañ an implijer-mañ eus ar strollad-se" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -5995,92 +6007,96 @@ msgstr "" msgid "Unsubscribe" msgstr "" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Kemmañ an Avatar" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Obererezh an implijer" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Aozañ" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Kas ur gemennadenn war-eeun d'an implijer-mañ" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Kemennadenn" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Habaskaat" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "Strolladoù implijerien" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 #, fuzzy msgctxt "role" msgid "Administrator" msgstr "Merourien" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 #, fuzzy msgctxt "role" msgid "Moderator" msgstr "Habaskaat" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "un nebeud eilennoù zo" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "1 vunutenn zo well-wazh" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "%d munutenn zo well-wazh" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "1 eurvezh zo well-wazh" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "%d eurvezh zo well-wazh" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "1 devezh zo well-wazh" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "%d devezh zo well-wazh" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "miz zo well-wazh" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "%d miz zo well-wazh" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "bloaz zo well-wazh" @@ -6094,7 +6110,7 @@ msgstr "" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/ca/LC_MESSAGES/statusnet.po b/locale/ca/LC_MESSAGES/statusnet.po index bd7c5cd5a8..3ed2516c98 100644 --- a/locale/ca/LC_MESSAGES/statusnet.po +++ b/locale/ca/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:49:29+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:17+0000\n" "Language-Team: Catalan\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ca\n" "X-Message-Group: out-statusnet\n" @@ -101,7 +101,7 @@ msgstr "No existeix la pàgina." #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -110,10 +110,8 @@ msgstr "No existeix la pàgina." #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "No existeix aquest usuari." @@ -206,14 +204,14 @@ msgstr "Actualitzacions de %1$s i amics a %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "No s'ha trobat el mètode API!" @@ -227,8 +225,8 @@ msgstr "No s'ha trobat el mètode API!" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Aquest mètode requereix POST." @@ -259,7 +257,7 @@ msgid "Could not save profile." msgstr "No s'ha pogut guardar el perfil." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -349,7 +347,7 @@ msgstr "No s'ha trobat cap estatus amb aquesta ID." msgid "This status is already a favorite." msgstr "Aquest estat ja és un preferit!" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "No es pot crear favorit." @@ -473,7 +471,7 @@ msgstr "No s'ha trobat el grup!" msgid "You are already a member of that group." msgstr "Ja sou membre del grup." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "L'administrador us ha blocat del grup." @@ -524,7 +522,7 @@ msgstr "Mida invàlida." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -593,9 +591,9 @@ msgstr "Compte" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Sobrenom" @@ -668,12 +666,12 @@ msgstr "" msgid "Unsupported format." msgstr "El format no està implementat." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, fuzzy, php-format msgid "%1$s / Favorites from %2$s" msgstr "%s / Preferits de %s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%s actualitzacions favorites per %s / %s." @@ -683,7 +681,7 @@ msgstr "%s actualitzacions favorites per %s / %s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Notificacions contestant a %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s notificacions que responen a notificacions de %2$s / %3$s." @@ -693,7 +691,7 @@ msgstr "%1$s notificacions que responen a notificacions de %2$s / %3$s." msgid "%s public timeline" msgstr "%s línia temporal pública" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s notificacions de tots!" @@ -708,12 +706,12 @@ msgstr "Respostes a %s" msgid "Repeats of %s" msgstr "Repeticions de %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Aviso etiquetats amb %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Actualitzacions etiquetades amb %1$s el %2$s!" @@ -741,7 +739,7 @@ msgstr "Cap mida." msgid "Invalid size." msgstr "Mida invàlida." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Avatar" @@ -774,7 +772,7 @@ msgid "Preview" msgstr "Vista prèvia" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Suprimeix" @@ -856,8 +854,8 @@ msgstr "Error al guardar la informació del block." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "No s'ha trobat el grup." @@ -963,7 +961,7 @@ msgstr "No sou un membre del grup." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Ha ocorregut algun problema amb la teva sessió." @@ -1026,7 +1024,7 @@ msgstr "N'estàs segur que vols eliminar aquesta notificació?" msgid "Do not delete this notice" msgstr "No es pot esborrar la notificació." -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Eliminar aquesta nota" @@ -1288,7 +1286,7 @@ msgstr "la descripció és massa llarga (màx. %d caràcters)." msgid "Could not update group." msgstr "No s'ha pogut actualitzar el grup." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "No s'han pogut crear els àlies." @@ -1991,7 +1989,7 @@ msgstr "Invitar nous usuaris" msgid "You are already subscribed to these users:" msgstr "Ja estàs subscrit a aquests usuaris:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2124,7 +2122,7 @@ msgstr "%1$s s'ha unit al grup %2$s" msgid "You must be logged in to leave a group." msgstr "Has d'haver entrat per a poder marxar d'un grup." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "No ets membre d'aquest grup." @@ -2245,12 +2243,12 @@ msgstr "Utilitza aquest formulari per crear un nou grup." msgid "New message" msgstr "Nou missatge" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "No podeu enviar un misssatge a aquest usuari." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Cap contingut!" @@ -2258,7 +2256,7 @@ msgstr "Cap contingut!" msgid "No recipient specified." msgstr "No has especificat el destinatari." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "No t'enviïs missatges a tu mateix, simplement dir-te això." @@ -2272,7 +2270,7 @@ msgstr "S'ha enviat el missatge" msgid "Direct message to %s sent." msgstr "S'ha enviat un missatge directe a %s." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Ajax Error" @@ -2389,7 +2387,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Avís sense perfil" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "estat de %1$s a %2$s" @@ -2402,8 +2400,8 @@ msgstr "tipus de contingut " msgid "Only " msgstr "Només " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Format de data no suportat." @@ -2541,7 +2539,7 @@ msgstr "Contrasenya antiga incorrecta" msgid "Error saving user; invalid." msgstr "Error en guardar usuari; invàlid." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "No es pot guardar la nova contrasenya." @@ -2757,8 +2755,8 @@ msgstr "" "1-64 lletres en minúscula o números, sense signes de puntuació o espais" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nom complet" @@ -2786,9 +2784,9 @@ msgid "Bio" msgstr "Biografia" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Ubicació" @@ -2802,7 +2800,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Etiquetes" @@ -3040,7 +3038,7 @@ msgstr "Restablir contrasenya" msgid "Recover password" msgstr "Recuperar contrasenya" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Recuperació de contrasenya sol·licitada" @@ -3060,19 +3058,19 @@ msgstr "Restablir" msgid "Enter a nickname or email address." msgstr "Escriu un sobrenom o una adreça de correu electrònic." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "No hi ha cap usuari amb aquesta direcció o usuari." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Cap adreça de correu electrònic registrada per aquest usuari." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Error en guardar confirmació de l'adreça." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3080,23 +3078,23 @@ msgstr "" "S'han enviat instruccions per a recuperar la teva contrasenya a l'adreça de " "correu electrònic registrada." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Restabliment de contrasenya inesperat." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "La contrasenya ha de tenir 6 o més caràcters." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "La contrasenya i la confirmació no coincideixen." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Error en configurar l'usuari." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Nova contrasenya guardada correctament. Has iniciat una sessió." @@ -3260,7 +3258,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "URL del teu perfil en un altre servei de microblogging compatible" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Subscriure's" @@ -3303,7 +3301,7 @@ msgstr "No pots registrar-te si no estàs d'acord amb la llicència." msgid "You already repeated that notice." msgstr "Ja heu blocat l'usuari." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Repetit" @@ -3451,7 +3449,7 @@ msgstr "Paginació" msgid "Description" msgstr "Descripció" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Estadístiques" @@ -3564,67 +3562,67 @@ msgstr "%s grup" msgid "%1$s group, page %2$d" msgstr "%s membre/s en el grup, pàgina %d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Perfil del grup" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Avisos" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Àlies" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Accions del grup" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Feed d'avisos del grup %s" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Feed d'avisos del grup %s" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "Feed d'avisos del grup %s" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "Safata de sortida per %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Membres" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Cap)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Tots els membres" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "S'ha creat" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3634,7 +3632,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3645,7 +3643,7 @@ msgstr "" "**%s** és un grup d'usuaris a %%%%site.name%%%%, un servei de [microblogging]" "(http://ca.wikipedia.org/wiki/Microblogging)" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Administradors" @@ -4197,12 +4195,12 @@ msgstr "No argument de la id." msgid "Tag %s" msgstr "Etiqueta %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Perfil de l'usuari" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Foto" @@ -4537,19 +4535,19 @@ msgstr "Sessions" msgid "Author(s)" msgstr "Autoria" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4591,28 +4589,28 @@ msgstr "No s'ha pogut inserir el missatge." msgid "Could not update message with new URI." msgstr "No s'ha pogut inserir el missatge amb la nova URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Hashtag de l'error de la base de dades:%s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 #, fuzzy msgid "Problem saving notice. Too long." msgstr "Problema en guardar l'avís." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Problema al guardar la notificació. Usuari desconegut." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Masses notificacions massa ràpid; pren un respir i publica de nou en uns " "minuts." -#: classes/Notice.php:256 +#: classes/Notice.php:259 #, fuzzy msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " @@ -4621,20 +4619,20 @@ msgstr "" "Masses notificacions massa ràpid; pren un respir i publica de nou en uns " "minuts." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Ha estat bandejat de publicar notificacions en aquest lloc." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Problema en guardar l'avís." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "Problema en guardar l'avís." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%1$s (%2$s)" @@ -4666,29 +4664,29 @@ msgstr "No s'ha pogut eliminar la subscripció." msgid "Couldn't delete subscription OMB token." msgstr "No s'ha pogut eliminar la subscripció." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "No s'ha pogut eliminar la subscripció." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Us donem la benvinguda a %1$s, @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "No s'ha pogut crear el grup." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "No s'ha pogut establir la pertinença d'aquest grup." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "No s'ha pogut establir la pertinença d'aquest grup." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "No s'ha pogut guardar la subscripció." @@ -4911,7 +4909,7 @@ msgstr "Insígnia" msgid "StatusNet software license" msgstr "Llicència del programari StatusNet" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4920,12 +4918,12 @@ msgstr "" "**%%site.name%%** és un servei de microblogging de [%%site.broughtby%%**](%%" "site.broughtbyurl%%)." -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** és un servei de microblogging." -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4936,41 +4934,41 @@ msgstr "" "%s, disponible sota la [GNU Affero General Public License](http://www.fsf." "org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Llicència de contingut del lloc" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Tot " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "llicència." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Paginació" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Posteriors" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Anteriors" @@ -4986,6 +4984,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5083,7 +5085,7 @@ msgstr "Configuració dels camins" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5162,11 +5164,11 @@ msgstr "Suprimeix" msgid "Attachments" msgstr "Adjuncions" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Autoria" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Proveïdor" @@ -5187,37 +5189,51 @@ msgstr "El canvi de contrasenya ha fallat" msgid "Password changing is not allowed" msgstr "Contrasenya canviada." -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Resultats de les comandes" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Comanda completada" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Comanda fallida" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Perdona, aquesta comanda no està implementada." +#: lib/command.php:83 lib/command.php:105 +#, fuzzy +msgid "Notice with that id does not exist" +msgstr "No hi ha cap perfil amb aquesta id." -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "L'usuari no té última nota" + +#: lib/command.php:125 #, fuzzy, php-format msgid "Could not find a user with nickname %s" msgstr "No es pot actualitzar l'usuari amb el correu electrònic confirmat" -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "No es pot actualitzar l'usuari amb el correu electrònic confirmat" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Perdona, aquesta comanda no està implementada." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, fuzzy, php-format msgid "Nudge sent to %s" msgstr "Reclamació enviada" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5225,202 +5241,200 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -#, fuzzy -msgid "Notice with that id does not exist" -msgstr "No hi ha cap perfil amb aquesta id." - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "L'usuari no té última nota" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Nota marcada com a favorita." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Ja sou membre del grup." -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "No s'ha pogut afegir l'usuari %s al grup %s." -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s s'ha pogut afegir al grup %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "No s'ha pogut eliminar l'usuari %s del grup %s" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s ha abandonat el grup %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Nom complet: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Localització: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Pàgina web: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Sobre tu: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, fuzzy, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "Missatge massa llarg - màxim és 140 caràcters, tu has enviat %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Missatge directe per a %s enviat" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Error al enviar el missatge directe." -#: lib/command.php:413 +#: lib/command.php:490 #, fuzzy msgid "Cannot repeat your own notice" msgstr "No es poden posar en on les notificacions." -#: lib/command.php:418 +#: lib/command.php:495 #, fuzzy msgid "Already repeated that notice" msgstr "Eliminar aquesta nota" -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "Notificació publicada" -#: lib/command.php:428 +#: lib/command.php:505 #, fuzzy msgid "Error repeating notice." msgstr "Problema en guardar l'avís." -#: lib/command.php:482 +#: lib/command.php:536 #, fuzzy, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Missatge massa llarg - màxim és 140 caràcters, tu has enviat %d" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "S'ha enviat la resposta a %s" -#: lib/command.php:493 +#: lib/command.php:547 #, fuzzy msgid "Error saving notice." msgstr "Problema en guardar l'avís." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Especifica el nom de l'usuari a que vols subscriure't" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "No existeix aquest usuari." +#: lib/command.php:602 +#, fuzzy +msgid "Can't subscribe to OMB profiles by command." +msgstr "No estàs subscrit a aquest perfil." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Subscrit a %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Especifica el nom de l'usuari del que vols deixar d'estar subscrit" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Has deixat d'estar subscrit a %s" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Comanda encara no implementada." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Notificacions off." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "No es poden posar en off les notificacions." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Notificacions on." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "No es poden posar en on les notificacions." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "Has deixat d'estar subscrit a %s" -#: lib/command.php:709 +#: lib/command.php:752 #, fuzzy msgid "You are not subscribed to anyone." msgstr "No estàs subscrit a aquest perfil." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Ja estàs subscrit a aquests usuaris:" msgstr[1] "Ja estàs subscrit a aquests usuaris:" -#: lib/command.php:731 +#: lib/command.php:774 #, fuzzy msgid "No one is subscribed to you." msgstr "No pots subscriure a un altre a tu mateix." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "No pots subscriure a un altre a tu mateix." msgstr[1] "No pots subscriure a un altre a tu mateix." -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "No sou membre de cap grup." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Sou un membre d'aquest grup:" msgstr[1] "Sou un membre d'aquests grups:" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5462,19 +5476,19 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "No s'ha trobat cap fitxer de configuració. " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "Podeu voler executar l'instal·lador per a corregir-ho." -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "Vés a l'instal·lador." @@ -5650,49 +5664,49 @@ msgstr "Etiquetes en les notificacions del grup %s" msgid "This page is not available in a media type you accept" msgstr "Aquesta pàgina no està disponible en un tipus de mèdia que acceptis." -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Format d'imatge no suportat." + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Pots pujar una imatge de logo per al grup." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Càrrega parcial." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Error del sistema en pujar el fitxer." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "No és una imatge o és un fitxer corrupte." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Format d'imatge no suportat." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Hem perdut el nostre arxiu." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Tipus de fitxer desconegut" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "MB" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "kB" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, fuzzy, php-format msgid "Unknown inbox source %d." msgstr "Llengua desconeguda «%s»" @@ -5903,7 +5917,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "de" @@ -6058,23 +6072,23 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "en context" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Repetit per" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "respondre a aquesta nota" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Respon" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "Notificació publicada" @@ -6221,7 +6235,7 @@ msgstr "Repeteix l'avís" msgid "Revoke the \"%s\" role from this user" msgstr "Bloca l'usuari del grup" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6350,92 +6364,96 @@ msgstr "Deixar d'estar subscrit des d'aquest usuari" msgid "Unsubscribe" msgstr "Cancel·lar subscripció" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Edita l'avatar" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Accions de l'usuari" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Edita la configuració del perfil" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Edita" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Enviar un missatge directe a aquest usuari" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Missatge" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Modera" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "Perfil de l'usuari" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 #, fuzzy msgctxt "role" msgid "Administrator" msgstr "Administradors" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 #, fuzzy msgctxt "role" msgid "Moderator" msgstr "Modera" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "fa pocs segons" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "fa un minut" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "fa %d minuts" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "fa una hora" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "fa %d hores" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "fa un dia" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "fa %d dies" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "fa un mes" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "fa %d mesos" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "fa un any" @@ -6449,7 +6467,7 @@ msgstr "%s no és un color vàlid!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s no és un color vàlid! Feu servir 3 o 6 caràcters hexadecimals." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, fuzzy, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "Missatge massa llarg - màxim és 140 caràcters, tu has enviat %d" diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po index a48ec58850..4790caf6cb 100644 --- a/locale/cs/LC_MESSAGES/statusnet.po +++ b/locale/cs/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:49:32+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:20+0000\n" "Language-Team: Czech\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: cs\n" "X-Message-Group: out-statusnet\n" @@ -101,7 +101,7 @@ msgstr "Žádné takové oznámení." #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -110,10 +110,8 @@ msgstr "Žádné takové oznámení." #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Žádný takový uživatel." @@ -205,14 +203,14 @@ msgstr "" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "Potvrzující kód nebyl nalezen" @@ -226,8 +224,8 @@ msgstr "Potvrzující kód nebyl nalezen" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "" @@ -258,7 +256,7 @@ msgid "Could not save profile." msgstr "Nelze uložit profil" #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -345,7 +343,7 @@ msgstr "" msgid "This status is already a favorite." msgstr "Toto je již vaÅ¡e Jabber" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "" @@ -468,7 +466,7 @@ msgstr "Žádný požadavek nebyl nalezen!" msgid "You are already a member of that group." msgstr "Již jste pÅ™ihlášen" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -520,7 +518,7 @@ msgstr "Neplatná velikost" #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -588,9 +586,9 @@ msgstr "O nás" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "PÅ™ezdívka" @@ -664,12 +662,12 @@ msgstr "" msgid "Unsupported format." msgstr "Nepodporovaný formát obrázku." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, fuzzy, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1 statusů na %2" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "Mikroblog od %s" @@ -679,7 +677,7 @@ msgstr "Mikroblog od %s" msgid "%1$s / Updates mentioning %2$s" msgstr "%1 statusů na %2" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "" @@ -689,7 +687,7 @@ msgstr "" msgid "%s public timeline" msgstr "" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "" @@ -704,12 +702,12 @@ msgstr "OdpovÄ›di na %s" msgid "Repeats of %s" msgstr "OdpovÄ›di na %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, fuzzy, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Mikroblog od %s" @@ -739,7 +737,7 @@ msgstr "Žádná velikost" msgid "Invalid size." msgstr "Neplatná velikost" -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Obrázek" @@ -772,7 +770,7 @@ msgid "Preview" msgstr "" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Odstranit" @@ -855,8 +853,8 @@ msgstr "" #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 #, fuzzy msgid "No such group." msgstr "Žádné takové oznámení." @@ -965,7 +963,7 @@ msgstr "Neodeslal jste nám profil" #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "" @@ -1025,7 +1023,7 @@ msgstr "" msgid "Do not delete this notice" msgstr "Žádné takové oznámení." -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Odstranit toto oznámení" @@ -1291,7 +1289,7 @@ msgstr "Text je příliÅ¡ dlouhý (maximální délka je 140 zanků)" msgid "Could not update group." msgstr "Nelze aktualizovat uživatele" -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 #, fuzzy msgid "Could not create aliases." msgstr "Nelze uložin informace o obrázku" @@ -1998,7 +1996,7 @@ msgstr "" msgid "You are already subscribed to these users:" msgstr "" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "" @@ -2100,7 +2098,7 @@ msgstr "" msgid "You must be logged in to leave a group." msgstr "" -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 #, fuzzy msgid "You are not a member of that group." msgstr "Neodeslal jste nám profil" @@ -2216,12 +2214,12 @@ msgstr "" msgid "New message" msgstr "" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "" -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Žádný obsah!" @@ -2229,7 +2227,7 @@ msgstr "Žádný obsah!" msgid "No recipient specified." msgstr "" -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2243,7 +2241,7 @@ msgstr "" msgid "Direct message to %s sent." msgstr "" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "" @@ -2358,7 +2356,7 @@ msgstr "" msgid "Notice has no profile" msgstr "SdÄ›lení nemá profil" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "%1 statusů na %2" @@ -2372,8 +2370,8 @@ msgstr "PÅ™ipojit" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "" @@ -2513,7 +2511,7 @@ msgstr "Neplatné heslo" msgid "Error saving user; invalid." msgstr "Chyba pÅ™i ukládaní uživatele; neplatný" -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Nelze uložit nové heslo" @@ -2737,8 +2735,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 znaků nebo Äísel, bez teÄek, Äárek a mezer" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Celé jméno" @@ -2765,9 +2763,9 @@ msgid "Bio" msgstr "O mÄ›" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "UmístÄ›ní" @@ -2781,7 +2779,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "" @@ -3011,7 +3009,7 @@ msgstr "Resetovat heslo" msgid "Recover password" msgstr "Obnovit" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Žádost o obnovu hesla" @@ -3031,19 +3029,19 @@ msgstr "Reset" msgid "Enter a nickname or email address." msgstr "Zadej pÅ™ezdívku nebo emailovou adresu" -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Žádný registrovaný email pro tohoto uživatele." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Chyba pÅ™i ukládání potvrzení adresy" -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3051,23 +3049,23 @@ msgstr "" "Návod jak obnovit heslo byl odeslát na vaší emailovou adresu zaregistrovanou " "u vaÅ¡eho úÄtu." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "NeÄekané resetování hesla." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Heslo musí být alespoň 6 znaků dlouhé" -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Heslo a potvrzení nesouhlasí" -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Chyba nastavení uživatele" -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Nové heslo bylo uloženo. Nyní jste pÅ™ihlášen." @@ -3214,7 +3212,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "Adresa profilu na jiných kompatibilních mikroblozích." #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Odebírat" @@ -3255,7 +3253,7 @@ msgstr "Nemůžete se registrovat, pokud nesouhlasíte s licencí." msgid "You already repeated that notice." msgstr "Již jste pÅ™ihlášen" -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 #, fuzzy msgid "Repeated" msgstr "VytvoÅ™it" @@ -3404,7 +3402,7 @@ msgstr "UmístÄ›ní" msgid "Description" msgstr "OdbÄ›ry" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Statistiky" @@ -3515,70 +3513,70 @@ msgstr "" msgid "%1$s group, page %2$d" msgstr "VÅ¡echny odbÄ›ry" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 #, fuzzy msgid "Group profile" msgstr "Žádné takové oznámení." -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Poznámka" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Feed sdÄ›lení pro %s" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Feed sdÄ›lení pro %s" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "Feed sdÄ›lení pro %s" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, fuzzy, php-format msgid "FOAF for %s group" msgstr "Feed sdÄ›lení pro %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 #, fuzzy msgid "Members" msgstr "ÄŒlenem od" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 #, fuzzy msgid "Created" msgstr "VytvoÅ™it" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3588,7 +3586,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3597,7 +3595,7 @@ msgid "" "their life and interests. " msgstr "" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "" @@ -4137,13 +4135,13 @@ msgstr "Žádný takový dokument." msgid "Tag %s" msgstr "" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 #, fuzzy msgid "User profile" msgstr "Uživatel nemá profil." #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "" @@ -4480,19 +4478,19 @@ msgstr "Osobní" msgid "Author(s)" msgstr "" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4534,46 +4532,46 @@ msgstr "" msgid "Could not update message with new URI." msgstr "" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "" -#: classes/Notice.php:241 +#: classes/Notice.php:244 #, fuzzy msgid "Problem saving notice. Too long." msgstr "Problém pÅ™i ukládání sdÄ›lení" -#: classes/Notice.php:245 +#: classes/Notice.php:248 #, fuzzy msgid "Problem saving notice. Unknown user." msgstr "Problém pÅ™i ukládání sdÄ›lení" -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Problém pÅ™i ukládání sdÄ›lení" -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "Problém pÅ™i ukládání sdÄ›lení" -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "" @@ -4606,31 +4604,31 @@ msgstr "Nelze smazat odebírání" msgid "Couldn't delete subscription OMB token." msgstr "Nelze smazat odebírání" -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Nelze smazat odebírání" -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "" -#: classes/User_group.php:477 +#: classes/User_group.php:480 #, fuzzy msgid "Could not create group." msgstr "Nelze uložin informace o obrázku" -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "Nelze vytvoÅ™it odebírat" -#: classes/User_group.php:507 +#: classes/User_group.php:510 #, fuzzy msgid "Could not set group membership." msgstr "Nelze vytvoÅ™it odebírat" -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "Nelze vytvoÅ™it odebírat" @@ -4852,7 +4850,7 @@ msgstr "" msgid "StatusNet software license" msgstr "" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4861,12 +4859,12 @@ msgstr "" "**%%site.name%%** je služba microblogů, kterou pro vás poskytuje [%%site." "broughtby%%](%%site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** je služba mikroblogů." -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4877,43 +4875,43 @@ msgstr "" "dostupná pod [GNU Affero General Public License](http://www.fsf.org/" "licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 #, fuzzy msgid "Site content license" msgstr "Nové sdÄ›lení" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "" -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "" -#: lib/action.php:1161 +#: lib/action.php:1164 #, fuzzy msgid "After" msgstr "« NovÄ›jší" -#: lib/action.php:1169 +#: lib/action.php:1172 #, fuzzy msgid "Before" msgstr "Starší »" @@ -4930,6 +4928,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5026,7 +5028,7 @@ msgstr "Potvrzení emailové adresy" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5105,11 +5107,11 @@ msgstr "Odstranit" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Poskytovatel" @@ -5131,37 +5133,52 @@ msgstr "Heslo uloženo" msgid "Password changing is not allowed" msgstr "Heslo uloženo" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "" +#: lib/command.php:83 lib/command.php:105 +#, fuzzy +msgid "Notice with that id does not exist" +msgstr "Vzdálený profil s nesouhlasícím profilem" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +#, fuzzy +msgid "User has no last notice" +msgstr "Uživatel nemá profil." + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "Nelze aktualizovat uživatele" -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Nelze aktualizovat uživatele" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "" + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, fuzzy, php-format msgid "Nudge sent to %s" msgstr "OdpovÄ›di na %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5169,209 +5186,205 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -#, fuzzy -msgid "Notice with that id does not exist" -msgstr "Vzdálený profil s nesouhlasícím profilem" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -#, fuzzy -msgid "User has no last notice" -msgstr "Uživatel nemá profil." - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "" -#: lib/command.php:217 +#: lib/command.php:317 #, fuzzy msgid "You are already a member of that group" msgstr "Již jste pÅ™ihlášen" -#: lib/command.php:231 +#: lib/command.php:331 #, fuzzy, php-format msgid "Could not join user %s to group %s" msgstr "Nelze pÅ™esmÄ›rovat na server: %s" -#: lib/command.php:236 +#: lib/command.php:336 #, fuzzy, php-format msgid "%s joined group %s" msgstr "%1 statusů na %2" -#: lib/command.php:275 +#: lib/command.php:373 #, fuzzy, php-format msgid "Could not remove user %s to group %s" msgstr "Nelze vytvoÅ™it OpenID z: %s" -#: lib/command.php:280 +#: lib/command.php:378 #, fuzzy, php-format msgid "%s left group %s" msgstr "%1 statusů na %2" -#: lib/command.php:309 +#: lib/command.php:401 #, fuzzy, php-format msgid "Fullname: %s" msgstr "Celé jméno" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "" -#: lib/command.php:413 +#: lib/command.php:490 #, fuzzy msgid "Cannot repeat your own notice" msgstr "Nemůžete se registrovat, pokud nesouhlasíte s licencí." -#: lib/command.php:418 +#: lib/command.php:495 #, fuzzy msgid "Already repeated that notice" msgstr "Odstranit toto oznámení" -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "SdÄ›lení" -#: lib/command.php:428 +#: lib/command.php:505 #, fuzzy msgid "Error repeating notice." msgstr "Problém pÅ™i ukládání sdÄ›lení" -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:491 +#: lib/command.php:545 #, fuzzy, php-format msgid "Reply to %s sent" msgstr "OdpovÄ›di na %s" -#: lib/command.php:493 +#: lib/command.php:547 #, fuzzy msgid "Error saving notice." msgstr "Problém pÅ™i ukládání sdÄ›lení" -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "" -#: lib/command.php:554 lib/command.php:589 +#: lib/command.php:602 #, fuzzy -msgid "No such user" -msgstr "Žádný takový uživatel." +msgid "Can't subscribe to OMB profiles by command." +msgstr "Neodeslal jste nám profil" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "" -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "" -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "" -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "" -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "Odhlásit" -#: lib/command.php:709 +#: lib/command.php:752 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Neodeslal jste nám profil" -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Neodeslal jste nám profil" msgstr[1] "Neodeslal jste nám profil" msgstr[2] "" -#: lib/command.php:731 +#: lib/command.php:774 #, fuzzy msgid "No one is subscribed to you." msgstr "Vzdálený odbÄ›r" -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Vzdálený odbÄ›r" msgstr[1] "Vzdálený odbÄ›r" msgstr[2] "" -#: lib/command.php:753 +#: lib/command.php:796 #, fuzzy msgid "You are not a member of any groups." msgstr "Neodeslal jste nám profil" -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Neodeslal jste nám profil" msgstr[1] "Neodeslal jste nám profil" msgstr[2] "" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5413,20 +5426,20 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 #, fuzzy msgid "No configuration file found. " msgstr "Žádný potvrzující kód." -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "" @@ -5608,50 +5621,50 @@ msgstr "" msgid "This page is not available in a media type you accept" msgstr "Tato stránka není k dispozici v typu média která pÅ™ijímáte." -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Nepodporovaný formát obrázku." + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Je to příliÅ¡ dlouhé. Maximální sdÄ›lení délka je 140 znaků" -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "ČásteÄné náhrání." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Chyba systému pÅ™i nahrávání souboru" -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Není obrázkem, nebo jde o poÅ¡kozený soubor." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Nepodporovaný formát obrázku." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 #, fuzzy msgid "Lost our file." msgstr "Žádné takové oznámení." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5855,7 +5868,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 #, fuzzy msgid "from" msgstr " od " @@ -6012,26 +6025,26 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 #, fuzzy msgid "in context" msgstr "Žádný obsah!" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 #, fuzzy msgid "Repeated by" msgstr "VytvoÅ™it" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 #, fuzzy msgid "Reply" msgstr "odpovÄ›Ä" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "SdÄ›lení" @@ -6179,7 +6192,7 @@ msgstr "Odstranit toto oznámení" msgid "Revoke the \"%s\" role from this user" msgstr "Žádný takový uživatel." -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6312,91 +6325,95 @@ msgstr "" msgid "Unsubscribe" msgstr "Odhlásit" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Upravit avatar" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Akce uživatele" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 #, fuzzy msgid "Edit profile settings" msgstr "Nastavené Profilu" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Zpráva" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "Uživatel nemá profil." -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "pÅ™ed pár sekundami" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "asi pÅ™ed minutou" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "asi pÅ™ed %d minutami" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "asi pÅ™ed hodinou" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "asi pÅ™ed %d hodinami" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "asi pÅ™ede dnem" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "pÅ™ed %d dny" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "asi pÅ™ed mÄ›sícem" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "asi pÅ™ed %d mesíci" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "asi pÅ™ed rokem" @@ -6410,7 +6427,7 @@ msgstr "Stránka není platnou URL." msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po index 4bad95b9ed..014c755655 100644 --- a/locale/de/LC_MESSAGES/statusnet.po +++ b/locale/de/LC_MESSAGES/statusnet.po @@ -15,12 +15,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-08 21:10:39+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:23+0000\n" "Language-Team: German\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63415); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: de\n" "X-Message-Group: out-statusnet\n" @@ -100,7 +100,7 @@ msgstr "Seite nicht vorhanden" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -109,10 +109,8 @@ msgstr "Seite nicht vorhanden" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Unbekannter Benutzer." @@ -213,14 +211,14 @@ msgstr "Aktualisierungen von %1$s und Freunden auf %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "API-Methode nicht gefunden." @@ -233,8 +231,8 @@ msgstr "API-Methode nicht gefunden." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Diese Methode benötigt ein POST." @@ -263,7 +261,7 @@ msgid "Could not save profile." msgstr "Konnte Profil nicht speichern." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -352,7 +350,7 @@ msgstr "Keine Nachricht mit dieser ID gefunden." msgid "This status is already a favorite." msgstr "Diese Nachricht ist bereits ein Favorit!" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Konnte keinen Favoriten erstellen." @@ -472,7 +470,7 @@ msgstr "Gruppe nicht gefunden!" msgid "You are already a member of that group." msgstr "Du bist bereits Mitglied dieser Gruppe" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "Der Admin dieser Gruppe hat dich gesperrt." @@ -510,9 +508,8 @@ msgid "No oauth_token parameter provided." msgstr "Kein oauth_token Parameter angegeben." #: actions/apioauthauthorize.php:106 -#, fuzzy msgid "Invalid token." -msgstr "Ungültige Größe." +msgstr "Ungültiges Token." #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268 #: actions/deletenotice.php:157 actions/disfavor.php:74 @@ -523,7 +520,7 @@ msgstr "Ungültige Größe." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -537,9 +534,8 @@ msgid "Invalid nickname / password!" msgstr "Benutzername oder Passwort falsch." #: actions/apioauthauthorize.php:159 -#, fuzzy msgid "Database error deleting OAuth application user." -msgstr "Fehler bei den Nutzereinstellungen." +msgstr "Datenbank Fehler beim Löschen des OAuth Anwendungs Nutzers." #: actions/apioauthauthorize.php:185 msgid "Database error inserting OAuth application user." @@ -583,6 +579,9 @@ msgid "" "the ability to %3$s your %4$s account data. You should only " "give access to your %4$s account to third parties you trust." msgstr "" +"Das Programm %1$s von %2$s würde gerne " +"%3$s bei deinem %4$s Zugang. Du solltest nur " +"vertrauenswürdigen Quellen Erlaubnis zu deinem %4$s Zugang geben." #: actions/apioauthauthorize.php:310 lib/action.php:438 msgid "Account" @@ -590,9 +589,9 @@ msgstr "Konto" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Nutzername" @@ -664,12 +663,12 @@ msgstr "" msgid "Unsupported format." msgstr "Bildformat wird nicht unterstützt." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Favoriten von %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%1$s Aktualisierung in den Favoriten von %2$s / %2$s." @@ -679,7 +678,7 @@ msgstr "%1$s Aktualisierung in den Favoriten von %2$s / %2$s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Aktualisierungen erwähnen %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "Nachrichten von %1$, die auf Nachrichten von %2$ / %3$ antworten." @@ -689,7 +688,7 @@ msgstr "Nachrichten von %1$, die auf Nachrichten von %2$ / %3$ antworten." msgid "%s public timeline" msgstr "%s öffentliche Zeitleiste" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s Nachrichten von allen!" @@ -704,12 +703,12 @@ msgstr "Antworten an %s" msgid "Repeats of %s" msgstr "Antworten von %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Nachrichten, die mit %s getagt sind" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Aktualisierungen mit %1$s getagt auf %2$s!" @@ -737,7 +736,7 @@ msgstr "Keine Größe." msgid "Invalid size." msgstr "Ungültige Größe." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Avatar" @@ -770,7 +769,7 @@ msgid "Preview" msgstr "Vorschau" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Löschen" @@ -854,8 +853,8 @@ msgstr "Konnte Blockierungsdaten nicht speichern." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Keine derartige Gruppe." @@ -956,7 +955,7 @@ msgstr "Du bist Besitzer dieses Programms" #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Es gab ein Problem mit deinem Sessiontoken." @@ -1016,7 +1015,7 @@ msgstr "Bist du sicher, dass du diese Nachricht löschen möchtest?" msgid "Do not delete this notice" msgstr "Diese Nachricht nicht löschen" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Nachricht löschen" @@ -1270,7 +1269,7 @@ msgstr "Die Beschreibung ist zu lang (max. %d Zeichen)." msgid "Could not update group." msgstr "Konnte Gruppe nicht aktualisieren." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Konnte keinen Favoriten erstellen." @@ -1598,9 +1597,8 @@ msgid "This role is reserved and cannot be set." msgstr "Diese Aufgabe ist reserviert und kann nicht gesetzt werden" #: actions/grantrole.php:75 -#, fuzzy msgid "You cannot grant user roles on this site." -msgstr "Du kannst diesem Benutzer keine Nachricht schicken." +msgstr "Auf dieser Seite können keine Benutzerrollen gewährt werden." #: actions/grantrole.php:82 msgid "User already has this role." @@ -1981,7 +1979,7 @@ msgstr "Lade neue Leute ein" msgid "You are already subscribed to these users:" msgstr "Du hast diese Benutzer bereits abonniert:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2115,7 +2113,7 @@ msgstr "%1$s ist der Gruppe %2$s beigetreten" msgid "You must be logged in to leave a group." msgstr "Du musst angemeldet sein, um aus einer Gruppe auszutreten." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Du bist kein Mitglied dieser Gruppe." @@ -2184,9 +2182,9 @@ msgid "%1$s is already an admin for group \"%2$s\"." msgstr "%1$s ist bereits Administrator der Gruppe \"%2$s\"." #: actions/makeadmin.php:133 -#, fuzzy, php-format +#, php-format msgid "Can't get membership record for %1$s in group %2$s." -msgstr "Konnte Benutzer %s aus der Gruppe %s nicht entfernen" +msgstr "Konnte keinen Mitgliedseintrag für %1$s aus Gruppe %2$s empfangen." #: actions/makeadmin.php:146 #, php-format @@ -2229,12 +2227,12 @@ msgstr "Benutzer dieses Formular, um eine neue Gruppe zu erstellen." msgid "New message" msgstr "Neue Nachricht" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Du kannst diesem Benutzer keine Nachricht schicken." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Kein Inhalt!" @@ -2242,7 +2240,7 @@ msgstr "Kein Inhalt!" msgid "No recipient specified." msgstr "Kein Empfänger angegeben." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2257,7 +2255,7 @@ msgstr "Nachricht gesendet" msgid "Direct message to %s sent." msgstr "Direkte Nachricht an %s abgeschickt" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Ajax-Fehler" @@ -2382,7 +2380,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Nachricht hat kein Profil" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s Status auf %2$s" @@ -2395,8 +2393,8 @@ msgstr "Content-Typ " msgid "Only " msgstr "Nur " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Kein unterstütztes Datenformat." @@ -2449,14 +2447,12 @@ msgid "No login token specified." msgstr "Kein Zugangstoken angegeben." #: actions/otp.php:90 -#, fuzzy msgid "No login token requested." -msgstr "Keine Profil-ID in der Anfrage." +msgstr "Kein Login-Token angefordert." #: actions/otp.php:95 -#, fuzzy msgid "Invalid login token specified." -msgstr "Token ungültig oder abgelaufen." +msgstr "Login-Token ungültig oder abgelaufen." #: actions/otp.php:104 msgid "Login token expired." @@ -2530,7 +2526,7 @@ msgstr "Altes Passwort falsch" msgid "Error saving user; invalid." msgstr "Fehler beim Speichern des Nutzers, ungültig." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Konnte neues Passwort nicht speichern" @@ -2746,8 +2742,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 Kleinbuchstaben oder Ziffern, keine Sonder- oder Leerzeichen" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Vollständiger Name" @@ -2775,9 +2771,9 @@ msgid "Bio" msgstr "Biografie" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Aufenthaltsort" @@ -2791,7 +2787,7 @@ msgstr "Teile meine aktuelle Position wenn ich Nachrichten sende" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Stichwörter" @@ -3037,7 +3033,7 @@ msgstr "Passwort zurücksetzen" msgid "Recover password" msgstr "Stelle Passwort wieder her" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Wiederherstellung des Passworts angefordert" @@ -3057,19 +3053,19 @@ msgstr "Zurücksetzen" msgid "Enter a nickname or email address." msgstr "Gib einen Spitznamen oder eine E-Mail-Adresse ein." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "Kein Benutzer mit dieser E-Mail-Adresse oder mit diesem Nutzernamen." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Der Nutzer hat keine registrierte E-Mail-Adresse." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Fehler beim Speichern der Adressbestätigung." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3077,23 +3073,23 @@ msgstr "" "Anweisungen für die Wiederherstellung deines Passworts wurden an deine " "hinterlegte E-Mail-Adresse geschickt." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Unerwarteter Passwortreset." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Passwort muss mehr als 6 Zeichen enthalten" -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Passwort und seine Bestätigung stimmen nicht überein." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Fehler bei den Nutzereinstellungen." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Neues Passwort erfolgreich gespeichert. Du bist jetzt angemeldet." @@ -3261,7 +3257,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "Profil-URL bei einem anderen kompatiblen Microbloggingdienst" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Abonnieren" @@ -3298,7 +3294,7 @@ msgstr "Du kannst deine eigene Nachricht nicht wiederholen." msgid "You already repeated that notice." msgstr "Nachricht bereits wiederholt" -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Wiederholt" @@ -3347,6 +3343,8 @@ msgid "" "You can engage other users in a conversation, subscribe to more people or " "[join groups](%%action.groups%%)." msgstr "" +"Du kannst andere Nutzer ansprechen, mehr Leuten folgen oder [Gruppen " +"beitreten](%%action.groups%%)." #: actions/replies.php:206 #, php-format @@ -3376,9 +3374,8 @@ msgid "StatusNet" msgstr "StatusNet" #: actions/sandbox.php:65 actions/unsandbox.php:65 -#, fuzzy msgid "You cannot sandbox users on this site." -msgstr "Du kannst diesem Benutzer keine Nachricht schicken." +msgstr "Du kannst Benutzer auf dieser Seite nicht auf den Spielplaz schicken." #: actions/sandbox.php:72 msgid "User is already sandboxed." @@ -3420,9 +3417,8 @@ msgid "You must be logged in to view an application." msgstr "Du musst angemeldet sein, um aus dieses Programm zu betrachten." #: actions/showapplication.php:157 -#, fuzzy msgid "Application profile" -msgstr "Nachricht hat kein Profil" +msgstr "Anwendungsprofil" #: actions/showapplication.php:159 lib/applicationeditform.php:180 msgid "Icon" @@ -3442,7 +3438,7 @@ msgstr "Organisation" msgid "Description" msgstr "Beschreibung" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Statistiken" @@ -3525,6 +3521,9 @@ msgid "" "You haven't chosen any favorite notices yet. Click the fave button on " "notices you like to bookmark them for later or shed a spotlight on them." msgstr "" +"Du hast noch keine Lieblingsnachrichten gewählt. Klicke den Favorisieren-" +"Button bei einer Nachricht, die dir gefällt um die Aufmerksamkeit auf sie zu " +"richten und sie in deine Lesezeichen aufzunehmen." #: actions/showfavorites.php:208 #, php-format @@ -3555,67 +3554,67 @@ msgstr "%s Gruppe" msgid "%1$s group, page %2$d" msgstr "%1$s Gruppe, Seite %d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Gruppenprofil" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Nachricht" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Pseudonyme" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Gruppenaktionen" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Nachrichtenfeed der Gruppe %s (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Nachrichtenfeed der Gruppe %s (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Nachrichtenfeed der Gruppe %s (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "Postausgang von %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Mitglieder" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Kein)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Alle Mitglieder" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Erstellt" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3625,7 +3624,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3638,7 +3637,7 @@ msgstr "" "Freien Software [StatusNet](http://status.net/). Seine Mitglieder erstellen " "kurze Nachrichten über Ihr Leben und Interessen. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Administratoren" @@ -3816,9 +3815,8 @@ msgid "Contact email address for your site" msgstr "Kontakt-E-Mail-Adresse für Deine Site." #: actions/siteadminpanel.php:245 -#, fuzzy msgid "Local" -msgstr "Lokale Ansichten" +msgstr "Lokal" #: actions/siteadminpanel.php:256 msgid "Default timezone" @@ -3835,6 +3833,8 @@ msgstr "Bevorzugte Sprache" #: actions/siteadminpanel.php:263 msgid "Site language when autodetection from browser settings is not available" msgstr "" +"Sprache der Seite für den Fall, dass die automatische Erkennung anhand der " +"Browser-Einstellungen nicht verfügbar ist." #: actions/siteadminpanel.php:271 msgid "Limits" @@ -4183,12 +4183,12 @@ msgstr "Kein ID Argument." msgid "Tag %s" msgstr "Tag %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Benutzerprofil" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Foto" @@ -4415,7 +4415,7 @@ msgstr "Profiladresse '%s' ist für einen lokalen Benutzer." #: actions/userauthorization.php:345 #, php-format msgid "Avatar URL ‘%s’ is not valid." -msgstr "" +msgstr "Avatar Adresse '%s' ist nicht gültig." #: actions/userauthorization.php:350 #, php-format @@ -4528,7 +4528,7 @@ msgstr "Version" msgid "Author(s)" msgstr "Autor(en)" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " @@ -4537,12 +4537,12 @@ msgstr "" "Keine Datei darf größer als %d Bytes sein und die Datei die du verschicken " "wolltest ist %d Bytes groß. Bitte eine kleinere Datei hoch laden." -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "Eine Datei dieser Größe überschreitet deine User Quota von %d Byte." -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4566,9 +4566,9 @@ msgid "Could not update local group." msgstr "Konnte Gruppe nicht aktualisieren." #: classes/Login_token.php:76 -#, fuzzy, php-format +#, php-format msgid "Could not create login token for %s" -msgstr "Konnte keinen Favoriten erstellen." +msgstr "Konnte keinen Login-Token für %s erstellen" #: classes/Message.php:45 msgid "You are banned from sending direct messages." @@ -4582,27 +4582,27 @@ msgstr "Konnte Nachricht nicht einfügen." msgid "Could not update message with new URI." msgstr "Konnte Nachricht nicht mit neuer URI versehen." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Datenbankfehler beim Einfügen des Hashtags: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "Problem bei Speichern der Nachricht. Sie ist zu lang." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Problem bei Speichern der Nachricht. Unbekannter Benutzer." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Zu schnell zu viele Nachrichten; atme kurz durch und schicke sie erneut in " "ein paar Minuten ab." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4610,20 +4610,20 @@ msgstr "" "Zu schnell zu viele Nachrichten; atme kurz durch und schicke sie erneut in " "ein paar Minuten ab." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "" "Du wurdest für das Schreiben von Nachrichten auf dieser Seite gesperrt." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Problem bei Speichern der Nachricht." -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "Problem bei Speichern der Nachricht." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4653,32 +4653,30 @@ msgstr "Konnte Abonnement nicht löschen." msgid "Couldn't delete subscription OMB token." msgstr "Konnte OMB-Abonnement nicht löschen." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Konnte Abonnement nicht löschen." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Herzlich willkommen bei %1$s, @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Konnte Gruppe nicht erstellen." -#: classes/User_group.php:486 -#, fuzzy +#: classes/User_group.php:489 msgid "Could not set group URI." -msgstr "Konnte Gruppenmitgliedschaft nicht setzen." +msgstr "Konnte die Gruppen URI nicht setzen." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Konnte Gruppenmitgliedschaft nicht setzen." -#: classes/User_group.php:521 -#, fuzzy +#: classes/User_group.php:524 msgid "Could not save local group info." -msgstr "Konnte Abonnement nicht erstellen." +msgstr "Konnte die lokale Gruppen Information nicht speichern." #: lib/accountsettingsaction.php:108 msgid "Change your profile settings" @@ -4880,7 +4878,7 @@ msgstr "Plakette" msgid "StatusNet software license" msgstr "StatusNet-Software-Lizenz" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4889,12 +4887,12 @@ msgstr "" "**%%site.name%%** ist ein Microbloggingdienst von [%%site.broughtby%%](%%" "site.broughtbyurl%%)." -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** ist ein Microbloggingdienst." -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4905,49 +4903,51 @@ msgstr "" "(Version %s) betrieben, die unter der [GNU Affero General Public License]" "(http://www.fsf.org/licensing/licenses/agpl-3.0.html) erhältlich ist." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "StatusNet-Software-Lizenz" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" "Inhalt und Daten urheberrechtlich geschützt durch %1$s. Alle Rechte " "vorbehalten." -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" +"Urheberrecht von Inhalt und Daten liegt bei den Beteiligten. Alle Rechte " +"vorbehalten." -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Alle " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "Lizenz." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Seitenerstellung" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Später" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Vorher" #: lib/activity.php:453 msgid "Can't handle remote content yet." -msgstr "" +msgstr "Fremdinhalt kann noch nicht eingebunden werden." #: lib/activity.php:481 msgid "Can't handle embedded XML content yet." @@ -4955,6 +4955,10 @@ msgstr "Kann eingebundenen XML Inhalt nicht verarbeiten." #: lib/activity.php:485 msgid "Can't handle embedded Base64 content yet." +msgstr "Eingebundener Base64 Inhalt kann noch nicht verarbeitet werden." + +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." msgstr "" #. TRANS: Client error message @@ -5044,7 +5048,7 @@ msgstr "SMS-Konfiguration" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5076,7 +5080,7 @@ msgstr "Adresse der Homepage dieses Programms" #: lib/applicationeditform.php:224 msgid "Organization responsible for this application" -msgstr "" +msgstr "Für diese Anwendung verantwortliche Organisation" #: lib/applicationeditform.php:230 msgid "URL for the homepage of the organization" @@ -5120,11 +5124,11 @@ msgstr "Entfernen" msgid "Attachments" msgstr "Anhänge" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Autor" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Anbieter" @@ -5144,37 +5148,50 @@ msgstr "Passwort konnte nicht geändert werden" msgid "Password changing is not allowed" msgstr "Passwort kann nicht geändert werden" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Befehl-Ergebnisse" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Befehl ausgeführt" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Befehl fehlgeschlagen" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Leider ist dieser Befehl noch nicht implementiert." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "Nachricht mit dieser ID existiert nicht" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "Benutzer hat keine letzte Nachricht" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "Die bestätigte E-Mail-Adresse konnte nicht gespeichert werden." -#: lib/command.php:92 +#: lib/command.php:143 +#, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Konnte keinen lokalen Nutzer mit dem Nick %s finden" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Leider ist dieser Befehl noch nicht implementiert." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "Es macht keinen Sinn dich selbst anzustupsen!" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "Stups an %s geschickt" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5185,195 +5202,195 @@ msgstr "" "Abonnenten: %2$s\n" "Mitteilungen: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "Nachricht mit dieser ID existiert nicht" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "Benutzer hat keine letzte Nachricht" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Nachricht als Favorit markiert." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Du bist bereits Mitglied dieser Gruppe" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Konnte Benutzer %s nicht der Gruppe %s hinzufügen" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s ist der Gruppe %s beigetreten" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Konnte Benutzer %s aus der Gruppe %s nicht entfernen" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s hat die Gruppe %s verlassen" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Vollständiger Name: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Standort: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Homepage: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Ãœber: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" +"%s ist ein entferntes Profil; man kann direkte Nachrichten nur an Nutzer auf " +"dem selben Server senden." + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "Nachricht zu lang - maximal %d Zeichen erlaubt, du hast %d gesendet" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Direkte Nachricht an %s abgeschickt" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Fehler beim Senden der Nachricht" -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "Du kannst deine eigenen Nachrichten nicht wiederholen." -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "Nachricht bereits wiederholt" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "Nachricht von %s wiederholt" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "Fehler beim Wiederholen der Nachricht" -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Nachricht zu lange - maximal %d Zeichen erlaubt, du hast %d gesendet" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "Antwort an %s gesendet" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "Problem beim Speichern der Nachricht." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Gib den Namen des Benutzers an, den du abonnieren möchtest" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "Unbekannter Benutzer." +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "OMB Profile können nicht mit einem Kommando abonniert werden." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "%s abonniert" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Gib den Namen des Benutzers ein, den du nicht mehr abonnieren möchtest" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "%s nicht mehr abonniert" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Befehl noch nicht implementiert." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Benachrichtigung deaktiviert." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Konnte Benachrichtigung nicht deaktivieren." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Benachrichtigung aktiviert." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Konnte Benachrichtigung nicht aktivieren." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "Anmeldung ist abgeschaltet" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "Der Link ist nur einmal benutzbar und für eine Dauer von 2 Minuten: %s" -#: lib/command.php:692 +#: lib/command.php:735 #, php-format msgid "Unsubscribed %s" msgstr "%s nicht mehr abonniert" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "Du hast niemanden abonniert." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Du hast diese Benutzer bereits abonniert:" msgstr[1] "Du hast diese Benutzer bereits abonniert:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "Niemand hat Dich abonniert." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Die Gegenseite konnte Dich nicht abonnieren." msgstr[1] "Die Gegenseite konnte Dich nicht abonnieren." -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "Du bist in keiner Gruppe Mitglied." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Du bist Mitglied dieser Gruppe:" msgstr[1] "Du bist Mitglied dieser Gruppen:" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5414,20 +5431,58 @@ msgid "" "tracks - not yet implemented.\n" "tracking - not yet implemented.\n" msgstr "" +"Befehle:\n" +"on - Benachrichtigung einschalten\n" +"off - Benachrichtigung ausschalten\n" +"help - diese Hilfe anzeigen\n" +"follow - einem Nutzer folgen\n" +"groups - Gruppen auflisten in denen du Mitglied bist\n" +"subscriptions - Leute auflisten denen du folgst\n" +"subscribers - Leute auflisten die dir folgen\n" +"leave - einem Nutzer nicht mehr folgen\n" +"d - Direkte Nachricht an einen Nutzer schicken\n" +"get - letzte Nachricht eines Nutzers abrufen\n" +"whois - Profil eines Nutzers abrufen\n" +"lose - Nutzer zwingen dir nicht mehr zu folgen\n" +"fav - letzte Nachricht eines Nutzers als Favorit markieren\n" +"fav # - Nachricht mit bestimmter ID als Favorit markieren\n" +"repeat # - Nachricht mit bestimmter ID wiederholen\n" +"repeat - letzte Nachricht eines Nutzers wiederholen\n" +"reply # - Nachricht mit bestimmter ID beantworten\n" +"reply - letzte Nachricht eines Nutzers beantworten\n" +"join - Gruppe beitreten\n" +"login - Link zum Anmelden auf der Webseite anfordern\n" +"drop - Gruppe verlassen\n" +"stats - deine Statistik abrufen\n" +"stop - Äquivalent zu 'off'\n" +"quit - Äquivalent zu 'off'\n" +"sub - same as 'follow'\n" +"unsub - same as 'leave'\n" +"last - same as 'get'\n" +"on - not yet implemented.\n" +"off - not yet implemented.\n" +"nudge - remind a user to update.\n" +"invite - not yet implemented.\n" +"track - not yet implemented.\n" +"untrack - not yet implemented.\n" +"track off - not yet implemented.\n" +"untrack all - not yet implemented.\n" +"tracks - not yet implemented.\n" +"tracking - not yet implemented.\n" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Keine Konfigurationsdatei gefunden." -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "Ich habe an folgenden Stellen nach Konfigurationsdateien gesucht: " -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "Bitte die Installation erneut starten um das Problem zu beheben." -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "Zur Installation gehen." @@ -5554,6 +5609,8 @@ msgstr "" #, php-format msgid "Extra nicknames for the group, comma- or space- separated, max %d" msgstr "" +"Zusätzliche Spitznamen für die Gruppe, Komma oder Leerzeichen getrennt, max %" +"d" #: lib/groupnav.php:85 msgid "Group" @@ -5604,52 +5661,52 @@ msgstr "Stichworte in den Nachrichten der Gruppe %s" msgid "This page is not available in a media type you accept" msgstr "Dies Seite liegt in keinem von dir akzeptierten Mediatype vor." -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Bildformat wird nicht unterstützt." + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Du kannst ein Logo für Deine Gruppe hochladen." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Unvollständiges Hochladen." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Systemfehler beim hochladen der Datei." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Kein Bild oder defekte Datei." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Bildformat wird nicht unterstützt." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Daten verloren." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Unbekannter Dateityp" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "MB" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "kB" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 -#, fuzzy, php-format +#: lib/jabber.php:408 +#, php-format msgid "Unknown inbox source %d." -msgstr "Unbekannte Sprache „%s“" +msgstr "Unbekannte inbox Quelle %d." #: lib/joinform.php:114 msgid "Join" @@ -5867,6 +5924,16 @@ msgid "" "Faithfully yours,\n" "%6$s\n" msgstr "" +"%1$s (@%7$s) hat gerade deine Mitteilung von %2$s als Favorit hinzugefügt.\n" +"Die Adresse der Nachricht ist:\n" +"%3$s\n" +"Der Text der Nachricht ist:\n" +"%4$s\n" +"Die Favoritenliste von %1$s ist hier:\n" +"%5$s\n" +"\n" +"Gruß,\n" +"%6$s\n" #: lib/mail.php:635 #, php-format @@ -5902,7 +5969,7 @@ msgstr "" "schicken, um sie in eine Konversation zu verwickeln. Andere Leute können Dir " "Nachrichten schicken, die nur Du sehen kannst." -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "von" @@ -5972,9 +6039,8 @@ msgid "File could not be moved to destination directory." msgstr "Datei konnte nicht in das Zielverzeichnis verschoben werden." #: lib/mediafile.php:201 lib/mediafile.php:237 -#, fuzzy msgid "Could not determine file's MIME type." -msgstr "Konnte öffentlichen Stream nicht abrufen." +msgstr "Konnte den MIME-Typ nicht feststellen." #: lib/mediafile.php:270 #, php-format @@ -6039,7 +6105,7 @@ msgstr "" #: lib/noticelist.php:429 #, php-format msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s" -msgstr "" +msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s" #: lib/noticelist.php:430 msgid "N" @@ -6061,23 +6127,23 @@ msgstr "W" msgid "at" msgstr "in" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "im Zusammenhang" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Wiederholt von" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Auf diese Nachricht antworten" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Antworten" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Nachricht wiederholt" @@ -6220,9 +6286,9 @@ msgstr "Diese Nachricht wiederholen" msgid "Revoke the \"%s\" role from this user" msgstr "Widerrufe die \"%s\" Rolle von diesem Benutzer" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." -msgstr "" +msgstr "Kein einzelner Nutzer für den Ein-Benutzer-Modus ausgewählt." #: lib/sandboxform.php:67 msgid "Sandbox" @@ -6346,89 +6412,93 @@ msgstr "Lösche dein Abonnement von diesem Benutzer" msgid "Unsubscribe" msgstr "Abbestellen" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Avatar bearbeiten" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Benutzeraktionen" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Profil Einstellungen ändern" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Bearbeiten" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Direkte Nachricht an Benutzer verschickt" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Nachricht" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Moderieren" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 msgid "User role" msgstr "Benutzerrolle" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "Administrator" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "Moderator" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "vor wenigen Sekunden" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "vor einer Minute" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "vor %d Minuten" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "vor einer Stunde" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "vor %d Stunden" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "vor einem Tag" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "vor %d Tagen" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "vor einem Monat" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "vor %d Monaten" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "vor einem Jahr" @@ -6442,7 +6512,7 @@ msgstr "%s ist keine gültige Farbe!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s ist keine gültige Farbe! Verwenden Sie 3 oder 6 Hex-Zeichen." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/el/LC_MESSAGES/statusnet.po b/locale/el/LC_MESSAGES/statusnet.po index 0ebe84fe7f..d2552a0882 100644 --- a/locale/el/LC_MESSAGES/statusnet.po +++ b/locale/el/LC_MESSAGES/statusnet.po @@ -1,6 +1,7 @@ # Translation of StatusNet to Greek # # Author@translatewiki.net: Crazymadlover +# Author@translatewiki.net: Dead3y3 # Author@translatewiki.net: Omnipaedista # -- # This file is distributed under the same license as the StatusNet package. @@ -9,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:49:37+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:26+0000\n" "Language-Team: Greek\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: el\n" "X-Message-Group: out-statusnet\n" @@ -28,31 +29,30 @@ msgstr "ΠÏόσβαση" #. TRANS: Page notice #: actions/accessadminpanel.php:67 -#, fuzzy msgid "Site access settings" -msgstr "Ρυθμίσεις OpenID" +msgstr "Ρυθμίσεις Ï€Ïόσβασης ιστοτόπου" #. TRANS: Form legend for registration form. #: actions/accessadminpanel.php:161 -#, fuzzy msgid "Registration" -msgstr "ΠεÏιγÏαφή" +msgstr "ΕγγÏαφή" #. TRANS: Checkbox instructions for admin setting "Private" #: actions/accessadminpanel.php:165 msgid "Prohibit anonymous users (not logged in) from viewing site?" msgstr "" +"ΑπαγόÏευση ανωνÏμων χÏηστών (μη συνδεδεμένων) από το να βλέπουν τον ιστότοπο;" #. TRANS: Checkbox label for prohibiting anonymous users from viewing site. #: actions/accessadminpanel.php:167 msgctxt "LABEL" msgid "Private" -msgstr "" +msgstr "Ιδιωτικό" #. TRANS: Checkbox instructions for admin setting "Invite only" #: actions/accessadminpanel.php:174 msgid "Make registration invitation only." -msgstr "" +msgstr "Κάντε την εγγÏαφή να είναι με Ï€Ïόσκληση μόνο." #. TRANS: Checkbox label for configuring site as invite only. #: actions/accessadminpanel.php:176 @@ -62,24 +62,22 @@ msgstr "" #. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations) #: actions/accessadminpanel.php:183 msgid "Disable new registrations." -msgstr "" +msgstr "ΑπενεÏγοποίηση των νέων εγγÏαφών" #. TRANS: Checkbox label for disabling new user registrations. #: actions/accessadminpanel.php:185 msgid "Closed" -msgstr "" +msgstr "Κλειστό" #. TRANS: Title / tooltip for button to save access settings in site admin panel #: actions/accessadminpanel.php:202 -#, fuzzy msgid "Save access settings" -msgstr "Ρυθμίσεις OpenID" +msgstr "Αποθήκευση Ïυθμίσεων Ï€Ïόσβασης" #: actions/accessadminpanel.php:203 -#, fuzzy msgctxt "BUTTON" msgid "Save" -msgstr "ΑποχώÏηση" +msgstr "Αποθήκευση" #. TRANS: Server error when page not found (404) #: actions/all.php:64 actions/public.php:98 actions/replies.php:93 @@ -97,7 +95,7 @@ msgstr "Δεν υπάÏχει τέτοια σελίδα" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -106,18 +104,16 @@ msgstr "Δεν υπάÏχει τέτοια σελίδα" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Κανένας τέτοιος χÏήστης." #. TRANS: Page title. %1$s is user nickname, %2$d is page number #: actions/all.php:86 -#, fuzzy, php-format +#, php-format msgid "%1$s and friends, page %2$d" -msgstr "%s και οι φίλοι του/της" +msgstr "%1$s και φίλοι, σελίδα 2%$d" #. TRANS: Page title. %1$s is user nickname #. TRANS: H1 text. %1$s is user nickname @@ -152,6 +148,8 @@ msgstr "Ροή φίλων του/της %s (Atom)" msgid "" "This is the timeline for %s and friends but no one has posted anything yet." msgstr "" +"Αυτό είναι το χÏονοδιάγÏαμμα για %s και φίλους, αλλά κανείς δεν έχει κάνει " +"καμία αποστολή ακόμα." #: actions/all.php:139 #, php-format @@ -159,6 +157,8 @@ msgid "" "Try subscribing to more people, [join a group](%%action.groups%%) or post " "something yourself." msgstr "" +"Δοκιμάστε την εγγÏαφή σε πεÏισσότεÏους ανθÏώπους, [ενταχθείτε σε μια ομάδα] " +"(%%action.groups%%) ή αποστείλετε κάτι ο ίδιος." #. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@" #: actions/all.php:142 @@ -200,14 +200,14 @@ msgstr "" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "Η μέθοδος του ΑΡΙ δε βÏέθηκε!" @@ -221,8 +221,8 @@ msgstr "Η μέθοδος του ΑΡΙ δε βÏέθηκε!" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "" @@ -253,7 +253,7 @@ msgid "Could not save profile." msgstr "Απέτυχε η αποθήκευση του Ï€Ïοφίλ." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -338,7 +338,7 @@ msgstr "" msgid "This status is already a favorite." msgstr "" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "" @@ -460,7 +460,7 @@ msgstr "Η ομάδα δεν βÏέθηκε!" msgid "You are already a member of that group." msgstr "" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -511,7 +511,7 @@ msgstr "Μήνυμα" #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -577,9 +577,9 @@ msgstr "ΛογαÏιασμός" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Ψευδώνυμο" @@ -650,12 +650,12 @@ msgstr "" msgid "Unsupported format." msgstr "" -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "" @@ -665,7 +665,7 @@ msgstr "" msgid "%1$s / Updates mentioning %2$s" msgstr "" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "" @@ -675,7 +675,7 @@ msgstr "" msgid "%s public timeline" msgstr "" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "" @@ -690,12 +690,12 @@ msgstr "" msgid "Repeats of %s" msgstr "" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "" @@ -723,7 +723,7 @@ msgstr "" msgid "Invalid size." msgstr "" -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "" @@ -755,7 +755,7 @@ msgid "Preview" msgstr "" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "ΔιαγÏαφή" @@ -838,8 +838,8 @@ msgstr "" #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 #, fuzzy msgid "No such group." msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ." @@ -945,7 +945,7 @@ msgstr "Ομάδες με τα πεÏισσότεÏα μέλη" #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "" @@ -1006,7 +1006,7 @@ msgstr "Είσαι σίγουÏος ότι θες να διαγÏάψεις αυ msgid "Do not delete this notice" msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος." -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "" @@ -1268,7 +1268,7 @@ msgstr "Το βιογÏαφικό είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿ (μέγιστ msgid "Could not update group." msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 #, fuzzy msgid "Could not create aliases." msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ." @@ -1958,7 +1958,7 @@ msgstr "" msgid "You are already subscribed to these users:" msgstr "" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "" @@ -2059,7 +2059,7 @@ msgstr "" msgid "You must be logged in to leave a group." msgstr "" -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "" @@ -2175,12 +2175,12 @@ msgstr "" msgid "New message" msgstr "" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "" -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "" @@ -2188,7 +2188,7 @@ msgstr "" msgid "No recipient specified." msgstr "" -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2202,7 +2202,7 @@ msgstr "" msgid "Direct message to %s sent." msgstr "" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "" @@ -2314,7 +2314,7 @@ msgstr "" msgid "Notice has no profile" msgstr "" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "" @@ -2328,8 +2328,8 @@ msgstr "ΣÏνδεση" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "" @@ -2467,7 +2467,7 @@ msgstr "Λάθος παλιός κωδικός" msgid "Error saving user; invalid." msgstr "" -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "ΑδÏνατη η αποθήκευση του νέου κωδικοÏ" @@ -2683,8 +2683,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 μικÏά γÏάμματα ή αÏιθμοί, χωÏίς σημεία στίξης ή κενά" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Ονοματεπώνυμο" @@ -2712,9 +2712,9 @@ msgid "Bio" msgstr "ΒιογÏαφικό" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Τοποθεσία" @@ -2728,7 +2728,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "" @@ -2958,7 +2958,7 @@ msgstr "" msgid "Recover password" msgstr "" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "" @@ -2978,19 +2978,19 @@ msgstr "" msgid "Enter a nickname or email address." msgstr "Εισάγετε ψευδώνυμο ή διεÏθυνση email." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "" -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "" -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -2998,23 +2998,23 @@ msgstr "" "Οδηγίες για την ανάκτηση του ÎºÏ‰Î´Î¹ÎºÎ¿Ï ÏƒÎ±Ï‚ έχουν σταλεί στην διεÏθυνση email " "που έχετε καταχωÏίσει στον λογαÏιασμό σας." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "" -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Ο κωδικός Ï€Ïέπει να είναι 6 χαÏακτήÏες ή πεÏισσότεÏοι." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Ο κωδικός και η επιβεβαίωση του δεν ταυτίζονται." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "" -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "" @@ -3174,7 +3174,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "" @@ -3213,7 +3213,7 @@ msgstr "" msgid "You already repeated that notice." msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 #, fuzzy msgid "Repeated" msgstr "ΔημιουÏγία" @@ -3357,7 +3357,7 @@ msgstr "ΠÏοσκλήσεις" msgid "Description" msgstr "ΠεÏιγÏαφή" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "" @@ -3469,68 +3469,68 @@ msgstr "" msgid "%1$s group, page %2$d" msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 #, fuzzy msgid "Group profile" msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ." -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, fuzzy, php-format msgid "FOAF for %s group" msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ." -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Μέλη" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "ΔημιουÏγημένος" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3540,7 +3540,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3549,7 +3549,7 @@ msgid "" "their life and interests. " msgstr "" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "ΔιαχειÏιστές" @@ -4082,12 +4082,12 @@ msgstr "" msgid "Tag %s" msgstr "" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "ΠÏοφίλ χÏήστη" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "" @@ -4407,19 +4407,19 @@ msgstr "ΠÏοσωπικά" msgid "Author(s)" msgstr "" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4461,43 +4461,43 @@ msgstr "" msgid "Could not update message with new URI." msgstr "" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Σφάλμα στη βάση δεδομένων κατά την εισαγωγή hashtag: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "" -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "" -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "" -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "" -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "" @@ -4529,30 +4529,30 @@ msgstr "Απέτυχε η διαγÏαφή συνδÏομής." msgid "Couldn't delete subscription OMB token." msgstr "Απέτυχε η διαγÏαφή συνδÏομής." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Απέτυχε η διαγÏαφή συνδÏομής." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Δεν ήταν δυνατή η δημιουÏγία ομάδας." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ" -#: classes/User_group.php:507 +#: classes/User_group.php:510 #, fuzzy msgid "Could not set group membership." msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ" -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ" @@ -4769,7 +4769,7 @@ msgstr "" msgid "StatusNet software license" msgstr "" -#: lib/action.php:802 +#: lib/action.php:804 #, fuzzy, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4778,13 +4778,13 @@ msgstr "" "To **%%site.name%%** είναι μία υπηÏεσία microblogging (μικÏο-ιστολογίου) που " "έφεÏε κοντά σας το [%%site.broughtby%%](%%site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, fuzzy, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "" "Το **%%site.name%%** είναι μία υπηÏεσία microblogging (μικÏο-ιστολογίου). " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4792,41 +4792,41 @@ msgid "" "org/licensing/licenses/agpl-3.0.html)." msgstr "" -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "" -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "" @@ -4842,6 +4842,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -4937,7 +4941,7 @@ msgstr "Επιβεβαίωση διεÏθυνσης email" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5012,11 +5016,11 @@ msgstr "" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "" @@ -5038,37 +5042,50 @@ msgstr "Ο κωδικός αποθηκεÏτηκε." msgid "Password changing is not allowed" msgstr "Ο κωδικός αποθηκεÏτηκε." -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" msgstr "" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "" + +#: lib/command.php:125 #, fuzzy, php-format msgid "Could not find a user with nickname %s" msgstr "Απέτυχε η ενημέÏωση χÏήστη μέσω επιβεβαιωμένης email διεÏθυνσης." -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Απέτυχε η ενημέÏωση χÏήστη μέσω επιβεβαιωμένης email διεÏθυνσης." + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "" + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5076,201 +5093,198 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "" -#: lib/command.php:217 +#: lib/command.php:317 #, fuzzy msgid "You are already a member of that group" msgstr "Ομάδες με τα πεÏισσότεÏα μέλη" -#: lib/command.php:231 +#: lib/command.php:331 #, fuzzy, php-format msgid "Could not join user %s to group %s" msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ" -#: lib/command.php:236 +#: lib/command.php:336 #, fuzzy, php-format msgid "%s joined group %s" msgstr "ομάδες των χÏηστών %s" -#: lib/command.php:275 +#: lib/command.php:373 #, fuzzy, php-format msgid "Could not remove user %s to group %s" msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ." -#: lib/command.php:280 +#: lib/command.php:378 #, fuzzy, php-format msgid "%s left group %s" msgstr "ομάδες των χÏηστών %s" -#: lib/command.php:309 +#: lib/command.php:401 #, fuzzy, php-format msgid "Fullname: %s" msgstr "Ονοματεπώνυμο" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "" -#: lib/command.php:413 +#: lib/command.php:490 #, fuzzy msgid "Cannot repeat your own notice" msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος." -#: lib/command.php:418 +#: lib/command.php:495 #, fuzzy msgid "Already repeated that notice" msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος." -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "Ρυθμίσεις OpenID" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "" -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "" -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "" -#: lib/command.php:554 lib/command.php:589 -#, fuzzy -msgid "No such user" -msgstr "Κανένας τέτοιος χÏήστης." +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "" -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "" -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "" -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "" -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "Απέτυχε η συνδÏομή." -#: lib/command.php:709 +#: lib/command.php:752 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους." msgstr[1] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους." -#: lib/command.php:731 +#: lib/command.php:774 #, fuzzy msgid "No one is subscribed to you." msgstr "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους." msgstr[1] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους." -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "Δεν είστε μέλος καμίας ομάδας." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Ομάδες με τα πεÏισσότεÏα μέλη" msgstr[1] "Ομάδες με τα πεÏισσότεÏα μέλη" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5312,20 +5326,20 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 #, fuzzy msgid "No configuration file found. " msgstr "Ο κωδικός επιβεβαίωσης δεν βÏέθηκε." -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "" @@ -5501,50 +5515,50 @@ msgstr "" msgid "This page is not available in a media type you accept" msgstr "" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "" + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "" -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "" -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "" -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "" -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "" - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 #, fuzzy msgid "Lost our file." msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5741,7 +5755,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "από" @@ -5894,23 +5908,23 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Επαναλαμβάνεται από" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "Ρυθμίσεις OpenID" @@ -6056,7 +6070,7 @@ msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος msgid "Revoke the \"%s\" role from this user" msgstr "" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6186,91 +6200,95 @@ msgstr "" msgid "Unsubscribe" msgstr "" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "ΕπεξεÏγασία Ïυθμίσεων Ï€Ïοφίλ" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "ΕπεξεÏγασία" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Μήνυμα" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "ΠÏοφίλ χÏήστη" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 #, fuzzy msgctxt "role" msgid "Administrator" msgstr "ΔιαχειÏιστές" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "" @@ -6284,7 +6302,7 @@ msgstr "Το %s δεν είναι ένα έγκυÏο χÏώμα!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po index 8d846c4e21..361270cbbe 100644 --- a/locale/en_GB/LC_MESSAGES/statusnet.po +++ b/locale/en_GB/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:49:40+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:29+0000\n" "Language-Team: British English\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: en-gb\n" "X-Message-Group: out-statusnet\n" @@ -96,7 +96,7 @@ msgstr "No such page" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -105,10 +105,8 @@ msgstr "No such page" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "No such user." @@ -206,14 +204,14 @@ msgstr "Updates from %1$s and friends on %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "API method not found." @@ -226,8 +224,8 @@ msgstr "API method not found." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "This method requires a POST." @@ -260,7 +258,7 @@ msgid "Could not save profile." msgstr "Couldn't save profile." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -346,7 +344,7 @@ msgstr "No status found with that ID." msgid "This status is already a favorite." msgstr "This status is already a favourite." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Could not create favourite." @@ -463,7 +461,7 @@ msgstr "Group not found!" msgid "You are already a member of that group." msgstr "You are already a member of that group." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "You have been blocked from that group by the admin." @@ -513,7 +511,7 @@ msgstr "Invalid token." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -582,9 +580,9 @@ msgstr "Account" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Nickname" @@ -653,12 +651,12 @@ msgstr "Max notice size is %d chars, including attachment URL." msgid "Unsupported format." msgstr "Unsupported format." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Favourites from %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%1$s updates favourited by %2$s / %2$s." @@ -668,7 +666,7 @@ msgstr "%1$s updates favourited by %2$s / %2$s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Updates mentioning %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s updates that reply to updates from %2$s / %3$s." @@ -678,7 +676,7 @@ msgstr "%1$s updates that reply to updates from %2$s / %3$s." msgid "%s public timeline" msgstr "%s public timeline" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s updates from everyone!" @@ -693,12 +691,12 @@ msgstr "Repeated to %s" msgid "Repeats of %s" msgstr "Repeats of %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Notices tagged with %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Updates tagged with %1$s on %2$s!" @@ -726,7 +724,7 @@ msgstr "No size." msgid "Invalid size." msgstr "Invalid size." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Avatar" @@ -758,7 +756,7 @@ msgid "Preview" msgstr "Preview" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Delete" @@ -841,8 +839,8 @@ msgstr "Failed to save block information." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "No such group." @@ -943,7 +941,7 @@ msgstr "You are not the owner of this application." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "There was a problem with your session token." @@ -1004,7 +1002,7 @@ msgstr "Are you sure you want to delete this notice?" msgid "Do not delete this notice" msgstr "Do not delete this notice" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Delete this notice" @@ -1257,7 +1255,7 @@ msgstr "description is too long (max %d chars)." msgid "Could not update group." msgstr "Could not update group." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Could not create aliases" @@ -1952,7 +1950,7 @@ msgstr "Invite new users" msgid "You are already subscribed to these users:" msgstr "You are already subscribed to these users:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2083,7 +2081,7 @@ msgstr "%1$s joined group %2$s" msgid "You must be logged in to leave a group." msgstr "You must be logged in to leave a group." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "You are not a member of that group." @@ -2196,12 +2194,12 @@ msgstr "Use this form to create a new group." msgid "New message" msgstr "New message" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "You can't send a message to this user." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "No content!" @@ -2209,7 +2207,7 @@ msgstr "No content!" msgid "No recipient specified." msgstr "No recipient specified." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2224,7 +2222,7 @@ msgstr "Message sent" msgid "Direct message to %s sent." msgstr "Could not create application." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Ajax Error" @@ -2342,7 +2340,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Notice has no profile" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s's status on %2$s" @@ -2355,8 +2353,8 @@ msgstr "content type " msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Not a supported data format." @@ -2487,7 +2485,7 @@ msgstr "Incorrect old password" msgid "Error saving user; invalid." msgstr "Error saving user; invalid." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Can't save new password." @@ -2699,8 +2697,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 lowercase letters or numbers, no punctuation or spaces" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Full name" @@ -2727,9 +2725,9 @@ msgid "Bio" msgstr "Bio" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Location" @@ -2743,7 +2741,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Tags" @@ -2978,7 +2976,7 @@ msgstr "Reset password" msgid "Recover password" msgstr "Recover password" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Password recovery requested" @@ -2998,19 +2996,19 @@ msgstr "Reset" msgid "Enter a nickname or email address." msgstr "Enter a nickname or e-mail address." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "No user with that e-mail address or username." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "No registered e-mail address for that user." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Error saving address confirmation." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3018,23 +3016,23 @@ msgstr "" "Instructions for recovering your password have been sent to the e-mail " "address registered to your account." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Unexpected password reset." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Password must be 6 chars or more." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Password and confirmation do not match." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Error setting user." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "New password successfully saved. You are now logged in." @@ -3194,7 +3192,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "URL of your profile on another compatible microblogging service" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Subscribe" @@ -3230,7 +3228,7 @@ msgstr "You can't repeat your own notice." msgid "You already repeated that notice." msgstr "You already repeated that notice." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Repeated" @@ -3373,7 +3371,7 @@ msgstr "Organization" msgid "Description" msgstr "Description" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Statistics" @@ -3491,67 +3489,67 @@ msgstr "%s group" msgid "%1$s group, page %2$d" msgstr "%1$s group, page %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Group profile" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Note" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Group actions" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Notice feed for %s group (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Notice feed for %s group (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Notice feed for %s group (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "Outbox for %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Members" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(None)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "All members" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Created" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3566,7 +3564,7 @@ msgstr "" "their life and interests. [Join now](%%%%action.register%%%%) to become part " "of this group and many more! ([Read more](%%%%doc.help%%%%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3579,7 +3577,7 @@ msgstr "" "[StatusNet](http://status.net/) tool. Its members share short messages about " "their life and interests. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Admins" @@ -4117,12 +4115,12 @@ msgstr "No ID argument." msgid "Tag %s" msgstr "Tag %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "User profile" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Photo" @@ -4460,19 +4458,19 @@ msgstr "Version" msgid "Author(s)" msgstr "" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4510,26 +4508,26 @@ msgstr "Could not insert message." msgid "Could not update message with new URI." msgstr "Could not update message with new URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "DB error inserting hashtag: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "Problem saving notice. Too long." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Problem saving notice. Unknown user." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Too many notices too fast; take a breather and post again in a few minutes." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4537,19 +4535,19 @@ msgstr "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "You are banned from posting notices on this site." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Problem saving notice." -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "Problem saving group inbox." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4580,28 +4578,28 @@ msgstr "Couldn't delete self-subscription." msgid "Couldn't delete subscription OMB token." msgstr "Couldn't delete subscription." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Couldn't delete subscription." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Welcome to %1$s, @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Could not create group." -#: classes/User_group.php:486 +#: classes/User_group.php:489 msgid "Could not set group URI." msgstr "Could not set group URI." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Could not set group membership." -#: classes/User_group.php:521 +#: classes/User_group.php:524 msgid "Could not save local group info." msgstr "Could not save local group info." @@ -4822,7 +4820,7 @@ msgstr "Badge" msgid "StatusNet software license" msgstr "StatusNet software licence" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4831,12 +4829,12 @@ msgstr "" "**%%site.name%%** is a microblogging service brought to you by [%%site." "broughtby%%](%%site.broughtbyurl%%)." -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** is a microblogging service." -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4847,41 +4845,41 @@ msgstr "" "s, available under the [GNU Affero General Public Licence](http://www.fsf." "org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Site content license" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "All " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "licence." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Pagination" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "After" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Before" @@ -4897,6 +4895,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -4987,7 +4989,7 @@ msgstr "Paths configuration" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5061,11 +5063,11 @@ msgstr "Revoke" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Provider" @@ -5085,37 +5087,50 @@ msgstr "Password changing failed" msgid "Password changing is not allowed" msgstr "Password changing is not allowed" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Command results" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Command complete" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Command failed" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Sorry, this command is not yet implemented." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "Notice with that id does not exist" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "User has no last notice" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "Could not find a user with nickname %s" -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Could not find a user with nickname %s" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Sorry, this command is not yet implemented." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "Nudge sent to %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5123,195 +5138,194 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "Notice with that id does not exist" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "User has no last notice" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Notice marked as fave." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "You are already a member of that group." -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Could not join user %s to group %s." -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s joined group %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Could not remove user %s to group %s" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s left group %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Fullname: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Location: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Homepage: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "About: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "Message too long - maximum is %d characters, you sent %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Direct message to %s sent" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Error sending direct message." -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "Cannot repeat your own notice." -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "Already repeated that notice." -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "Notice from %s repeated" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "Error repeating notice." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Notice too long - maximum is %d characters, you sent %d" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "Reply to %s sent" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "Error saving notice." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Specify the name of the user to subscribe to" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "No such user." +#: lib/command.php:602 +#, fuzzy +msgid "Can't subscribe to OMB profiles by command." +msgstr "You are not subscribed to that profile." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Subscribed to %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Specify the name of the user to unsubscribe from" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Unsubscribed from %s" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Command not yet implemented." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Notification off." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Can't turn off notification." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Notification on." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Can't turn on notification." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, php-format msgid "Unsubscribed %s" msgstr "Unsubscribed %s" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "You are not subscribed to anyone." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "You are already subscribed to these users:" msgstr[1] "You are already subscribed to these users:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "No one is subscribed to you." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Could not subscribe other to you." msgstr[1] "Could not subscribe other to you." -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "You are not a member of any groups." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "You are not a member of that group." msgstr[1] "You are not a member of that group." -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5353,19 +5367,19 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "No configuration file found" -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "Go to the installer." @@ -5541,49 +5555,49 @@ msgstr "Tags in %s group's notices" msgid "This page is not available in a media type you accept" msgstr "This page is not available in a media type you accept" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Unsupported image file format." + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "That file is too big. The maximum file size is %s." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Partial upload." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "System error uploading file." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Not an image or corrupt file." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Unsupported image file format." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Lost our file." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Unknown file type" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5796,7 +5810,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "from" @@ -5946,23 +5960,23 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "in context" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Repeated by" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Reply to this notice" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Reply" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Notice repeated" @@ -6104,7 +6118,7 @@ msgstr "Repeat this notice" msgid "Revoke the \"%s\" role from this user" msgstr "Block this user from this group" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6230,91 +6244,95 @@ msgstr "Unsubscribe from this user" msgid "Unsubscribe" msgstr "Unsubscribe" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Edit Avatar" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "User actions" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Edit profile settings" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Send a direct message to this user" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Message" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "User profile" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 #, fuzzy msgctxt "role" msgid "Administrator" msgstr "Admins" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "a few seconds ago" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "about a minute ago" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "about %d minutes ago" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "about an hour ago" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "about %d hours ago" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "about a day ago" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "about %d days ago" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "about a month ago" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "about %d months ago" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "about a year ago" @@ -6328,7 +6346,7 @@ msgstr "%s is not a valid colour!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s is not a valid colour! Use 3 or 6 hex chars." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "Message too long - maximum is %1$d characters, you sent %2$d." diff --git a/locale/es/LC_MESSAGES/statusnet.po b/locale/es/LC_MESSAGES/statusnet.po index cdc0184e43..9b21560f98 100644 --- a/locale/es/LC_MESSAGES/statusnet.po +++ b/locale/es/LC_MESSAGES/statusnet.po @@ -13,12 +13,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:49:43+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:32+0000\n" "Language-Team: Spanish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: es\n" "X-Message-Group: out-statusnet\n" @@ -47,7 +47,6 @@ msgstr "¿Prohibir a los usuarios anónimos (no conectados) ver el sitio?" #. TRANS: Checkbox label for prohibiting anonymous users from viewing site. #: actions/accessadminpanel.php:167 -#, fuzzy msgctxt "LABEL" msgid "Private" msgstr "Privado" @@ -78,7 +77,6 @@ msgid "Save access settings" msgstr "Guardar la configuración de acceso" #: actions/accessadminpanel.php:203 -#, fuzzy msgctxt "BUTTON" msgid "Save" msgstr "Guardar" @@ -99,7 +97,7 @@ msgstr "No existe tal página" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -108,10 +106,8 @@ msgstr "No existe tal página" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "No existe ese usuario." @@ -210,14 +206,14 @@ msgstr "¡Actualizaciones de %1$s y amigos en %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "Método de API no encontrado." @@ -230,8 +226,8 @@ msgstr "Método de API no encontrado." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Este método requiere un POST." @@ -262,7 +258,7 @@ msgid "Could not save profile." msgstr "No se pudo guardar el perfil." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -348,7 +344,7 @@ msgstr "No se encontró estado para ese ID" msgid "This status is already a favorite." msgstr "Este status ya está en favoritos." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "No se pudo crear favorito." @@ -467,7 +463,7 @@ msgstr "¡No se ha encontrado el grupo!" msgid "You are already a member of that group." msgstr "Ya eres miembro de ese grupo" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "Has sido bloqueado de ese grupo por el administrador." @@ -517,7 +513,7 @@ msgstr "Token inválido." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -589,9 +585,9 @@ msgstr "Cuenta" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Apodo" @@ -662,12 +658,12 @@ msgstr "" msgid "Unsupported format." msgstr "Formato no soportado." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Favoritos de %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%1$s actualizaciones favoritas de %2$s / %2$s." @@ -677,7 +673,7 @@ msgstr "%1$s actualizaciones favoritas de %2$s / %2$s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Actualizaciones que mencionan %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "actualizaciones de %1$s en respuesta a las de %2$s / %3$s" @@ -687,7 +683,7 @@ msgstr "actualizaciones de %1$s en respuesta a las de %2$s / %3$s" msgid "%s public timeline" msgstr "línea temporal pública de %s" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "¡Actualizaciones de todos en %s!" @@ -702,12 +698,12 @@ msgstr "Repetido a %s" msgid "Repeats of %s" msgstr "Repeticiones de %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Avisos marcados con %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Actualizaciones etiquetadas con %1$s en %2$s!" @@ -735,7 +731,7 @@ msgstr "Ningún tamaño." msgid "Invalid size." msgstr "Tamaño inválido." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Avatar" @@ -767,7 +763,7 @@ msgid "Preview" msgstr "Vista previa" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Borrar" @@ -850,8 +846,8 @@ msgstr "No se guardó información de bloqueo." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "No existe ese grupo." @@ -953,7 +949,7 @@ msgstr "No eres el propietario de esta aplicación." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Hubo problemas con tu clave de sesión." @@ -1014,7 +1010,7 @@ msgstr "¿Estás seguro de que quieres eliminar este aviso?" msgid "Do not delete this notice" msgstr "No eliminar este mensaje" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Borrar este aviso" @@ -1267,7 +1263,7 @@ msgstr "La descripción es muy larga (máx. %d caracteres)." msgid "Could not update group." msgstr "No se pudo actualizar el grupo." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "No fue posible crear alias." @@ -1586,23 +1582,20 @@ msgid "Cannot read file." msgstr "No se puede leer archivo." #: actions/grantrole.php:62 actions/revokerole.php:62 -#, fuzzy msgid "Invalid role." -msgstr "Token inválido." +msgstr "Función no válida." #: actions/grantrole.php:66 actions/revokerole.php:66 msgid "This role is reserved and cannot be set." -msgstr "" +msgstr "Esta función es reservada y no puede asignarse." #: actions/grantrole.php:75 -#, fuzzy msgid "You cannot grant user roles on this site." -msgstr "No puedes enviar mensaje a este usuario." +msgstr "No puedes conceder funciones de usuario en este sitio." #: actions/grantrole.php:82 -#, fuzzy msgid "User already has this role." -msgstr "El usuario te ha bloqueado." +msgstr "El usuario ya tiene esta función." #: actions/groupblock.php:71 actions/groupunblock.php:71 #: actions/makeadmin.php:71 actions/subedit.php:46 @@ -1978,7 +1971,7 @@ msgstr "Invitar nuevos usuarios:" msgid "You are already subscribed to these users:" msgstr "Ya estás suscrito a estos usuarios:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2025,7 +2018,6 @@ msgstr "Opcionalmente añada un mensaje personalizado a su invitación." #. TRANS: Send button for inviting friends #: actions/invite.php:198 -#, fuzzy msgctxt "BUTTON" msgid "Send" msgstr "Enviar" @@ -2097,9 +2089,8 @@ msgid "You must be logged in to join a group." msgstr "Debes estar conectado para unirte a un grupo." #: actions/joingroup.php:88 actions/leavegroup.php:88 -#, fuzzy msgid "No nickname or ID." -msgstr "Ningún apodo." +msgstr "Ningún nombre de usuario o ID." #: actions/joingroup.php:141 #, php-format @@ -2110,7 +2101,7 @@ msgstr "%1$s se ha unido al grupo %2$" msgid "You must be logged in to leave a group." msgstr "Debes estar conectado para dejar un grupo." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "No eres miembro de este grupo." @@ -2226,12 +2217,12 @@ msgstr "Usa este formulario para crear un grupo nuevo." msgid "New message" msgstr "Nuevo Mensaje " -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "No puedes enviar mensaje a este usuario." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "¡Ningún contenido!" @@ -2239,7 +2230,7 @@ msgstr "¡Ningún contenido!" msgid "No recipient specified." msgstr "No se especificó receptor." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "No te auto envíes un mensaje; dícetelo a ti mismo." @@ -2253,7 +2244,7 @@ msgstr "Mensaje enviado" msgid "Direct message to %s sent." msgstr "Se ha enviado un mensaje directo a %s." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Error de Ajax" @@ -2376,7 +2367,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Aviso sin perfil" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "estado de %1$s en %2$s" @@ -2389,8 +2380,8 @@ msgstr "tipo de contenido " msgid "Only " msgstr "Sólo " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "No es un formato de dato soportado" @@ -2522,7 +2513,7 @@ msgstr "Contraseña antigua incorrecta." msgid "Error saving user; invalid." msgstr "Error al guardar el usuario; inválido." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "No se puede guardar la nueva contraseña." @@ -2538,6 +2529,7 @@ msgstr "Rutas" #: actions/pathsadminpanel.php:70 msgid "Path and server settings for this StatusNet site." msgstr "" +"Configuración de la ruta de acceso y del servidor de este sitio StatusNet." #: actions/pathsadminpanel.php:157 #, php-format @@ -2580,9 +2572,8 @@ msgid "Path" msgstr "Ruta" #: actions/pathsadminpanel.php:242 -#, fuzzy msgid "Site path" -msgstr "Aviso de sitio" +msgstr "Ruta del sitio" #: actions/pathsadminpanel.php:246 msgid "Path to locales" @@ -2610,7 +2601,7 @@ msgstr "Servidor de los temas" #: actions/pathsadminpanel.php:268 msgid "Theme path" -msgstr "" +msgstr "Ruta del tema" #: actions/pathsadminpanel.php:272 msgid "Theme directory" @@ -2643,7 +2634,7 @@ msgstr "Servidor de fondo" #: actions/pathsadminpanel.php:309 msgid "Background path" -msgstr "" +msgstr "Ruta del fondo" #: actions/pathsadminpanel.php:313 msgid "Background directory" @@ -2682,9 +2673,8 @@ msgid "Server to direct SSL requests to" msgstr "Servidor hacia el cual dirigir las solicitudes SSL" #: actions/pathsadminpanel.php:352 -#, fuzzy msgid "Save paths" -msgstr "Aviso de sitio" +msgstr "Guardar rutas" #: actions/peoplesearch.php:52 #, php-format @@ -2739,8 +2729,8 @@ msgstr "" "1-64 letras en minúscula o números, sin signos de puntuación o espacios" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nombre completo" @@ -2767,9 +2757,9 @@ msgid "Bio" msgstr "Biografía" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Ubicación" @@ -2783,7 +2773,7 @@ msgstr "Compartir mi ubicación actual al publicar los mensajes" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Tags" @@ -3024,7 +3014,7 @@ msgstr "Restablecer contraseña" msgid "Recover password" msgstr "Recuperar contraseña" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Recuperación de contraseña solicitada" @@ -3044,19 +3034,19 @@ msgstr "Restablecer" msgid "Enter a nickname or email address." msgstr "Ingresa un apodo o correo electronico" -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "No hay ningún usuario con esa dirección de correo o nombre de usuario." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Ninguna dirección de correo electrónico registrada por este usuario." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Error al guardar confirmación de la dirección." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3064,23 +3054,23 @@ msgstr "" "Se enviaron instrucciones para recuperar tu contraseña a la dirección de " "correo registrada." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Restablecimiento de contraseña inesperado." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "La contraseña debe tener 6 o más caracteres." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "La contraseña y la confirmación no coinciden." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Error al configurar el usuario." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Nueva contraseña guardada correctamente. Has iniciado una sesión." @@ -3244,7 +3234,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "El URL de tu perfil en otro servicio de microblogueo compatible" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Suscribirse" @@ -3282,7 +3272,7 @@ msgstr "No puedes repetir tus propios mensajes." msgid "You already repeated that notice." msgstr "Ya has repetido este mensaje." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Repetido" @@ -3343,14 +3333,12 @@ msgid "Replies to %1$s on %2$s!" msgstr "Respuestas a %1$s en %2$s!" #: actions/revokerole.php:75 -#, fuzzy msgid "You cannot revoke user roles on this site." -msgstr "No puedes enviar mensaje a este usuario." +msgstr "No puedes revocar funciones de usuario en este sitio." #: actions/revokerole.php:82 -#, fuzzy msgid "User doesn't have this role." -msgstr "Usuario sin perfil coincidente." +msgstr "El usuario no tiene esta función." #: actions/rsd.php:146 actions/version.php:157 msgid "StatusNet" @@ -3424,7 +3412,7 @@ msgstr "Organización" msgid "Description" msgstr "Descripción" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Estadísticas" @@ -3536,68 +3524,67 @@ msgstr "Grupo %s" msgid "%1$s group, page %2$d" msgstr "Miembros del grupo %s, página %d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Perfil del grupo" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Nota" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Alias" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Acciones del grupo" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Feed de avisos de grupo %s" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Feed de avisos de grupo %s" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "Feed de avisos de grupo %s" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "Bandeja de salida para %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 -#, fuzzy +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Miembros" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Ninguno)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Todos los miembros" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Creado" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3607,7 +3594,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3618,7 +3605,7 @@ msgstr "" "**%s** es un grupo de usuarios en %%%%site.name%%%%, un servicio [micro-" "blogging](http://en.wikipedia.org/wiki/Micro-blogging) " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Administradores" @@ -3806,9 +3793,8 @@ msgid "Default timezone for the site; usually UTC." msgstr "Zona horaria predeterminada del sitio; generalmente UTC." #: actions/siteadminpanel.php:262 -#, fuzzy msgid "Default language" -msgstr "Idioma predeterminado del sitio" +msgstr "!Idioma predeterminado" #: actions/siteadminpanel.php:263 msgid "Site language when autodetection from browser settings is not available" @@ -3835,9 +3821,8 @@ msgid "How long users must wait (in seconds) to post the same thing again." msgstr "Cuántos segundos es necesario esperar para publicar lo mismo de nuevo." #: actions/sitenoticeadminpanel.php:56 -#, fuzzy msgid "Site Notice" -msgstr "Aviso de sitio" +msgstr "Aviso del sitio" #: actions/sitenoticeadminpanel.php:67 #, fuzzy @@ -4165,12 +4150,12 @@ msgstr "No existe argumento de ID." msgid "Tag %s" msgstr "%s tag" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Perfil de usuario" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Foto" @@ -4503,19 +4488,19 @@ msgstr "Sesiones" msgid "Author(s)" msgstr "Autor(es)" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4556,27 +4541,27 @@ msgstr "No se pudo insertar mensaje." msgid "Could not update message with new URI." msgstr "No se pudo actualizar mensaje con nuevo URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Error de la BD al insertar la etiqueta clave: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "Ha habido un problema al guardar el mensaje. Es muy largo." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Ha habido un problema al guardar el mensaje. Usuario desconocido." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Demasiados avisos demasiado rápido; para y publicar nuevamente en unos " "minutos." -#: classes/Notice.php:256 +#: classes/Notice.php:259 #, fuzzy msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " @@ -4585,20 +4570,20 @@ msgstr "" "Demasiados avisos demasiado rápido; para y publicar nuevamente en unos " "minutos." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Tienes prohibido publicar avisos en este sitio." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Hubo un problema al guardar el aviso." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "Hubo un problema al guardar el aviso." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4630,30 +4615,30 @@ msgstr "No se pudo eliminar la suscripción." msgid "Couldn't delete subscription OMB token." msgstr "No se pudo eliminar la suscripción." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "No se pudo eliminar la suscripción." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Bienvenido a %1$s, @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "No se pudo crear grupo." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "No se pudo configurar miembros de grupo." -#: classes/User_group.php:507 +#: classes/User_group.php:510 #, fuzzy msgid "Could not set group membership." msgstr "No se pudo configurar miembros de grupo." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "No se ha podido guardar la suscripción." @@ -4875,7 +4860,7 @@ msgstr "Insignia" msgid "StatusNet software license" msgstr "Licencia de software de StatusNet" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4884,12 +4869,12 @@ msgstr "" "**%%site.name%%** es un servicio de microblogueo de [%%site.broughtby%%**](%%" "site.broughtbyurl%%)." -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** es un servicio de microblogueo." -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4900,43 +4885,43 @@ msgstr "" "disponible bajo la [GNU Affero General Public License](http://www.fsf.org/" "licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Licencia de contenido del sitio" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" "Derechos de autor de contenido y datos por los colaboradores. Todos los " "derechos reservados." -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Todo" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "Licencia." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Paginación" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Después" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Antes" @@ -4952,6 +4937,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5047,7 +5036,7 @@ msgstr "SMS confirmación" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5124,11 +5113,11 @@ msgstr "Revocar" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Autor" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Proveedor" @@ -5149,37 +5138,50 @@ msgstr "El cambio de contraseña ha fallado" msgid "Password changing is not allowed" msgstr "Cambio de contraseña " -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Resultados de comando" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Comando completo" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Comando falló" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Disculpa, todavía no se implementa este comando." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "No existe ningún mensaje con ese id" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "Usuario no tiene último aviso" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "No se pudo encontrar a nadie con el nombre de usuario %s" -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "No se pudo encontrar a nadie con el nombre de usuario %s" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Disculpa, todavía no se implementa este comando." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "zumbido enviado a %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5187,200 +5189,199 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "No existe ningún mensaje con ese id" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "Usuario no tiene último aviso" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Aviso marcado como favorito." -#: lib/command.php:217 +#: lib/command.php:317 #, fuzzy msgid "You are already a member of that group" msgstr "Ya eres miembro de ese grupo" -#: lib/command.php:231 +#: lib/command.php:331 #, fuzzy, php-format msgid "Could not join user %s to group %s" msgstr "No se puede unir usuario %s a grupo %s" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s se unió a grupo %s" -#: lib/command.php:275 +#: lib/command.php:373 #, fuzzy, php-format msgid "Could not remove user %s to group %s" msgstr "No se pudo eliminar a usuario %s de grupo %s" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s dejó grupo %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Nombre completo: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Lugar: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Página de inicio: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Sobre: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, fuzzy, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "Mensaje muy largo - máximo 140 caracteres, enviaste %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Se envió mensaje directo a %s" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Error al enviar mensaje directo." -#: lib/command.php:413 +#: lib/command.php:490 #, fuzzy msgid "Cannot repeat your own notice" msgstr "No se puede activar notificación." -#: lib/command.php:418 +#: lib/command.php:495 #, fuzzy msgid "Already repeated that notice" msgstr "Borrar este aviso" -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "Aviso publicado" -#: lib/command.php:428 +#: lib/command.php:505 #, fuzzy msgid "Error repeating notice." msgstr "Hubo un problema al guardar el aviso." -#: lib/command.php:482 +#: lib/command.php:536 #, fuzzy, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Mensaje muy largo - máximo 140 caracteres, enviaste %d" -#: lib/command.php:491 +#: lib/command.php:545 #, fuzzy, php-format msgid "Reply to %s sent" msgstr "Responder este aviso." -#: lib/command.php:493 +#: lib/command.php:547 #, fuzzy msgid "Error saving notice." msgstr "Hubo un problema al guardar el aviso." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Especificar el nombre del usuario a suscribir" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "No existe ese usuario." +#: lib/command.php:602 +#, fuzzy +msgid "Can't subscribe to OMB profiles by command." +msgstr "No te has suscrito a ese perfil." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Suscrito a %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Especificar el nombre del usuario para desuscribirse de" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Desuscrito de %s" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Todavía no se implementa comando." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Notificación no activa." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "No se puede desactivar notificación." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Notificación activada." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "No se puede activar notificación." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "Desuscrito de %s" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "No estás suscrito a nadie." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Ya estás suscrito a estos usuarios:" msgstr[1] "Ya estás suscrito a estos usuarios:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "Nadie está suscrito a ti." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "No se pudo suscribir otro a ti." msgstr[1] "No se pudo suscribir otro a ti." -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "No eres miembro de ningún grupo" -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Eres miembro de este grupo:" msgstr[1] "Eres miembro de estos grupos:" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5422,19 +5423,19 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Ningún archivo de configuración encontrado. " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "Ir al instalador." @@ -5614,49 +5615,49 @@ msgstr "Tags en avisos del grupo %s" msgid "This page is not available in a media type you accept" msgstr "Esta página no está disponible en el tipo de medio que aceptas." -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Formato de imagen no soportado." + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Puedes cargar una imagen de logo para tu grupo." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Carga parcial." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Error del sistema al cargar el archivo." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "No es una imagen o es un fichero corrupto." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Formato de imagen no soportado." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Se perdió nuestro archivo." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Tipo de archivo desconocido" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "MB" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "kB" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5867,7 +5868,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "desde" @@ -6023,24 +6024,24 @@ msgstr "" msgid "at" msgstr "en" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "en contexto" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 #, fuzzy msgid "Repeated by" msgstr "Crear" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Responder este aviso." -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Responder" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "Aviso borrado" @@ -6188,7 +6189,7 @@ msgstr "Responder este aviso." msgid "Revoke the \"%s\" role from this user" msgstr "Bloquear este usuario de este grupo" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6321,92 +6322,96 @@ msgstr "Desuscribirse de este usuario" msgid "Unsubscribe" msgstr "Cancelar suscripción" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "editar avatar" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Acciones de usuario" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Editar configuración del perfil" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Editar" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Enviar un mensaje directo a este usuario" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Mensaje" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Moderar" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "Perfil de usuario" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 #, fuzzy msgctxt "role" msgid "Administrator" msgstr "Administradores" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 #, fuzzy msgctxt "role" msgid "Moderator" msgstr "Moderar" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "hace unos segundos" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "hace un minuto" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "hace %d minutos" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "hace una hora" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "hace %d horas" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "hace un día" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "hace %d días" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "hace un mes" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "hace %d meses" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "hace un año" @@ -6420,7 +6425,7 @@ msgstr "" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, fuzzy, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "Mensaje muy largo - máximo 140 caracteres, enviaste %d" diff --git a/locale/fa/LC_MESSAGES/statusnet.po b/locale/fa/LC_MESSAGES/statusnet.po index 955efd243b..7d948015a2 100644 --- a/locale/fa/LC_MESSAGES/statusnet.po +++ b/locale/fa/LC_MESSAGES/statusnet.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:49:48+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:38+0000\n" "Last-Translator: Ahmad Sufi Mahmudi\n" "Language-Team: Persian\n" "MIME-Version: 1.0\n" @@ -20,7 +20,7 @@ msgstr "" "X-Language-Code: fa\n" "X-Message-Group: out-statusnet\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" #. TRANS: Page title @@ -101,7 +101,7 @@ msgstr "چنین صÙحه‌ای وجود ندارد" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -110,10 +110,8 @@ msgstr "چنین صÙحه‌ای وجود ندارد" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "چنین کاربری وجود ندارد." @@ -210,14 +208,14 @@ msgstr "به روز رسانی از %1$ Ùˆ دوستان در %2$" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "رابط مورد نظر پیدا نشد." @@ -230,8 +228,8 @@ msgstr "رابط مورد نظر پیدا نشد." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "برای استÙاده از این روش باید اطلاعات را به صورت پست بÙرستید" @@ -260,7 +258,7 @@ msgid "Could not save profile." msgstr "نمی‌توان شناس‌نامه را ذخیره کرد." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -346,7 +344,7 @@ msgstr "هیچ وضعیتی با آن شناسه پیدا نشد." msgid "This status is already a favorite." msgstr "این وضعیت درحال حاضر یک وضعیت مورد علاقه است!" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "نمی‌توان وضعیت را موردعلاقه کرد." @@ -465,7 +463,7 @@ msgstr "گروه یاÙت نشد!" msgid "You are already a member of that group." msgstr "شما از پیش یک عضو این گروه هستید." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "دسترسی شما به گروه توسط مدیر آن محدود شده است." @@ -516,7 +514,7 @@ msgstr "اندازه‌ی نادرست" #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -581,9 +579,9 @@ msgstr "حساب کاربری" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "نام کاربری" @@ -654,12 +652,12 @@ msgstr "حداکثر طول پیام %d حر٠است Ú©Ù‡ شامل ضمیمه msgid "Unsupported format." msgstr "قالب پشتیبانی نشده." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, fuzzy, php-format msgid "%1$s / Favorites from %2$s" msgstr "%s / دوست داشتنی از %s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%s به روز رسانی های دوست داشتنی %s / %s" @@ -669,7 +667,7 @@ msgstr "%s به روز رسانی های دوست داشتنی %s / %s" msgid "%1$s / Updates mentioning %2$s" msgstr "%$1s / به روز رسانی های شامل %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s به روز رسانی هایی Ú©Ù‡ در پاسخ به $2$s / %3$s" @@ -679,7 +677,7 @@ msgstr "%1$s به روز رسانی هایی Ú©Ù‡ در پاسخ به $2$s / %3$s msgid "%s public timeline" msgstr "%s خط‌زمانی عمومی" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s به روز رسانی های عموم" @@ -694,12 +692,12 @@ msgstr "" msgid "Repeats of %s" msgstr "تکرار %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "پیام‌هایی Ú©Ù‡ با %s نشانه گزاری شده اند." -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "پیام‌های نشانه گزاری شده با %1$s در %2$s" @@ -727,7 +725,7 @@ msgstr "بدون اندازه." msgid "Invalid size." msgstr "اندازه‌ی نادرست" -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "چهره" @@ -760,7 +758,7 @@ msgid "Preview" msgstr "پیش‌نمایش" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "حذÙ" @@ -844,8 +842,8 @@ msgstr "" #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "چنین گروهی وجود ندارد." @@ -950,7 +948,7 @@ msgstr "شما یک عضو این گروه نیستید." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "" @@ -1014,7 +1012,7 @@ msgstr "آیا اطمینان دارید Ú©Ù‡ می‌خواهید این پیا msgid "Do not delete this notice" msgstr "این پیام را پاک Ù†Ú©Ù†" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "این پیام را پاک Ú©Ù†" @@ -1277,7 +1275,7 @@ msgstr "توصی٠بسیار زیاد است (حداکثر %d حرÙ)." msgid "Could not update group." msgstr "نمی‌توان گروه را به‌هنگام‌سازی کرد." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "نمی‌توان نام‌های مستعار را ساخت." @@ -1971,7 +1969,7 @@ msgstr "دعوت کردن کاربران تازه" msgid "You are already subscribed to these users:" msgstr "هم اکنون شما این کاربران را دنبال می‌کنید: " -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "" @@ -2076,7 +2074,7 @@ msgstr "ملحق شدن به گروه" msgid "You must be logged in to leave a group." msgstr "برای ترک یک گروه، شما باید وارد شده باشید." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "شما یک کاربر این گروه نیستید." @@ -2193,12 +2191,12 @@ msgstr "از این Ùرم برای ساختن یک گروه جدید استÙا msgid "New message" msgstr "پیام جدید" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "شما نمی توانید به این کاربر پیام بÙرستید." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "بدون محتوا!" @@ -2206,7 +2204,7 @@ msgstr "بدون محتوا!" msgid "No recipient specified." msgstr "هیچ گیرنده ای مشخص نشده" -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "یک پیام را به خودتان Ù†Ùرستید؛ در عوض آن را آهسته برای خود بگویید." @@ -2220,7 +2218,7 @@ msgstr "پیام Ùرستاده‌شد" msgid "Direct message to %s sent." msgstr "پیام مستقیم به %s Ùرستاده شد." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "اشکال آژاکسی" @@ -2342,7 +2340,7 @@ msgstr "" msgid "Notice has no profile" msgstr "ابن خبر ذخیره ای ندارد ." -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "وضعیت %1$s در %2$s" @@ -2355,8 +2353,8 @@ msgstr "نوع محتوا " msgid "Only " msgstr " Ùقط" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "یک قالب دادهٔ پشتیبانی‌شده نیست." @@ -2494,7 +2492,7 @@ msgstr "گذرواژه قدیمی اشتباه است" msgid "Error saving user; invalid." msgstr "خطا هنگام ذخیره ÛŒ کاربر؛ نا معتبر." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "نمی‌توان گذرواژه جدید را ذخیره کرد." @@ -2708,8 +2706,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "Û±-Û¶Û´ کاراکتر Ú©ÙˆÚ†Ú© یا اعداد، بدون نقطه گذاری یا Ùاصله" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "نام‌کامل" @@ -2736,9 +2734,9 @@ msgid "Bio" msgstr "شرح‌حال" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "موقعیت" @@ -2752,7 +2750,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "برچسب‌ها" @@ -2978,7 +2976,7 @@ msgstr "ریست کردن کلمه ÛŒ عبور" msgid "Recover password" msgstr "بازیابی کلمه ÛŒ عبور" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "بازیابی کلمه ÛŒ عبور درخواست شد" @@ -2998,19 +2996,19 @@ msgstr "ریست( راه انداری مجدد )" msgid "Enter a nickname or email address." msgstr "یک نام کاربری یا آدرس ایمیل وارد کنید." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "هیچ کاربری با آن آدرس ایمیل یا نام کاربری وجود ندارد." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "برای آن کاربر آدرس ایمیل ثبت شده وجود ندارد." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "خطا هنگام ذخیره ÛŒ تاییدیه ÛŒ آدرس." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3018,23 +3016,23 @@ msgstr "" "دستورالعمل چگونگی بازیابی کلمه ÛŒ عبور به آدرس ایمیل ثبت شده در حساب شما " "ارسال شده است." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "کلمه ÛŒ عبور به طور غیر منتظره ریست شد." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "کلمه ÛŒ عبور باید Û¶ کاراکتر یا بیشتر باشد." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "کلمه ÛŒ عبور Ùˆ تاییدیه ÛŒ آن با هم تطابق ندارند." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "" -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "کلمه ÛŒ عبور جدید با موÙقیت ذخیره شد. شما الان وارد شده اید." @@ -3177,7 +3175,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "" @@ -3213,7 +3211,7 @@ msgstr "شما نمی توانید Ø¢Ú¯Ù‡ÛŒ خودتان را تکرار Ú©Ù†ÛŒ msgid "You already repeated that notice." msgstr "شما قبلا آن Ø¢Ú¯Ù‡ÛŒ را تکرار کردید." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "" @@ -3360,7 +3358,7 @@ msgstr "صÙحه بندى" msgid "Description" msgstr "" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "آمار" @@ -3473,67 +3471,67 @@ msgstr "" msgid "%1$s group, page %2$d" msgstr "اعضای گروه %sØŒ صÙحهٔ %d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "نام های مستعار" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "اعضا" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "هیچ" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "همه ÛŒ اعضا" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "ساخته شد" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3543,7 +3541,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3552,7 +3550,7 @@ msgid "" "their life and interests. " msgstr "" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "" @@ -4091,12 +4089,12 @@ msgstr "" msgid "Tag %s" msgstr "" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "پروÙایل کاربر" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "" @@ -4411,19 +4409,19 @@ msgstr "شخصی" msgid "Author(s)" msgstr "مؤلÙ" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4463,27 +4461,27 @@ msgstr "پیغام نمی تواند درج گردد" msgid "Could not update message with new URI." msgstr "" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "مشکل در ذخیره کردن پیام. بسیار طولانی." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "مشکل در ذخیره کردن پیام. کاربر نا شناخته." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "تعداد خیلی زیاد Ø¢Ú¯Ù‡ÛŒ Ùˆ بسیار سریع؛ استراحت کنید Ùˆ مجددا دقایقی دیگر ارسال " "کنید." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4491,20 +4489,20 @@ msgstr "" "تعداد زیاد پیام های دو نسخه ای Ùˆ بسرعت؛ استراحت کنید Ùˆ دقایقی دیگر مجددا " "ارسال کنید." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "شما از Ùرستادن پست در این سایت مردود شدید ." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "مشکل در ذخیره کردن Ø¢Ú¯Ù‡ÛŒ." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "مشکل در ذخیره کردن Ø¢Ú¯Ù‡ÛŒ." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "" @@ -4534,29 +4532,29 @@ msgstr "" msgid "Couldn't delete subscription OMB token." msgstr "نمی‌توان تصدیق پست الکترونیک را پاک کرد." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "" -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "خوش امدید به %1$s , @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "نمیتوان گروه را تشکیل داد" -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "نمیتوان گروه را تشکیل داد" -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "" -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "نمی‌توان شناس‌نامه را ذخیره کرد." @@ -4777,19 +4775,19 @@ msgstr "" msgid "StatusNet software license" msgstr "StatusNet مجوز نرم اÙزار" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." "broughtby%%](%%site.broughtbyurl%%). " msgstr "" -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "" -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4797,41 +4795,41 @@ msgid "" "org/licensing/licenses/agpl-3.0.html)." msgstr "" -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "مجوز محتویات سایت" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "همه " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "مجوز." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "صÙحه بندى" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "بعد از" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "قبل از" @@ -4847,6 +4845,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -4941,7 +4943,7 @@ msgstr "پیکره بندی اصلی سایت" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5017,11 +5019,11 @@ msgstr "حذÙ" msgid "Attachments" msgstr "ضمائم" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "مؤلÙ" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "مهیا کننده" @@ -5043,37 +5045,50 @@ msgstr "تغییر گذرواژه" msgid "Password changing is not allowed" msgstr "تغییر گذرواژه" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "نتیجه دستور" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "دستور انجام شد" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Ùرمان شکست خورد" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "متاسÙانه این دستور هنوز اجرا نشده." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "خبری با این مشخصه ایجاد نشد" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "کاربر Ø¢Ú¯Ù‡ÛŒ آخر ندارد" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "پیدا نشد %s کاریری یا نام مستعار" -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "پیدا نشد %s کاریری یا نام مستعار" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "متاسÙانه این دستور هنوز اجرا نشده." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, fuzzy, php-format msgid "Nudge sent to %s" msgstr "Ùرتادن اژیر" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5084,197 +5099,195 @@ msgstr "" "مشترک : %2$s\n" "خبر : %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "خبری با این مشخصه ایجاد نشد" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "کاربر Ø¢Ú¯Ù‡ÛŒ آخر ندارد" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "" -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "شما از پیش یک عضو این گروه هستید." -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "عضویت %s در گروه %s نا موÙÙ‚ بود." -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "ملحق شدن به گروه" -#: lib/command.php:275 +#: lib/command.php:373 #, fuzzy, php-format msgid "Could not remove user %s to group %s" msgstr "خارج شدن %s از گروه %s نا موÙÙ‚ بود" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s گروه %s را ترک کرد." -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "نام کامل : %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "موقعیت : %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "صÙحه خانگی : %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "درباره ÛŒ : %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" "پیغام بسیار طولانی است - بیشترین اندازه امکان پذیر %d کاراکتر است , شما %d " "تا Ùرستادید" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "پیام مستقیم به %s Ùرستاده شد." -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "خطا در Ùرستادن پیام مستقیم." -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "نمی توان Ø¢Ú¯Ù‡ÛŒ خودتان را تکرار کرد" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "آن Ø¢Ú¯Ù‡ÛŒ قبلا تکرار شده است." -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "Ø¢Ú¯Ù‡ÛŒ تکرار شد" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "خطا هنگام تکرار Ø¢Ú¯Ù‡ÛŒ." -#: lib/command.php:482 +#: lib/command.php:536 #, fuzzy, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" "پیغام بسیار طولانی است - بیشترین اندازه امکان پذیر %d کاراکتر است , شما %d " "تا Ùرستادید" -#: lib/command.php:491 +#: lib/command.php:545 #, fuzzy, php-format msgid "Reply to %s sent" msgstr "به این Ø¢Ú¯Ù‡ÛŒ جواب دهید" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "خطا هنگام ذخیره ÛŒ Ø¢Ú¯Ù‡ÛŒ" -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "" -#: lib/command.php:554 lib/command.php:589 +#: lib/command.php:602 #, fuzzy -msgid "No such user" -msgstr "چنین کاربری وجود ندارد." +msgid "Can't subscribe to OMB profiles by command." +msgstr "شما به این پروÙيل متعهد نشدید" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "دستور هنوز اجرا نشده" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "" -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "ناتوان در خاموش کردن آگاه سازی." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "آگاه سازی Ùعال است." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "ناتوان در روشن کردن آگاه سازی." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "Ùرمان ورود از کار اÙتاده است" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "مشترک‌ها" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "شما توسط هیچ کس تصویب نشده اید ." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "هم اکنون شما این کاربران را دنبال می‌کنید: " -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "هیچکس شما را تایید نکرده ." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "هیچکس شما را تایید نکرده ." -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "شما در هیچ گروهی عضو نیستید ." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "شما یک عضو این گروه نیستید." -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5316,19 +5329,19 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "" -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "شما ممکن است بخواهید نصاب را اجرا کنید تا این را تعمیر کند." -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "برو به نصاب." @@ -5503,50 +5516,50 @@ msgstr "" msgid "This page is not available in a media type you accept" msgstr "" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Ùرمت(Ùایل) عکس پشتیبانی نشده." + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "" "است . این Ùایل بسیار یزرگ است %s بیشترین مقدار قابل قبول برای اندازه ÛŒ Ùایل." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "" -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "خطای سیستم ارسال Ùایل." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "تصویر یا Ùایل خرابی نیست" -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Ùرمت(Ùایل) عکس پشتیبانی نشده." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Ùایلمان Ú¯Ù… شده" -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "نوع Ùایل پشتیبانی نشده" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "مگابایت" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "کیلوبایت" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5747,7 +5760,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "از" @@ -5902,23 +5915,23 @@ msgstr "" msgid "at" msgstr "در" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "در زمینه" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "تکرار از" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "به این Ø¢Ú¯Ù‡ÛŒ جواب دهید" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "جواب دادن" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Ø¢Ú¯Ù‡ÛŒ تکرار شد" @@ -6061,7 +6074,7 @@ msgstr "" msgid "Revoke the \"%s\" role from this user" msgstr "دسترسی کاربر را به گروه مسدود Ú©Ù†" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6187,90 +6200,94 @@ msgstr "" msgid "Unsubscribe" msgstr "" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "ویرایش اواتور" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "ویرایش تنظیمات پروÙيل" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "ویرایش" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "پیام مستقیم به این کاربر بÙرستید" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "پیام" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "پروÙایل کاربر" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "چند ثانیه پیش" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "حدود یک دقیقه پیش" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "حدود %d دقیقه پیش" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "حدود یک ساعت پیش" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "حدود %d ساعت پیش" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "حدود یک روز پیش" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "حدود %d روز پیش" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "حدود یک ماه پیش" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "حدود %d ماه پیش" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "حدود یک سال پیش" @@ -6284,7 +6301,7 @@ msgstr "%s یک رنگ صحیح نیست!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s یک رنگ صحیح نیست! از Û³ یا Û¶ حر٠مبنای شانزده استÙاده کنید" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, fuzzy, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/fi/LC_MESSAGES/statusnet.po b/locale/fi/LC_MESSAGES/statusnet.po index 68a63537b0..7892ef932f 100644 --- a/locale/fi/LC_MESSAGES/statusnet.po +++ b/locale/fi/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:49:46+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:35+0000\n" "Language-Team: Finnish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fi\n" "X-Message-Group: out-statusnet\n" @@ -102,7 +102,7 @@ msgstr "Sivua ei ole." #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -111,10 +111,8 @@ msgstr "Sivua ei ole." #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Käyttäjää ei ole." @@ -211,14 +209,14 @@ msgstr "Käyttäjän %1$s ja kavereiden päivitykset palvelussa %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "API-metodia ei löytynyt!" @@ -232,8 +230,8 @@ msgstr "API-metodia ei löytynyt!" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Tämä metodi edellyttää POST sanoman." @@ -264,7 +262,7 @@ msgid "Could not save profile." msgstr "Ei voitu tallentaa profiilia." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -353,7 +351,7 @@ msgstr "Käyttäjätunnukselle ei löytynyt statusviestiä." msgid "This status is already a favorite." msgstr "Tämä päivitys on jo suosikki!" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Ei voitu lisätä suosikiksi." @@ -476,7 +474,7 @@ msgstr "Ryhmää ei löytynyt!" msgid "You are already a member of that group." msgstr "Sinä kuulut jo tähän ryhmään." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "Sinut on estetty osallistumasta tähän ryhmään ylläpitäjän toimesta." @@ -527,7 +525,7 @@ msgstr "Koko ei kelpaa." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -596,9 +594,9 @@ msgstr "Käyttäjätili" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Tunnus" @@ -671,12 +669,12 @@ msgstr "Maksimikoko päivitykselle on %d merkkiä, mukaan lukien URL-osoite." msgid "Unsupported format." msgstr "Formaattia ei ole tuettu." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, fuzzy, php-format msgid "%1$s / Favorites from %2$s" msgstr "%s / Käyttäjän %s suosikit" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr " Palvelun %s päivitykset, jotka %s / %s on merkinnyt suosikikseen." @@ -686,7 +684,7 @@ msgstr " Palvelun %s päivitykset, jotka %s / %s on merkinnyt suosikikseen." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Vastaukset päivitykseen %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "" @@ -697,7 +695,7 @@ msgstr "" msgid "%s public timeline" msgstr "%s julkinen aikajana" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s päivitykset kaikilta!" @@ -712,12 +710,12 @@ msgstr "Vastaukset käyttäjälle %s" msgid "Repeats of %s" msgstr "Vastaukset käyttäjälle %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Päivitykset joilla on tagi %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, fuzzy, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Käyttäjän %1$s päivitykset palvelussa %2$s!" @@ -745,7 +743,7 @@ msgstr "Kokoa ei ole." msgid "Invalid size." msgstr "Koko ei kelpaa." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Kuva" @@ -777,7 +775,7 @@ msgid "Preview" msgstr "Esikatselu" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Poista" @@ -858,8 +856,8 @@ msgstr "Käyttäjän estotiedon tallennus epäonnistui." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Tuota ryhmää ei ole." @@ -966,7 +964,7 @@ msgstr "Sinä et kuulu tähän ryhmään." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Istuntoavaimesi kanssa oli ongelma." @@ -1027,7 +1025,7 @@ msgstr "Oletko varma että haluat poistaa tämän päivityksen?" msgid "Do not delete this notice" msgstr "Älä poista tätä päivitystä" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Poista tämä päivitys" @@ -1298,7 +1296,7 @@ msgstr "kuvaus on liian pitkä (max %d merkkiä)." msgid "Could not update group." msgstr "Ei voitu päivittää ryhmää." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Ei voitu lisätä aliasta." @@ -2002,7 +2000,7 @@ msgstr "Kutsu uusia käyttäjiä" msgid "You are already subscribed to these users:" msgstr "Olet jos tilannut seuraavien käyttäjien päivitykset:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2135,7 +2133,7 @@ msgstr "%s liittyi ryhmään %s" msgid "You must be logged in to leave a group." msgstr "Sinun pitää olla kirjautunut sisään, jotta voit erota ryhmästä." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Sinä et kuulu tähän ryhmään." @@ -2256,12 +2254,12 @@ msgstr "Käytä tätä lomaketta luodaksesi ryhmän." msgid "New message" msgstr "Uusi viesti" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Et voi lähettää viestiä tälle käyttäjälle." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Ei sisältöä!" @@ -2269,7 +2267,7 @@ msgstr "Ei sisältöä!" msgid "No recipient specified." msgstr "Vastaanottajaa ei ole määritelty." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "Älä lähetä viestiä itsellesi, vaan kuiskaa se vain hiljaa itsellesi." @@ -2283,7 +2281,7 @@ msgstr "Viesti lähetetty" msgid "Direct message to %s sent." msgstr "Suora viesti käyttäjälle %s lähetetty" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Ajax-virhe" @@ -2404,7 +2402,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Päivitykselle ei ole profiilia" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "Käyttäjän %1$s päivitys %2$s" @@ -2418,8 +2416,8 @@ msgstr "Yhdistä" msgid "Only " msgstr "Vain " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Tuo ei ole tuettu tietomuoto." @@ -2557,7 +2555,7 @@ msgstr "Väärä vanha salasana" msgid "Error saving user; invalid." msgstr "Virhe tapahtui käyttäjän tallentamisessa; epäkelpo." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Uutta salasanaa ei voida tallentaa." @@ -2786,8 +2784,8 @@ msgstr "" "välilyöntejä" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Koko nimi" @@ -2814,9 +2812,9 @@ msgid "Bio" msgstr "Tietoja" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Kotipaikka" @@ -2830,7 +2828,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Tagit" @@ -3064,7 +3062,7 @@ msgstr "Vaihda salasana" msgid "Recover password" msgstr "Salasanan palautus" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Salasanan palautuspyyntö lähetetty." @@ -3084,19 +3082,19 @@ msgstr "Vaihda" msgid "Enter a nickname or email address." msgstr "Syötä käyttäjätunnus tai sähköpostiosoite" -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "Käyttäjää tuolla sähköpostilla tai käyttäjätunnuksella ei ole." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Rekisteröityä sähköpostiosoitetta ei ole tälle käyttäjälle." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Virhe tapahtui osoitevahvistuksen tallentamisessa" -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3104,23 +3102,23 @@ msgstr "" "Ohjeet salasanan palauttamiseksi on lähetetty sähköpostiisiosoitteeseen, " "joka on rekisteröity käyttäjätunnuksellesi." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Odottamaton salasanan uudelleenasetus." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Salasanassa pitää olla 6 tai useampia merkkejä." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Salasana ja salasanan vahvistus eivät täsmää." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Virhe tapahtui käyttäjän asettamisessa." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "" "Uusi salasana tallennettiin onnistuneesti. Olet nyt kirjautunut sisään." @@ -3288,7 +3286,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "Profiilisi URL-osoite toisessa yhteensopivassa mikroblogauspalvelussa" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Tilaa" @@ -3332,7 +3330,7 @@ msgstr "Et voi rekisteröityä, jos et hyväksy lisenssiehtoja." msgid "You already repeated that notice." msgstr "Sinä olet jo estänyt tämän käyttäjän." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 #, fuzzy msgid "Repeated" msgstr "Luotu" @@ -3486,7 +3484,7 @@ msgstr "Sivutus" msgid "Description" msgstr "Kuvaus" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Tilastot" @@ -3598,67 +3596,67 @@ msgstr "Ryhmä %s" msgid "%1$s group, page %2$d" msgstr "Ryhmän %s jäsenet, sivu %d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Ryhmän profiili" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Huomaa" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Aliakset" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Ryhmän toiminnot" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Syöte ryhmän %s päivityksille (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Syöte ryhmän %s päivityksille (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Syöte ryhmän %s päivityksille (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "Käyttäjän %s lähetetyt viestit" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Jäsenet" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Tyhjä)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Kaikki jäsenet" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Luotu" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3668,7 +3666,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3679,7 +3677,7 @@ msgstr "" "**%s** on ryhmä palvelussa %%%%site.name%%%%, joka on [mikroblogauspalvelu]" "(http://en.wikipedia.org/wiki/Micro-blogging)" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Ylläpitäjät" @@ -4230,12 +4228,12 @@ msgstr "Ei id parametria." msgid "Tag %s" msgstr "Tagi %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Käyttäjän profiili" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Kuva" @@ -4578,19 +4576,19 @@ msgstr "Omat" msgid "Author(s)" msgstr "" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4633,28 +4631,28 @@ msgstr "Viestin tallennus ei onnistunut." msgid "Could not update message with new URI." msgstr "Viestin päivittäminen uudella URI-osoitteella ei onnistunut." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Tietokantavirhe tallennettaessa risutagiä: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 #, fuzzy msgid "Problem saving notice. Too long." msgstr "Ongelma päivityksen tallentamisessa." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Virhe tapahtui päivityksen tallennuksessa. Tuntematon käyttäjä." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Liian monta päivitystä liian nopeasti; pidä pieni hengähdystauko ja jatka " "päivityksien lähettämista muutaman minuutin päästä." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4662,20 +4660,20 @@ msgstr "" "Liian monta päivitystä liian nopeasti; pidä pieni hengähdystauko ja jatka " "päivityksien lähettämista muutaman minuutin päästä." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Päivityksesi tähän palveluun on estetty." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Ongelma päivityksen tallentamisessa." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "Ongelma päivityksen tallentamisessa." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%1$s (%2$s)" @@ -4708,29 +4706,29 @@ msgstr "Ei voitu poistaa tilausta." msgid "Couldn't delete subscription OMB token." msgstr "Ei voitu poistaa tilausta." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Ei voitu poistaa tilausta." -#: classes/User.php:373 +#: classes/User.php:378 #, fuzzy, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Viesti käyttäjälle %1$s, %2$s" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Ryhmän luonti ei onnistunut." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "Ryhmän jäsenyystietoja ei voitu asettaa." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Ryhmän jäsenyystietoja ei voitu asettaa." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "Tilausta ei onnistuttu tallentamaan." @@ -4954,7 +4952,7 @@ msgstr "Tönäise" msgid "StatusNet software license" msgstr "StatusNet-ohjelmiston lisenssi" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4963,12 +4961,12 @@ msgstr "" "**%%site.name%%** on mikroblogipalvelu, jonka tarjoaa [%%site.broughtby%%](%%" "site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** on mikroblogipalvelu. " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4979,42 +4977,42 @@ msgstr "" "versio %s, saatavilla lisenssillä [GNU Affero General Public License](http://" "www.fsf.org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 #, fuzzy msgid "Site content license" msgstr "StatusNet-ohjelmiston lisenssi" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Kaikki " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "lisenssi." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Sivutus" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Myöhemmin" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Aiemmin" @@ -5030,6 +5028,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 #, fuzzy @@ -5131,7 +5133,7 @@ msgstr "SMS vahvistus" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5210,11 +5212,11 @@ msgstr "Poista" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 #, fuzzy msgid "Provider" msgstr "Profiili" @@ -5237,37 +5239,51 @@ msgstr "Salasanan vaihto" msgid "Password changing is not allowed" msgstr "Salasanan vaihto" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Komennon tulos" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Komento suoritettu" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Komento epäonnistui" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Valitettavasti tätä komentoa ei ole vielä toteutettu." +#: lib/command.php:83 lib/command.php:105 +#, fuzzy +msgid "Notice with that id does not exist" +msgstr "Ei profiilia tuolla id:llä." -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "Käyttäjällä ei ole viimeistä päivitystä" + +#: lib/command.php:125 #, fuzzy, php-format msgid "Could not find a user with nickname %s" msgstr "Ei voitu päivittää käyttäjälle vahvistettua sähköpostiosoitetta." -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Ei voitu päivittää käyttäjälle vahvistettua sähköpostiosoitetta." + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Valitettavasti tätä komentoa ei ole vielä toteutettu." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, fuzzy, php-format msgid "Nudge sent to %s" msgstr "Tönäisy lähetetty" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5275,203 +5291,201 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -#, fuzzy -msgid "Notice with that id does not exist" -msgstr "Ei profiilia tuolla id:llä." - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "Käyttäjällä ei ole viimeistä päivitystä" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Päivitys on merkitty suosikiksi." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Sinä kuulut jo tähän ryhmään." -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Käyttäjä %s ei voinut liittyä ryhmään %s." -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s liittyi ryhmään %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Ei voitu poistaa käyttäjää %s ryhmästä %s" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s erosi ryhmästä %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Koko nimi: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Kotipaikka: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Kotisivu: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Tietoa: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, fuzzy, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "Viesti oli liian pitkä - maksimikoko on 140 merkkiä, lähetit %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Suora viesti käyttäjälle %s lähetetty" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Tapahtui virhe suoran viestin lähetyksessä." -#: lib/command.php:413 +#: lib/command.php:490 #, fuzzy msgid "Cannot repeat your own notice" msgstr "Ilmoituksia ei voi pistää päälle." -#: lib/command.php:418 +#: lib/command.php:495 #, fuzzy msgid "Already repeated that notice" msgstr "Poista tämä päivitys" -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "Päivitys lähetetty" -#: lib/command.php:428 +#: lib/command.php:505 #, fuzzy msgid "Error repeating notice." msgstr "Ongelma päivityksen tallentamisessa." -#: lib/command.php:482 +#: lib/command.php:536 #, fuzzy, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Viesti oli liian pitkä - maksimikoko on 140 merkkiä, lähetit %d" -#: lib/command.php:491 +#: lib/command.php:545 #, fuzzy, php-format msgid "Reply to %s sent" msgstr "Vastaa tähän päivitykseen" -#: lib/command.php:493 +#: lib/command.php:547 #, fuzzy msgid "Error saving notice." msgstr "Ongelma päivityksen tallentamisessa." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Anna käyttäjätunnus, jonka päivitykset haluat tilata" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "Käyttäjää ei ole." +#: lib/command.php:602 +#, fuzzy +msgid "Can't subscribe to OMB profiles by command." +msgstr "Et ole tilannut tämän käyttäjän päivityksiä." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Käyttäjän %s päivitykset tilattu" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Anna käyttäjätunnus, jonka päivityksien tilauksen haluat lopettaa" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Käyttäjän %s päivitysten tilaus lopetettu" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Komentoa ei ole vielä toteutettu." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Ilmoitukset pois päältä." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Ilmoituksia ei voi pistää pois päältä." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Ilmoitukset päällä." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Ilmoituksia ei voi pistää päälle." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "Käyttäjän %s päivitysten tilaus lopetettu" -#: lib/command.php:709 +#: lib/command.php:752 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Et ole tilannut tämän käyttäjän päivityksiä." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Olet jos tilannut seuraavien käyttäjien päivitykset:" msgstr[1] "Olet jos tilannut seuraavien käyttäjien päivitykset:" -#: lib/command.php:731 +#: lib/command.php:774 #, fuzzy msgid "No one is subscribed to you." msgstr "Toista ei voitu asettaa tilaamaan sinua." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Toista ei voitu asettaa tilaamaan sinua." msgstr[1] "Toista ei voitu asettaa tilaamaan sinua." -#: lib/command.php:753 +#: lib/command.php:796 #, fuzzy msgid "You are not a member of any groups." msgstr "Sinä et kuulu tähän ryhmään." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Sinä et kuulu tähän ryhmään." msgstr[1] "Sinä et kuulu tähän ryhmään." -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5513,20 +5527,20 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 #, fuzzy msgid "No configuration file found. " msgstr "Varmistuskoodia ei ole annettu." -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 #, fuzzy msgid "Go to the installer." msgstr "Kirjaudu sisään palveluun" @@ -5709,49 +5723,49 @@ msgstr "Tagit ryhmän %s päivityksissä" msgid "This page is not available in a media type you accept" msgstr "Tämä sivu ei ole saatavilla sinulle sopivassa mediatyypissä." -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Kuvatiedoston formaattia ei ole tuettu." + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Voit ladata ryhmälle logon." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Osittain ladattu palvelimelle." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Tiedoston lähetyksessä tapahtui järjestelmävirhe." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Tuo ei ole kelvollinen kuva tai tiedosto on rikkoutunut." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Kuvatiedoston formaattia ei ole tuettu." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Tiedosto hävisi." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Tunnistamaton tiedoston tyyppi" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5966,7 +5980,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 #, fuzzy msgid "from" msgstr " lähteestä " @@ -6122,25 +6136,25 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 #, fuzzy msgid "in context" msgstr "Ei sisältöä!" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 #, fuzzy msgid "Repeated by" msgstr "Luotu" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Vastaa tähän päivitykseen" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Vastaus" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "Päivitys on poistettu." @@ -6289,7 +6303,7 @@ msgstr "Vastaa tähän päivitykseen" msgid "Revoke the \"%s\" role from this user" msgstr "Estä tätä käyttäjää osallistumassa tähän ryhmään" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6423,93 +6437,97 @@ msgstr "Peruuta tämän käyttäjän tilaus" msgid "Unsubscribe" msgstr "Peruuta tilaus" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 #, fuzzy msgid "Edit Avatar" msgstr "Kuva" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Käyttäjän toiminnot" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 #, fuzzy msgid "Edit profile settings" msgstr "Profiiliasetukset" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Lähetä suora viesti tälle käyttäjälle" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Viesti" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "Käyttäjän profiili" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 #, fuzzy msgctxt "role" msgid "Administrator" msgstr "Ylläpitäjät" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "muutama sekunti sitten" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "noin minuutti sitten" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "noin %d minuuttia sitten" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "noin tunti sitten" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "noin %d tuntia sitten" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "noin päivä sitten" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "noin %d päivää sitten" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "noin kuukausi sitten" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "noin %d kuukautta sitten" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "noin vuosi sitten" @@ -6523,7 +6541,7 @@ msgstr "Kotisivun verkko-osoite ei ole toimiva." msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, fuzzy, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "Viesti oli liian pitkä - maksimikoko on 140 merkkiä, lähetit %d" diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po index 4c9429e216..70155e450f 100644 --- a/locale/fr/LC_MESSAGES/statusnet.po +++ b/locale/fr/LC_MESSAGES/statusnet.po @@ -14,12 +14,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:49:51+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:41+0000\n" "Language-Team: French\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: out-statusnet\n" @@ -98,7 +98,7 @@ msgstr "Page non trouvée" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -107,10 +107,8 @@ msgstr "Page non trouvée" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Utilisateur non trouvé." @@ -210,14 +208,14 @@ msgstr "Statuts de %1$s et ses amis dans %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "Méthode API non trouvée !" @@ -230,8 +228,8 @@ msgstr "Méthode API non trouvée !" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Ce processus requiert un POST." @@ -262,7 +260,7 @@ msgid "Could not save profile." msgstr "Impossible d’enregistrer le profil." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -350,7 +348,7 @@ msgstr "Aucun statut trouvé avec cet identifiant. " msgid "This status is already a favorite." msgstr "Cet avis est déjà un favori." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Impossible de créer le favori." @@ -469,7 +467,7 @@ msgstr "Groupe non trouvé !" msgid "You are already a member of that group." msgstr "Vous êtes déjà membre de ce groupe." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "Vous avez été bloqué de ce groupe par l’administrateur." @@ -519,7 +517,7 @@ msgstr "Jeton incorrect." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -595,9 +593,9 @@ msgstr "Compte" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Pseudo" @@ -668,12 +666,12 @@ msgstr "" msgid "Unsupported format." msgstr "Format non supporté." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Favoris de %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%1$s statuts favoris de %2$s / %2$s." @@ -683,7 +681,7 @@ msgstr "%1$s statuts favoris de %2$s / %2$s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Mises à jour mentionnant %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s statuts en réponses aux statuts de %2$s / %3$s." @@ -693,7 +691,7 @@ msgstr "%1$s statuts en réponses aux statuts de %2$s / %3$s." msgid "%s public timeline" msgstr "Activité publique %s" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s statuts de tout le monde !" @@ -708,12 +706,12 @@ msgstr "Repris pour %s" msgid "Repeats of %s" msgstr "Reprises de %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Avis marqués avec %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Mises à jour marquées avec %1$s dans %2$s !" @@ -741,7 +739,7 @@ msgstr "Aucune taille" msgid "Invalid size." msgstr "Taille incorrecte." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Avatar" @@ -775,7 +773,7 @@ msgid "Preview" msgstr "Aperçu" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Supprimer" @@ -858,8 +856,8 @@ msgstr "Impossible d’enregistrer les informations de blocage." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Aucun groupe trouvé." @@ -960,7 +958,7 @@ msgstr "Vous n’êtes pas le propriétaire de cette application." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Un problème est survenu avec votre jeton de session." @@ -1021,7 +1019,7 @@ msgstr "Voulez-vous vraiment supprimer cet avis ?" msgid "Do not delete this notice" msgstr "Ne pas supprimer cet avis" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Supprimer cet avis" @@ -1274,7 +1272,7 @@ msgstr "la description est trop longue (%d caractères maximum)." msgid "Could not update group." msgstr "Impossible de mettre à jour le groupe." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Impossible de créer les alias." @@ -1604,7 +1602,7 @@ msgstr "Vous ne pouvez pas attribuer des rôles aux utilisateurs sur ce site." #: actions/grantrole.php:82 msgid "User already has this role." -msgstr "L'utilisateur a déjà ce rôle." +msgstr "L’utilisateur a déjà ce rôle." #: actions/groupblock.php:71 actions/groupunblock.php:71 #: actions/makeadmin.php:71 actions/subedit.php:46 @@ -1985,7 +1983,7 @@ msgstr "Inviter de nouveaux utilisateurs" msgid "You are already subscribed to these users:" msgstr "Vous êtes déjà abonné à ces utilisateurs :" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2118,7 +2116,7 @@ msgstr "%1$s a rejoint le groupe %2$s" msgid "You must be logged in to leave a group." msgstr "Vous devez ouvrir une session pour quitter un groupe." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Vous n’êtes pas membre de ce groupe." @@ -2239,12 +2237,12 @@ msgstr "Remplissez les champs ci-dessous pour créer un nouveau groupe :" msgid "New message" msgstr "Nouveau message" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Vous ne pouvez pas envoyer de messages à cet utilisateur." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Aucun contenu !" @@ -2252,7 +2250,7 @@ msgstr "Aucun contenu !" msgid "No recipient specified." msgstr "Aucun destinataire n’a été spécifié." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2267,7 +2265,7 @@ msgstr "Message envoyé" msgid "Direct message to %s sent." msgstr "Message direct envoyé à %s." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Erreur Ajax" @@ -2390,7 +2388,7 @@ msgstr "" msgid "Notice has no profile" msgstr "L’avis n’a pas de profil" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "Statut de %1$s sur %2$s" @@ -2403,8 +2401,8 @@ msgstr "type de contenu " msgid "Only " msgstr "Seulement " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Format de données non supporté." @@ -2536,7 +2534,7 @@ msgstr "Ancien mot de passe incorrect" msgid "Error saving user; invalid." msgstr "Erreur lors de l’enregistrement de l’utilisateur ; invalide." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Impossible de sauvegarder le nouveau mot de passe." @@ -2752,8 +2750,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1 à 64 lettres minuscules ou chiffres, sans ponctuation ni espaces" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nom complet" @@ -2780,9 +2778,9 @@ msgid "Bio" msgstr "Bio" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Emplacement" @@ -2796,7 +2794,7 @@ msgstr "Partager ma localisation lorsque je poste des avis" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Marques" @@ -3043,7 +3041,7 @@ msgstr "Réinitialiser le mot de passe" msgid "Recover password" msgstr "Récupérer le mot de passe" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Récupération de mot de passe demandée" @@ -3063,19 +3061,19 @@ msgstr "Réinitialiser" msgid "Enter a nickname or email address." msgstr "Entrez un pseudo ou une adresse courriel." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "Aucun utilisateur trouvé avec ce courriel ou ce nom." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Aucune adresse courriel enregistrée pour cet utilisateur." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Erreur lors de l’enregistrement de la confirmation du courriel." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3083,23 +3081,23 @@ msgstr "" "Les instructions pour récupérer votre mot de passe ont été envoyées à " "l’adresse courriel indiquée dans votre compte." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Réinitialisation inattendue du mot de passe." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Le mot de passe doit contenir au moins 6 caractères." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Le mot de passe et sa confirmation ne correspondent pas." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Erreur lors de la configuration de l’utilisateur." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "" "Nouveau mot de passe créé avec succès. Votre session est maintenant ouverte." @@ -3267,7 +3265,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "URL de votre profil sur un autre service de micro-blogging compatible" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "S’abonner" @@ -3304,7 +3302,7 @@ msgstr "Vous ne pouvez pas reprendre votre propre avis." msgid "You already repeated that notice." msgstr "Vous avez déjà repris cet avis." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Repris" @@ -3450,7 +3448,7 @@ msgstr "Organisation" msgid "Description" msgstr "Description" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Statistiques" @@ -3571,67 +3569,67 @@ msgstr "Groupe %s" msgid "%1$s group, page %2$d" msgstr "Groupe %1$s, page %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Profil du groupe" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Note" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Alias" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Actions du groupe" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Fil des avis du groupe %s (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Fil des avis du groupe %s (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Fil des avis du groupe %s (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "ami d’un ami pour le groupe %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Membres" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(aucun)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Tous les membres" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Créé" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3647,7 +3645,7 @@ msgstr "" "action.register%%%%) pour devenir membre de ce groupe et bien plus ! ([En " "lire plus](%%%%doc.help%%%%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3660,7 +3658,7 @@ msgstr "" "logiciel libre [StatusNet](http://status.net/). Ses membres partagent des " "messages courts à propos de leur vie et leurs intérêts. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Administrateurs" @@ -4220,12 +4218,12 @@ msgstr "Aucun argument d’identifiant." msgid "Tag %s" msgstr "Marque %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Profil de l’utilisateur" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Photo" @@ -4572,7 +4570,7 @@ msgstr "Version" msgid "Author(s)" msgstr "Auteur(s)" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " @@ -4581,12 +4579,12 @@ msgstr "" "Un fichier ne peut pas être plus gros que %d octets et le fichier que vous " "avez envoyé pesait %d octets. Essayez d’importer une version moins grosse." -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "Un fichier aussi gros dépasserai votre quota utilisateur de %d octets." -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "Un fichier aussi gros dépasserai votre quota mensuel de %d octets." @@ -4624,27 +4622,27 @@ msgstr "Impossible d’insérer le message." msgid "Could not update message with new URI." msgstr "Impossible de mettre à jour le message avec un nouvel URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Erreur de base de donnée en insérant la marque (hashtag) : %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "Problème lors de l’enregistrement de l’avis ; trop long." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Erreur lors de l’enregistrement de l’avis. Utilisateur inconnu." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Trop d’avis, trop vite ! Faites une pause et publiez à nouveau dans quelques " "minutes." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4652,19 +4650,19 @@ msgstr "" "Trop de messages en double trop vite ! Prenez une pause et publiez à nouveau " "dans quelques minutes." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Il vous est interdit de poster des avis sur ce site." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Problème lors de l’enregistrement de l’avis." -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "Problème lors de l’enregistrement de la boîte de réception du groupe." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4693,28 +4691,28 @@ msgstr "Impossible de supprimer l’abonnement à soi-même." msgid "Couldn't delete subscription OMB token." msgstr "Impossible de supprimer le jeton OMB de l'abonnement ." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Impossible de cesser l’abonnement" -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Bienvenue à %1$s, @%2$s !" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Impossible de créer le groupe." -#: classes/User_group.php:486 +#: classes/User_group.php:489 msgid "Could not set group URI." msgstr "Impossible de définir l'URI du groupe." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Impossible d’établir l’inscription au groupe." -#: classes/User_group.php:521 +#: classes/User_group.php:524 msgid "Could not save local group info." msgstr "Impossible d’enregistrer les informations du groupe local." @@ -4918,7 +4916,7 @@ msgstr "Insigne" msgid "StatusNet software license" msgstr "Licence du logiciel StatusNet" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4927,12 +4925,12 @@ msgstr "" "**%%site.name%%** est un service de microblogging qui vous est proposé par " "[%%site.broughtby%%](%%site.broughtbyurl%%)." -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** est un service de micro-blogging." -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4943,45 +4941,45 @@ msgstr "" "version %s, disponible sous la licence [GNU Affero General Public License] " "(http://www.fsf.org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Licence du contenu du site" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "Le contenu et les données de %1$s sont privés et confidentiels." -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" "Le contenu et les données sont sous le droit d’auteur de %1$s. Tous droits " "réservés." -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" "Le contenu et les données sont sous le droit d’auteur du contributeur. Tous " "droits réservés." -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Tous " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "licence." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Pagination" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Après" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Avant" @@ -4997,6 +4995,10 @@ msgstr "Impossible de gérer le contenu XML embarqué pour le moment." msgid "Can't handle embedded Base64 content yet." msgstr "Impossible de gérer le contenu en Base64 embarqué pour le moment." +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5085,7 +5087,7 @@ msgstr "" "La ressource de l’API a besoin de l’accès en lecture et en écriture, mais " "vous n’y avez accès qu’en lecture." -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5163,11 +5165,11 @@ msgstr "Révoquer" msgid "Attachments" msgstr "Pièces jointes" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Auteur" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Fournisseur" @@ -5187,37 +5189,50 @@ msgstr "La modification du mot de passe a échoué" msgid "Password changing is not allowed" msgstr "La modification du mot de passe n’est pas autorisée" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Résultats de la commande" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Commande complétée" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Échec de la commande" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Désolé, cette commande n’a pas encore été implémentée." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "Aucun avis avec cet identifiant n’existe" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "Aucun avis récent pour cet utilisateur" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "Impossible de trouver un utilisateur avec le pseudo %s" -#: lib/command.php:92 +#: lib/command.php:143 +#, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Impossible de trouver un utilisateur local portant le pseudo %s" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Désolé, cette commande n’a pas encore été implémentée." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "Ça n’a pas de sens de se faire un clin d’œil à soi-même !" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "Clin d’œil envoyé à %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5228,201 +5243,201 @@ msgstr "" "Abonnés : %2$s\n" "Messages : %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "Aucun avis avec cet identifiant n’existe" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "Aucun avis récent pour cet utilisateur" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Avis ajouté aux favoris." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Vous êtes déjà membre de ce groupe" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Impossible d’inscrire l’utilisateur %s au groupe %s" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s a rejoint le groupe %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Impossible de retirer l’utilisateur %s du groupe %s" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s a quitté le groupe %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Nom complet : %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Emplacement : %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Site Web : %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "À propos : %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" +"%s est un profil distant ; vous ne pouvez envoyer de messages directs qu'aux " +"utilisateurs du même serveur." + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" "Message trop long ! La taille maximale est de %d caractères ; vous en avez " "entré %d." -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Message direct envoyé à %s." -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Une erreur est survenue pendant l’envoi de votre message." -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "Impossible de reprendre votre propre avis" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "Avis déjà repris" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "Avis de %s repris" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "Erreur lors de la reprise de l’avis." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" "Avis trop long ! La taille maximale est de %d caractères ; vous en avez " "entré %d." -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "Réponse à %s envoyée" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "Problème lors de l’enregistrement de l’avis." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Indiquez le nom de l’utilisateur auquel vous souhaitez vous abonner" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "Utilisateur non trouvé." +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "Impossible de s'inscrire aux profils OMB par cette commande." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Abonné à %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Indiquez le nom de l’utilisateur duquel vous souhaitez vous désabonner" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Désabonné de %s" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Cette commande n’a pas encore été implémentée." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Avertissements désactivés." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Impossible de désactiver les avertissements." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Avertissements activés." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Impossible d’activer les avertissements." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "La commande d’ouverture de session est désactivée" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" "Ce lien n’est utilisable qu’une seule fois, et est valable uniquement " "pendant 2 minutes : %s" -#: lib/command.php:692 +#: lib/command.php:735 #, php-format msgid "Unsubscribed %s" msgstr "Désabonné de %s" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "Vous n’êtes abonné(e) à personne." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Vous êtes abonné à cette personne :" msgstr[1] "Vous êtes abonné à ces personnes :" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "Personne ne s’est abonné à vous." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Cette personne est abonnée à vous :" msgstr[1] "Ces personnes sont abonnées à vous :" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "Vous n’êtes membre d’aucun groupe." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Vous êtes membre de ce groupe :" msgstr[1] "Vous êtes membre de ces groupes :" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5503,20 +5518,20 @@ msgstr "" "tracks - pas encore implémenté.\n" "tracking - pas encore implémenté.\n" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Aucun fichier de configuration n’a été trouvé. " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" "J’ai cherché des fichiers de configuration dans les emplacements suivants : " -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "Vous pouvez essayer de lancer l’installeur pour régler ce problème." -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "Aller au programme d’installation" @@ -5697,49 +5712,49 @@ msgid "This page is not available in a media type you accept" msgstr "" "Cette page n’est pas disponible dans un des formats que vous avez autorisés." -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Format de fichier d’image non supporté." + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Ce fichier est trop grand. La taille maximale est %s." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Transfert partiel." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Erreur système lors du transfert du fichier." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Ceci n’est pas une image, ou c’est un fichier corrompu." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Format de fichier d’image non supporté." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Fichier perdu." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Type de fichier inconnu" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "Mo" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "Ko" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "Source %d inconnue pour la boîte de réception." @@ -6020,7 +6035,7 @@ msgstr "" "pour démarrer des conversations avec d’autres utilisateurs. Ceux-ci peuvent " "vous envoyer des messages destinés à vous seul(e)." -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "de" @@ -6176,23 +6191,23 @@ msgstr "O" msgid "at" msgstr "chez" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "dans le contexte" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Repris par" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Répondre à cet avis" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Répondre" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Avis repris" @@ -6334,7 +6349,7 @@ msgstr "Reprendre cet avis" msgid "Revoke the \"%s\" role from this user" msgstr "Révoquer le rôle « %s » de cet utilisateur" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "Aucun utilisateur unique défini pour le mode mono-utilisateur." @@ -6460,89 +6475,93 @@ msgstr "Ne plus suivre cet utilisateur" msgid "Unsubscribe" msgstr "Désabonnement" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Modifier l’avatar" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Actions de l’utilisateur" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Modifier les paramètres du profil" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Modifier" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Envoyer un message à cet utilisateur" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Message" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Modérer" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 msgid "User role" msgstr "Rôle de l'utilisateur" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "Administrateur" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "Modérateur" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "il y a quelques secondes" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "il y a 1 minute" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "il y a %d minutes" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "il y a 1 heure" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "il y a %d heures" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "il y a 1 jour" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "il y a %d jours" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "il y a 1 mois" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "il y a %d mois" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "il y a environ 1 an" @@ -6557,7 +6576,7 @@ msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" "%s n’est pas une couleur valide ! Utilisez 3 ou 6 caractères hexadécimaux." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/ga/LC_MESSAGES/statusnet.po b/locale/ga/LC_MESSAGES/statusnet.po index dea9dd11c1..9d77755800 100644 --- a/locale/ga/LC_MESSAGES/statusnet.po +++ b/locale/ga/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:49:54+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:44+0000\n" "Language-Team: Irish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ga\n" "X-Message-Group: out-statusnet\n" @@ -102,7 +102,7 @@ msgstr "Non existe a etiqueta." #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -111,10 +111,8 @@ msgstr "Non existe a etiqueta." #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Ningún usuario." @@ -206,14 +204,14 @@ msgstr "Actualizacións dende %1$s e amigos en %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "Método da API non atopado" @@ -227,8 +225,8 @@ msgstr "Método da API non atopado" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Este método require un POST." @@ -259,7 +257,7 @@ msgid "Could not save profile." msgstr "Non se puido gardar o perfil." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -349,7 +347,7 @@ msgstr "Non se atopou un estado con ese ID." msgid "This status is already a favorite." msgstr "Este chío xa é un favorito!" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Non se puido crear o favorito." @@ -474,7 +472,7 @@ msgstr "Método da API non atopado" msgid "You are already a member of that group." msgstr "Xa estas suscrito a estes usuarios:" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -525,7 +523,7 @@ msgstr "Tamaño inválido." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -593,9 +591,9 @@ msgstr "Sobre" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Alcume" @@ -670,12 +668,12 @@ msgstr "" msgid "Unsupported format." msgstr "Formato de ficheiro de imaxe non soportado." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, fuzzy, php-format msgid "%1$s / Favorites from %2$s" msgstr "%s / Favoritos dende %s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%s updates favorited by %s / %s." @@ -685,7 +683,7 @@ msgstr "%s updates favorited by %s / %s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Chíos que respostan a %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "Hai %1$s chíos en resposta a chíos dende %2$s / %3$s." @@ -695,7 +693,7 @@ msgstr "Hai %1$s chíos en resposta a chíos dende %2$s / %3$s." msgid "%s public timeline" msgstr "Liña de tempo pública de %s" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s chíos de calquera!" @@ -710,12 +708,12 @@ msgstr "Replies to %s" msgid "Repeats of %s" msgstr "Replies to %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Chíos tagueados con %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, fuzzy, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Actualizacións dende %1$s en %2$s!" @@ -744,7 +742,7 @@ msgstr "Sen tamaño." msgid "Invalid size." msgstr "Tamaño inválido." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Avatar" @@ -777,7 +775,7 @@ msgid "Preview" msgstr "" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 #, fuzzy msgid "Delete" msgstr "eliminar" @@ -865,8 +863,8 @@ msgstr "Erro ao gardar información de bloqueo." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 #, fuzzy msgid "No such group." msgstr "Non existe a etiqueta." @@ -976,7 +974,7 @@ msgstr "Non estás suscrito a ese perfil" #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 #, fuzzy msgid "There was a problem with your session token." msgstr "Houbo un problema co teu token de sesión. Tentao de novo, anda..." @@ -1040,7 +1038,7 @@ msgstr "Estas seguro que queres eliminar este chío?" msgid "Do not delete this notice" msgstr "Non se pode eliminar este chíos." -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 #, fuzzy msgid "Delete this notice" msgstr "Eliminar chío" @@ -1319,7 +1317,7 @@ msgstr "O teu Bio é demasiado longo (max 140 car.)." msgid "Could not update group." msgstr "Non se puido actualizar o usuario." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 #, fuzzy msgid "Could not create aliases." msgstr "Non se puido crear o favorito." @@ -2036,7 +2034,7 @@ msgstr "Invitar a novos usuarios" msgid "You are already subscribed to these users:" msgstr "Xa estas suscrito a estes usuarios:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2168,7 +2166,7 @@ msgstr "%s / Favoritos dende %s" msgid "You must be logged in to leave a group." msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s" -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 #, fuzzy msgid "You are not a member of that group." msgstr "Non estás suscrito a ese perfil" @@ -2287,12 +2285,12 @@ msgstr "" msgid "New message" msgstr "Nova mensaxe" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Non podes enviar mensaxes a este usurio." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Sen contido!" @@ -2300,7 +2298,7 @@ msgstr "Sen contido!" msgid "No recipient specified." msgstr "Non se especificou ningún destinatario" -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2317,7 +2315,7 @@ msgstr "Non hai mensaxes de texto!" msgid "Direct message to %s sent." msgstr "Mensaxe directo a %s enviado" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Erro de Ajax" @@ -2435,7 +2433,7 @@ msgstr "" msgid "Notice has no profile" msgstr "O chío non ten perfil" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "Estado de %1$s en %2$s" @@ -2449,8 +2447,8 @@ msgstr "Conectar" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Non é un formato de datos soportado." @@ -2590,7 +2588,7 @@ msgstr "Contrasinal actual incorrecta" msgid "Error saving user; invalid." msgstr "Acounteceu un erro gardando o usuario: é inválido." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Non se pode gardar a contrasinal." @@ -2817,8 +2815,8 @@ msgstr "" "De 1 a 64 letras minúsculas ou númeors, nin espazos nin signos de puntuación" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nome completo" @@ -2846,9 +2844,9 @@ msgid "Bio" msgstr "Bio" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Localización" @@ -2862,7 +2860,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Tags" @@ -3103,7 +3101,7 @@ msgstr "Restaurar contrasinal" msgid "Recover password" msgstr "Recuperar contrasinal" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Petición de recuperación de contrasinal" @@ -3123,19 +3121,19 @@ msgstr "Restaurar" msgid "Enter a nickname or email address." msgstr "Insire o teu alcume ou enderezo de correo." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "Non hai ningún usuario con isa dirección de correo ou nome de usuario." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Non hai un enderezo de correo rexistrado para ese usuario." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Acounteceu un erro gardando a confirmación de enderezo." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3143,23 +3141,23 @@ msgstr "" "As instruccións para recuperar a túa contrasinal foron enviadas ó enderezo " "de correo da túa conta." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Restauración de contrasinal non esperada." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "A contrasinal debe ter 6 caracteres ou máis." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "A contrasinal e a súa confirmación non coinciden." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Acounteceu un erro configurando o usuario." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "A nova contrasinal gardouse correctamente. Xa estas logueado." @@ -3329,7 +3327,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "Enderezo do teu perfil en outro servizo de microblogaxe compatíbel" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Subscribir" @@ -3372,7 +3370,7 @@ msgstr "Non podes rexistrarte se non estas de acordo coa licenza." msgid "You already repeated that notice." msgstr "Xa bloqueaches a este usuario." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 #, fuzzy msgid "Repeated" msgstr "Crear" @@ -3522,7 +3520,7 @@ msgstr "Invitación(s) enviada(s)." msgid "Description" msgstr "Subscricións" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Estatísticas" @@ -3634,73 +3632,73 @@ msgstr "" msgid "%1$s group, page %2$d" msgstr "Tódalas subscricións" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 #, fuzzy msgid "Group profile" msgstr "Non existe o perfil." -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 #, fuzzy msgid "Note" msgstr "Chíos" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 #, fuzzy msgid "Group actions" msgstr "Outras opcions" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Fonte de chíos para %s" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Fonte de chíos para %s" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "Fonte de chíos para %s" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, fuzzy, php-format msgid "FOAF for %s group" msgstr "Band. Saída para %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 #, fuzzy msgid "Members" msgstr "Membro dende" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 #, fuzzy msgid "(None)" msgstr "(nada)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 #, fuzzy msgid "Created" msgstr "Crear" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3714,7 +3712,7 @@ msgstr "" "(http://status.net/). [Únete agora](%%action.register%%) para compartir " "chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3727,7 +3725,7 @@ msgstr "" "(http://status.net/). [Únete agora](%%action.register%%) para compartir " "chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "" @@ -4281,13 +4279,13 @@ msgstr "Non hai argumento id." msgid "Tag %s" msgstr "Tags" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 #, fuzzy msgid "User profile" msgstr "O usuario non ten perfil." #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "" @@ -4633,19 +4631,19 @@ msgstr "Persoal" msgid "Author(s)" msgstr "" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4688,28 +4686,28 @@ msgstr "Non se pode inserir unha mensaxe." msgid "Could not update message with new URI." msgstr "Non se puido actualizar a mensaxe coa nova URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Erro ó inserir o hashtag na BD: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 #, fuzzy msgid "Problem saving notice. Too long." msgstr "Aconteceu un erro ó gardar o chío." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Aconteceu un erro ó gardar o chío. Usuario descoñecido." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Demasiados chíos en pouco tempo; tomate un respiro e envíao de novo dentro " "duns minutos." -#: classes/Notice.php:256 +#: classes/Notice.php:259 #, fuzzy msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " @@ -4718,20 +4716,20 @@ msgstr "" "Demasiados chíos en pouco tempo; tomate un respiro e envíao de novo dentro " "duns minutos." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Tes restrinxido o envio de chíos neste sitio." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Aconteceu un erro ó gardar o chío." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "Aconteceu un erro ó gardar o chío." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%1$s (%2$s)" @@ -4764,31 +4762,31 @@ msgstr "Non se pode eliminar a subscrición." msgid "Couldn't delete subscription OMB token." msgstr "Non se pode eliminar a subscrición." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Non se pode eliminar a subscrición." -#: classes/User.php:373 +#: classes/User.php:378 #, fuzzy, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Mensaxe de %1$s en %2$s" -#: classes/User_group.php:477 +#: classes/User_group.php:480 #, fuzzy msgid "Could not create group." msgstr "Non se puido crear o favorito." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "Non se pode gardar a subscrición." -#: classes/User_group.php:507 +#: classes/User_group.php:510 #, fuzzy msgid "Could not set group membership." msgstr "Non se pode gardar a subscrición." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "Non se pode gardar a subscrición." @@ -5012,7 +5010,7 @@ msgstr "" msgid "StatusNet software license" msgstr "" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -5021,12 +5019,12 @@ msgstr "" "**%%site.name%%** é un servizo de microbloguexo que che proporciona [%%site." "broughtby%%](%%site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** é un servizo de microbloguexo." -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -5037,44 +5035,44 @@ msgstr "" "%s, dispoñible baixo licenza [GNU Affero General Public License](http://www." "fsf.org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 #, fuzzy msgid "Site content license" msgstr "Atopar no contido dos chíos" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 #, fuzzy msgid "All " msgstr "Todos" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "" -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "" -#: lib/action.php:1161 +#: lib/action.php:1164 #, fuzzy msgid "After" msgstr "« Despois" -#: lib/action.php:1169 +#: lib/action.php:1172 #, fuzzy msgid "Before" msgstr "Antes »" @@ -5091,6 +5089,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 #, fuzzy @@ -5192,7 +5194,7 @@ msgstr "Confirmación de SMS" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5271,11 +5273,11 @@ msgstr "Eliminar" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 #, fuzzy msgid "Provider" msgstr "Perfil" @@ -5298,37 +5300,51 @@ msgstr "Contrasinal gardada." msgid "Password changing is not allowed" msgstr "Contrasinal gardada." -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Resultados do comando" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Comando completo" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Comando fallido" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Desculpa, este comando todavía non está implementado." +#: lib/command.php:83 lib/command.php:105 +#, fuzzy +msgid "Notice with that id does not exist" +msgstr "Non se atopou un perfil con ese ID." -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "O usuario non ten último chio." + +#: lib/command.php:125 #, fuzzy, php-format msgid "Could not find a user with nickname %s" msgstr "Non se puido actualizar o usuario coa dirección de correo electrónico." -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Non se puido actualizar o usuario coa dirección de correo electrónico." + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Desculpa, este comando todavía non está implementado." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, fuzzy, php-format msgid "Nudge sent to %s" msgstr "Toque enviado" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5339,176 +5355,174 @@ msgstr "" "Suscriptores: %2$s\n" "Chíos: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -#, fuzzy -msgid "Notice with that id does not exist" -msgstr "Non se atopou un perfil con ese ID." - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "O usuario non ten último chio." - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Chío marcado coma favorito." -#: lib/command.php:217 +#: lib/command.php:317 #, fuzzy msgid "You are already a member of that group" msgstr "Xa estas suscrito a estes usuarios:" -#: lib/command.php:231 +#: lib/command.php:331 #, fuzzy, php-format msgid "Could not join user %s to group %s" msgstr "Non podes seguir a este usuario: o Usuario non se atopa." -#: lib/command.php:236 +#: lib/command.php:336 #, fuzzy, php-format msgid "%s joined group %s" msgstr "%s / Favoritos dende %s" -#: lib/command.php:275 +#: lib/command.php:373 #, fuzzy, php-format msgid "Could not remove user %s to group %s" msgstr "Non podes seguir a este usuario: o Usuario non se atopa." -#: lib/command.php:280 +#: lib/command.php:378 #, fuzzy, php-format msgid "%s left group %s" msgstr "%s / Favoritos dende %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Nome completo: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Ubicación: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Páxina persoal: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Sobre: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, fuzzy, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "Mensaxe demasiado longa - o máximo é 140 caracteres, ti enviaches %d " -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Mensaxe directo a %s enviado" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Erro ó enviar a mensaxe directa." -#: lib/command.php:413 +#: lib/command.php:490 #, fuzzy msgid "Cannot repeat your own notice" msgstr "Non se pode activar a notificación." -#: lib/command.php:418 +#: lib/command.php:495 #, fuzzy msgid "Already repeated that notice" msgstr "Eliminar chío" -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "Chío publicado" -#: lib/command.php:428 +#: lib/command.php:505 #, fuzzy msgid "Error repeating notice." msgstr "Aconteceu un erro ó gardar o chío." -#: lib/command.php:482 +#: lib/command.php:536 #, fuzzy, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Mensaxe demasiado longa - o máximo é 140 caracteres, ti enviaches %d " -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "Non se pode eliminar este chíos." -#: lib/command.php:493 +#: lib/command.php:547 #, fuzzy msgid "Error saving notice." msgstr "Aconteceu un erro ó gardar o chío." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Especifica o nome do usuario ó que queres suscribirte" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "Ningún usuario." +#: lib/command.php:602 +#, fuzzy +msgid "Can't subscribe to OMB profiles by command." +msgstr "Non estás suscrito a ese perfil" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Suscrito a %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Especifica o nome de usuario ó que queres deixar de seguir" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Desuscribir de %s" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Comando non implementado." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Notificación desactivada." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "No se pode desactivar a notificación." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Notificación habilitada." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Non se pode activar a notificación." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "Desuscribir de %s" -#: lib/command.php:709 +#: lib/command.php:752 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Non estás suscrito a ese perfil" -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Xa estas suscrito a estes usuarios:" @@ -5517,12 +5531,12 @@ msgstr[2] "" msgstr[3] "" msgstr[4] "" -#: lib/command.php:731 +#: lib/command.php:774 #, fuzzy msgid "No one is subscribed to you." msgstr "Outro usuario non se puido suscribir a ti." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Outro usuario non se puido suscribir a ti." @@ -5531,12 +5545,12 @@ msgstr[2] "" msgstr[3] "" msgstr[4] "" -#: lib/command.php:753 +#: lib/command.php:796 #, fuzzy msgid "You are not a member of any groups." msgstr "Non estás suscrito a ese perfil" -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Non estás suscrito a ese perfil" @@ -5545,7 +5559,7 @@ msgstr[2] "" msgstr[3] "" msgstr[4] "" -#: lib/command.php:769 +#: lib/command.php:812 #, fuzzy msgid "" "Commands:\n" @@ -5614,20 +5628,20 @@ msgstr "" "tracks - non implementado por agora.\n" "tracking - non implementado por agora.\n" -#: lib/common.php:148 +#: lib/common.php:136 #, fuzzy msgid "No configuration file found. " msgstr "Sen código de confirmación." -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "" @@ -5812,51 +5826,51 @@ msgstr "" msgid "This page is not available in a media type you accept" msgstr "Esta páxina non está dispoñíbel no tipo de medio que aceptas" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Formato de ficheiro de imaxe non soportado." + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Podes actualizar a túa información do perfil persoal aquí" -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Carga parcial." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Aconteceu un erro no sistema namentras se estaba cargando o ficheiro." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Non é unha imaxe ou está corrupta." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Formato de ficheiro de imaxe non soportado." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 #, fuzzy msgid "Lost our file." msgstr "Bloqueo de usuario fallido." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 #, fuzzy msgid "Unknown file type" msgstr "tipo de ficheiro non soportado" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -6117,7 +6131,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 #, fuzzy msgid "from" msgstr " dende " @@ -6276,27 +6290,27 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 #, fuzzy msgid "in context" msgstr "Sen contido!" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 #, fuzzy msgid "Repeated by" msgstr "Crear" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 #, fuzzy msgid "Reply to this notice" msgstr "Non se pode eliminar este chíos." -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 #, fuzzy msgid "Reply" msgstr "contestar" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "Chío publicado" @@ -6451,7 +6465,7 @@ msgstr "Non se pode eliminar este chíos." msgid "Revoke the \"%s\" role from this user" msgstr "" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6590,95 +6604,99 @@ msgstr "Desuscribir de %s" msgid "Unsubscribe" msgstr "Eliminar subscrición" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 #, fuzzy msgid "Edit Avatar" msgstr "Avatar" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 #, fuzzy msgid "User actions" msgstr "Outras opcions" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 #, fuzzy msgid "Edit profile settings" msgstr "Configuración de perfil" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 #, fuzzy msgid "Send a direct message to this user" msgstr "Non podes enviar mensaxes a este usurio." -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 #, fuzzy msgid "Message" msgstr "Nova mensaxe" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "O usuario non ten perfil." -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "fai uns segundos" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "fai un minuto" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "fai %d minutos" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "fai unha hora" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "fai %d horas" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "fai un día" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "fai %d días" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "fai un mes" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "fai %d meses" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "fai un ano" @@ -6692,7 +6710,7 @@ msgstr "%1s non é unha orixe fiable." msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, fuzzy, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "Mensaxe demasiado longa - o máximo é 140 caracteres, ti enviaches %d " diff --git a/locale/he/LC_MESSAGES/statusnet.po b/locale/he/LC_MESSAGES/statusnet.po index 49f229a96a..27c7af90f0 100644 --- a/locale/he/LC_MESSAGES/statusnet.po +++ b/locale/he/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:49:57+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:47+0000\n" "Language-Team: Hebrew\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: he\n" "X-Message-Group: out-statusnet\n" @@ -99,7 +99,7 @@ msgstr "×ין הודעה כזו." #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -108,10 +108,8 @@ msgstr "×ין הודעה כזו." #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "×ין משתמש ×›×–×”." @@ -203,14 +201,14 @@ msgstr "" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "קוד ×”×ישור ×œ× × ×ž×¦×." @@ -224,8 +222,8 @@ msgstr "קוד ×”×ישור ×œ× × ×ž×¦×." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "" @@ -256,7 +254,7 @@ msgid "Could not save profile." msgstr "שמירת הפרופיל נכשלה." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -343,7 +341,7 @@ msgstr "" msgid "This status is already a favorite." msgstr "זהו כבר זיהוי ×”-Jabber שלך." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "" @@ -466,7 +464,7 @@ msgstr "×œ× × ×ž×¦×" msgid "You are already a member of that group." msgstr "כבר נכנסת למערכת!" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -518,7 +516,7 @@ msgstr "גודל ×œ× ×—×•×§×™." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -586,9 +584,9 @@ msgstr "×ודות" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "כינוי" @@ -661,12 +659,12 @@ msgstr "" msgid "Unsupported format." msgstr "פורמט התמונה ×ינו נתמך." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, fuzzy, php-format msgid "%1$s / Favorites from %2$s" msgstr "הסטטוס של %1$s ב-%2$s " -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "מיקרובלוג מ×ת %s" @@ -676,7 +674,7 @@ msgstr "מיקרובלוג מ×ת %s" msgid "%1$s / Updates mentioning %2$s" msgstr "הסטטוס של %1$s ב-%2$s " -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "" @@ -686,7 +684,7 @@ msgstr "" msgid "%s public timeline" msgstr "" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "" @@ -701,12 +699,12 @@ msgstr "תגובת עבור %s" msgid "Repeats of %s" msgstr "תגובת עבור %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, fuzzy, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "מיקרובלוג מ×ת %s" @@ -736,7 +734,7 @@ msgstr "×ין גודל." msgid "Invalid size." msgstr "גודל ×œ× ×—×•×§×™." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "תמונה" @@ -769,7 +767,7 @@ msgid "Preview" msgstr "" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 #, fuzzy msgid "Delete" msgstr "מחק" @@ -855,8 +853,8 @@ msgstr "" #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 #, fuzzy msgid "No such group." msgstr "×ין הודעה כזו." @@ -965,7 +963,7 @@ msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”" #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "" @@ -1025,7 +1023,7 @@ msgstr "" msgid "Do not delete this notice" msgstr "×ין הודעה כזו." -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "" @@ -1297,7 +1295,7 @@ msgstr "הביוגרפיה ×רוכה מידי (לכל היותר 140 ×ותיו msgid "Could not update group." msgstr "עידכון המשתמש נכשל." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 #, fuzzy msgid "Could not create aliases." msgstr "שמירת מידע התמונה נכשל" @@ -2006,7 +2004,7 @@ msgstr "" msgid "You are already subscribed to these users:" msgstr "" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "" @@ -2108,7 +2106,7 @@ msgstr "" msgid "You must be logged in to leave a group." msgstr "" -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 #, fuzzy msgid "You are not a member of that group." msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”" @@ -2223,12 +2221,12 @@ msgstr "" msgid "New message" msgstr "הודעה חדשה" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "" -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "×ין תוכן!" @@ -2236,7 +2234,7 @@ msgstr "×ין תוכן!" msgid "No recipient specified." msgstr "" -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2251,7 +2249,7 @@ msgstr "הודעה חדשה" msgid "Direct message to %s sent." msgstr "" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "" @@ -2366,7 +2364,7 @@ msgstr "" msgid "Notice has no profile" msgstr "להודעה ×ין פרופיל" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "הסטטוס של %1$s ב-%2$s " @@ -2380,8 +2378,8 @@ msgstr "התחבר" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "" @@ -2521,7 +2519,7 @@ msgstr "הסיסמה הישנה ×œ× × ×›×•× ×”" msgid "Error saving user; invalid." msgstr "שגי××” בשמירת ×©× ×”×ž×©×ª×ž×©, ×œ× ×¢×•×ž×“ בכללי×." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "×œ× × ×™×ª×Ÿ לשמור ×ת הסיסמה" @@ -2744,8 +2742,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1 עד 64 ×ותיות ×נגליות קטנות ×ו מספרי×, ×œ×œ× ×¡×™×ž× ×™ פיסוק ×ו רווחי×." #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "×©× ×ž×œ×" @@ -2773,9 +2771,9 @@ msgid "Bio" msgstr "ביוגרפיה" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "מיקו×" @@ -2789,7 +2787,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "" @@ -3019,7 +3017,7 @@ msgstr "×יפוס סיסמה" msgid "Recover password" msgstr "סיסמת שיחזור" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "התבקש שיחזור סיסמה" @@ -3039,41 +3037,41 @@ msgstr "×יפוס" msgid "Enter a nickname or email address." msgstr "" -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "" -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "שגי××” בשמירת ×ישור הכתובת." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." msgstr "" -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "×יפוס סיסמה ×œ× ×¦×¤×•×™." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "הסיסמה חייבת להיות בת לפחות 6 ×ותיות." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "הסיסמה ו×ישורה ×ינן תו×מות." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "שגי××” ביצירת ×©× ×”×ž×©×ª×ž×©." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "הסיסמה החדשה נשמרה בהצלחה. ×תה מחובר למערכת." @@ -3217,7 +3215,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "כתובת הפרופיל שלך בשרות ביקרובלוג תו×× ×חר" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "×”×™×¨×©× ×›×ž× ×•×™" @@ -3258,7 +3256,7 @@ msgstr "×œ× × ×™×ª×Ÿ ×œ×”×™×¨×©× ×œ×œ× ×”×¡×›×ž×” לרשיון" msgid "You already repeated that notice." msgstr "כבר נכנסת למערכת!" -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 #, fuzzy msgid "Repeated" msgstr "צור" @@ -3407,7 +3405,7 @@ msgstr "מיקו×" msgid "Description" msgstr "הרשמות" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "סטטיסטיקה" @@ -3518,71 +3516,71 @@ msgstr "" msgid "%1$s group, page %2$d" msgstr "כל המנויי×" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 #, fuzzy msgid "Group profile" msgstr "×ין הודעה כזו." -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 #, fuzzy msgid "Note" msgstr "הודעות" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "הזנת הודעות של %s" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "הזנת הודעות של %s" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "הזנת הודעות של %s" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, fuzzy, php-format msgid "FOAF for %s group" msgstr "הזנת הודעות של %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 #, fuzzy msgid "Members" msgstr "חבר מ××–" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 #, fuzzy msgid "Created" msgstr "צור" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3592,7 +3590,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3601,7 +3599,7 @@ msgid "" "their life and interests. " msgstr "" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "" @@ -4139,13 +4137,13 @@ msgstr "×ין מסמך ×›×–×”." msgid "Tag %s" msgstr "" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 #, fuzzy msgid "User profile" msgstr "למשתמש ×ין פרופיל." #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "" @@ -4482,19 +4480,19 @@ msgstr "×ישי" msgid "Author(s)" msgstr "" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4536,46 +4534,46 @@ msgstr "" msgid "Could not update message with new URI." msgstr "" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "" -#: classes/Notice.php:241 +#: classes/Notice.php:244 #, fuzzy msgid "Problem saving notice. Too long." msgstr "בעיה בשמירת ההודעה." -#: classes/Notice.php:245 +#: classes/Notice.php:248 #, fuzzy msgid "Problem saving notice. Unknown user." msgstr "בעיה בשמירת ההודעה." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "בעיה בשמירת ההודעה." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "בעיה בשמירת ההודעה." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "" @@ -4608,31 +4606,31 @@ msgstr "מחיקת המנוי ×œ× ×”×¦×œ×™×—×”." msgid "Couldn't delete subscription OMB token." msgstr "מחיקת המנוי ×œ× ×”×¦×œ×™×—×”." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "מחיקת המנוי ×œ× ×”×¦×œ×™×—×”." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "" -#: classes/User_group.php:477 +#: classes/User_group.php:480 #, fuzzy msgid "Could not create group." msgstr "שמירת מידע התמונה נכשל" -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "יצירת המנוי נכשלה." -#: classes/User_group.php:507 +#: classes/User_group.php:510 #, fuzzy msgid "Could not set group membership." msgstr "יצירת המנוי נכשלה." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "יצירת המנוי נכשלה." @@ -4854,7 +4852,7 @@ msgstr "" msgid "StatusNet software license" msgstr "" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4863,12 +4861,12 @@ msgstr "" "**%%site.name%%** ×”×•× ×©×¨×•×ª ביקרובלוג הניתן על ידי [%%site.broughtby%%](%%" "site.broughtbyurl%%)." -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** ×”×•× ×©×¨×•×ª ביקרובלוג." -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4879,43 +4877,43 @@ msgstr "" "s, המופצת תחת רשיון [GNU Affero General Public License](http://www.fsf.org/" "licensing/licenses/agpl-3.0.html)" -#: lib/action.php:821 +#: lib/action.php:824 #, fuzzy msgid "Site content license" msgstr "הודעה חדשה" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "" -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "" -#: lib/action.php:1161 +#: lib/action.php:1164 #, fuzzy msgid "After" msgstr "<< ×חרי" -#: lib/action.php:1169 +#: lib/action.php:1172 #, fuzzy msgid "Before" msgstr "לפני >>" @@ -4932,6 +4930,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5027,7 +5029,7 @@ msgstr "הרשמות" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5106,11 +5108,11 @@ msgstr "הסר" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 #, fuzzy msgid "Provider" msgstr "פרופיל" @@ -5133,37 +5135,52 @@ msgstr "הסיסמה נשמרה." msgid "Password changing is not allowed" msgstr "הסיסמה נשמרה." -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "" +#: lib/command.php:83 lib/command.php:105 +#, fuzzy +msgid "Notice with that id does not exist" +msgstr "×ין פרופיל תו×× ×œ×¤×¨×•×¤×™×œ המרוחק " -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +#, fuzzy +msgid "User has no last notice" +msgstr "למשתמש ×ין פרופיל." + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "עידכון המשתמש נכשל." -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "עידכון המשתמש נכשל." + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "" + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, fuzzy, php-format msgid "Nudge sent to %s" msgstr "תגובת עבור %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5171,206 +5188,202 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -#, fuzzy -msgid "Notice with that id does not exist" -msgstr "×ין פרופיל תו×× ×œ×¤×¨×•×¤×™×œ המרוחק " - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -#, fuzzy -msgid "User has no last notice" -msgstr "למשתמש ×ין פרופיל." - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "" -#: lib/command.php:217 +#: lib/command.php:317 #, fuzzy msgid "You are already a member of that group" msgstr "כבר נכנסת למערכת!" -#: lib/command.php:231 +#: lib/command.php:331 #, fuzzy, php-format msgid "Could not join user %s to group %s" msgstr "נכשלה ההפניה לשרת: %s" -#: lib/command.php:236 +#: lib/command.php:336 #, fuzzy, php-format msgid "%s joined group %s" msgstr "הסטטוס של %1$s ב-%2$s " -#: lib/command.php:275 +#: lib/command.php:373 #, fuzzy, php-format msgid "Could not remove user %s to group %s" msgstr "נכשלה יצירת OpenID מתוך: %s" -#: lib/command.php:280 +#: lib/command.php:378 #, fuzzy, php-format msgid "%s left group %s" msgstr "הסטטוס של %1$s ב-%2$s " -#: lib/command.php:309 +#: lib/command.php:401 #, fuzzy, php-format msgid "Fullname: %s" msgstr "×©× ×ž×œ×" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "×ודות: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "" -#: lib/command.php:413 +#: lib/command.php:490 #, fuzzy msgid "Cannot repeat your own notice" msgstr "×œ× × ×™×ª×Ÿ ×œ×”×™×¨×©× ×œ×œ× ×”×¡×›×ž×” לרשיון" -#: lib/command.php:418 +#: lib/command.php:495 #, fuzzy msgid "Already repeated that notice" msgstr "כבר נכנסת למערכת!" -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "הודעות" -#: lib/command.php:428 +#: lib/command.php:505 #, fuzzy msgid "Error repeating notice." msgstr "בעיה בשמירת ההודעה." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:491 +#: lib/command.php:545 #, fuzzy, php-format msgid "Reply to %s sent" msgstr "תגובת עבור %s" -#: lib/command.php:493 +#: lib/command.php:547 #, fuzzy msgid "Error saving notice." msgstr "בעיה בשמירת ההודעה." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "" -#: lib/command.php:554 lib/command.php:589 +#: lib/command.php:602 #, fuzzy -msgid "No such user" -msgstr "×ין משתמש ×›×–×”." +msgid "Can't subscribe to OMB profiles by command." +msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "" -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "" -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "" -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "" -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "בטל מנוי" -#: lib/command.php:709 +#: lib/command.php:752 #, fuzzy msgid "You are not subscribed to anyone." msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”" -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”" msgstr[1] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”" -#: lib/command.php:731 +#: lib/command.php:774 #, fuzzy msgid "No one is subscribed to you." msgstr "הרשמה מרוחקת" -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "הרשמה מרוחקת" msgstr[1] "הרשמה מרוחקת" -#: lib/command.php:753 +#: lib/command.php:796 #, fuzzy msgid "You are not a member of any groups." msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”" -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”" msgstr[1] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5412,20 +5425,20 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 #, fuzzy msgid "No configuration file found. " msgstr "×ין קוד ×ישור." -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "" @@ -5608,50 +5621,50 @@ msgstr "" msgid "This page is not available in a media type you accept" msgstr "עמוד ×–×” ×ינו זמין בסוג מדיה ש×תה יכול לקבל" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "פורמט התמונה ×ינו נתמך." + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "×–×” ×רוך מידי. ×ורך מירבי להודעה ×”×•× 140 ×ותיות." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "העל××” חלקית." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "שגי×ת מערכת בהעל×ת הקובץ." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "זהו ×œ× ×§×•×‘×¥ תמונה, ×ו שחל בו שיבוש." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "פורמט התמונה ×ינו נתמך." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 #, fuzzy msgid "Lost our file." msgstr "×ין הודעה כזו." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5855,7 +5868,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "" @@ -6012,26 +6025,26 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 #, fuzzy msgid "in context" msgstr "×ין תוכן!" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 #, fuzzy msgid "Repeated by" msgstr "צור" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 #, fuzzy msgid "Reply" msgstr "הגב" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "הודעות" @@ -6181,7 +6194,7 @@ msgstr "×ין הודעה כזו." msgid "Revoke the \"%s\" role from this user" msgstr "×ין משתמש ×›×–×”." -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6315,93 +6328,97 @@ msgstr "" msgid "Unsubscribe" msgstr "בטל מנוי" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 #, fuzzy msgid "Edit Avatar" msgstr "תמונה" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 #, fuzzy msgid "Edit profile settings" msgstr "הגדרות הפרופיל" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 #, fuzzy msgid "Message" msgstr "הודעה חדשה" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "למשתמש ×ין פרופיל." -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "לפני מספר שניות" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "לפני כדקה" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "לפני ×›-%d דקות" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "לפני כשעה" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "לפני ×›-%d שעות" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "לפני כיו×" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "לפני ×›-%d ימי×" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "לפני כחודש" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "לפני ×›-%d חודשי×" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "לפני כשנה" @@ -6415,7 +6432,7 @@ msgstr "ל×תר הבית יש כתובת ×œ× ×—×•×§×™×ª." msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/hsb/LC_MESSAGES/statusnet.po b/locale/hsb/LC_MESSAGES/statusnet.po index 91d9c9c73c..f61fb0a82b 100644 --- a/locale/hsb/LC_MESSAGES/statusnet.po +++ b/locale/hsb/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:50:00+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:50+0000\n" "Language-Team: Dutch\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: hsb\n" "X-Message-Group: out-statusnet\n" @@ -29,15 +29,13 @@ msgstr "PÅ™istup" #. TRANS: Page notice #: actions/accessadminpanel.php:67 -#, fuzzy msgid "Site access settings" -msgstr "SydÅ‚owe nastajenja skÅ‚adować" +msgstr "Nastajenja za sydÅ‚owy pÅ™istup" #. TRANS: Form legend for registration form. #: actions/accessadminpanel.php:161 -#, fuzzy msgid "Registration" -msgstr "Registrować" +msgstr "Registrowanje" #. TRANS: Checkbox instructions for admin setting "Private" #: actions/accessadminpanel.php:165 @@ -46,7 +44,6 @@ msgstr "" #. TRANS: Checkbox label for prohibiting anonymous users from viewing site. #: actions/accessadminpanel.php:167 -#, fuzzy msgctxt "LABEL" msgid "Private" msgstr "Priwatny" @@ -73,12 +70,10 @@ msgstr "ZaÄinjeny" #. TRANS: Title / tooltip for button to save access settings in site admin panel #: actions/accessadminpanel.php:202 -#, fuzzy msgid "Save access settings" -msgstr "SydÅ‚owe nastajenja skÅ‚adować" +msgstr "PÅ™istupne nastajenja skÅ‚adować" #: actions/accessadminpanel.php:203 -#, fuzzy msgctxt "BUTTON" msgid "Save" msgstr "SkÅ‚adować" @@ -99,7 +94,7 @@ msgstr "Strona njeeksistuje" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -108,10 +103,8 @@ msgstr "Strona njeeksistuje" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Wužiwar njeeksistuje" @@ -202,14 +195,14 @@ msgstr "" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "API-metoda njenamakana." @@ -222,8 +215,8 @@ msgstr "API-metoda njenamakana." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Tuta metoda wužaduje sej POST." @@ -252,7 +245,7 @@ msgid "Could not save profile." msgstr "Profil njeje so skÅ‚adować daÅ‚." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -336,7 +329,7 @@ msgstr "Status z tym ID njenamakany." msgid "This status is already a favorite." msgstr "Tutón status je hižo faworit." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "" @@ -453,7 +446,7 @@ msgstr "Skupina njenamakana!" msgid "You are already a member of that group." msgstr "Sy hižo ÄÅ‚on teje skupiny." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -491,9 +484,8 @@ msgid "No oauth_token parameter provided." msgstr "" #: actions/apioauthauthorize.php:106 -#, fuzzy msgid "Invalid token." -msgstr "NjepÅ‚aćiwa wulkosć." +msgstr "NjepÅ‚aćiwy token." #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268 #: actions/deletenotice.php:157 actions/disfavor.php:74 @@ -504,7 +496,7 @@ msgstr "NjepÅ‚aćiwa wulkosć." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -518,12 +510,10 @@ msgid "Invalid nickname / password!" msgstr "NjepÅ‚aćiwe pÅ™imjeno abo hesÅ‚o!" #: actions/apioauthauthorize.php:159 -#, fuzzy msgid "Database error deleting OAuth application user." -msgstr "Zmylk datoweje banki pÅ™i zasunjenju wužiwarja OAuth-aplikacije." +msgstr "Zmylk datoweje banki pÅ™i zhaÅ¡enju wužiwarja OAuth-aplikacije." #: actions/apioauthauthorize.php:185 -#, fuzzy msgid "Database error inserting OAuth application user." msgstr "Zmylk datoweje banki pÅ™i zasunjenju wužiwarja OAuth-aplikacije." @@ -570,9 +560,9 @@ msgstr "Konto" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "PÅ™imjeno" @@ -641,12 +631,12 @@ msgstr "" msgid "Unsupported format." msgstr "NjepodpÄ›rany format." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "" @@ -656,7 +646,7 @@ msgstr "" msgid "%1$s / Updates mentioning %2$s" msgstr "" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "" @@ -666,7 +656,7 @@ msgstr "" msgid "%s public timeline" msgstr "" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "" @@ -681,12 +671,12 @@ msgstr "" msgid "Repeats of %s" msgstr "" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "" @@ -714,7 +704,7 @@ msgstr "Žana wulkosć." msgid "Invalid size." msgstr "NjepÅ‚aćiwa wulkosć." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Awatar" @@ -747,7 +737,7 @@ msgid "Preview" msgstr "PÅ™ehlad" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "ZniÄić" @@ -827,8 +817,8 @@ msgstr "" #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Skupina njeeksistuje." @@ -915,14 +905,12 @@ msgid "Notices" msgstr "Zdźělenki" #: actions/deleteapplication.php:63 -#, fuzzy msgid "You must be logged in to delete an application." -msgstr "DyrbiÅ¡ pÅ™izjewjeny być, zo by skupinu wobdźěłaÅ‚." +msgstr "DyrbiÅ¡ pÅ™izjewjeny być, zo by aplikaciju zniÄiÅ‚." #: actions/deleteapplication.php:71 -#, fuzzy msgid "Application not found." -msgstr "Aplikaciski profil" +msgstr "Aplikaciska njenamakana." #: actions/deleteapplication.php:78 actions/editapplication.php:77 #: actions/showapplication.php:94 @@ -931,14 +919,13 @@ msgstr "Njejsy wobsedźer tuteje aplikacije." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "" #: actions/deleteapplication.php:123 actions/deleteapplication.php:147 -#, fuzzy msgid "Delete application" -msgstr "Aplikacija njeeksistuje." +msgstr "Aplikaciju zniÄić" #: actions/deleteapplication.php:149 msgid "" @@ -948,14 +935,12 @@ msgid "" msgstr "" #: actions/deleteapplication.php:156 -#, fuzzy msgid "Do not delete this application" -msgstr "Tutu zdźělenku njewuÅ¡mórnyć" +msgstr "Tutu aplikaciju njezniÄić" #: actions/deleteapplication.php:160 -#, fuzzy msgid "Delete this application" -msgstr "Tutu zdźělenku wuÅ¡mórnyć" +msgstr "Tutu aplikaciju zniÄić" #. TRANS: Client error message #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62 @@ -990,7 +975,7 @@ msgstr "ChceÅ¡ woprawdźe tutu zdźělenku wuÅ¡mórnyć?" msgid "Do not delete this notice" msgstr "Tutu zdźělenku njewuÅ¡mórnyć" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Tutu zdźělenku wuÅ¡mórnyć" @@ -1144,14 +1129,13 @@ msgid "Add to favorites" msgstr "K faworitam pÅ™idać" #: actions/doc.php:158 -#, fuzzy, php-format +#, php-format msgid "No such document \"%s\"" -msgstr "Dokument njeeksistuje." +msgstr "Dokument \"%s\" njeeksistuje" #: actions/editapplication.php:54 -#, fuzzy msgid "Edit Application" -msgstr "Aplikacije OAuth" +msgstr "Aplikaciju wobdźěłać" #: actions/editapplication.php:66 msgid "You must be logged in to edit an application." @@ -1175,9 +1159,8 @@ msgid "Name is too long (max 255 chars)." msgstr "Mjeno je pÅ™edoÅ‚ho (maks. 255 znamjeÅ¡kow)." #: actions/editapplication.php:183 actions/newapplication.php:162 -#, fuzzy msgid "Name already in use. Try another one." -msgstr "PÅ™imjeno so hižo wužiwa. Spytaj druhe." +msgstr "Mjeno so hižo wužiwa. Spytaj druhe." #: actions/editapplication.php:186 actions/newapplication.php:168 msgid "Description is required." @@ -1242,7 +1225,7 @@ msgstr "wopisanje je pÅ™edoÅ‚ho (maks. %d znamjeÅ¡kow)." msgid "Could not update group." msgstr "Skupina njeje so daÅ‚a aktualizować." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Aliasy njejsu so dali wutworić." @@ -1547,23 +1530,20 @@ msgid "Cannot read file." msgstr "Dataja njeda so Äitać." #: actions/grantrole.php:62 actions/revokerole.php:62 -#, fuzzy msgid "Invalid role." -msgstr "NjepÅ‚aćiwa wulkosć." +msgstr "NjepÅ‚aćiwa róla." #: actions/grantrole.php:66 actions/revokerole.php:66 msgid "This role is reserved and cannot be set." msgstr "" #: actions/grantrole.php:75 -#, fuzzy msgid "You cannot grant user roles on this site." -msgstr "NjemóžeÅ¡ tutomu wužiwarju powÄ›sć pósÅ‚ać." +msgstr "NjemóžeÅ¡ wužiwarske róle na tutym sydle garantować." #: actions/grantrole.php:82 -#, fuzzy msgid "User already has this role." -msgstr "Wužiwar nima profil." +msgstr "Wužiwar hižo ma tutu rólu." #: actions/groupblock.php:71 actions/groupunblock.php:71 #: actions/makeadmin.php:71 actions/subedit.php:46 @@ -1908,7 +1888,7 @@ msgstr "Nowych wužiwarjow pÅ™eprosyć" msgid "You are already subscribed to these users:" msgstr "Sy tutych wužiwarjow hižo abonowaÅ‚:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -1953,7 +1933,6 @@ msgstr "Wosobinsku powÄ›sć po dobrozdaću pÅ™eproÅ¡enju pÅ™idać." #. TRANS: Send button for inviting friends #: actions/invite.php:198 -#, fuzzy msgctxt "BUTTON" msgid "Send" msgstr "PósÅ‚ać" @@ -1999,9 +1978,8 @@ msgid "You must be logged in to join a group." msgstr "" #: actions/joingroup.php:88 actions/leavegroup.php:88 -#, fuzzy msgid "No nickname or ID." -msgstr "Žane pÅ™imjeno." +msgstr "Žane pÅ™imjeno abo žadyn ID." #: actions/joingroup.php:141 #, php-format @@ -2012,7 +1990,7 @@ msgstr "" msgid "You must be logged in to leave a group." msgstr "DyrbiÅ¡ pÅ™izjewjeny być, zo by skupinu wopušćiÅ‚." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Njejsy ÄÅ‚on teje skupiny." @@ -2090,9 +2068,8 @@ msgid "No current status" msgstr "Žadyn aktualny status" #: actions/newapplication.php:52 -#, fuzzy msgid "New Application" -msgstr "Aplikacija njeeksistuje." +msgstr "Nowa aplikacija" #: actions/newapplication.php:64 msgid "You must be logged in to register an application." @@ -2122,12 +2099,12 @@ msgstr "Wužij tutón formular, zo by nowu skupinu wutworiÅ‚." msgid "New message" msgstr "Nowa powÄ›sć" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "NjemóžeÅ¡ tutomu wužiwarju powÄ›sć pósÅ‚ać." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Žadyn wobsah!" @@ -2135,7 +2112,7 @@ msgstr "Žadyn wobsah!" msgid "No recipient specified." msgstr "Žadyn pÅ™ijimowar podaty." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2149,7 +2126,7 @@ msgstr "PowÄ›sć pósÅ‚ana" msgid "Direct message to %s sent." msgstr "Direktna powÄ›sć do %s pósÅ‚ana." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Zmylk Ajax" @@ -2260,7 +2237,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Zdźělenka nima profil" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "" @@ -2273,8 +2250,8 @@ msgstr "" msgid "Only " msgstr "Jenož " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Njeje podpÄ›rany datowy format." @@ -2405,7 +2382,7 @@ msgstr "WopaÄne stare hesÅ‚o" msgid "Error saving user; invalid." msgstr "" -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "" @@ -2614,8 +2591,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "DospoÅ‚ne mjeno" @@ -2642,9 +2619,9 @@ msgid "Bio" msgstr "Biografija" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "MÄ›stno" @@ -2658,7 +2635,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "" @@ -2882,7 +2859,7 @@ msgstr "HesÅ‚o wróćo stajić" msgid "Recover password" msgstr "" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "" @@ -2902,42 +2879,42 @@ msgstr "Wróćo stajić" msgid "Enter a nickname or email address." msgstr "Zapodaj pÅ™imjeno abo e-mejlowu adresu." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" "Wužiwar z tej e-mejlowej adresu abo tym wužiwarskim mjenom njeeksistuje." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Wužiwar nima žanu zregistrowanu e-mejlowu adresu." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "" -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." msgstr "" -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "" -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "HesÅ‚o dyrbi 6 znamjeÅ¡kow abo wjace měć." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "" -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "" -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "" @@ -3076,7 +3053,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Abonować" @@ -3112,7 +3089,7 @@ msgstr "NjemóžeÅ¡ swójsku zdźělenku wospjetować." msgid "You already repeated that notice." msgstr "Sy tutu zdźělenku hižo wospjetowaÅ‚." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Wospjetowany" @@ -3173,14 +3150,12 @@ msgid "Replies to %1$s on %2$s!" msgstr "" #: actions/revokerole.php:75 -#, fuzzy msgid "You cannot revoke user roles on this site." -msgstr "NjemóžeÅ¡ tutomu wužiwarju powÄ›sć pósÅ‚ać." +msgstr "NjemóžeÅ¡ wužiwarske róle na tutym sydle wotwoÅ‚ać." #: actions/revokerole.php:82 -#, fuzzy msgid "User doesn't have this role." -msgstr "Wužiwar bjez hodźaceho so profila." +msgstr "Wužiwar nima tutu rólu." #: actions/rsd.php:146 actions/version.php:157 msgid "StatusNet" @@ -3201,9 +3176,8 @@ msgid "Sessions" msgstr "Posedźenja" #: actions/sessionsadminpanel.php:65 -#, fuzzy msgid "Session settings for this StatusNet site." -msgstr "Designowe nastajenja za tute sydÅ‚o StatusNet." +msgstr "Nastajenja posedźenja za tute sydÅ‚o StatusNet." #: actions/sessionsadminpanel.php:175 msgid "Handle sessions" @@ -3252,7 +3226,7 @@ msgstr "Organizacija" msgid "Description" msgstr "Wopisanje" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Statistika" @@ -3301,14 +3275,13 @@ msgid "" msgstr "" #: actions/showapplication.php:309 -#, fuzzy msgid "Are you sure you want to reset your consumer key and secret?" -msgstr "ChceÅ¡ woprawdźe tutu zdźělenku wuÅ¡mórnyć?" +msgstr "ChceÅ¡ woprawdźe swój pÅ™etrjebowarski kluÄ a potajny kod wróćo stajić?" #: actions/showfavorites.php:79 -#, fuzzy, php-format +#, php-format msgid "%1$s's favorite notices, page %2$d" -msgstr "%1$s a pÅ™ećeljo, strona %2$d" +msgstr "Preferowane zdźělenki wot %1$s, strona %2$d" #: actions/showfavorites.php:132 msgid "Could not retrieve favorite notices." @@ -3360,71 +3333,71 @@ msgid "%s group" msgstr "" #: actions/showgroup.php:84 -#, fuzzy, php-format +#, php-format msgid "%1$s group, page %2$d" -msgstr "%1$s skupinskich ÄÅ‚onow, strona %2$d" +msgstr "%1$s skupina, strona %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Skupinski profil" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Aliasy" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Skupinske akcije" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Čłonojo" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Žadyn)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "WÅ¡itcy ÄÅ‚onojo" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Wutworjeny" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3434,7 +3407,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3443,7 +3416,7 @@ msgid "" "their life and interests. " msgstr "" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Administratorojo" @@ -3475,9 +3448,9 @@ msgid " tagged %s" msgstr "" #: actions/showstream.php:79 -#, fuzzy, php-format +#, php-format msgid "%1$s, page %2$d" -msgstr "%1$s a pÅ™ećeljo, strona %2$d" +msgstr "%1$s, strona %2$d" #: actions/showstream.php:122 #, php-format @@ -3553,9 +3526,8 @@ msgid "User is already silenced." msgstr "" #: actions/siteadminpanel.php:69 -#, fuzzy msgid "Basic settings for this StatusNet site" -msgstr "Designowe nastajenja za tute sydÅ‚o StatusNet." +msgstr "ZakÅ‚adne nastajenja za tute sydÅ‚o StatusNet." #: actions/siteadminpanel.php:133 msgid "Site name must have non-zero length." @@ -3623,9 +3595,8 @@ msgid "Default timezone for the site; usually UTC." msgstr "" #: actions/siteadminpanel.php:262 -#, fuzzy msgid "Default language" -msgstr "Standardna sydÅ‚owa rÄ›Ä" +msgstr "Standardna rÄ›Ä" #: actions/siteadminpanel.php:263 msgid "Site language when autodetection from browser settings is not available" @@ -3652,37 +3623,32 @@ msgid "How long users must wait (in seconds) to post the same thing again." msgstr "" #: actions/sitenoticeadminpanel.php:56 -#, fuzzy msgid "Site Notice" -msgstr "Zdźělenki" +msgstr "SydÅ‚owa zdźělenka" #: actions/sitenoticeadminpanel.php:67 -#, fuzzy msgid "Edit site-wide message" -msgstr "Nowa powÄ›sć" +msgstr "SydÅ‚odaloku powÄ›sć wobdźěłać" #: actions/sitenoticeadminpanel.php:103 -#, fuzzy msgid "Unable to save site notice." -msgstr "Wužiwar nima poslednju powÄ›sć" +msgstr "Njeje móžno, sydÅ‚owu zdźělenku skÅ‚adować." #: actions/sitenoticeadminpanel.php:113 msgid "Max length for the site-wide notice is 255 chars" msgstr "" #: actions/sitenoticeadminpanel.php:176 -#, fuzzy msgid "Site notice text" -msgstr "NjepÅ‚aćiwy wobsah zdźělenki" +msgstr "Tekst sydÅ‚oweje zdźělenki" #: actions/sitenoticeadminpanel.php:178 msgid "Site-wide notice text (255 chars max; HTML okay)" msgstr "" #: actions/sitenoticeadminpanel.php:198 -#, fuzzy msgid "Save site notice" -msgstr "SydÅ‚owe nastajenja skÅ‚adować" +msgstr "SydÅ‚owu zdźělenku skÅ‚adować" #: actions/smssettings.php:58 msgid "SMS settings" @@ -3783,9 +3749,8 @@ msgid "Snapshots" msgstr "" #: actions/snapshotadminpanel.php:65 -#, fuzzy msgid "Manage snapshot configuration" -msgstr "SMS-wobkrućenje" +msgstr "Konfiguraciju wobrazowkoweho fota zrjadować" #: actions/snapshotadminpanel.php:127 msgid "Invalid snapshot run value." @@ -3832,9 +3797,8 @@ msgid "Snapshots will be sent to this URL" msgstr "" #: actions/snapshotadminpanel.php:248 -#, fuzzy msgid "Save snapshot settings" -msgstr "SydÅ‚owe nastajenja skÅ‚adować" +msgstr "Nastajenja wobrazowkoweho fota skÅ‚adować" #: actions/subedit.php:70 msgid "You are not subscribed to that profile." @@ -3850,14 +3814,12 @@ msgid "This action only accepts POST requests." msgstr "" #: actions/subscribe.php:107 -#, fuzzy msgid "No such profile." -msgstr "Dataja njeeksistuje." +msgstr "Profil njeeksistuje." #: actions/subscribe.php:117 -#, fuzzy msgid "You cannot subscribe to an OMB 0.1 remote profile with this action." -msgstr "Njejsy tón profil abonowaÅ‚." +msgstr "NjemóžeÅ¡ zdaleny profil OMB 0.1 z tutej akciju abonować." #: actions/subscribe.php:145 msgid "Subscribed" @@ -3971,12 +3933,12 @@ msgstr "Žadyn argument ID." msgid "Tag %s" msgstr "" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Wužiwarski profil" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Foto" @@ -4039,7 +4001,6 @@ msgstr "" #. TRANS: User admin panel title #: actions/useradminpanel.php:59 -#, fuzzy msgctxt "TITLE" msgid "User" msgstr "Wužiwar" @@ -4214,9 +4175,9 @@ msgid "Enjoy your hotdog!" msgstr "" #: actions/usergroups.php:64 -#, fuzzy, php-format +#, php-format msgid "%1$s groups, page %2$d" -msgstr "%1$s skupinskich ÄÅ‚onow, strona %2$d" +msgstr "%1$s skupinow, strona %2$d" #: actions/usergroups.php:130 msgid "Search for more groups" @@ -4289,19 +4250,19 @@ msgstr "Wersija" msgid "Author(s)" msgstr "Awtorojo" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4319,9 +4280,8 @@ msgid "Group leave failed." msgstr "Wopušćenje skupiny je so njeporadźiÅ‚o." #: classes/Local_group.php:41 -#, fuzzy msgid "Could not update local group." -msgstr "Skupina njeje so daÅ‚a aktualizować." +msgstr "Lokalna skupina njeda so aktualizować." #: classes/Login_token.php:76 #, php-format @@ -4340,43 +4300,43 @@ msgstr "" msgid "Could not update message with new URI." msgstr "" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "" -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "" -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "" -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "" -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "" @@ -4402,36 +4362,33 @@ msgid "Couldn't delete self-subscription." msgstr "Sebjeabonement njeje so daÅ‚ zniÄić." #: classes/Subscription.php:190 -#, fuzzy msgid "Couldn't delete subscription OMB token." -msgstr "Abonoment njeje so daÅ‚ zniÄić." +msgstr "Znamjo OMB-abonementa njeda so zhaÅ¡eć." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Abonoment njeje so daÅ‚ zniÄić." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "" -#: classes/User_group.php:486 -#, fuzzy +#: classes/User_group.php:489 msgid "Could not set group URI." -msgstr "Skupina njeje so daÅ‚a aktualizować." +msgstr "URI skupiny njeda so nastajić." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "" -#: classes/User_group.php:521 -#, fuzzy +#: classes/User_group.php:524 msgid "Could not save local group info." -msgstr "Profil njeje so skÅ‚adować daÅ‚." +msgstr "Informacije wo lokalnej skupinje njedachu so skÅ‚adować." #: lib/accountsettingsaction.php:108 msgid "Change your profile settings" @@ -4481,24 +4438,21 @@ msgid "Personal profile and friends timeline" msgstr "" #: lib/action.php:433 -#, fuzzy msgctxt "MENU" msgid "Personal" msgstr "Wosobinski" #. TRANS: Tooltip for main menu option "Account" #: lib/action.php:435 -#, fuzzy msgctxt "TOOLTIP" msgid "Change your email, avatar, password, profile" -msgstr "Změń swoje hesÅ‚o." +msgstr "WaÅ¡u e-mejl, waÅ¡ awatar, waÅ¡e hesÅ‚o, waÅ¡ profil zmÄ›nić" #. TRANS: Tooltip for main menu option "Services" #: lib/action.php:440 -#, fuzzy msgctxt "TOOLTIP" msgid "Connect to services" -msgstr "Zwiski" +msgstr "Ze sÅ‚užbami zwjazać" #: lib/action.php:443 msgid "Connect" @@ -4506,93 +4460,78 @@ msgstr "Zwjazać" #. TRANS: Tooltip for menu option "Admin" #: lib/action.php:446 -#, fuzzy msgctxt "TOOLTIP" msgid "Change site configuration" -msgstr "SMS-wobkrućenje" +msgstr "SydÅ‚owu konfiguraciju zmÄ›nić" #: lib/action.php:449 -#, fuzzy msgctxt "MENU" msgid "Admin" msgstr "Administrator" #. TRANS: Tooltip for main menu option "Invite" #: lib/action.php:453 -#, fuzzy, php-format +#, php-format msgctxt "TOOLTIP" msgid "Invite friends and colleagues to join you on %s" -msgstr "" -"Wužij tutón formular, zo by swojich pÅ™ećelow a kolegow pÅ™eprosyÅ‚, zo bychu " -"tutu sÅ‚užbu wužiwali." +msgstr "PÅ™ećelow a kolegow pÅ™eprosyć, so tebi na %s pÅ™idružić" #: lib/action.php:456 -#, fuzzy msgctxt "MENU" msgid "Invite" msgstr "PÅ™eprosyć" #. TRANS: Tooltip for main menu option "Logout" #: lib/action.php:462 -#, fuzzy msgctxt "TOOLTIP" msgid "Logout from the site" -msgstr "Å at za sydÅ‚o." +msgstr "Ze sydÅ‚a wotzjewić" #: lib/action.php:465 -#, fuzzy msgctxt "MENU" msgid "Logout" -msgstr "Logo" +msgstr "Wotzjewić" #. TRANS: Tooltip for main menu option "Register" #: lib/action.php:470 -#, fuzzy msgctxt "TOOLTIP" msgid "Create an account" msgstr "Konto zaÅ‚ožić" #: lib/action.php:473 -#, fuzzy msgctxt "MENU" msgid "Register" msgstr "Registrować" #. TRANS: Tooltip for main menu option "Login" #: lib/action.php:476 -#, fuzzy msgctxt "TOOLTIP" msgid "Login to the site" msgstr "PÅ™i sydle pÅ™izjewić" #: lib/action.php:479 -#, fuzzy msgctxt "MENU" msgid "Login" -msgstr "PÅ™izjewić" +msgstr "PÅ™izjewjenje" #. TRANS: Tooltip for main menu option "Help" #: lib/action.php:482 -#, fuzzy msgctxt "TOOLTIP" msgid "Help me!" msgstr "Pomhaj!" #: lib/action.php:485 -#, fuzzy msgctxt "MENU" msgid "Help" msgstr "Pomoc" #. TRANS: Tooltip for main menu option "Search" #: lib/action.php:488 -#, fuzzy msgctxt "TOOLTIP" msgid "Search for people or text" msgstr "Za ludźimi abo tekstom pytać" #: lib/action.php:491 -#, fuzzy msgctxt "MENU" msgid "Search" msgstr "Pytać" @@ -4651,19 +4590,19 @@ msgstr "" msgid "StatusNet software license" msgstr "" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." "broughtby%%](%%site.broughtbyurl%%). " msgstr "" -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "" -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4671,41 +4610,41 @@ msgid "" "org/licensing/licenses/agpl-3.0.html)." msgstr "" -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "" -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "" @@ -4721,6 +4660,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -4753,7 +4696,6 @@ msgstr "" #. TRANS: Menu item for site administration #: lib/adminpanelaction.php:350 -#, fuzzy msgctxt "MENU" msgid "Site" msgstr "SydÅ‚o" @@ -4765,16 +4707,14 @@ msgstr "" #. TRANS: Menu item for site administration #: lib/adminpanelaction.php:358 -#, fuzzy msgctxt "MENU" msgid "Design" msgstr "Design" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:364 -#, fuzzy msgid "User configuration" -msgstr "SMS-wobkrućenje" +msgstr "Wužiwarska konfiguracija" #. TRANS: Menu item for site administration #: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115 @@ -4783,9 +4723,8 @@ msgstr "Wužiwar" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:372 -#, fuzzy msgid "Access configuration" -msgstr "SMS-wobkrućenje" +msgstr "PÅ™istupna konfiguracija" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:380 @@ -4794,27 +4733,24 @@ msgstr "" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:388 -#, fuzzy msgid "Sessions configuration" -msgstr "SMS-wobkrućenje" +msgstr "Konfiguracija posedźenjow" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:396 -#, fuzzy msgid "Edit site notice" -msgstr "Dwójna zdźělenka" +msgstr "SydÅ‚owu zdźělenku wobdźěłać" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:404 -#, fuzzy msgid "Snapshots configuration" -msgstr "SMS-wobkrućenje" +msgstr "Konfiguracija wobrazowkowych fotow" #: lib/apiauth.php:94 msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -4888,11 +4824,11 @@ msgstr "WotwoÅ‚ać" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Awtor" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "" @@ -4912,37 +4848,50 @@ msgstr "ZmÄ›njenje hesÅ‚a je so njeporadźiÅ‚o" msgid "Password changing is not allowed" msgstr "ZmÄ›njenje hesÅ‚a njeje dowolene" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "" +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "Zdźělenka z tym ID njeeksistuje" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "Wužiwar nima poslednju powÄ›sć" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "" -#: lib/command.php:92 +#: lib/command.php:143 +#, php-format +msgid "Could not find a local user with nickname %s" +msgstr "" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "" + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -4950,170 +4899,167 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "Zdźělenka z tym ID njeeksistuje" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "Wužiwar nima poslednju powÄ›sć" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "" -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Sy hižo ÄÅ‚on teje skupiny" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "NjebÄ› móžno wužiwarja %s skupinje %s pÅ™idać" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s je so k skupinje %s pÅ™izamknyÅ‚" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "NjebÄ› móžno wužiwarja %s do skupiny %s pÅ™esunyć" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s je skupinu %s wopušćiÅ‚" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "DospoÅ‚ne mjeno: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "MÄ›stno: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Wo: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Direktna powÄ›sć do %s pósÅ‚ana" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "" -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "NjemóžeÅ¡ swójsku powÄ›sć wospjetować" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "Tuta zdźělenka bu hižo wospjetowana" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "Zdźělenka wot %s wospjetowana" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "Zmylk pÅ™i wospjetowanju zdźělenki" -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "WotmoÅ‚wa na %s pósÅ‚ana" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "" -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "" -#: lib/command.php:554 lib/command.php:589 -#, fuzzy -msgid "No such user" -msgstr "Wužiwar njeeksistuje" +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "OMB-profile njedadźa so pÅ™ez pÅ™ikaz abonować." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "" -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "" -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "" -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "" -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 -#, fuzzy, php-format +#: lib/command.php:735 +#, php-format msgid "Unsubscribed %s" -msgstr "Wotskazany" +msgstr "%s wotskazany" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "" -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Sy tutu wosobu abonowaÅ‚:" @@ -5121,11 +5067,11 @@ msgstr[1] "Sy tutej wosobje abonowaÅ‚:" msgstr[2] "Sy tute wosoby abonowaÅ‚:" msgstr[3] "Sy tute wosoby abonowaÅ‚:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "" -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Tuta wosoba je će abonowaÅ‚a:" @@ -5133,11 +5079,11 @@ msgstr[1] "Tutej wosobje stej će abonowaÅ‚oj:" msgstr[2] "Tute wosoby su će abonowali:" msgstr[3] "Tute wosoby su će abonowali:" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "" -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Sy ÄÅ‚on tuteje skupiny:" @@ -5145,7 +5091,7 @@ msgstr[1] "Sy ÄÅ‚on tuteju skupinow:" msgstr[2] "Sy ÄÅ‚on tutych skupinow:" msgstr[3] "Sy ÄÅ‚on tutych skupinow:" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5187,19 +5133,19 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Žana konfiguraciska dataja namakana. " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "" @@ -5373,49 +5319,49 @@ msgstr "" msgid "This page is not available in a media type you accept" msgstr "" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "" + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "" -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Dźělne nahraće." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "" -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "" -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "" - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "NaÅ¡a dataja je so zhubiÅ‚a." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Njeznaty datajowy typ" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "MB" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "KB" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "Njeznate žórÅ‚o postoweho kašćika %d." @@ -5610,7 +5556,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "wot" @@ -5700,7 +5646,6 @@ msgid "Available characters" msgstr "K dispoziciji stejace znamjeÅ¡ka" #: lib/messageform.php:178 lib/noticeform.php:236 -#, fuzzy msgctxt "Send button for sending notice" msgid "Send" msgstr "PósÅ‚ać" @@ -5761,23 +5706,23 @@ msgstr "Z" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Wospjetowany wot" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Na tutu zdźělenku wotmoÅ‚wić" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "WotmoÅ‚wić" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Zdźělenka wospjetowana" @@ -5915,11 +5860,11 @@ msgid "Repeat this notice" msgstr "Tutu zdźělenku wospjetować" #: lib/revokeroleform.php:91 -#, fuzzy, php-format +#, php-format msgid "Revoke the \"%s\" role from this user" -msgstr "Tutoho wužiwarja za tutu skupinu blokować" +msgstr "Rólu \"%s\" tutoho wužiwarja wotwoÅ‚ać" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6045,91 +5990,93 @@ msgstr "Tutoho wužiwarja wotskazać" msgid "Unsubscribe" msgstr "Wotskazać" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Awatar wobdźěłać" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Wužiwarske akcije" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Profilowe nastajenja wobdźěłać" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Wobdźěłać" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Tutomu wužiwarja direktnu powÄ›sć pósÅ‚ać" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "PowÄ›sć" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 -#, fuzzy +#: lib/userprofile.php:364 msgid "User role" -msgstr "Wužiwarski profil" +msgstr "Wužiwarska róla" -#: lib/userprofile.php:354 -#, fuzzy +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" -msgstr "Administratorojo" +msgstr "Administrator" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "pÅ™ed něšto sekundami" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "pÅ™ed nÄ›hdźe jednej mjeÅ„Å¡inu" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "pÅ™ed %d mjeÅ„Å¡inami" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "pÅ™ed nÄ›hdźe jednej hodźinu" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "pÅ™ed nÄ›hdźe %d hodźinami" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "pÅ™ed nÄ›hdźe jednym dnjom" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "pÅ™ed nÄ›hdźe %d dnjemi" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "pÅ™ed nÄ›hdźe jednym mÄ›sacom" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "pÅ™ed nÄ›hdźe %d mÄ›sacami" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "pÅ™ed nÄ›hdźe jednym lÄ›tom" @@ -6145,7 +6092,7 @@ msgstr "" "%s pÅ‚aćiwa barba njeje! Wužij 3 heksadecimalne znamjeÅ¡ka abo 6 " "heksadecimalnych znamjeÅ¡kow." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/ia/LC_MESSAGES/statusnet.po b/locale/ia/LC_MESSAGES/statusnet.po index 7a96686ed2..b31fc0d2db 100644 --- a/locale/ia/LC_MESSAGES/statusnet.po +++ b/locale/ia/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:50:08+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:53+0000\n" "Language-Team: Interlingua\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: out-statusnet\n" @@ -42,7 +42,6 @@ msgstr "Prohibir al usatores anonyme (sin session aperte) de vider le sito?" #. TRANS: Checkbox label for prohibiting anonymous users from viewing site. #: actions/accessadminpanel.php:167 -#, fuzzy msgctxt "LABEL" msgid "Private" msgstr "Private" @@ -73,7 +72,6 @@ msgid "Save access settings" msgstr "Salveguardar configurationes de accesso" #: actions/accessadminpanel.php:203 -#, fuzzy msgctxt "BUTTON" msgid "Save" msgstr "Salveguardar" @@ -94,7 +92,7 @@ msgstr "Pagina non existe" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -103,10 +101,8 @@ msgstr "Pagina non existe" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Usator non existe." @@ -205,14 +201,14 @@ msgstr "Actualisationes de %1$s e su amicos in %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "Methodo API non trovate." @@ -225,8 +221,8 @@ msgstr "Methodo API non trovate." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Iste methodo require un POST." @@ -257,7 +253,7 @@ msgid "Could not save profile." msgstr "Non poteva salveguardar le profilo." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -343,7 +339,7 @@ msgstr "Nulle stato trovate con iste ID." msgid "This status is already a favorite." msgstr "Iste stato es ja favorite." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Non poteva crear le favorite." @@ -460,7 +456,7 @@ msgstr "Gruppo non trovate!" msgid "You are already a member of that group." msgstr "Tu es ja membro de iste gruppo." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "Le administrator te ha blocate de iste gruppo." @@ -510,7 +506,7 @@ msgstr "Indicio invalide." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -582,9 +578,9 @@ msgstr "Conto" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Pseudonymo" @@ -656,12 +652,12 @@ msgstr "" msgid "Unsupported format." msgstr "Formato non supportate." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Favorites de %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%1$s actualisationes favoritisate per %2$s / %2$s." @@ -671,7 +667,7 @@ msgstr "%1$s actualisationes favoritisate per %2$s / %2$s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Actualisationes que mentiona %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "" @@ -682,7 +678,7 @@ msgstr "" msgid "%s public timeline" msgstr "Chronologia public de %s" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "Actualisationes de totes in %s!" @@ -697,12 +693,12 @@ msgstr "Repetite a %s" msgid "Repeats of %s" msgstr "Repetitiones de %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Notas con etiquetta %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Actualisationes con etiquetta %1$s in %2$s!" @@ -730,7 +726,7 @@ msgstr "Nulle dimension." msgid "Invalid size." msgstr "Dimension invalide." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Avatar" @@ -763,7 +759,7 @@ msgid "Preview" msgstr "Previsualisation" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Deler" @@ -846,8 +842,8 @@ msgstr "Falleva de salveguardar le information del blocada." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Gruppo non existe." @@ -948,7 +944,7 @@ msgstr "Tu non es le proprietario de iste application." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Il habeva un problema con tu indicio de session." @@ -1009,7 +1005,7 @@ msgstr "Es tu secur de voler deler iste nota?" msgid "Do not delete this notice" msgstr "Non deler iste nota" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Deler iste nota" @@ -1262,7 +1258,7 @@ msgstr "description es troppo longe (max %d chars)." msgid "Could not update group." msgstr "Non poteva actualisar gruppo." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Non poteva crear aliases." @@ -1578,23 +1574,20 @@ msgid "Cannot read file." msgstr "Non pote leger file." #: actions/grantrole.php:62 actions/revokerole.php:62 -#, fuzzy msgid "Invalid role." -msgstr "Indicio invalide." +msgstr "Rolo invalide." #: actions/grantrole.php:66 actions/revokerole.php:66 msgid "This role is reserved and cannot be set." -msgstr "" +msgstr "Iste rolo es reservate e non pote esser apponite." #: actions/grantrole.php:75 -#, fuzzy msgid "You cannot grant user roles on this site." -msgstr "Tu non pote mitter usatores in le cassa de sablo in iste sito." +msgstr "Tu non pote conceder rolos a usatores in iste sito." #: actions/grantrole.php:82 -#, fuzzy msgid "User already has this role." -msgstr "Usator es ja silentiate." +msgstr "Le usator ha ja iste rolo." #: actions/groupblock.php:71 actions/groupunblock.php:71 #: actions/makeadmin.php:71 actions/subedit.php:46 @@ -1968,7 +1961,7 @@ msgstr "Invitar nove usatores" msgid "You are already subscribed to these users:" msgstr "Tu es a subscribite a iste usatores:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2016,7 +2009,6 @@ msgstr "Si tu vole, adde un message personal al invitation." #. TRANS: Send button for inviting friends #: actions/invite.php:198 -#, fuzzy msgctxt "BUTTON" msgid "Send" msgstr "Inviar" @@ -2088,9 +2080,8 @@ msgid "You must be logged in to join a group." msgstr "Tu debe aperir un session pro facer te membro de un gruppo." #: actions/joingroup.php:88 actions/leavegroup.php:88 -#, fuzzy msgid "No nickname or ID." -msgstr "Nulle pseudonymo." +msgstr "Nulle pseudonymo o ID." #: actions/joingroup.php:141 #, php-format @@ -2101,7 +2092,7 @@ msgstr "%1$s es ora membro del gruppo %2$s" msgid "You must be logged in to leave a group." msgstr "Tu debe aperir un session pro quitar un gruppo." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Tu non es membro de iste gruppo." @@ -2217,12 +2208,12 @@ msgstr "Usa iste formulario pro crear un nove gruppo." msgid "New message" msgstr "Nove message" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Tu non pote inviar un message a iste usator." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Nulle contento!" @@ -2230,7 +2221,7 @@ msgstr "Nulle contento!" msgid "No recipient specified." msgstr "Nulle destinatario specificate." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2246,7 +2237,7 @@ msgstr "Message inviate" msgid "Direct message to %s sent." msgstr "Message directe a %s inviate." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Error de Ajax" @@ -2368,7 +2359,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Le nota ha nulle profilo" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "Le stato de %1$s in %2$s" @@ -2381,8 +2372,8 @@ msgstr "typo de contento " msgid "Only " msgstr "Solmente " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Formato de datos non supportate." @@ -2514,7 +2505,7 @@ msgstr "Ancian contrasigno incorrecte" msgid "Error saving user; invalid." msgstr "Error de salveguardar le usator; invalide." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Non pote salveguardar le nove contrasigno." @@ -2729,8 +2720,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 minusculas o numeros, sin punctuation o spatios" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nomine complete" @@ -2757,9 +2748,9 @@ msgid "Bio" msgstr "Bio" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Loco" @@ -2773,7 +2764,7 @@ msgstr "Divulgar mi loco actual quando io publica notas" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Etiquettas" @@ -3015,7 +3006,7 @@ msgstr "Reinitialisar contrasigno" msgid "Recover password" msgstr "Recuperar contrasigno" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Recuperation de contrasigno requestate" @@ -3035,19 +3026,19 @@ msgstr "Reinitialisar" msgid "Enter a nickname or email address." msgstr "Entra un pseudonymo o adresse de e-mail." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "Nulle usator existe con iste adresse de e-mail o nomine de usator." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Nulle adresse de e-mail registrate pro iste usator." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Error al salveguardar le confirmation del adresse." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3055,23 +3046,23 @@ msgstr "" "Instructiones pro recuperar tu contrasigno ha essite inviate al adresse de e-" "mail registrate in tu conto." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Reinitialisation inexpectate del contrasigno." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Le contrasigno debe haber 6 characteres o plus." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Contrasigno e confirmation non corresponde." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Error durante le configuration del usator." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Nove contrasigno salveguardate con successo. Tu session es ora aperte." @@ -3235,7 +3226,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "URL de tu profilo in un altere servicio de microblogging compatibile" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Subscriber" @@ -3273,7 +3264,7 @@ msgstr "Tu non pote repeter tu proprie nota." msgid "You already repeated that notice." msgstr "Tu ha ja repetite iste nota." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Repetite" @@ -3340,14 +3331,12 @@ msgid "Replies to %1$s on %2$s!" msgstr "Responsas a %1$s in %2$s!" #: actions/revokerole.php:75 -#, fuzzy msgid "You cannot revoke user roles on this site." -msgstr "Tu non pote silentiar usatores in iste sito." +msgstr "Tu non pote revocar rolos de usatores in iste sito." #: actions/revokerole.php:82 -#, fuzzy msgid "User doesn't have this role." -msgstr "Usator sin profilo correspondente" +msgstr "Le usator non ha iste rolo." #: actions/rsd.php:146 actions/version.php:157 msgid "StatusNet" @@ -3418,7 +3407,7 @@ msgstr "Organisation" msgid "Description" msgstr "Description" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Statisticas" @@ -3539,67 +3528,67 @@ msgstr "Gruppo %s" msgid "%1$s group, page %2$d" msgstr "Gruppo %1$s, pagina %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Profilo del gruppo" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Nota" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Aliases" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Actiones del gruppo" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Syndication de notas pro le gruppo %s (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Syndication de notas pro le gruppo %s (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Syndication de notas pro le gruppo %s (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "Amico de un amico pro le gruppo %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Membros" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Nulle)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Tote le membros" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Create" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3614,7 +3603,7 @@ msgstr "" "lor vita e interesses. [Crea un conto](%%%%action.register%%%%) pro devenir " "parte de iste gruppo e multe alteres! ([Lege plus](%%%%doc.help%%%%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3627,7 +3616,7 @@ msgstr "" "[StatusNet](http://status.net/). Su membros condivide breve messages super " "lor vita e interesses. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Administratores" @@ -3750,9 +3739,8 @@ msgid "User is already silenced." msgstr "Usator es ja silentiate." #: actions/siteadminpanel.php:69 -#, fuzzy msgid "Basic settings for this StatusNet site" -msgstr "Configurationes de base pro iste sito de StatusNet." +msgstr "Configurationes de base pro iste sito de StatusNet" #: actions/siteadminpanel.php:133 msgid "Site name must have non-zero length." @@ -3820,13 +3808,14 @@ msgid "Default timezone for the site; usually UTC." msgstr "Fuso horari predefinite pro le sito; normalmente UTC." #: actions/siteadminpanel.php:262 -#, fuzzy msgid "Default language" -msgstr "Lingua predefinite del sito" +msgstr "Lingua predefinite" #: actions/siteadminpanel.php:263 msgid "Site language when autodetection from browser settings is not available" msgstr "" +"Le lingua del sito quando le detection automatic ex le configuration del " +"navigator non es disponibile" #: actions/siteadminpanel.php:271 msgid "Limits" @@ -3851,37 +3840,33 @@ msgstr "" "publicar le mesme cosa de novo." #: actions/sitenoticeadminpanel.php:56 -#, fuzzy msgid "Site Notice" msgstr "Aviso del sito" #: actions/sitenoticeadminpanel.php:67 -#, fuzzy msgid "Edit site-wide message" -msgstr "Nove message" +msgstr "Modificar message a tote le sito" #: actions/sitenoticeadminpanel.php:103 -#, fuzzy msgid "Unable to save site notice." -msgstr "Impossibile salveguardar le configurationes del apparentia." +msgstr "Impossibile salveguardar le aviso del sito." #: actions/sitenoticeadminpanel.php:113 msgid "Max length for the site-wide notice is 255 chars" -msgstr "" +msgstr "Le longitude maxime del aviso a tote le sito es 255 characteres" #: actions/sitenoticeadminpanel.php:176 -#, fuzzy msgid "Site notice text" -msgstr "Aviso del sito" +msgstr "Texto del aviso del sito" #: actions/sitenoticeadminpanel.php:178 msgid "Site-wide notice text (255 chars max; HTML okay)" msgstr "" +"Le texto del aviso a tote le sito (max. 255 characteres; HTML permittite)" #: actions/sitenoticeadminpanel.php:198 -#, fuzzy msgid "Save site notice" -msgstr "Aviso del sito" +msgstr "Salveguardar aviso del sito" #: actions/smssettings.php:58 msgid "SMS settings" @@ -3989,9 +3974,8 @@ msgid "Snapshots" msgstr "Instantaneos" #: actions/snapshotadminpanel.php:65 -#, fuzzy msgid "Manage snapshot configuration" -msgstr "Modificar le configuration del sito" +msgstr "Gerer configuration de instantaneos" #: actions/snapshotadminpanel.php:127 msgid "Invalid snapshot run value." @@ -4038,9 +4022,8 @@ msgid "Snapshots will be sent to this URL" msgstr "Le instantaneos essera inviate a iste URL" #: actions/snapshotadminpanel.php:248 -#, fuzzy msgid "Save snapshot settings" -msgstr "Salveguardar configurationes del sito" +msgstr "Salveguardar configuration de instantaneos" #: actions/subedit.php:70 msgid "You are not subscribed to that profile." @@ -4053,17 +4036,15 @@ msgstr "Non poteva salveguardar le subscription." #: actions/subscribe.php:77 msgid "This action only accepts POST requests." -msgstr "" +msgstr "Iste action accepta solmente le requestas de typo POST." #: actions/subscribe.php:107 -#, fuzzy msgid "No such profile." -msgstr "File non existe." +msgstr "Profilo non existe." #: actions/subscribe.php:117 -#, fuzzy msgid "You cannot subscribe to an OMB 0.1 remote profile with this action." -msgstr "Tu non es subscribite a iste profilo." +msgstr "Tu non pote subscriber te a un profilo remote OMB 0.1 con iste action." #: actions/subscribe.php:145 msgid "Subscribed" @@ -4187,12 +4168,12 @@ msgstr "Nulle parametro de ID." msgid "Tag %s" msgstr "Etiquetta %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Profilo del usator" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Photo" @@ -4262,7 +4243,6 @@ msgstr "" #. TRANS: User admin panel title #: actions/useradminpanel.php:59 -#, fuzzy msgctxt "TITLE" msgid "User" msgstr "Usator" @@ -4535,7 +4515,7 @@ msgstr "Version" msgid "Author(s)" msgstr "Autor(es)" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " @@ -4544,12 +4524,12 @@ msgstr "" "Nulle file pote esser plus grande que %d bytes e le file que tu inviava ha %" "d bytes. Tenta incargar un version minus grande." -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "Un file de iste dimension excederea tu quota de usator de %d bytes." -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "Un file de iste dimension excederea tu quota mensual de %d bytes." @@ -4567,9 +4547,8 @@ msgid "Group leave failed." msgstr "Le cancellation del membrato del gruppo ha fallite." #: classes/Local_group.php:41 -#, fuzzy msgid "Could not update local group." -msgstr "Non poteva actualisar gruppo." +msgstr "Non poteva actualisar gruppo local." #: classes/Login_token.php:76 #, php-format @@ -4588,27 +4567,27 @@ msgstr "Non poteva inserer message." msgid "Could not update message with new URI." msgstr "Non poteva actualisar message con nove URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Error in base de datos durante insertion del marca (hashtag): %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "Problema salveguardar nota. Troppo longe." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Problema salveguardar nota. Usator incognite." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Troppo de notas troppo rapidemente; face un pausa e publica de novo post " "alcun minutas." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4616,19 +4595,19 @@ msgstr "" "Troppo de messages duplicate troppo rapidemente; face un pausa e publica de " "novo post alcun minutas." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Il te es prohibite publicar notas in iste sito." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Problema salveguardar nota." -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "Problema salveguardar le cassa de entrata del gruppo." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4654,36 +4633,33 @@ msgid "Couldn't delete self-subscription." msgstr "Non poteva deler auto-subscription." #: classes/Subscription.php:190 -#, fuzzy msgid "Couldn't delete subscription OMB token." -msgstr "Non poteva deler subscription." +msgstr "Non poteva deler le indicio OMB del subscription." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Non poteva deler subscription." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Benvenite a %1$s, @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Non poteva crear gruppo." -#: classes/User_group.php:486 -#, fuzzy +#: classes/User_group.php:489 msgid "Could not set group URI." -msgstr "Non poteva configurar le membrato del gruppo." +msgstr "Non poteva definir le URL del gruppo." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Non poteva configurar le membrato del gruppo." -#: classes/User_group.php:521 -#, fuzzy +#: classes/User_group.php:524 msgid "Could not save local group info." -msgstr "Non poteva salveguardar le subscription." +msgstr "Non poteva salveguardar le informationes del gruppo local." #: lib/accountsettingsaction.php:108 msgid "Change your profile settings" @@ -4728,30 +4704,26 @@ msgstr "Navigation primari del sito" #. TRANS: Tooltip for main menu option "Personal" #: lib/action.php:430 -#, fuzzy msgctxt "TOOLTIP" msgid "Personal profile and friends timeline" msgstr "Profilo personal e chronologia de amicos" #: lib/action.php:433 -#, fuzzy msgctxt "MENU" msgid "Personal" msgstr "Personal" #. TRANS: Tooltip for main menu option "Account" #: lib/action.php:435 -#, fuzzy msgctxt "TOOLTIP" msgid "Change your email, avatar, password, profile" msgstr "Cambiar tu e-mail, avatar, contrasigno, profilo" #. TRANS: Tooltip for main menu option "Services" #: lib/action.php:440 -#, fuzzy msgctxt "TOOLTIP" msgid "Connect to services" -msgstr "Connecter con servicios" +msgstr "Connecter a servicios" #: lib/action.php:443 msgid "Connect" @@ -4759,91 +4731,78 @@ msgstr "Connecter" #. TRANS: Tooltip for menu option "Admin" #: lib/action.php:446 -#, fuzzy msgctxt "TOOLTIP" msgid "Change site configuration" msgstr "Modificar le configuration del sito" #: lib/action.php:449 -#, fuzzy msgctxt "MENU" msgid "Admin" -msgstr "Administrator" +msgstr "Admin" #. TRANS: Tooltip for main menu option "Invite" #: lib/action.php:453 -#, fuzzy, php-format +#, php-format msgctxt "TOOLTIP" msgid "Invite friends and colleagues to join you on %s" msgstr "Invitar amicos e collegas a accompaniar te in %s" #: lib/action.php:456 -#, fuzzy msgctxt "MENU" msgid "Invite" msgstr "Invitar" #. TRANS: Tooltip for main menu option "Logout" #: lib/action.php:462 -#, fuzzy msgctxt "TOOLTIP" msgid "Logout from the site" msgstr "Terminar le session del sito" #: lib/action.php:465 -#, fuzzy msgctxt "MENU" msgid "Logout" msgstr "Clauder session" #. TRANS: Tooltip for main menu option "Register" #: lib/action.php:470 -#, fuzzy msgctxt "TOOLTIP" msgid "Create an account" msgstr "Crear un conto" #: lib/action.php:473 -#, fuzzy msgctxt "MENU" msgid "Register" msgstr "Crear conto" #. TRANS: Tooltip for main menu option "Login" #: lib/action.php:476 -#, fuzzy msgctxt "TOOLTIP" msgid "Login to the site" msgstr "Identificar te a iste sito" #: lib/action.php:479 -#, fuzzy msgctxt "MENU" msgid "Login" msgstr "Aperir session" #. TRANS: Tooltip for main menu option "Help" #: lib/action.php:482 -#, fuzzy msgctxt "TOOLTIP" msgid "Help me!" msgstr "Adjuta me!" #: lib/action.php:485 -#, fuzzy msgctxt "MENU" msgid "Help" msgstr "Adjuta" #. TRANS: Tooltip for main menu option "Search" #: lib/action.php:488 -#, fuzzy msgctxt "TOOLTIP" msgid "Search for people or text" msgstr "Cercar personas o texto" #: lib/action.php:491 -#, fuzzy msgctxt "MENU" msgid "Search" msgstr "Cercar" @@ -4902,7 +4861,7 @@ msgstr "Insignia" msgid "StatusNet software license" msgstr "Licentia del software StatusNet" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4911,12 +4870,12 @@ msgstr "" "**%%site.name%%** es un servicio de microblog offerite per [%%site.broughtby%" "%](%%site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** es un servicio de microblog. " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4927,55 +4886,59 @@ msgstr "" "net/), version %s, disponibile sub le [GNU Affero General Public License]" "(http://www.fsf.org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Licentia del contento del sito" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "Le contento e datos de %1$s es private e confidential." -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "Contento e datos sub copyright de %1$s. Tote le derectos reservate." -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" "Contento e datos sub copyright del contributores. Tote le derectos reservate." -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Totes " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "licentia." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Pagination" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Post" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Ante" #: lib/activity.php:453 msgid "Can't handle remote content yet." -msgstr "" +msgstr "Non pote ancora tractar contento remote." #: lib/activity.php:481 msgid "Can't handle embedded XML content yet." -msgstr "" +msgstr "Non pote ancora tractar contento XML incastrate." #: lib/activity.php:485 msgid "Can't handle embedded Base64 content yet." +msgstr "Non pote ancora tractar contento Base64 incastrate." + +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." msgstr "" #. TRANS: Client error message @@ -5010,7 +4973,6 @@ msgstr "Configuration basic del sito" #. TRANS: Menu item for site administration #: lib/adminpanelaction.php:350 -#, fuzzy msgctxt "MENU" msgid "Site" msgstr "Sito" @@ -5022,7 +4984,6 @@ msgstr "Configuration del apparentia" #. TRANS: Menu item for site administration #: lib/adminpanelaction.php:358 -#, fuzzy msgctxt "MENU" msgid "Design" msgstr "Apparentia" @@ -5054,15 +5015,13 @@ msgstr "Configuration del sessiones" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:396 -#, fuzzy msgid "Edit site notice" -msgstr "Aviso del sito" +msgstr "Modificar aviso del sito" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:404 -#, fuzzy msgid "Snapshots configuration" -msgstr "Configuration del camminos" +msgstr "Configuration del instantaneos" #: lib/apiauth.php:94 msgid "API resource requires read-write access, but you only have read access." @@ -5070,7 +5029,7 @@ msgstr "" "Le ressource de API require accesso pro lectura e scriptura, ma tu ha " "solmente accesso pro lectura." -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5148,11 +5107,11 @@ msgstr "Revocar" msgid "Attachments" msgstr "Annexos" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Autor" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Providitor" @@ -5172,37 +5131,50 @@ msgstr "Cambio del contrasigno fallite" msgid "Password changing is not allowed" msgstr "Cambio del contrasigno non permittite" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Resultatos del commando" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Commando complete" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Commando fallite" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Pardono, iste commando non es ancora implementate." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "Non existe un nota con iste ID" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "Usator non ha ultime nota" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "Non poteva trovar un usator con pseudonymo %s" -#: lib/command.php:92 +#: lib/command.php:143 +#, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Non poteva trovar un usator local con pseudonymo %s" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Pardono, iste commando non es ancora implementate." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "Non ha multe senso pulsar te mesme!" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "Pulsata inviate a %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5213,198 +5185,197 @@ msgstr "" "Subscriptores: %2$s\n" "Notas: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "Non existe un nota con iste ID" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "Usator non ha ultime nota" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Nota marcate como favorite." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Tu es ja membro de iste gruppo" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Non poteva facer le usator %s membro del gruppo %s" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s se faceva membro del gruppo %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Non poteva remover le usator %s del gruppo %s" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s quitava le gruppo %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Nomine complete: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Loco: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Pagina personal: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "A proposito: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" +"%s es un profilo remote; tu pote solmente inviar messages directe a usatores " +"super le mesme servitor." + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "Message troppo longe - maximo es %d characteres, tu inviava %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Message directe a %s inviate" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Error durante le invio del message directe." -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "Non pote repeter tu proprie nota" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "Iste nota ha ja essite repetite" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "Nota de %s repetite" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "Error durante le repetition del nota." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Nota troppo longe - maximo es %d characteres, tu inviava %d" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "Responsa a %s inviate" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "Errur durante le salveguarda del nota." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Specifica le nomine del usator al qual subscriber te" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "Usator non existe" +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "Impossibile subscriber se a profilos OMB per medio de un commando." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Subscribite a %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Specifica le nomine del usator al qual cancellar le subscription" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Subscription a %s cancellate" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Commando non ancora implementate." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Notification disactivate." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Non pote disactivar notification." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Notification activate." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Non pote activar notification." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "Le commando de apertura de session es disactivate" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" "Iste ligamine pote esser usate solmente un vice, e es valide durante " "solmente 2 minutas: %s" -#: lib/command.php:692 -#, fuzzy, php-format +#: lib/command.php:735 +#, php-format msgid "Unsubscribed %s" -msgstr "Subscription a %s cancellate" +msgstr "Subscription de %s cancellate" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "Tu non es subscribite a alcuno." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Tu es subscribite a iste persona:" msgstr[1] "Tu es subscribite a iste personas:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "Necuno es subscribite a te." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Iste persona es subscribite a te:" msgstr[1] "Iste personas es subscribite a te:" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "Tu non es membro de alcun gruppo." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Tu es membro de iste gruppo:" msgstr[1] "Tu es membro de iste gruppos:" -#: lib/command.php:769 -#, fuzzy +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5454,9 +5425,10 @@ msgstr "" "subscriptions - listar le personas que tu seque\n" "subscribers - listar le personas qui te seque\n" "leave - cancellar subscription al usator\n" -"d - diriger message al usator\n" -"get - obtener ultime nota del usator\n" +"d - diriger un message al usator\n" +"get - obtener le ultime nota del usator\n" "whois - obtener info de profilo del usator\n" +"lose - fortiar le usator de cessar de sequer te\n" "fav - adder ultime nota del usator como favorite\n" "fav # - adder nota con le ID date como favorite\n" "repeat # - repeter le nota con le ID date\n" @@ -5483,19 +5455,19 @@ msgstr "" "tracks - non ancora implementate.\n" "tracking - non ancora implementate.\n" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Nulle file de configuration trovate. " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "Io cercava files de configuration in le sequente locos: " -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "Considera executar le installator pro reparar isto." -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "Ir al installator." @@ -5597,7 +5569,7 @@ msgstr "Ir" #: lib/grantroleform.php:91 #, php-format msgid "Grant this user the \"%s\" role" -msgstr "" +msgstr "Conceder le rolo \"%s\" a iste usator" #: lib/groupeditform.php:163 msgid "URL of the homepage or blog of the group or topic" @@ -5673,49 +5645,49 @@ msgstr "Etiquettas in le notas del gruppo %s" msgid "This page is not available in a media type you accept" msgstr "Iste pagina non es disponibile in un formato que tu accepta" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Formato de file de imagine non supportate." + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Iste file es troppo grande. Le dimension maximal es %s." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Incargamento partial." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Error de systema durante le incargamento del file." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Le file non es un imagine o es defectuose." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Formato de file de imagine non supportate." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "File perdite." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Typo de file incognite" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "MB" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "KB" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "Fonte de cassa de entrata \"%s\" incognite" @@ -5996,7 +5968,7 @@ msgstr "" "altere usatores in conversation. Altere personas pote inviar te messages que " "solmente tu pote leger." -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "de" @@ -6090,7 +6062,6 @@ msgid "Available characters" msgstr "Characteres disponibile" #: lib/messageform.php:178 lib/noticeform.php:236 -#, fuzzy msgctxt "Send button for sending notice" msgid "Send" msgstr "Inviar" @@ -6153,23 +6124,23 @@ msgstr "W" msgid "at" msgstr "a" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "in contexto" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Repetite per" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Responder a iste nota" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Responder" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Nota repetite" @@ -6307,11 +6278,11 @@ msgid "Repeat this notice" msgstr "Repeter iste nota" #: lib/revokeroleform.php:91 -#, fuzzy, php-format +#, php-format msgid "Revoke the \"%s\" role from this user" -msgstr "Blocar iste usator de iste gruppo" +msgstr "Revocar le rolo \"%s\" de iste usator" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "Nulle signule usator definite pro le modo de singule usator." @@ -6437,92 +6408,93 @@ msgstr "Cancellar subscription a iste usator" msgid "Unsubscribe" msgstr "Cancellar subscription" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Modificar avatar" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Actiones de usator" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Modificar configuration de profilo" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Modificar" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Inviar un message directe a iste usator" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Message" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Moderar" -#: lib/userprofile.php:352 -#, fuzzy +#: lib/userprofile.php:364 msgid "User role" -msgstr "Profilo del usator" +msgstr "Rolo de usator" -#: lib/userprofile.php:354 -#, fuzzy +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" -msgstr "Administratores" +msgstr "Administrator" -#: lib/userprofile.php:355 -#, fuzzy +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" -msgstr "Moderar" +msgstr "Moderator" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "alcun secundas retro" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "circa un minuta retro" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "circa %d minutas retro" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "circa un hora retro" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "circa %d horas retro" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "circa un die retro" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "circa %d dies retro" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "circa un mense retro" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "circa %d menses retro" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "circa un anno retro" @@ -6536,7 +6508,7 @@ msgstr "%s non es un color valide!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s non es un color valide! Usa 3 o 6 characteres hexadecimal." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "Message troppo longe - maximo es %1$d characteres, tu inviava %2$d." diff --git a/locale/is/LC_MESSAGES/statusnet.po b/locale/is/LC_MESSAGES/statusnet.po index 3c8f33565d..595431e9a9 100644 --- a/locale/is/LC_MESSAGES/statusnet.po +++ b/locale/is/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:50:12+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:56+0000\n" "Language-Team: Icelandic\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: is\n" "X-Message-Group: out-statusnet\n" @@ -102,7 +102,7 @@ msgstr "Ekkert þannig merki." #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -111,10 +111,8 @@ msgstr "Ekkert þannig merki." #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Enginn svoleiðis notandi." @@ -205,14 +203,14 @@ msgstr "Færslur frá %1$s og vinum á %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "Aðferð í forritsskilum fannst ekki!" @@ -226,8 +224,8 @@ msgstr "Aðferð í forritsskilum fannst ekki!" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Þessi aðferð krefst POST." @@ -258,7 +256,7 @@ msgid "Could not save profile." msgstr "Gat ekki vistað persónulega síðu." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -345,7 +343,7 @@ msgstr "Engin staða fundin með þessu kenni." msgid "This status is already a favorite." msgstr "Þetta babl er nú þegar í uppáhaldi!" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Gat ekki búið til uppáhald." @@ -468,7 +466,7 @@ msgstr "Aðferð í forritsskilum fannst ekki!" msgid "You are already a member of that group." msgstr "Þú ert nú þegar meðlimur í þessum hópi" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -520,7 +518,7 @@ msgstr "Ótæk stærð." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -587,9 +585,9 @@ msgstr "Aðgangur" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Stuttnefni" @@ -662,12 +660,12 @@ msgstr "" msgid "Unsupported format." msgstr "Skráarsnið myndar ekki stutt." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, fuzzy, php-format msgid "%1$s / Favorites from %2$s" msgstr "%s / Uppáhaldsbabl frá %s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%s færslur gerðar að uppáhaldsbabli af %s / %s." @@ -677,7 +675,7 @@ msgstr "%s færslur gerðar að uppáhaldsbabli af %s / %s." msgid "%1$s / Updates mentioning %2$s" msgstr "" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s færslur sem svara færslum frá %2$s / %3$s." @@ -687,7 +685,7 @@ msgstr "%1$s færslur sem svara færslum frá %2$s / %3$s." msgid "%s public timeline" msgstr "Almenningsrás %s" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s færslur frá öllum!" @@ -702,12 +700,12 @@ msgstr "Svör við %s" msgid "Repeats of %s" msgstr "Svör við %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Babl merkt með %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "" @@ -735,7 +733,7 @@ msgstr "Engin stærð." msgid "Invalid size." msgstr "Ótæk stærð." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Mynd" @@ -767,7 +765,7 @@ msgid "Preview" msgstr "Forsýn" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Eyða" @@ -850,8 +848,8 @@ msgstr "Mistókst að vista upplýsingar um notendalokun" #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Enginn þannig hópur." @@ -958,7 +956,7 @@ msgstr "Þú ert ekki meðlimur í þessum hópi." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Það komu upp vandamál varðandi setutókann þinn." @@ -1017,7 +1015,7 @@ msgstr "Ertu viss um að þú viljir eyða þessu babli?" msgid "Do not delete this notice" msgstr "" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Eyða þessu babli" @@ -1288,7 +1286,7 @@ msgstr "Lýsing er of löng (í mesta lagi 140 tákn)." msgid "Could not update group." msgstr "Gat ekki uppfært hóp." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "" @@ -1986,7 +1984,7 @@ msgstr "Bjóða nýjum notendum að vera með" msgid "You are already subscribed to these users:" msgstr "Þú ert nú þegar í áskrift að þessum notendum:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2119,7 +2117,7 @@ msgstr "%s bætti sér í hópinn %s" msgid "You must be logged in to leave a group." msgstr "Þú verður aða hafa skráð þig inn til að ganga úr hóp." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Þú ert ekki meðlimur í þessum hópi." @@ -2240,12 +2238,12 @@ msgstr "Notaðu þetta eyðublað til að búa til nýjan hóp." msgid "New message" msgstr "Ný skilaboð" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Þú getur ekki sent þessum notanda skilaboð." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Ekkert innihald!" @@ -2253,7 +2251,7 @@ msgstr "Ekkert innihald!" msgid "No recipient specified." msgstr "Enginn móttökuaðili tilgreindur." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2269,7 +2267,7 @@ msgstr "" msgid "Direct message to %s sent." msgstr "Bein skilaboð send til %s" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Ajax villa" @@ -2387,7 +2385,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Babl hefur enga persónulega síðu" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "Staða %1$s á %2$s" @@ -2400,8 +2398,8 @@ msgstr "" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Enginn stuðningur við gagnasnið." @@ -2540,7 +2538,7 @@ msgstr "Rangt eldra lykilorð" msgid "Error saving user; invalid." msgstr "Villa kom upp í vistun notanda: ótækt." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Get ekki vistað nýja lykilorðið." @@ -2764,8 +2762,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 lágstafir eða tölustafir, engin greinarmerki eða bil" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Fullt nafn" @@ -2795,9 +2793,9 @@ msgid "Bio" msgstr "Lýsing" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Staðsetning" @@ -2811,7 +2809,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Merki" @@ -3042,7 +3040,7 @@ msgstr "Endurstilla lykilorð" msgid "Recover password" msgstr "Endurheimta lykilorð" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Beiðni um að endurheimta lykilorð hefur verið send inn" @@ -3062,19 +3060,19 @@ msgstr "Endurstilla" msgid "Enter a nickname or email address." msgstr "Sláðu inn stuttnefni eða tölvupóstfang." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "Enginn notandi með þetta tölvupóstfang eða notendanafn" -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Ekkert tölvupóstfang á skrá fyrir þennan notanda." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Villa kom upp í vistun netfangsstaðfestingar." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3082,23 +3080,23 @@ msgstr "" "Leiðbeiningar um það hvernig þú getur endurheimt lykilorðið þitt hafa verið " "sendar á tölvupóstfangið sem er tengt notendaaðganginum þínum." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Bjóst ekki við endurstillingu lykilorðs." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Lykilorð verður að vera 6 tákn eða fleiri." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Lykilorð og staðfesting passa ekki saman." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Villa kom upp í stillingu notanda." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Tókst að vista nýtt lykilorð. Þú ert núna innskráð(ur)" @@ -3259,7 +3257,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "Veffang persónulegrar síðu á samvirkandi örbloggsþjónustu" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Gerast áskrifandi" @@ -3304,7 +3302,7 @@ msgstr "Þú getur ekki nýskráð þig nema þú samþykkir leyfið." msgid "You already repeated that notice." msgstr "Þú hefur nú þegar lokað á þennan notanda." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 #, fuzzy msgid "Repeated" msgstr "à sviðsljósinu" @@ -3451,7 +3449,7 @@ msgstr "Uppröðun" msgid "Description" msgstr "Lýsing" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Tölfræði" @@ -3563,67 +3561,67 @@ msgstr "%s hópurinn" msgid "%1$s group, page %2$d" msgstr "Hópmeðlimir %s, síða %d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Hópssíðan" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "Vefslóð" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Athugasemd" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Hópsaðgerðir" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, fuzzy, php-format msgid "FOAF for %s group" msgstr "%s hópurinn" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Meðlimir" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Ekkert)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Allir meðlimir" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3633,7 +3631,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3642,7 +3640,7 @@ msgid "" "their life and interests. " msgstr "" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "" @@ -4184,12 +4182,12 @@ msgstr "Ekkert einkenni gefið upp." msgid "Tag %s" msgstr "Merki %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Persónuleg síða notanda" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Ljósmynd" @@ -4530,19 +4528,19 @@ msgstr "Persónulegt" msgid "Author(s)" msgstr "" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4585,46 +4583,46 @@ msgstr "Gat ekki skeytt skilaboðum inn í." msgid "Could not update message with new URI." msgstr "Gat ekki uppfært skilaboð með nýju veffangi." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Gagnagrunnsvilla við innsetningu myllumerkis: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "" -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Gat ekki vistað babl. Óþekktur notandi." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Of mikið babl í einu; slakaðu aðeins á og haltu svo áfram eftir nokkrar " "mínútur." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Það hefur verið lagt bann við babli frá þér á þessari síðu." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Vandamál komu upp við að vista babl." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "Vandamál komu upp við að vista babl." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%1$s (%2$s)" @@ -4657,29 +4655,29 @@ msgstr "Gat ekki eytt áskrift." msgid "Couldn't delete subscription OMB token." msgstr "Gat ekki eytt áskrift." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Gat ekki eytt áskrift." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Gat ekki búið til hóp." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "Gat ekki skráð hópmeðlimi." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Gat ekki skráð hópmeðlimi." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "Gat ekki vistað áskrift." @@ -4903,7 +4901,7 @@ msgstr "" msgid "StatusNet software license" msgstr "Hugbúnaðarleyfi StatusNet" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4912,12 +4910,12 @@ msgstr "" "**%%site.name%%** er örbloggsþjónusta í boði [%%site.broughtby%%](%%site." "broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** er örbloggsþjónusta." -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4928,42 +4926,42 @@ msgstr "" "sem er gefinn út undir [GNU Affero almenningsleyfinu](http://www.fsf.org/" "licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 #, fuzzy msgid "Site content license" msgstr "Hugbúnaðarleyfi StatusNet" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Allt " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "leyfi." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Uppröðun" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Eftir" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Ãður" @@ -4979,6 +4977,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 #, fuzzy @@ -5079,7 +5081,7 @@ msgstr "SMS staðfesting" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5158,11 +5160,11 @@ msgstr "Fjarlægja" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "" @@ -5184,37 +5186,51 @@ msgstr "Lykilorðabreyting" msgid "Password changing is not allowed" msgstr "Lykilorðabreyting" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Niðurstöður skipunar" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Fullkláruð skipun" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Misheppnuð skipun" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Fyrirgefðu en þessi skipun hefur ekki enn verið útbúin." +#: lib/command.php:83 lib/command.php:105 +#, fuzzy +msgid "Notice with that id does not exist" +msgstr "Enginn persónuleg síða með þessu einkenni." -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "Notandi hefur ekkert nýtt babl" + +#: lib/command.php:125 #, fuzzy, php-format msgid "Could not find a user with nickname %s" msgstr "Gat ekki uppfært notanda með staðfestu tölvupóstfangi." -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Gat ekki uppfært notanda með staðfestu tölvupóstfangi." + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Fyrirgefðu en þessi skipun hefur ekki enn verið útbúin." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, fuzzy, php-format msgid "Nudge sent to %s" msgstr "Ãtt við notanda" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5222,203 +5238,201 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -#, fuzzy -msgid "Notice with that id does not exist" -msgstr "Enginn persónuleg síða með þessu einkenni." - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "Notandi hefur ekkert nýtt babl" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Babl gert að uppáhaldi." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Þú ert nú þegar meðlimur í þessum hópi" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Gat ekki bætt notandanum %s í hópinn %s" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s bætti sér í hópinn %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Gat ekki fjarlægt notandann %s úr hópnum %s" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s gekk úr hópnum %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Fullt nafn: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Staðsetning: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Heimasíða: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Um: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, fuzzy, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "Skilaboð eru of löng - 140 tákn eru í mesta lagi leyfð en þú sendir %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Bein skilaboð send til %s" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Villa kom upp við að senda bein skilaboð" -#: lib/command.php:413 +#: lib/command.php:490 #, fuzzy msgid "Cannot repeat your own notice" msgstr "Get ekki kveikt á tilkynningum." -#: lib/command.php:418 +#: lib/command.php:495 #, fuzzy msgid "Already repeated that notice" msgstr "Eyða þessu babli" -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "Babl sent inn" -#: lib/command.php:428 +#: lib/command.php:505 #, fuzzy msgid "Error repeating notice." msgstr "Vandamál komu upp við að vista babl." -#: lib/command.php:482 +#: lib/command.php:536 #, fuzzy, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Skilaboð eru of löng - 140 tákn eru í mesta lagi leyfð en þú sendir %d" -#: lib/command.php:491 +#: lib/command.php:545 #, fuzzy, php-format msgid "Reply to %s sent" msgstr "Svara þessu babli" -#: lib/command.php:493 +#: lib/command.php:547 #, fuzzy msgid "Error saving notice." msgstr "Vandamál komu upp við að vista babl." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Tilgreindu nafn notandans sem þú vilt gerast áskrifandi að" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "Enginn svoleiðis notandi." +#: lib/command.php:602 +#, fuzzy +msgid "Can't subscribe to OMB profiles by command." +msgstr "Þú ert ekki áskrifandi." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Nú ert þú áskrifandi að %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Tilgreindu nafn notandans sem þú vilt hætta sem áskrifandi að" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Nú ert þú ekki lengur áskrifandi að %s" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Skipun hefur ekki verið fullbúin" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Tilkynningar af." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Get ekki slökkt á tilkynningum." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Tilkynningar á." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Get ekki kveikt á tilkynningum." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "Nú ert þú ekki lengur áskrifandi að %s" -#: lib/command.php:709 +#: lib/command.php:752 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Þú ert ekki áskrifandi." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Þú ert nú þegar í áskrift að þessum notendum:" msgstr[1] "Þú ert nú þegar í áskrift að þessum notendum:" -#: lib/command.php:731 +#: lib/command.php:774 #, fuzzy msgid "No one is subscribed to you." msgstr "Gat ekki leyft öðrum að gerast áskrifandi að þér." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Gat ekki leyft öðrum að gerast áskrifandi að þér." msgstr[1] "Gat ekki leyft öðrum að gerast áskrifandi að þér." -#: lib/command.php:753 +#: lib/command.php:796 #, fuzzy msgid "You are not a member of any groups." msgstr "Þú ert ekki meðlimur í þessum hópi." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Þú ert ekki meðlimur í þessum hópi." msgstr[1] "Þú ert ekki meðlimur í þessum hópi." -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5460,20 +5474,20 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 #, fuzzy msgid "No configuration file found. " msgstr "Enginn staðfestingarlykill." -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 #, fuzzy msgid "Go to the installer." msgstr "Skrá þig inn á síðuna" @@ -5653,49 +5667,49 @@ msgid "This page is not available in a media type you accept" msgstr "" "Þessi síða er ekki aðgengileg í margmiðlunargerðinni sem þú tekur á móti" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Skráarsnið myndar ekki stutt." + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Þetta er of langt. Hámarkslengd babls er 140 tákn." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Upphal að hluta til." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Kerfisvilla kom upp við upphal skráar." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Annaðhvort ekki mynd eða þá að skráin er gölluð." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Skráarsnið myndar ekki stutt." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Týndum skránni okkar" -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Óþekkt skráargerð" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5900,7 +5914,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 #, fuzzy msgid "from" msgstr "frá" @@ -6056,24 +6070,24 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 #, fuzzy msgid "Repeated by" msgstr "à sviðsljósinu" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Svara þessu babli" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Svara" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "Babl sent inn" @@ -6221,7 +6235,7 @@ msgstr "Svara þessu babli" msgid "Revoke the \"%s\" role from this user" msgstr "" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6353,90 +6367,94 @@ msgstr "Hætta sem áskrifandi að þessum notanda" msgid "Unsubscribe" msgstr "Fara úr áskrift" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Notandaaðgerðir" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Senda bein skilaboð til þessa notanda" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Skilaboð" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "Persónuleg síða notanda" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "fyrir nokkrum sekúndum" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "fyrir um einni mínútu síðan" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "fyrir um %d mínútum síðan" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "fyrir um einum klukkutíma síðan" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "fyrir um %d klukkutímum síðan" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "fyrir um einum degi síðan" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "fyrir um %d dögum síðan" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "fyrir um einum mánuði síðan" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "fyrir um %d mánuðum síðan" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "fyrir um einu ári síðan" @@ -6450,7 +6468,7 @@ msgstr "" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, fuzzy, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "Skilaboð eru of löng - 140 tákn eru í mesta lagi leyfð en þú sendir %d" diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po index 1bd3f26adb..d4d6fc3ef2 100644 --- a/locale/it/LC_MESSAGES/statusnet.po +++ b/locale/it/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:50:15+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:40:59+0000\n" "Language-Team: Italian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: it\n" "X-Message-Group: out-statusnet\n" @@ -95,7 +95,7 @@ msgstr "Pagina inesistente." #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -104,10 +104,8 @@ msgstr "Pagina inesistente." #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Utente inesistente." @@ -207,14 +205,14 @@ msgstr "Messaggi da %1$s e amici su %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "Metodo delle API non trovato." @@ -227,8 +225,8 @@ msgstr "Metodo delle API non trovato." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Questo metodo richiede POST." @@ -259,7 +257,7 @@ msgid "Could not save profile." msgstr "Impossibile salvare il profilo." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -345,7 +343,7 @@ msgstr "Nessuno messaggio trovato con quel ID." msgid "This status is already a favorite." msgstr "Questo messaggio è già un preferito." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Impossibile creare un preferito." @@ -464,7 +462,7 @@ msgstr "Gruppo non trovato!" msgid "You are already a member of that group." msgstr "Fai già parte di quel gruppo." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "L'amministratore ti ha bloccato l'accesso a quel gruppo." @@ -514,7 +512,7 @@ msgstr "Token non valido." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -584,9 +582,9 @@ msgstr "Account" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Soprannome" @@ -656,12 +654,12 @@ msgstr "" msgid "Unsupported format." msgstr "Formato non supportato." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Preferiti da %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%1$s aggiornamenti preferiti da %2$s / %3$s" @@ -671,7 +669,7 @@ msgstr "%1$s aggiornamenti preferiti da %2$s / %3$s" msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Messaggi che citano %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s messaggi in risposta a quelli da %2$s / %3$s" @@ -681,7 +679,7 @@ msgstr "%1$s messaggi in risposta a quelli da %2$s / %3$s" msgid "%s public timeline" msgstr "Attività pubblica di %s" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "Aggiornamenti di %s da tutti!" @@ -696,12 +694,12 @@ msgstr "Ripetuto a %s" msgid "Repeats of %s" msgstr "Ripetizioni di %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Messaggi etichettati con %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Messaggi etichettati con %1$s su %2$s!" @@ -729,7 +727,7 @@ msgstr "Nessuna dimensione." msgid "Invalid size." msgstr "Dimensione non valida." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Immagine" @@ -762,7 +760,7 @@ msgid "Preview" msgstr "Anteprima" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Elimina" @@ -845,8 +843,8 @@ msgstr "Salvataggio delle informazioni per il blocco non riuscito." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Nessuna gruppo." @@ -947,7 +945,7 @@ msgstr "Questa applicazione non è di tua proprietà." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Si è verificato un problema con il tuo token di sessione." @@ -1007,7 +1005,7 @@ msgstr "Vuoi eliminare questo messaggio?" msgid "Do not delete this notice" msgstr "Non eliminare il messaggio" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Elimina questo messaggio" @@ -1260,7 +1258,7 @@ msgstr "La descrizione è troppo lunga (max %d caratteri)." msgid "Could not update group." msgstr "Impossibile aggiornare il gruppo." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Impossibile creare gli alias." @@ -1967,7 +1965,7 @@ msgstr "Invita nuovi utenti" msgid "You are already subscribed to these users:" msgstr "Hai già un abbonamento a questi utenti:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2097,7 +2095,7 @@ msgstr "%1$s fa ora parte del gruppo %2$s" msgid "You must be logged in to leave a group." msgstr "Devi eseguire l'accesso per lasciare un gruppo." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Non fai parte di quel gruppo." @@ -2211,12 +2209,12 @@ msgstr "Usa questo modulo per creare un nuovo gruppo." msgid "New message" msgstr "Nuovo messaggio" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Non puoi inviare un messaggio a questo utente." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Nessun contenuto!" @@ -2224,7 +2222,7 @@ msgstr "Nessun contenuto!" msgid "No recipient specified." msgstr "Nessun destinatario specificato." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "Non inviarti un messaggio, piuttosto ripetilo a voce dolcemente." @@ -2238,7 +2236,7 @@ msgstr "Messaggio inviato" msgid "Direct message to %s sent." msgstr "Messaggio diretto a %s inviato." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Errore di Ajax" @@ -2359,7 +2357,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Il messaggio non ha un profilo" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "Stato di %1$s su %2$s" @@ -2372,8 +2370,8 @@ msgstr "tipo di contenuto " msgid "Only " msgstr "Solo " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Non è un formato di dati supportato." @@ -2506,7 +2504,7 @@ msgstr "Vecchia password non corretta" msgid "Error saving user; invalid." msgstr "Errore nel salvare l'utente; non valido." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Impossibile salvare la nuova password." @@ -2722,8 +2720,8 @@ msgstr "" "1-64 lettere minuscole o numeri, senza spazi o simboli di punteggiatura" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nome" @@ -2750,9 +2748,9 @@ msgid "Bio" msgstr "Biografia" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Ubicazione" @@ -2766,7 +2764,7 @@ msgstr "Condividi la mia posizione attuale quando invio messaggi" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Etichette" @@ -3006,7 +3004,7 @@ msgstr "Reimposta la password" msgid "Recover password" msgstr "Recupera la password" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Richiesta password di ripristino" @@ -3026,19 +3024,19 @@ msgstr "Reimposta" msgid "Enter a nickname or email address." msgstr "Inserisci un soprannome o un indirizzo email." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "Nessun utente con quell'email o nome utente." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Nessun indirizzo email registrato per quell'utente." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Errore nel salvare la conferma dell'indirizzo." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3046,23 +3044,23 @@ msgstr "" "Le istruzioni per recuperare la tua password sono state inviate " "all'indirizzo email registrato nel tuo account." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Ripristino della password inaspettato." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "La password deve essere lunga almeno 6 caratteri." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "La password e la conferma non corrispondono." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Errore nell'impostare l'utente." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Nuova password salvata con successo. Hai effettuato l'accesso." @@ -3228,7 +3226,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "URL del tuo profilo su un altro servizio di microblog compatibile" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Abbonati" @@ -3266,7 +3264,7 @@ msgstr "Non puoi ripetere i tuoi stessi messaggi." msgid "You already repeated that notice." msgstr "Hai già ripetuto quel messaggio." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Ripetuti" @@ -3409,7 +3407,7 @@ msgstr "Organizzazione" msgid "Description" msgstr "Descrizione" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Statistiche" @@ -3529,67 +3527,67 @@ msgstr "Gruppo %s" msgid "%1$s group, page %2$d" msgstr "Gruppi di %1$s, pagina %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Profilo del gruppo" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Nota" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Alias" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Azioni dei gruppi" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Feed dei messaggi per il gruppo %s (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Feed dei messaggi per il gruppo %s (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Feed dei messaggi per il gruppo %s (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "FOAF per il gruppo %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Membri" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(nessuno)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Tutti i membri" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Creato" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3605,7 +3603,7 @@ msgstr "" "stesso](%%%%action.register%%%%) per far parte di questo gruppo e di molti " "altri! ([Maggiori informazioni](%%%%doc.help%%%%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3617,7 +3615,7 @@ msgstr "" "(http://it.wikipedia.org/wiki/Microblogging) basato sul software libero " "[StatusNet](http://status.net/)." -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Amministratori" @@ -4167,12 +4165,12 @@ msgstr "Nessun argomento ID." msgid "Tag %s" msgstr "Etichetta %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Profilo utente" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Fotografia" @@ -4515,7 +4513,7 @@ msgstr "Versione" msgid "Author(s)" msgstr "Autori" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " @@ -4524,13 +4522,13 @@ msgstr "" "Nessun file può superare %d byte e il file inviato era di %d byte. Prova a " "caricarne una versione più piccola." -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" "Un file di questa dimensione supererebbe la tua quota utente di %d byte." -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4569,27 +4567,27 @@ msgstr "Impossibile inserire il messaggio." msgid "Could not update message with new URI." msgstr "Impossibile aggiornare il messaggio con il nuovo URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Errore del DB nell'inserire un hashtag: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "Problema nel salvare il messaggio. Troppo lungo." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Problema nel salvare il messaggio. Utente sconosciuto." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Troppi messaggi troppo velocemente; fai una pausa e scrivi di nuovo tra " "qualche minuto." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4597,19 +4595,19 @@ msgstr "" "Troppi messaggi duplicati troppo velocemente; fai una pausa e scrivi di " "nuovo tra qualche minuto." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Ti è proibito inviare messaggi su questo sito." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Problema nel salvare il messaggio." -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "Problema nel salvare la casella della posta del gruppo." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4638,28 +4636,28 @@ msgstr "Impossibile eliminare l'auto-abbonamento." msgid "Couldn't delete subscription OMB token." msgstr "Impossibile eliminare il token di abbonamento OMB." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Impossibile eliminare l'abbonamento." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Benvenuti su %1$s, @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Impossibile creare il gruppo." -#: classes/User_group.php:486 +#: classes/User_group.php:489 msgid "Could not set group URI." msgstr "Impossibile impostare l'URI del gruppo." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Impossibile impostare la membership al gruppo." -#: classes/User_group.php:521 +#: classes/User_group.php:524 msgid "Could not save local group info." msgstr "Impossibile salvare le informazioni del gruppo locale." @@ -4863,7 +4861,7 @@ msgstr "Badge" msgid "StatusNet software license" msgstr "Licenza del software StatusNet" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4872,12 +4870,12 @@ msgstr "" "**%%site.name%%** è un servizio di microblog offerto da [%%site.broughtby%%]" "(%%site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** è un servizio di microblog. " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4888,44 +4886,44 @@ msgstr "" "s, disponibile nei termini della licenza [GNU Affero General Public License]" "(http://www.fsf.org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Licenza del contenuto del sito" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "I contenuti e i dati di %1$s sono privati e confidenziali." -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" "I contenuti e i dati sono copyright di %1$s. Tutti i diritti riservati." -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" "I contenuti e i dati sono forniti dai collaboratori. Tutti i diritti " "riservati." -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Tutti " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "licenza." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Paginazione" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Successivi" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Precedenti" @@ -4941,6 +4939,10 @@ msgstr "Impossibile gestire contenuti XML incorporati." msgid "Can't handle embedded Base64 content yet." msgstr "Impossibile gestire contenuti Base64." +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5029,7 +5031,7 @@ msgstr "" "Le risorse API richiedono accesso lettura-scrittura, ma si dispone del solo " "accesso in lettura." -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5106,11 +5108,11 @@ msgstr "Revoca" msgid "Attachments" msgstr "Allegati" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Autore" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Provider" @@ -5130,37 +5132,50 @@ msgstr "Modifica della password non riuscita" msgid "Password changing is not allowed" msgstr "La modifica della password non è permessa" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Risultati comando" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Comando completato" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Comando non riuscito" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Questo comando non è ancora implementato." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "Un messaggio con quel ID non esiste" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "L'utente non ha un ultimo messaggio." + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "Impossibile trovare un utente col soprannome %s" -#: lib/command.php:92 +#: lib/command.php:143 +#, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Impossibile trovare un utente locale col soprannome %s" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Questo comando non è ancora implementato." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "Non ha molto senso se cerchi di richiamarti!" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "Richiamo inviato a %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5171,197 +5186,197 @@ msgstr "" "Abbonati: %2$s\n" "Messaggi: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "Un messaggio con quel ID non esiste" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "L'utente non ha un ultimo messaggio." - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Messaggio indicato come preferito." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Fai già parte di quel gruppo" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Impossibile iscrivere l'utente %1$s al gruppo %2$s." -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s fa ora parte del gruppo %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Impossibile rimuovere l'utente %1$s dal gruppo %2$s" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%1$s ha lasciato il gruppo %2$s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Nome completo: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Posizione: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Pagina web: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Informazioni: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" +"%s è un profilo remoto. È possibile inviare messaggi privati solo agli " +"utenti sullo stesso server." + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "Messaggio troppo lungo: massimo %d caratteri, inviati %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Messaggio diretto a %s inviato." -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Errore nell'inviare il messaggio diretto." -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "Impossibile ripetere un proprio messaggio" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "Hai già ripetuto quel messaggio" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "Messaggio da %s ripetuto" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "Errore nel ripetere il messaggio." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Messaggio troppo lungo: massimo %d caratteri, inviati %d" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "Risposta a %s inviata" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "Errore nel salvare il messaggio." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Specifica il nome dell'utente a cui abbonarti." -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "Utente inesistente." +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "Impossibile abbonarsi ai profili OMB attraverso un comando." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Abbonati a %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Specifica il nome dell'utente da cui annullare l'abbonamento." -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Abbonamento a %s annullato" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Comando non ancora implementato." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Notifiche disattivate." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Impossibile disattivare le notifiche." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Notifiche attivate." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Impossibile attivare le notifiche." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "Il comando di accesso è disabilitato" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" "Questo collegamento è utilizzabile una sola volta ed è valido solo per 2 " "minuti: %s" -#: lib/command.php:692 +#: lib/command.php:735 #, php-format msgid "Unsubscribed %s" msgstr "%s ha annullato l'abbonamento" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "Il tuo abbonamento è stato annullato." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Persona di cui hai già un abbonamento:" msgstr[1] "Persone di cui hai già un abbonamento:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "Nessuno è abbonato ai tuoi messaggi." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Questa persona è abbonata ai tuoi messaggi:" msgstr[1] "Queste persone sono abbonate ai tuoi messaggi:" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "Non fai parte di alcun gruppo." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Non fai parte di questo gruppo:" msgstr[1] "Non fai parte di questi gruppi:" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5443,21 +5458,21 @@ msgstr "" "tracks - non ancora implementato\n" "tracking - non ancora implementato\n" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Non è stato trovato alcun file di configurazione. " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "I file di configurazione sono stati cercati in questi posti: " -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" "Potrebbe essere necessario lanciare il programma d'installazione per " "correggere il problema." -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "Vai al programma d'installazione." @@ -5634,49 +5649,49 @@ msgstr "Etichette nei messaggi del gruppo %s" msgid "This page is not available in a media type you accept" msgstr "Questa pagina non è disponibile in un tipo di supporto che tu accetti" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Formato file immagine non supportato." + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Quel file è troppo grande. La dimensione massima è %s." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Caricamento parziale." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Errore di sistema nel caricare il file." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Non è un'immagine o il file è danneggiato." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Formato file immagine non supportato." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Perso il nostro file." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Tipo di file sconosciuto" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "MB" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "kB" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "Sorgente casella in arrivo %d sconosciuta." @@ -5957,7 +5972,7 @@ msgstr "" "iniziare una conversazione con altri utenti. Altre persone possono mandare " "messaggi riservati solamente a te." -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "via" @@ -6112,23 +6127,23 @@ msgstr "O" msgid "at" msgstr "presso" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "in una discussione" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Ripetuto da" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Rispondi a questo messaggio" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Rispondi" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Messaggio ripetuto" @@ -6270,7 +6285,7 @@ msgstr "Ripeti questo messaggio" msgid "Revoke the \"%s\" role from this user" msgstr "Revoca il ruolo \"%s\" a questo utente" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "Nessun utente singolo definito per la modalità single-user." @@ -6396,89 +6411,93 @@ msgstr "Annulla l'abbonamento da questo utente" msgid "Unsubscribe" msgstr "Disabbonati" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Modifica immagine" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Azioni utente" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Modifica impostazioni del profilo" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Modifica" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Invia un messaggio diretto a questo utente" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Messaggio" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Modera" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 msgid "User role" msgstr "Ruolo dell'utente" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "Amministratore" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "Moderatore" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "pochi secondi fa" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "circa un minuto fa" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "circa %d minuti fa" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "circa un'ora fa" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "circa %d ore fa" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "circa un giorno fa" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "circa %d giorni fa" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "circa un mese fa" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "circa %d mesi fa" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "circa un anno fa" @@ -6492,7 +6511,7 @@ msgstr "%s non è un colore valido." msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s non è un colore valido. Usa 3 o 6 caratteri esadecimali." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "Messaggio troppo lungo: massimo %1$d caratteri, inviati %2$d." diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po index 847f24c59e..85b83bfe98 100644 --- a/locale/ja/LC_MESSAGES/statusnet.po +++ b/locale/ja/LC_MESSAGES/statusnet.po @@ -11,12 +11,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:50:18+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:02+0000\n" "Language-Team: Japanese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ja\n" "X-Message-Group: out-statusnet\n" @@ -97,7 +97,7 @@ msgstr "ãã®ã‚ˆã†ãªãƒšãƒ¼ã‚¸ã¯ã‚ã‚Šã¾ã›ã‚“。" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -106,10 +106,8 @@ msgstr "ãã®ã‚ˆã†ãªãƒšãƒ¼ã‚¸ã¯ã‚ã‚Šã¾ã›ã‚“。" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "ãã®ã‚ˆã†ãªãƒ¦ãƒ¼ã‚¶ã¯ã„ã¾ã›ã‚“。" @@ -206,14 +204,14 @@ msgstr "%2$s ã« %1$s ã¨å‹äººã‹ã‚‰ã®æ›´æ–°ãŒã‚ã‚Šã¾ã™ï¼" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "API メソッドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" @@ -226,8 +224,8 @@ msgstr "API メソッドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã«ã¯ POST ãŒå¿…è¦ã§ã™ã€‚" @@ -258,7 +256,7 @@ msgid "Could not save profile." msgstr "プロフィールをä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -344,7 +342,7 @@ msgstr "ãã®ï¼©ï¼¤ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" msgid "This status is already a favorite." msgstr "ã“ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã™ã§ã«ãŠæ°—ã«å…¥ã‚Šã§ã™ã€‚" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’作æˆã§ãã¾ã›ã‚“。" @@ -464,7 +462,7 @@ msgstr "グループãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“!" msgid "You are already a member of that group." msgstr "ã™ã§ã«ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã™ã€‚" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "管ç†è€…ã«ã‚ˆã£ã¦ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ–ロックã•ã‚Œã¦ã„ã¾ã™ã€‚" @@ -514,7 +512,7 @@ msgstr "ä¸æ­£ãªãƒˆãƒ¼ã‚¯ãƒ³ã€‚" #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -580,9 +578,9 @@ msgstr "アカウント" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "ニックãƒãƒ¼ãƒ " @@ -651,12 +649,12 @@ msgstr "ã¤ã¶ã‚„ã㯠URL ã‚’å«ã‚ã¦æœ€å¤§ %d å­—ã¾ã§ã§ã™ã€‚" msgid "Unsupported format." msgstr "サãƒãƒ¼ãƒˆå¤–ã®å½¢å¼ã§ã™ã€‚" -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / %2$s ã‹ã‚‰ã®ãŠæ°—ã«å…¥ã‚Š" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%1$s 㯠%2$s ã§ãŠæ°—ã«å…¥ã‚Šã‚’æ›´æ–°ã—ã¾ã—㟠/ %2$s。" @@ -666,7 +664,7 @@ msgstr "%1$s 㯠%2$s ã§ãŠæ°—ã«å…¥ã‚Šã‚’æ›´æ–°ã—ã¾ã—㟠/ %2$s。" msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / %2$s ã«ã¤ã„ã¦æ›´æ–°" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%2$s ã‹ã‚‰ã‚¢ãƒƒãƒ—デートã«ç­”ãˆã‚‹ %1$s アップデート" @@ -676,7 +674,7 @@ msgstr "%2$s ã‹ã‚‰ã‚¢ãƒƒãƒ—デートã«ç­”ãˆã‚‹ %1$s アップデート" msgid "%s public timeline" msgstr "%s ã®ãƒ‘ブリックタイムライン" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "皆ã‹ã‚‰ã® %s アップデート!" @@ -691,12 +689,12 @@ msgstr "%s ã¸ã®è¿”ä¿¡" msgid "Repeats of %s" msgstr "%s ã®è¿”ä¿¡" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "%s ã¨ã‚¿ã‚°ä»˜ã‘ã•ã‚ŒãŸã¤ã¶ã‚„ã" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "%2$s ã« %1$s ã«ã‚ˆã‚‹æ›´æ–°ãŒã‚ã‚Šã¾ã™ï¼" @@ -724,7 +722,7 @@ msgstr "サイズãŒã‚ã‚Šã¾ã›ã‚“。" msgid "Invalid size." msgstr "ä¸æ­£ãªã‚µã‚¤ã‚ºã€‚" -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "ã‚¢ãƒã‚¿ãƒ¼" @@ -756,7 +754,7 @@ msgid "Preview" msgstr "プレビュー" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "削除" @@ -840,8 +838,8 @@ msgstr "ブロック情報ã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "ãã®ã‚ˆã†ãªã‚°ãƒ«ãƒ¼ãƒ—ã¯ã‚ã‚Šã¾ã›ã‚“。" @@ -942,7 +940,7 @@ msgstr "ã“ã®ã‚¢ãƒ—リケーションã®ã‚ªãƒ¼ãƒŠãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。" #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "ã‚ãªãŸã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ãƒˆãƒ¼ã‚¯ãƒ³ã«é–¢ã™ã‚‹å•é¡ŒãŒã‚ã‚Šã¾ã—ãŸã€‚" @@ -1003,7 +1001,7 @@ msgstr "本当ã«ã“ã®ã¤ã¶ã‚„ãを削除ã—ã¾ã™ã‹ï¼Ÿ" msgid "Do not delete this notice" msgstr "ã“ã®ã¤ã¶ã‚„ãを削除ã§ãã¾ã›ã‚“。" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "ã“ã®ã¤ã¶ã‚„ãを削除" @@ -1256,7 +1254,7 @@ msgstr "記述ãŒé•·ã™ãŽã¾ã™ã€‚(最長 %d 字)" msgid "Could not update group." msgstr "グループを更新ã§ãã¾ã›ã‚“。" -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "別åを作æˆã§ãã¾ã›ã‚“。" @@ -1963,7 +1961,7 @@ msgstr "æ–°ã—ã„ユーザを招待" msgid "You are already subscribed to these users:" msgstr "ã™ã§ã«ã“れらã®ãƒ¦ãƒ¼ã‚¶ã‚’フォローã—ã¦ã„ã¾ã™:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "" @@ -2096,7 +2094,7 @@ msgstr "%1$s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %2$s ã«å‚加ã—ã¾ã—ãŸ" msgid "You must be logged in to leave a group." msgstr "グループã‹ã‚‰é›¢ã‚Œã‚‹ã«ã¯ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。" -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "ã‚ãªãŸã¯ãã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。" @@ -2209,12 +2207,12 @@ msgstr "ã“ã®ãƒ•ã‚©ãƒ¼ãƒ ã‚’使ã£ã¦æ–°ã—ã„グループを作æˆã—ã¾ã™ã€‚ msgid "New message" msgstr "æ–°ã—ã„メッセージ" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "コンテンツãŒã‚ã‚Šã¾ã›ã‚“ï¼" @@ -2222,7 +2220,7 @@ msgstr "コンテンツãŒã‚ã‚Šã¾ã›ã‚“ï¼" msgid "No recipient specified." msgstr "å—å–人ãŒæ›¸ã‹ã‚Œã¦ã„ã¾ã›ã‚“。" -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2237,7 +2235,7 @@ msgstr "メッセージをé€ã‚Šã¾ã—ãŸ" msgid "Direct message to %s sent." msgstr "ダイレクトメッセージを %s ã«é€ã‚Šã¾ã—ãŸ" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Ajax エラー" @@ -2357,7 +2355,7 @@ msgstr "開発者ã¯å½¼ã‚‰ã®ã‚¢ãƒ—リケーションã®ãŸã‚ã«ç™»éŒ²è¨­å®šã‚’ msgid "Notice has no profile" msgstr "ã¤ã¶ã‚„ãã«ã¯ãƒ—ロファイルã¯ã‚ã‚Šã¾ã›ã‚“。" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "%2$s ã«ãŠã‘ã‚‹ %1$ ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹" @@ -2370,8 +2368,8 @@ msgstr "内容種別 " msgid "Only " msgstr "ã ã‘ " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„データ形å¼ã€‚" @@ -2504,7 +2502,7 @@ msgstr "å¤ã„パスワードãŒé–“é•ã£ã¦ã„ã¾ã™ã€‚" msgid "Error saving user; invalid." msgstr "ユーザä¿å­˜ã‚¨ãƒ©ãƒ¼; ä¸æ­£ãªãƒ¦ãƒ¼ã‚¶" -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "æ–°ã—ã„パスワードをä¿å­˜ã§ãã¾ã›ã‚“。" @@ -2718,8 +2716,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64文字ã®ã€å°æ–‡å­—アルファベットã‹æ•°å­—ã§ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚„å¥èª­ç‚¹ã¯é™¤ã" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "フルãƒãƒ¼ãƒ " @@ -2746,9 +2744,9 @@ msgid "Bio" msgstr "自己紹介" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "場所" @@ -2762,7 +2760,7 @@ msgstr "ã¤ã¶ã‚„ãを投稿ã™ã‚‹ã¨ãã«ã¯ç§ã®ç¾åœ¨ã®å ´æ‰€ã‚’共有㗠#: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "ã‚¿ã‚°" @@ -3005,7 +3003,7 @@ msgstr "パスワードをリセット" msgid "Recover password" msgstr "パスワードを回復" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "パスワード回復ãŒãƒªã‚¯ã‚¨ã‚¹ãƒˆã•ã‚Œã¾ã—ãŸ" @@ -3025,41 +3023,41 @@ msgstr "リセット" msgid "Enter a nickname or email address." msgstr "ニックãƒãƒ¼ãƒ ã‹ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ãã ã•ã„。" -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "ãã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ãƒ¦ãƒ¼ã‚¶åã‚’ã‚‚ã£ã¦ã„るユーザãŒã‚ã‚Šã¾ã›ã‚“。" -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ã«ã¯ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ç™»éŒ²ãŒã‚ã‚Šã¾ã›ã‚“。" -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "アドレス確èªä¿å­˜ã‚¨ãƒ©ãƒ¼" -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." msgstr "登録ã•ã‚ŒãŸãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã«ãƒ‘スワードã®å›žå¾©æ–¹æ³•ã‚’ãŠé€ã‚Šã—ã¾ã—ãŸã€‚" -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "予期ã›ã¬ãƒ‘スワードã®ãƒªã‚»ãƒƒãƒˆã§ã™ã€‚" -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "パスワードã¯6字以上ã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。" -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "パスワードã¨ç¢ºèªãŒä¸€è‡´ã—ã¾ã›ã‚“。" -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "ユーザ設定エラー" -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "æ–°ã—ã„パスワードã®ä¿å­˜ã«æˆåŠŸã—ã¾ã—ãŸã€‚ログインã—ã¦ã„ã¾ã™ã€‚" @@ -3221,7 +3219,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "プロファイルサービスã¾ãŸã¯ãƒžã‚¤ã‚¯ãƒ­ãƒ–ロギングサービスã®URL" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "フォロー" @@ -3260,7 +3258,7 @@ msgstr "自分ã®ã¤ã¶ã‚„ãã¯ç¹°ã‚Šè¿”ã›ã¾ã›ã‚“。" msgid "You already repeated that notice." msgstr "ã™ã§ã«ãã®ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã—ã¦ã„ã¾ã™ã€‚" -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "ç¹°ã‚Šè¿”ã•ã‚ŒãŸ" @@ -3405,7 +3403,7 @@ msgstr "組織" msgid "Description" msgstr "概è¦" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "統計データ" @@ -3527,67 +3525,67 @@ msgstr "%s グループ" msgid "%1$s group, page %2$d" msgstr "%1$s グループã€ãƒšãƒ¼ã‚¸ %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "グループプロファイル" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "ノート" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "別å" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "グループアクション" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "%s グループã®ã¤ã¶ã‚„ãフィード (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "%s グループã®ã¤ã¶ã‚„ãフィード (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "%s グループã®ã¤ã¶ã‚„ãフィード (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "%s グループ㮠FOAF" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "メンãƒãƒ¼" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(ãªã—)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "å…¨ã¦ã®ãƒ¡ãƒ³ãƒãƒ¼" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "作æˆæ—¥" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3602,7 +3600,7 @@ msgstr "" "ã™ã‚‹çŸ­ã„メッセージを共有ã—ã¾ã™ã€‚[今ã™ãå‚加](%%%%action.register%%%%) ã—ã¦ã“" "ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸€å“¡ã«ãªã‚Šã¾ã—ょã†! ([ã‚‚ã£ã¨èª­ã‚€](%%%%doc.help%%%%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3615,7 +3613,7 @@ msgstr "" "wikipedia.org/wiki/Micro-blogging) サービス。メンãƒãƒ¼ã¯å½¼ã‚‰ã®æš®ã‚‰ã—ã¨èˆˆå‘³ã«é–¢" "ã™ã‚‹çŸ­ã„メッセージを共有ã—ã¾ã™ã€‚" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "管ç†è€…" @@ -4178,12 +4176,12 @@ msgstr "ID引数ãŒã‚ã‚Šã¾ã›ã‚“。" msgid "Tag %s" msgstr "ã‚¿ã‚° %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "ユーザプロファイル" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "写真" @@ -4514,7 +4512,7 @@ msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³" msgid "Author(s)" msgstr "作者" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " @@ -4524,13 +4522,13 @@ msgstr "" "ファイル㯠%d ãƒã‚¤ãƒˆã§ã—ãŸã€‚よりå°ã•ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’アップロードã™ã‚‹ã‚ˆã†ã«ã—ã¦" "ãã ã•ã„。" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" "ã“ã‚Œã»ã©å¤§ãã„ファイルã¯ã‚ãªãŸã®%dãƒã‚¤ãƒˆã®ãƒ¦ãƒ¼ã‚¶å‰²å½“ã¦ã‚’超ãˆã¦ã„ã‚‹ã§ã—ょã†ã€‚" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4570,26 +4568,26 @@ msgstr "メッセージを追加ã§ãã¾ã›ã‚“。" msgid "Could not update message with new URI." msgstr "æ–°ã—ã„URIã§ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’アップデートã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°è¿½åŠ  DB エラー: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "ã¤ã¶ã‚„ãã‚’ä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚é•·ã™ãŽã§ã™ã€‚" -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "ã¤ã¶ã‚„ãã‚’ä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ä¸æ˜Žãªãƒ¦ãƒ¼ã‚¶ã§ã™ã€‚" -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "多ã™ãŽã‚‹ã¤ã¶ã‚„ããŒé€Ÿã™ãŽã¾ã™; 数分間ã®ä¼‘ã¿ã‚’å–ã£ã¦ã‹ã‚‰å†æŠ•ç¨¿ã—ã¦ãã ã•ã„。" -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4597,19 +4595,19 @@ msgstr "" "多ã™ãŽã‚‹é‡è¤‡ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒé€Ÿã™ãŽã¾ã™; 数分間休ã¿ã‚’å–ã£ã¦ã‹ã‚‰å†åº¦æŠ•ç¨¿ã—ã¦ãã ã•" "ã„。" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "ã‚ãªãŸã¯ã“ã®ã‚µã‚¤ãƒˆã§ã¤ã¶ã‚„ãを投稿ã™ã‚‹ã®ãŒç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™ã€‚" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "ã¤ã¶ã‚„ãã‚’ä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "グループå—信箱をä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "" @@ -4639,29 +4637,29 @@ msgstr "自己フォローを削除ã§ãã¾ã›ã‚“。" msgid "Couldn't delete subscription OMB token." msgstr "フォローを削除ã§ãã¾ã›ã‚“" -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "フォローを削除ã§ãã¾ã›ã‚“" -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "よã†ã“ã %1$sã€@%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "グループを作æˆã§ãã¾ã›ã‚“。" -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "グループメンãƒãƒ¼ã‚·ãƒƒãƒ—をセットã§ãã¾ã›ã‚“。" -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "グループメンãƒãƒ¼ã‚·ãƒƒãƒ—をセットã§ãã¾ã›ã‚“。" -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "フォローをä¿å­˜ã§ãã¾ã›ã‚“。" @@ -4883,7 +4881,7 @@ msgstr "ãƒãƒƒã‚¸" msgid "StatusNet software license" msgstr "StatusNet ソフトウェアライセンス" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4892,12 +4890,12 @@ msgstr "" "**%%site.name%%** 㯠[%%site.broughtby%%](%%site.broughtbyurl%%) ãŒæä¾›ã™ã‚‹ãƒž" "イクロブログサービスã§ã™ã€‚ " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** ã¯ãƒžã‚¤ã‚¯ãƒ­ãƒ–ログサービスã§ã™ã€‚ " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4908,41 +4906,41 @@ msgstr "" "ã„ã¦ã„ã¾ã™ã€‚ ライセンス [GNU Affero General Public License](http://www.fsf." "org/licensing/licenses/agpl-3.0.html)。" -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "サイト内容ライセンス" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "全㦠" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "ライセンス。" -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "ページ化" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "<<後" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "å‰>>" @@ -4958,6 +4956,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5050,7 +5052,7 @@ msgstr "" "APIリソースã¯èª­ã¿æ›¸ãアクセスãŒå¿…è¦ã§ã™ã€ã—ã‹ã—ã‚ãªãŸã¯èª­ã¿ã‚¢ã‚¯ã‚»ã‚¹ã—ã‹æŒã£ã¦" "ã„ã¾ã›ã‚“。" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5126,11 +5128,11 @@ msgstr "å–消ã—" msgid "Attachments" msgstr "添付" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "作者" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "プロãƒã‚¤ãƒ€" @@ -5150,37 +5152,50 @@ msgstr "パスワード変更ã«å¤±æ•—ã—ã¾ã—ãŸ" msgid "Password changing is not allowed" msgstr "パスワード変更ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "コマンドçµæžœ" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "コマンド完了" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "コマンド失敗" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "ã™ã¿ã¾ã›ã‚“ã€ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã¾ã å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“。" +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "ãã® ID ã«ã‚ˆã‚‹ã¤ã¶ã‚„ãã¯å­˜åœ¨ã—ã¦ã„ã¾ã›ã‚“" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "ユーザã¯ã¾ã ã¤ã¶ã‚„ã„ã¦ã„ã¾ã›ã‚“" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "ユーザを更新ã§ãã¾ã›ã‚“" -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "ユーザを更新ã§ãã¾ã›ã‚“" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "ã™ã¿ã¾ã›ã‚“ã€ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã¾ã å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "ãã‚Œã¯è‡ªåˆ†è‡ªèº«ã¸ã®åˆå›³ã§å¤šãã¯æ„味ãŒã‚ã‚Šã¾ã›ã‚“!" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "%s ã¸åˆå›³ã‚’é€ã‚Šã¾ã—ãŸ" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5191,193 +5206,191 @@ msgstr "" "フォローã•ã‚Œã¦ã„ã‚‹: %2$s\n" "ã¤ã¶ã‚„ã: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "ãã® ID ã«ã‚ˆã‚‹ã¤ã¶ã‚„ãã¯å­˜åœ¨ã—ã¦ã„ã¾ã›ã‚“" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "ユーザã¯ã¾ã ã¤ã¶ã‚„ã„ã¦ã„ã¾ã›ã‚“" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "ãŠæ°—ã«å…¥ã‚Šã«ã•ã‚Œã¦ã„ã‚‹ã¤ã¶ã‚„ã。" -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "ã‚ãªãŸã¯æ—¢ã«ãã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å‚加ã—ã¦ã„ã¾ã™ã€‚" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "ユーザ %s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %s ã«å‚加ã§ãã¾ã›ã‚“" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %s ã«å‚加ã—ã¾ã—ãŸ" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "ユーザ %s をグループ %s ã‹ã‚‰å‰Šé™¤ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %s ã«æ®‹ã‚Šã¾ã—ãŸã€‚" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "フルãƒãƒ¼ãƒ ï¼š %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "場所: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "ホームページ: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "About: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "メッセージãŒé•·ã™ãŽã¾ã™ - 最大 %d å­—ã€ã‚ãªãŸãŒé€ã£ãŸã®ã¯ %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "ダイレクトメッセージを %s ã«é€ã‚Šã¾ã—ãŸ" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "ダイレクトメッセージé€ä¿¡ã‚¨ãƒ©ãƒ¼ã€‚" -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "自分ã®ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "ã™ã§ã«ã“ã®ã¤ã¶ã‚„ãã¯ç¹°ã‚Šè¿”ã•ã‚Œã¦ã„ã¾ã™" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "%s ã‹ã‚‰ã¤ã¶ã‚„ããŒç¹°ã‚Šè¿”ã•ã‚Œã¦ã„ã¾ã™" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "ã¤ã¶ã‚„ãç¹°ã‚Šè¿”ã—エラー" -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "ã¤ã¶ã‚„ããŒé•·ã™ãŽã¾ã™ - 最大 %d å­—ã€ã‚ãªãŸãŒé€ã£ãŸã®ã¯ %d" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "%s ã¸è¿”ä¿¡ã‚’é€ã‚Šã¾ã—ãŸ" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "ã¤ã¶ã‚„ãä¿å­˜ã‚¨ãƒ©ãƒ¼ã€‚" -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "フォローã™ã‚‹ãƒ¦ãƒ¼ã‚¶ã®åå‰ã‚’指定ã—ã¦ãã ã•ã„" -#: lib/command.php:554 lib/command.php:589 +#: lib/command.php:602 #, fuzzy -msgid "No such user" -msgstr "ãã®ã‚ˆã†ãªãƒ¦ãƒ¼ã‚¶ã¯ã„ã¾ã›ã‚“。" +msgid "Can't subscribe to OMB profiles by command." +msgstr "ã‚ãªãŸã¯ãã®ãƒ—ロファイルã«ãƒ•ã‚©ãƒ­ãƒ¼ã•ã‚Œã¦ã„ã¾ã›ã‚“。" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "%s をフォローã—ã¾ã—ãŸ" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "フォローをやã‚るユーザã®åå‰ã‚’指定ã—ã¦ãã ã•ã„" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "%s ã®ãƒ•ã‚©ãƒ­ãƒ¼ã‚’ã‚„ã‚ã‚‹" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "コマンドã¯ã¾ã å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“。" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "通知オフ。" -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "通知をオフã§ãã¾ã›ã‚“。" -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "通知オン。" -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "通知をオンã§ãã¾ã›ã‚“。" -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "ログインコマンドãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™ã€‚" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "ã“ã®ãƒªãƒ³ã‚¯ã¯ã€ã‹ã¤ã¦ã ã‘使用å¯èƒ½ã§ã‚ã‚Šã€2分間ã ã‘良ã„ã§ã™: %s" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "%s ã®ãƒ•ã‚©ãƒ­ãƒ¼ã‚’ã‚„ã‚ã‚‹" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "ã‚ãªãŸã¯ã ã‚Œã«ã‚‚フォローã•ã‚Œã¦ã„ã¾ã›ã‚“。" -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "ã‚ãªãŸã¯ã“ã®äººã«ãƒ•ã‚©ãƒ­ãƒ¼ã•ã‚Œã¦ã„ã¾ã™:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "誰もフォローã—ã¦ã„ã¾ã›ã‚“。" -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "ã“ã®äººã¯ã‚ãªãŸã«ãƒ•ã‚©ãƒ­ãƒ¼ã•ã‚Œã¦ã„ã‚‹:" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "ã‚ãªãŸã¯ã©ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。" -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "ã‚ãªãŸã¯ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“:" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5419,21 +5432,21 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "コンフィギュレーションファイルãŒã‚ã‚Šã¾ã›ã‚“。 " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "ç§ã¯ä»¥ä¸‹ã®å ´æ‰€ã§ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã‚’探ã—ã¾ã—ãŸ: " -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" "ã‚ãªãŸã¯ã€ã“れを修ç†ã™ã‚‹ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ã‚’å‹•ã‹ã—ãŸãŒã£ã¦ã„ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›" "ん。" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "インストーラã¸ã€‚" @@ -5609,49 +5622,49 @@ msgstr "%s グループã®ã¤ã¶ã‚„ãã«ã‚ã‚‹ã‚¿ã‚°" msgid "This page is not available in a media type you accept" msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã¯ã‚ãªãŸãŒæ‰¿èªã—ãŸãƒ¡ãƒ‡ã‚£ã‚¢ã‚¿ã‚¤ãƒ—ã§ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "サãƒãƒ¼ãƒˆå¤–ã®ç”»åƒå½¢å¼ã§ã™ã€‚" + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "ファイルãŒå¤§ãã™ãŽã¾ã™ã€‚最大ファイルサイズ㯠%s 。" -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "ä¸å®Œå…¨ãªã‚¢ãƒƒãƒ—ロード。" -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "ファイルã®ã‚¢ãƒƒãƒ—ロードã§ã‚·ã‚¹ãƒ†ãƒ ã‚¨ãƒ©ãƒ¼" -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "ç”»åƒã§ã¯ãªã„ã‹ãƒ•ã‚¡ã‚¤ãƒ«ãŒç ´æã—ã¦ã„ã¾ã™ã€‚" -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "サãƒãƒ¼ãƒˆå¤–ã®ç”»åƒå½¢å¼ã§ã™ã€‚" - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "ファイルを紛失。" -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "ä¸æ˜Žãªãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "MB" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "kB" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "ä¸æ˜Žãªå—ä¿¡ç®±ã®ã‚½ãƒ¼ã‚¹ %d。" @@ -5931,7 +5944,7 @@ msgstr "" "ã«å¼•ã込むプライベートメッセージをé€ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚人々ã¯ã‚ãªãŸã ã‘ã¸ã®" "メッセージをé€ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "from" @@ -6094,23 +6107,23 @@ msgstr "西" msgid "at" msgstr "at" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "ã“ã®ã¤ã¶ã‚„ãã¸è¿”ä¿¡" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "返信" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã—ã¾ã—ãŸ" @@ -6252,7 +6265,7 @@ msgstr "ã“ã®ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã™" msgid "Revoke the \"%s\" role from this user" msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’ブロック" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "single-user モードã®ãŸã‚ã®ã‚·ãƒ³ã‚°ãƒ«ãƒ¦ãƒ¼ã‚¶ãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。" @@ -6378,93 +6391,97 @@ msgstr "ã“ã®åˆ©ç”¨è€…ã‹ã‚‰ã®ãƒ•ã‚©ãƒ­ãƒ¼ã‚’解除ã™ã‚‹" msgid "Unsubscribe" msgstr "フォロー解除" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "ã‚¢ãƒã‚¿ãƒ¼ã‚’編集ã™ã‚‹" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "利用者アクション" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "プロファイル設定編集" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "編集" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "ã“ã®åˆ©ç”¨è€…ã«ãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "メッセージ" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 #, fuzzy msgid "Moderate" msgstr "管ç†" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "ユーザプロファイル" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 #, fuzzy msgctxt "role" msgid "Administrator" msgstr "管ç†è€…" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 #, fuzzy msgctxt "role" msgid "Moderator" msgstr "管ç†" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "数秒å‰" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "ç´„ 1 分å‰" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "ç´„ %d 分å‰" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "ç´„ 1 時間å‰" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "ç´„ %d 時間å‰" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "ç´„ 1 æ—¥å‰" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "ç´„ %d æ—¥å‰" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "ç´„ 1 ヵ月å‰" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "ç´„ %d ヵ月å‰" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "ç´„ 1 å¹´å‰" @@ -6478,7 +6495,7 @@ msgstr "%sã¯æœ‰åŠ¹ãªè‰²ã§ã¯ã‚ã‚Šã¾ã›ã‚“!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s ã¯æœ‰åŠ¹ãªè‰²ã§ã¯ã‚ã‚Šã¾ã›ã‚“! 3ã‹6ã®16進数を使ã£ã¦ãã ã•ã„。" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "メッセージãŒé•·ã™ãŽã¾ã™ - 最大 %1$d å­—ã€ã‚ãªãŸãŒé€ã£ãŸã®ã¯ %2$d。" diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po index 69bf4efb93..41533a4265 100644 --- a/locale/ko/LC_MESSAGES/statusnet.po +++ b/locale/ko/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:50:22+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:05+0000\n" "Language-Team: Korean\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ko\n" "X-Message-Group: out-statusnet\n" @@ -100,7 +100,7 @@ msgstr "그러한 태그가 없습니다." #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -109,10 +109,8 @@ msgstr "그러한 태그가 없습니다." #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "그러한 사용ìžëŠ” 없습니다." @@ -204,14 +202,14 @@ msgstr "%1$s ë° %2$sì— ìžˆëŠ” ì¹œêµ¬ë“¤ì˜ ì—…ë°ì´íŠ¸!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "API 메서드를 ì°¾ì„ ìˆ˜ 없습니다." @@ -225,8 +223,8 @@ msgstr "API 메서드를 ì°¾ì„ ìˆ˜ 없습니다." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "ì´ ë©”ì„œë“œëŠ” 등ë¡ì„ 요구합니다." @@ -257,7 +255,7 @@ msgid "Could not save profile." msgstr "í”„ë¡œí•„ì„ ì €ìž¥ í•  수 없습니다." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -345,7 +343,7 @@ msgstr "ê·¸ IDë¡œ ë°œê²¬ëœ ìƒíƒœê°€ 없습니다." msgid "This status is already a favorite." msgstr "ì´ ê²Œì‹œê¸€ì€ ì´ë¯¸ 좋아하는 게시글입니다." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "좋아하는 ê²Œì‹œê¸€ì„ ìƒì„±í•  수 없습니다." @@ -471,7 +469,7 @@ msgstr "API 메서드를 ì°¾ì„ ìˆ˜ 없습니다." msgid "You are already a member of that group." msgstr "ë‹¹ì‹ ì€ ì´ë¯¸ ì´ ê·¸ë£¹ì˜ ë©¤ë²„ìž…ë‹ˆë‹¤." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -523,7 +521,7 @@ msgstr "옳지 ì•Šì€ í¬ê¸°" #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -590,9 +588,9 @@ msgstr "계정" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "별명" @@ -666,12 +664,12 @@ msgstr "" msgid "Unsupported format." msgstr "지ì›í•˜ì§€ 않는 그림 íŒŒì¼ í˜•ì‹ìž…니다." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, fuzzy, php-format msgid "%1$s / Favorites from %2$s" msgstr "%s / %sì˜ ì¢‹ì•„í•˜ëŠ” 글들" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%s 좋아하는 ê¸€ì´ ì—…ë°ì´íŠ¸ ë습니다. %Sì— ì˜í•´ / %s." @@ -681,7 +679,7 @@ msgstr "%s 좋아하는 ê¸€ì´ ì—…ë°ì´íŠ¸ ë습니다. %Sì— ì˜í•´ / %s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / %2$sì—게 답신 ì—…ë°ì´íŠ¸" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$së‹˜ì´ %2$s/%3$sì˜ ì—…ë°ì´íŠ¸ì— 답변했습니다." @@ -691,7 +689,7 @@ msgstr "%1$së‹˜ì´ %2$s/%3$sì˜ ì—…ë°ì´íŠ¸ì— 답변했습니다." msgid "%s public timeline" msgstr "%s 공개 타임ë¼ì¸" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "모ë‘ë¡œë¶€í„°ì˜ ì—…ë°ì´íŠ¸ %sê°œ!" @@ -706,12 +704,12 @@ msgstr "%sì— ë‹µì‹ " msgid "Repeats of %s" msgstr "%sì— ë‹µì‹ " -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "%s íƒœê·¸ëœ í†µì§€" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, fuzzy, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "%2$sì— ìžˆëŠ” %1$sì˜ ì—…ë°ì´íŠ¸!" @@ -740,7 +738,7 @@ msgstr "사ì´ì¦ˆê°€ 없습니다." msgid "Invalid size." msgstr "옳지 ì•Šì€ í¬ê¸°" -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "아바타" @@ -772,7 +770,7 @@ msgid "Preview" msgstr "미리보기" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "ì‚­ì œ" @@ -855,8 +853,8 @@ msgstr "ì •ë³´ì°¨ë‹¨ì„ ì €ìž¥í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "그러한 ê·¸ë£¹ì´ ì—†ìŠµë‹ˆë‹¤." @@ -965,7 +963,7 @@ msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "ë‹¹ì‹ ì˜ ì„¸ì…˜í† í°ê´€ë ¨ 문제가 있습니다." @@ -1027,7 +1025,7 @@ msgstr "ì •ë§ë¡œ 통지를 삭제하시겠습니까?" msgid "Do not delete this notice" msgstr "ì´ í†µì§€ë¥¼ 지울 수 없습니다." -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "ì´ ê²Œì‹œê¸€ 삭제하기" @@ -1302,7 +1300,7 @@ msgstr "ì„¤ëª…ì´ ë„ˆë¬´ 길어요. (최대 140글ìž)" msgid "Could not update group." msgstr "ê·¸ë£¹ì„ ì—…ë°ì´íŠ¸ í•  수 없습니다." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 #, fuzzy msgid "Could not create aliases." msgstr "좋아하는 ê²Œì‹œê¸€ì„ ìƒì„±í•  수 없습니다." @@ -2015,7 +2013,7 @@ msgstr "새 사용ìžë¥¼ 초대" msgid "You are already subscribed to these users:" msgstr "ë‹¹ì‹ ì€ ë‹¤ìŒ ì‚¬ìš©ìžë¥¼ ì´ë¯¸ 구ë…하고 있습니다." -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2140,7 +2138,7 @@ msgstr "%s 는 그룹 %sì— ê°€ìž…í–ˆìŠµ니다." msgid "You must be logged in to leave a group." msgstr "ê·¸ë£¹ì„ ë– ë‚˜ê¸° 위해서는 로그ì¸í•´ì•¼ 합니다." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다." @@ -2258,12 +2256,12 @@ msgstr "새 ê·¸ë£¹ì„ ë§Œë“¤ê¸° 위해 ì´ ì–‘ì‹ì„ 사용하세요." msgid "New message" msgstr "새로운 메시지입니다." -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "ë‹¹ì‹ ì€ ì´ ì‚¬ìš©ìžì—게 메시지를 보낼 수 없습니다." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "ë‚´ìš©ì´ ì—†ìŠµë‹ˆë‹¤!" @@ -2271,7 +2269,7 @@ msgstr "ë‚´ìš©ì´ ì—†ìŠµë‹ˆë‹¤!" msgid "No recipient specified." msgstr "수신ìžë¥¼ 지정하지 않았습니다." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2287,7 +2285,7 @@ msgstr "메시지" msgid "Direct message to %s sent." msgstr "%sì—게 보낸 ì§ì ‘ 메시지" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Ajax ì—러입니다." @@ -2404,7 +2402,7 @@ msgstr "" msgid "Notice has no profile" msgstr "í†µì§€ì— í”„ë¡œí•„ì´ ì—†ìŠµë‹ˆë‹¤." -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$sì˜ ìƒíƒœ (%2$sì—ì„œ)" @@ -2418,8 +2416,8 @@ msgstr "ì—°ê²°" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "지ì›í•˜ëŠ” 형ì‹ì˜ ë°ì´í„°ê°€ 아닙니다." @@ -2557,7 +2555,7 @@ msgstr "기존 비밀 번호가 틀렸습니다" msgid "Error saving user; invalid." msgstr "ì‚¬ìš©ìž ì €ìž¥ 오류; 무효한 사용ìž" -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "새 비밀번호를 저장 í•  수 없습니다." @@ -2782,8 +2780,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64ìž ì‚¬ì´ì— ì˜ì†Œë¬¸ìž, 숫ìžë¡œë§Œ ì”니다. 기호나 ê³µë°±ì„ ì“°ë©´ 안 ë©ë‹ˆë‹¤." #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "실명" @@ -2811,9 +2809,9 @@ msgid "Bio" msgstr "ìžê¸°ì†Œê°œ" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "위치" @@ -2827,7 +2825,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "태그" @@ -3057,7 +3055,7 @@ msgstr "비밀 번호 초기화" msgid "Recover password" msgstr "비밀 번호 복구" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "비밀 번호 복구가 요청ë˜ì—ˆìŠµë‹ˆë‹¤." @@ -3077,41 +3075,41 @@ msgstr "초기화" msgid "Enter a nickname or email address." msgstr "별명ì´ë‚˜ ì´ë©”ì¼ ê³„ì •ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "그러한 ì´ë©”ì¼ ì£¼ì†Œë‚˜ ê³„ì •ì„ ê°€ì§„ 사용ìžëŠ” 없습니다." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "ê·¸ 사용ìžëŠ” 등ë¡ëœ ë©”ì¼ì£¼ì†Œê°€ 없습니다." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "주소 í™•ì¸ ì €ìž¥ ì—러" -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." msgstr "가입하신 ì´ë©”ì¼ë¡œ 비밀 번호 ìž¬ë°œê¸‰ì— ê´€í•œ 안내를 보냈습니다." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "ìž˜ëª»ëœ ë¹„ë°€ 번호 지정" -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "비밀 번호는 6ìž ì´ìƒì´ì–´ì•¼ 합니다." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "비밀 번호가 ì¼ì¹˜í•˜ì§€ 않습니다." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "ì‚¬ìš©ìž ì„¸íŒ… 오류" -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "" "새로운 비밀 번호를 성공ì ìœ¼ë¡œ 저장했습니다. 귀하는 ì´ì œ ë¡œê·¸ì¸ ë˜ì—ˆìŠµë‹ˆë‹¤." @@ -3275,7 +3273,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "다른 마ì´í¬ë¡œë¸”로깅 ì„œë¹„ìŠ¤ì˜ ê·€í•˜ì˜ í”„ë¡œí•„ URL" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "구ë…" @@ -3318,7 +3316,7 @@ msgstr "ë¼ì´ì„ ìŠ¤ì— ë™ì˜í•˜ì§€ 않는다면 등ë¡í•  수 없습니다." msgid "You already repeated that notice." msgstr "ë‹¹ì‹ ì€ ì´ë¯¸ ì´ ì‚¬ìš©ìžë¥¼ 차단하고 있습니다." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 #, fuzzy msgid "Repeated" msgstr "ìƒì„±" @@ -3467,7 +3465,7 @@ msgstr "페ì´ì§€ìˆ˜" msgid "Description" msgstr "설명" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "통계" @@ -3579,68 +3577,68 @@ msgstr "%s 그룹" msgid "%1$s group, page %2$d" msgstr "%s 그룹 회ì›, %d페ì´ì§€" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "그룹 프로필" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "설명" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "그룹 í–‰ë™" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "%s ê·¸ë£¹ì„ ìœ„í•œ 공지피드" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "%s ê·¸ë£¹ì„ ìœ„í•œ 공지피드" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "%s ê·¸ë£¹ì„ ìœ„í•œ 공지피드" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "%sì˜ ë³´ë‚¸ìª½ì§€í•¨" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "회ì›" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(없습니다.)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "모든 회ì›" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 #, fuzzy msgid "Created" msgstr "ìƒì„±" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3650,7 +3648,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3661,7 +3659,7 @@ msgstr "" "**%s** 는 %%%%site.name%%%% [마ì´í¬ë¡œë¸”로깅)(http://en.wikipedia.org/wiki/" "Micro-blogging)ì˜ ì‚¬ìš©ìž ê·¸ë£¹ìž…ë‹ˆë‹¤. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 #, fuzzy msgid "Admins" msgstr "관리ìž" @@ -4208,12 +4206,12 @@ msgstr "id ì¸ìžê°€ 없습니다." msgid "Tag %s" msgstr "태그 %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "ì´ìš©ìž 프로필" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "사진" @@ -4551,19 +4549,19 @@ msgstr "ê°œì¸ì ì¸" msgid "Author(s)" msgstr "" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4606,28 +4604,28 @@ msgstr "메시지를 삽입할 수 없습니다." msgid "Could not update message with new URI." msgstr "새 URI와 함께 메시지를 ì—…ë°ì´íŠ¸í•  수 없습니다." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "해쉬테그를 추가 í•  ë•Œì— ë°ì´íƒ€ë² ì´ìŠ¤ ì—러 : %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 #, fuzzy msgid "Problem saving notice. Too long." msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "게시글 저장문제. ì•Œë ¤ì§€ì§€ì•Šì€ íšŒì›" -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "너무 ë§Žì€ ê²Œì‹œê¸€ì´ ë„ˆë¬´ 빠르게 올ë¼ì˜µë‹ˆë‹¤. 한숨고르고 ëª‡ë¶„í›„ì— ë‹¤ì‹œ í¬ìŠ¤íŠ¸ë¥¼ " "해보세요." -#: classes/Notice.php:256 +#: classes/Notice.php:259 #, fuzzy msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " @@ -4636,20 +4634,20 @@ msgstr "" "너무 ë§Žì€ ê²Œì‹œê¸€ì´ ë„ˆë¬´ 빠르게 올ë¼ì˜µë‹ˆë‹¤. 한숨고르고 ëª‡ë¶„í›„ì— ë‹¤ì‹œ í¬ìŠ¤íŠ¸ë¥¼ " "해보세요." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "ì´ ì‚¬ì´íŠ¸ì— 게시글 í¬ìŠ¤íŒ…으로부터 ë‹¹ì‹ ì€ ê¸ˆì§€ë˜ì—ˆìŠµë‹ˆë‹¤." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%1$s (%2$s)" @@ -4682,29 +4680,29 @@ msgstr "예약 구ë…ì„ ì‚­ì œ í•  수 없습니다." msgid "Couldn't delete subscription OMB token." msgstr "예약 구ë…ì„ ì‚­ì œ í•  수 없습니다." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "예약 구ë…ì„ ì‚­ì œ í•  수 없습니다." -#: classes/User.php:373 +#: classes/User.php:378 #, fuzzy, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "%2$sì—ì„œ %1$s까지 메시지" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "새 ê·¸ë£¹ì„ ë§Œë“¤ 수 없습니다." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "그룹 ë§´ë²„ì‹­ì„ ì„¸íŒ…í•  수 없습니다." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "그룹 ë§´ë²„ì‹­ì„ ì„¸íŒ…í•  수 없습니다." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "구ë…ì„ ì €ìž¥í•  수 없습니다." @@ -4928,7 +4926,7 @@ msgstr "찔러 보기" msgid "StatusNet software license" msgstr "ë¼ì½”니카 소프트웨어 ë¼ì´ì„ ìŠ¤" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4937,12 +4935,12 @@ msgstr "" "**%%site.name%%** 는 [%%site.broughtby%%](%%site.broughtbyurl%%)ê°€ 제공하는 " "마ì´í¬ë¡œë¸”로깅서비스입니다." -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** 는 마ì´í¬ë¡œë¸”로깅서비스입니다." -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4953,42 +4951,42 @@ msgstr "" "ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. StatusNet는 [GNU Affero General Public License](http://www." "fsf.org/licensing/licenses/agpl-3.0.html) ë¼ì´ì„ ìŠ¤ì— ë”°ë¼ ì‚¬ìš©í•  수 있습니다." -#: lib/action.php:821 +#: lib/action.php:824 #, fuzzy msgid "Site content license" msgstr "ë¼ì½”니카 소프트웨어 ë¼ì´ì„ ìŠ¤" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "모든 것" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "ë¼ì´ì„ ìŠ¤" -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "페ì´ì§€ìˆ˜" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "ë’· 페ì´ì§€" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "ì•ž 페ì´ì§€" @@ -5004,6 +5002,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 #, fuzzy @@ -5105,7 +5107,7 @@ msgstr "SMS ì¸ì¦" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5184,11 +5186,11 @@ msgstr "ì‚­ì œ" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 #, fuzzy msgid "Provider" msgstr "프로필" @@ -5211,37 +5213,51 @@ msgstr "비밀번호 변경" msgid "Password changing is not allowed" msgstr "비밀번호 변경" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "실행결과" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "실행 완료" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "실행 실패" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "죄송합니다. ì´ ëª…ë ¹ì€ ì•„ì§ ì‹¤í–‰ë˜ì§€ 않았습니다." +#: lib/command.php:83 lib/command.php:105 +#, fuzzy +msgid "Notice with that id does not exist" +msgstr "해당 idì˜ í”„ë¡œí•„ì´ ì—†ìŠµë‹ˆë‹¤." -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "ì´ìš©ìžì˜ 지ì†ì ì¸ ê²Œì‹œê¸€ì´ ì—†ìŠµë‹ˆë‹¤." + +#: lib/command.php:125 #, fuzzy, php-format msgid "Could not find a user with nickname %s" msgstr "ì´ ì´ë©”ì¼ ì£¼ì†Œë¡œ 사용ìžë¥¼ ì—…ë°ì´íŠ¸ í•  수 없습니다." -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "ì´ ì´ë©”ì¼ ì£¼ì†Œë¡œ 사용ìžë¥¼ ì—…ë°ì´íŠ¸ í•  수 없습니다." + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "죄송합니다. ì´ ëª…ë ¹ì€ ì•„ì§ ì‹¤í–‰ë˜ì§€ 않았습니다." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, fuzzy, php-format msgid "Nudge sent to %s" msgstr "찔러 보기를 보냈습니다." -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5249,200 +5265,198 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -#, fuzzy -msgid "Notice with that id does not exist" -msgstr "해당 idì˜ í”„ë¡œí•„ì´ ì—†ìŠµë‹ˆë‹¤." - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "ì´ìš©ìžì˜ 지ì†ì ì¸ ê²Œì‹œê¸€ì´ ì—†ìŠµë‹ˆë‹¤." - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "ê²Œì‹œê¸€ì´ ì¢‹ì•„í•˜ëŠ” 글로 지정ë˜ì—ˆìŠµë‹ˆë‹¤." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "ë‹¹ì‹ ì€ ì´ë¯¸ ì´ ê·¸ë£¹ì˜ ë©¤ë²„ìž…ë‹ˆë‹¤." -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "그룹 %sì— %s는 가입할 수 없습니다." -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s 는 그룹 %sì— ê°€ìž…í–ˆìŠµë‹ˆë‹¤." -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "그룹 %sì—ì„œ %s 사용ìžë¥¼ 제거할 수 없습니다." -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%sê°€ 그룹%s를 떠났습니다." -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "ì „ì²´ì´ë¦„: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "위치: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "홈페ì´ì§€: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "ìžê¸°ì†Œê°œ: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, fuzzy, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "ë‹¹ì‹ ì´ ë³´ë‚¸ 메시지가 너무 길어요. 최대 140글ìžê¹Œì§€ìž…니다." -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "%sì—게 보낸 ì§ì ‘ 메시지" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "ì§ì ‘ 메시지 보내기 오류." -#: lib/command.php:413 +#: lib/command.php:490 #, fuzzy msgid "Cannot repeat your own notice" msgstr "ì•Œë¦¼ì„ ì¼¤ 수 없습니다." -#: lib/command.php:418 +#: lib/command.php:495 #, fuzzy msgid "Already repeated that notice" msgstr "ì´ ê²Œì‹œê¸€ 삭제하기" -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "ê²Œì‹œê¸€ì´ ë“±ë¡ë˜ì—ˆìŠµë‹ˆë‹¤." -#: lib/command.php:428 +#: lib/command.php:505 #, fuzzy msgid "Error repeating notice." msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤." -#: lib/command.php:482 +#: lib/command.php:536 #, fuzzy, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "ë‹¹ì‹ ì´ ë³´ë‚¸ 메시지가 너무 길어요. 최대 140글ìžê¹Œì§€ìž…니다." -#: lib/command.php:491 +#: lib/command.php:545 #, fuzzy, php-format msgid "Reply to %s sent" msgstr "ì´ ê²Œì‹œê¸€ì— ëŒ€í•´ 답장하기" -#: lib/command.php:493 +#: lib/command.php:547 #, fuzzy msgid "Error saving notice." msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "구ë…하려는 사용ìžì˜ ì´ë¦„ì„ ì§€ì •í•˜ì‹­ì‹œì˜¤." -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "그러한 사용ìžëŠ” 없습니다." +#: lib/command.php:602 +#, fuzzy +msgid "Can't subscribe to OMB profiles by command." +msgstr "ë‹¹ì‹ ì€ ì´ í”„ë¡œí•„ì— êµ¬ë…ë˜ì§€ 않고있습니다." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "%sì—게 구ë…ë˜ì—ˆìŠµë‹ˆë‹¤." -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "구ë…ì„ í•´ì œí•˜ë ¤ëŠ” 사용ìžì˜ ì´ë¦„ì„ ì§€ì •í•˜ì‹­ì‹œì˜¤." -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "%sì—ì„œ 구ë…ì„ í•´ì œí–ˆìŠµë‹ˆë‹¤." -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "ëª…ë ¹ì´ ì•„ì§ ì‹¤í–‰ë˜ì§€ 않았습니다." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "알림ë„기." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "ì•Œë¦¼ì„ ëŒ ìˆ˜ 없습니다." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "ì•Œë¦¼ì´ ì¼œì¡ŒìŠµë‹ˆë‹¤." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "ì•Œë¦¼ì„ ì¼¤ 수 없습니다." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "%sì—ì„œ 구ë…ì„ í•´ì œí–ˆìŠµë‹ˆë‹¤." -#: lib/command.php:709 +#: lib/command.php:752 #, fuzzy msgid "You are not subscribed to anyone." msgstr "ë‹¹ì‹ ì€ ì´ í”„ë¡œí•„ì— êµ¬ë…ë˜ì§€ 않고있습니다." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "ë‹¹ì‹ ì€ ë‹¤ìŒ ì‚¬ìš©ìžë¥¼ ì´ë¯¸ 구ë…하고 있습니다." -#: lib/command.php:731 +#: lib/command.php:774 #, fuzzy msgid "No one is subscribed to you." msgstr "다른 ì‚¬ëžŒì„ êµ¬ë… í•˜ì‹¤ 수 없습니다." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "다른 ì‚¬ëžŒì„ êµ¬ë… í•˜ì‹¤ 수 없습니다." -#: lib/command.php:753 +#: lib/command.php:796 #, fuzzy msgid "You are not a member of any groups." msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다." -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5484,20 +5498,20 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 #, fuzzy msgid "No configuration file found. " msgstr "í™•ì¸ ì½”ë“œê°€ 없습니다." -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 #, fuzzy msgid "Go to the installer." msgstr "ì´ ì‚¬ì´íŠ¸ 로그ì¸" @@ -5678,49 +5692,49 @@ msgstr "%s 그룹 ê²Œì‹œê¸€ì˜ íƒœê·¸" msgid "This page is not available in a media type you accept" msgstr "ì´ íŽ˜ì´ì§€ëŠ” 귀하가 승ì¸í•œ 미디어 타입ì—서는 ì´ìš©í•  수 없습니다." -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "지ì›í•˜ì§€ 않는 그림 íŒŒì¼ í˜•ì‹ìž…니다." + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "ë‹¹ì‹ ê·¸ë£¹ì˜ ë¡œê³  ì´ë¯¸ì§€ë¥¼ 업로드할 수 있습니다." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "불완전한 업로드." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "파ì¼ì„ ì˜¬ë¦¬ëŠ”ë° ì‹œìŠ¤í…œ 오류 ë°œìƒ" -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "그림 파ì¼ì´ 아니거나 ì†ìƒëœ íŒŒì¼ ìž…ë‹ˆë‹¤." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "지ì›í•˜ì§€ 않는 그림 íŒŒì¼ í˜•ì‹ìž…니다." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "파ì¼ì„ 잃어버렸습니다." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "ì•Œ 수 없는 ì¢…ë¥˜ì˜ íŒŒì¼ìž…니다" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5923,7 +5937,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 #, fuzzy msgid "from" msgstr "다ìŒì—ì„œ:" @@ -6079,25 +6093,25 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 #, fuzzy msgid "in context" msgstr "ë‚´ìš©ì´ ì—†ìŠµë‹ˆë‹¤!" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 #, fuzzy msgid "Repeated by" msgstr "ìƒì„±" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "ì´ ê²Œì‹œê¸€ì— ëŒ€í•´ 답장하기" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "답장하기" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "ê²Œì‹œê¸€ì´ ë“±ë¡ë˜ì—ˆìŠµë‹ˆë‹¤." @@ -6246,7 +6260,7 @@ msgstr "ì´ ê²Œì‹œê¸€ì— ëŒ€í•´ 답장하기" msgid "Revoke the \"%s\" role from this user" msgstr "ì´ ê·¸ë£¹ì˜ íšŒì›ë¦¬ìŠ¤íŠ¸" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6380,93 +6394,97 @@ msgstr "ì´ ì‚¬ìš©ìžë¡œë¶€í„° 구ë…취소합니다." msgid "Unsubscribe" msgstr "êµ¬ë… í•´ì œ" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 #, fuzzy msgid "Edit Avatar" msgstr "아바타" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "ì‚¬ìš©ìž ë™ìž‘" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 #, fuzzy msgid "Edit profile settings" msgstr "프로필 세팅" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "ì´ íšŒì›ì—게 ì§ì ‘ 메시지를 보냅니다." -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "메시지" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "ì´ìš©ìž 프로필" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 #, fuzzy msgctxt "role" msgid "Administrator" msgstr "관리ìž" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "몇 ì´ˆ ì „" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "1분 ì „" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "%d분 ì „" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "1시간 ì „" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "%d시간 ì „" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "하루 ì „" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "%dì¼ ì „" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "1달 ì „" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "%d달 ì „" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "1ë…„ ì „" @@ -6480,7 +6498,7 @@ msgstr "홈페ì´ì§€ 주소형ì‹ì´ 올바르지 않습니다." msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, fuzzy, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "ë‹¹ì‹ ì´ ë³´ë‚¸ 메시지가 너무 길어요. 최대 140글ìžê¹Œì§€ìž…니다." diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po index 74b9cb2280..764a91b159 100644 --- a/locale/mk/LC_MESSAGES/statusnet.po +++ b/locale/mk/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:50:24+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:08+0000\n" "Language-Team: Macedonian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: out-statusnet\n" @@ -95,7 +95,7 @@ msgstr "Ðема таква Ñтраница" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -104,10 +104,8 @@ msgstr "Ðема таква Ñтраница" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Ðема таков кориÑник." @@ -207,14 +205,14 @@ msgstr "Подновувања од %1$s и пријатели на %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "API методот не е пронајден." @@ -227,8 +225,8 @@ msgstr "API методот не е пронајден." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Овој метод бара POST." @@ -259,7 +257,7 @@ msgid "Could not save profile." msgstr "Ðе може да Ñе зачува профил." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -346,7 +344,7 @@ msgstr "Ðема пронајдено ÑÑ‚Ð°Ñ‚ÑƒÑ Ñо таков ID." msgid "This status is already a favorite." msgstr "Овој ÑÑ‚Ð°Ñ‚ÑƒÑ Ð²ÐµÑœÐµ Ви е омилен." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Ðе можам да Ñоздадам омилина забелешка." @@ -465,7 +463,7 @@ msgstr "Групата не е пронајдена!" msgid "You are already a member of that group." msgstr "Веќе членувате во таа група." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "Блокирани Ñте од таа група од админиÑтраторот." @@ -515,7 +513,7 @@ msgstr "Погрешен жетон." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -584,9 +582,9 @@ msgstr "Сметка" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Прекар" @@ -657,12 +655,12 @@ msgstr "" msgid "Unsupported format." msgstr "Ðеподдржан формат." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Омилени од %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "Подновувања на %1$s омилени на %2$s / %2$s." @@ -672,7 +670,7 @@ msgstr "Подновувања на %1$s омилени на %2$s / %2$s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Подновувања кои Ñпоменуваат %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s подновувања коишто Ñе одговор на подновувањата од %2$s / %3$s." @@ -682,7 +680,7 @@ msgstr "%1$s подновувања коишто Ñе одговор на под msgid "%s public timeline" msgstr "Јавна иÑторија на %s" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s подновуввања од Ñите!" @@ -697,12 +695,12 @@ msgstr "Повторено за %s" msgid "Repeats of %s" msgstr "Повторувања на %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Забелешки означени Ñо %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Подновувањата Ñе означени Ñо %1$s на %2$s!" @@ -730,7 +728,7 @@ msgstr "Ðема големина." msgid "Invalid size." msgstr "Погрешна големина." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Ðватар" @@ -764,7 +762,7 @@ msgid "Preview" msgstr "Преглед" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Бриши" @@ -848,8 +846,8 @@ msgstr "Ðе можев да ги Ñнимам инофрмациите за б #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Ðема таква група." @@ -950,7 +948,7 @@ msgstr "Ðе Ñте ÑопÑтвеник на овој програм." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Се појави проблем Ñо Вашиот ÑеÑиÑки жетон." @@ -1011,7 +1009,7 @@ msgstr "Дали Ñте Ñигурни дека Ñакате да ја избр msgid "Do not delete this notice" msgstr "Ðе ја бриши оваа забелешка" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Бриши ја оваа забелешка" @@ -1264,7 +1262,7 @@ msgstr "опиÑот е предолг (макÑимум %d знаци)" msgid "Could not update group." msgstr "Ðе можев да ја подновам групата." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Ðе можеше да Ñе Ñоздадат алијаÑи." @@ -1568,11 +1566,11 @@ msgstr "Ðе можев да ги претворам жетоните за ба #: actions/finishremotesubscribe.php:118 msgid "Remote service uses unknown version of OMB protocol." -msgstr "Оддалечената Ñлужба кориÑти непозната верзија на OMB протокол." +msgstr "ДалечинÑката Ñлужба кориÑти непозната верзија на OMB протокол." #: actions/finishremotesubscribe.php:138 lib/oauthstore.php:306 msgid "Error updating remote profile" -msgstr "Грешка во подновувањето на оддалечениот профил" +msgstr "Грешка во подновувањето на далечинÑкиот профил" #: actions/getfile.php:79 msgid "No such file." @@ -1973,7 +1971,7 @@ msgstr "Покани нови кориÑници" msgid "You are already subscribed to these users:" msgstr "Веќе Ñте претплатени на овие кориÑници:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2104,7 +2102,7 @@ msgstr "%1$s Ñе зачлени во групата %2$s" msgid "You must be logged in to leave a group." msgstr "Мора да Ñте најавени за да можете да ја напуштите групата." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Ðе членувате во таа група." @@ -2219,12 +2217,12 @@ msgstr "Овој образец Ñлужи за Ñоздавање нова гр msgid "New message" msgstr "Ðова порака" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Ðе можете да иÑпратите порака до овојо кориÑник." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Ðема Ñодржина!" @@ -2232,7 +2230,7 @@ msgstr "Ðема Ñодржина!" msgid "No recipient specified." msgstr "Ðема назначено примач." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2248,7 +2246,7 @@ msgstr "Пораката е иÑпратена" msgid "Direct message to %s sent." msgstr "Директната порака до %s е иÑпратена." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Ajax-грешка" @@ -2369,7 +2367,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Забелешката нема профил" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s ÑÑ‚Ð°Ñ‚ÑƒÑ Ð½Ð° %2$s" @@ -2382,8 +2380,8 @@ msgstr "тип на Ñодржини " msgid "Only " msgstr "Само " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Ова не е поддржан формат на податотека." @@ -2516,7 +2514,7 @@ msgstr "Ðеточна Ñтара лозинка" msgid "Error saving user; invalid." msgstr "Грешка во зачувувањето на кориÑникот; неправилен." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Ðе можам да ја зачувам новата лозинка." @@ -2732,8 +2730,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 мали букви или бројки. Без интерпукциÑки знаци и празни меÑта." #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Цело име" @@ -2760,9 +2758,9 @@ msgid "Bio" msgstr "Биографија" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Локација" @@ -2776,7 +2774,7 @@ msgstr "Сподели ја мојата тековна локација при #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Ознаки" @@ -3021,7 +3019,7 @@ msgstr "РеÑтетирај ја лозинката" msgid "Recover password" msgstr "Пронаоѓање на лозинка" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Побарано е пронаоѓање на лозинката" @@ -3041,19 +3039,19 @@ msgstr "Врати одново" msgid "Enter a nickname or email address." msgstr "ВнеÑете прекар или е-пошта" -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "Ðема кориÑник Ñо таа е-поштенÑка адреÑа или кориÑничко име." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Ðема региÑтрирана адреÑа за е-пошта за тој кориÑник." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Грешка при зачувувањето на потврдата за адреÑа." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3061,23 +3059,23 @@ msgstr "" "УпатÑтвото за пронаоѓање на Вашата лозинка е иÑпратено до адреÑата за е-" "пошта што е региÑтрирана Ñо Вашата Ñметка." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Ðеочекувано подновување на лозинката." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Лозинката мора да биде од најмалку 6 знаци." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Двете лозинки не Ñе Ñовпаѓаат." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Грешка во поÑтавувањето на кориÑникот." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Ðовата лозинка е уÑпешно зачувана. Сега Ñте најавени." @@ -3224,7 +3222,7 @@ msgstr "Оддалечена претплата" #: actions/remotesubscribe.php:124 msgid "Subscribe to a remote user" -msgstr "Претплати Ñе на оддалечен кориÑник" +msgstr "Претплати Ñе на далечинÑки кориÑник" #: actions/remotesubscribe.php:129 msgid "User nickname" @@ -3243,7 +3241,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "URL на Вашиот профил на друга компатибилна Ñлужба за микроблогирање." #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Претплати Ñе" @@ -3281,7 +3279,7 @@ msgstr "Ðе можете да повторувате ÑопÑтвена заб msgid "You already repeated that notice." msgstr "Веќе ја имате повторено таа забелешка." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Повторено" @@ -3424,7 +3422,7 @@ msgstr "Организација" msgid "Description" msgstr "ОпиÑ" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "СтатиÑтики" @@ -3547,67 +3545,67 @@ msgstr "Група %s" msgid "%1$s group, page %2$d" msgstr "Група %1$s, ÑÑ‚Ñ€. %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Профил на група" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Забелешка" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "ÐлијаÑи" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Групни дејÑтва" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Канал Ñо забелешки за групата %s (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Канал Ñо забелешки за групата %s (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Канал Ñо забелешки за групата%s (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "FOAF за групата %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Членови" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Ðема)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Сите членови" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Создадено" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3623,7 +3621,7 @@ msgstr "" "Ñе](%%%%action.register%%%%) за да Ñтанете дел од оваа група и многу повеќе! " "([Прочитајте повеќе](%%%%doc.help%%%%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3636,7 +3634,7 @@ msgstr "" "Ñлободната програмÑка алатка [StatusNet](http://status.net/). Ðејзините " "членови Ñи разменуваат кратки пораки за нивниот живот и интереÑи. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "ÐдминиÑтратори" @@ -4067,7 +4065,7 @@ msgstr "Ðема таков профил." #: actions/subscribe.php:117 msgid "You cannot subscribe to an OMB 0.1 remote profile with this action." msgstr "" -"Ðе можете да Ñе претплатите на OMB 0.1 оддалечен профил Ñо ова дејÑтво." +"Ðе можете да Ñе претплатите на OMB 0.1 далечинÑки профил Ñо ова дејÑтво." #: actions/subscribe.php:145 msgid "Subscribed" @@ -4190,12 +4188,12 @@ msgstr "Ðема ID-аргумент." msgid "Tag %s" msgstr "Означи %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "КориÑнички профил" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Фото" @@ -4538,7 +4536,7 @@ msgstr "Верзија" msgid "Author(s)" msgstr "Ðвтор(и)" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " @@ -4547,13 +4545,13 @@ msgstr "" "Ðиедна податотека не Ñмее да биде поголема од %d бајти, а подаотеката што ја " "иÑпративте Ñодржи %d бајти. Подигнете помала верзија." -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" "Волку голема податотека ќе ја надмине Вашата кориÑничка квота од %d бајти." -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "ВОлку голема податотека ќе ја надмине Вашата меÑечна квота од %d бајти" @@ -4591,27 +4589,27 @@ msgstr "Ðе можев да ја иÑпратам пораката." msgid "Could not update message with new URI." msgstr "Ðе можев да ја подновам пораката Ñо нов URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Грешка во базата на податоци при вметнувањето на хеш-ознака: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "Проблем Ñо зачувувањето на белешката. Премногу долго." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Проблем Ñо зачувувањето на белешката. Ðепознат кориÑник." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Премногу забелњшки за прекратко време; здивнете малку и продолжете за " "неколку минути." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4619,19 +4617,19 @@ msgstr "" "Премногу дуплирани пораки во прекратко време; здивнете малку и продолжете за " "неколку минути." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Забрането Ви е да објавувате забелешки на оваа веб-Ñтраница." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Проблем во зачувувањето на белешката." -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "Проблем при зачувувањето на групното приемно Ñандаче." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4661,28 +4659,28 @@ msgstr "Ðе можам да ја избришам Ñамопретплатат msgid "Couldn't delete subscription OMB token." msgstr "Ðе можете да го избришете OMB-жетонот за претплата." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Претплата не може да Ñе избрише." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Добредојдовте на %1$s, @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Ðе можев да ја Ñоздадам групата." -#: classes/User_group.php:486 +#: classes/User_group.php:489 msgid "Could not set group URI." msgstr "Ðе можев да поÑтавам URI на групата." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Ðе можев да назначам членÑтво во групата." -#: classes/User_group.php:521 +#: classes/User_group.php:524 msgid "Could not save local group info." msgstr "Ðе можев да ги зачувам информациите за локалните групи." @@ -4886,7 +4884,7 @@ msgstr "Значка" msgid "StatusNet software license" msgstr "Лиценца на програмот StatusNet" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4895,12 +4893,12 @@ msgstr "" "**%%site.name%%** е ÑÐµÑ€Ð²Ð¸Ñ Ð·Ð° микроблогирање што ви го овозможува [%%site." "broughtby%%](%%site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** е ÑÐµÑ€Ð²Ð¸Ñ Ð·Ð° микроблогирање." -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4911,51 +4909,51 @@ msgstr "" "верзија %s, доÑтапен пд [GNU Affero General Public License](http://www.fsf." "org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Лиценца на Ñодржините на веб-Ñтраницата" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "Содржината и податоците на %1$s Ñе лични и доверливи." -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" "ÐвторÑките права на Ñодржината и податоците Ñе во ÑопÑтвеноÑÑ‚ на %1$s. Сите " "права задржани." -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" "ÐвторÑките права на Ñодржината и податоците им припаѓаат на учеÑниците. Сите " "права задржани." -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Сите " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "лиценца." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Прелом на Ñтраници" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "По" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Пред" #: lib/activity.php:453 msgid "Can't handle remote content yet." -msgstr "Сè уште не е поддржана обработката на оддалечена Ñодржина." +msgstr "Сè уште не е поддржана обработката на далечинÑка Ñодржина." #: lib/activity.php:481 msgid "Can't handle embedded XML content yet." @@ -4965,6 +4963,10 @@ msgstr "Сè уште не е поддржана обработката на XML msgid "Can't handle embedded Base64 content yet." msgstr "Сè уште не е доÑтапна обработката на вметната Base64 Ñодржина." +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5053,7 +5055,7 @@ msgstr "" "API-реÑурÑот бара да може и да чита и да запишува, а вие можете Ñамо да " "читате." -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "ÐеуÑпешен обид за API-заверка, прекар = %1$s, прокÑи = %2$s, IP = %3$s" @@ -5128,11 +5130,11 @@ msgstr "Одземи" msgid "Attachments" msgstr "Прилози" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Ðвтор" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Обезбедувач" @@ -5152,37 +5154,50 @@ msgstr "Менувањето на лозинката не уÑпеа" msgid "Password changing is not allowed" msgstr "Менувањето на лозинка не е дозволено" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Резултати од наредбата" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Ðаредбата е завршена" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Ðаредбата не уÑпеа" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Жалиме, оваа наредба Ñè уште не е имплементирана." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "Ðе поÑтои забелешка Ñо таков id" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "КориÑникот нема поÑледна забелешка" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "Ðе можев да пронајдам кориÑник Ñо прекар %s" -#: lib/command.php:92 +#: lib/command.php:143 +#, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Ðе можев да пронајдам локален кориÑник Ñо прекар %s" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Жалиме, оваа наредба Ñè уште не е имплементирана." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "Ðема баш логика да Ñе подбуцнувате Ñами ÑебеÑи." -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "ИÑпратено подбуцнување на %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5193,198 +5208,198 @@ msgstr "" "Претплатници: %2$s\n" "Забелешки: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "Ðе поÑтои забелешка Ñо таков id" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "КориÑникот нема поÑледна забелешка" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Забелешката е обележана како омилена." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Веќе членувате во таа група" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Ðе можев да го зачленам кориÑникот %s во групата %s" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s Ñе зачлени во групата %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Ðе можев да го отÑтранам кориÑникот %s од групата %s" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s ја напушти групата %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Име и презиме: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Локација: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Домашна Ñтраница: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "За: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" +"%s е далечинÑки профил; можете да праќате директни пораки Ñамо до кориÑници " +"на иÑтиот Ñервер." + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" "Пораката е предолга - дозволени Ñе највеќе %d знаци, а вие иÑпративте %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Директната порака до %s е иÑпратена" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Грашка при иÑпаќањето на директната порака." -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "Ðе можете да повторувате ÑопÑтвени забалешки" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "Оваа забелешка е веќе повторена" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "Забелешката од %s е повторена" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "Грешка при повторувањето на белешката." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" "Забелешката е предолга - треба да нема повеќе од %d знаци, а Вие иÑпративте %" "d" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "Одговорот на %s е иÑпратен" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "Грешка при зачувувањето на белешката." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Ðазначете го името на кориÑникот на којшто Ñакате да Ñе претплатите" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "Ðема таков кориÑник" +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "Ðе можете да Ñе претплаќате на OMB профили по наредба." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Претплатено на %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Ðазначете го името на кориÑникот од кого откажувате претплата." -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Претплатата на %s е откажана" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Ðаредбата Ñè уште не е имплементирана." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "ИзвеÑтувањето е иÑклучено." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Ðе можам да иÑклучам извеÑтување." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "ИзвеÑтувањето е вклучено." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Ðе можам да вклучам извеÑтување." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "Ðаредбата за најава е оневозможена" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "Оваа врÑка може да Ñе употреби Ñамо еднаш, и трае Ñамо 2 минути: %s" -#: lib/command.php:692 +#: lib/command.php:735 #, php-format msgid "Unsubscribed %s" msgstr "Откажана претплата на %s" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "Ðе Ñте претплатени никому." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Ðе ни го иÑпративте тој профил." msgstr[1] "Ðе ни го иÑпративте тој профил." -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "Ðикој не е претплатен на ВаÑ." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Оддалечена претплата" msgstr[1] "Оддалечена претплата" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "Ðе членувате во ниедна група." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Ðе ни го иÑпративте тој профил." msgstr[1] "Ðе ни го иÑпративте тој профил." -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5463,19 +5478,19 @@ msgstr "" "tracks - Ñè уште не е имплементирано.\n" "tracking - Ñè уште не е имплементирано.\n" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Ðема пронајдено конфигурациÑка податотека. " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "Побарав конфигурациони податотеки на Ñледниве меÑта: " -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "Препорачуваме да го пуштите инÑталатерот за да го поправите ова." -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "Оди на инÑталаторот." @@ -5653,49 +5668,49 @@ msgstr "Ознаки во забелешките на групата %s" msgid "This page is not available in a media type you accept" msgstr "Оваа Ñтраница не е доÑтапна во форматот кој Вие го прифаќате." -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Ðеподдржан фомрат на Ñлики." + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Ова е предолго. МакÑималната должина е 140 знаци." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Делумно подигање." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "СиÑтемÑка грешка при подигањето на податотеката." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Ðе е Ñлика или податотеката е пореметена." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Ðеподдржан фомрат на Ñлики." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Податотеката е изгубена." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Ðепознат тип на податотека" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "МБ" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "кб" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "Ðепознат извор на приемна пошта %d." @@ -5978,7 +5993,7 @@ msgstr "" "впуштите во разговор Ñо други кориÑници. Луѓето можат да ви иÑпраќаат пораки " "што ќе можете да ги видите Ñамо Вие." -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "од" @@ -6136,23 +6151,23 @@ msgstr "З" msgid "at" msgstr "во" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "во контекÑÑ‚" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Повторено од" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Одговори на забелешкава" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Одговор" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Забелешката е повторена" @@ -6178,7 +6193,7 @@ msgstr "Грешка во внеÑувањето на аватарот" #: lib/oauthstore.php:311 msgid "Error inserting remote profile" -msgstr "Грешка во внеÑувањето на оддалечениот профил" +msgstr "Грешка во внеÑувањето на далечинÑкиот профил" #: lib/oauthstore.php:345 msgid "Duplicate notice" @@ -6294,7 +6309,7 @@ msgstr "Повтори ја забелешкава" msgid "Revoke the \"%s\" role from this user" msgstr "Одземи му ја улогата „%s“ на кориÑников" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "Ðе е зададен кориÑник за еднокориÑничкиот режим." @@ -6420,89 +6435,93 @@ msgstr "Откажи претплата од овој корÑиник" msgid "Unsubscribe" msgstr "Откажи ја претплатата" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Уреди аватар" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "КориÑнички дејÑтва" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Уреди нагодувања на профилот" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Уреди" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "ИÑпрати му директна порака на кориÑников" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Порака" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Модерирај" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 msgid "User role" msgstr "КориÑничка улога" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "ÐдминиÑтратор" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "Модератор" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "пред неколку Ñекунди" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "пред една минута" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "пред %d минути" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "пред еден чаÑ" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "пред %d чаÑа" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "пред еден ден" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "пред %d денови" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "пред еден меÑец" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "пред %d меÑеца" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "пред една година" @@ -6516,7 +6535,7 @@ msgstr "%s не е важечка боја!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s не е важечка боја! КориÑтете 3 или 6 шеÑнаеÑетни (hex) знаци." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po index b687e445e2..617280c33b 100644 --- a/locale/nb/LC_MESSAGES/statusnet.po +++ b/locale/nb/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-08 21:11:29+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:11+0000\n" "Language-Team: Norwegian (bokmÃ¥l)‬\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63415); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: no\n" "X-Message-Group: out-statusnet\n" @@ -93,7 +93,7 @@ msgstr "Ingen slik side" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -102,10 +102,8 @@ msgstr "Ingen slik side" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Ingen slik bruker" @@ -203,14 +201,14 @@ msgstr "Oppdateringer fra %1$s og venner pÃ¥ %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "API-metode ikke funnet!" @@ -224,8 +222,8 @@ msgstr "API-metode ikke funnet!" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Denne metoden krever en POST." @@ -256,7 +254,7 @@ msgid "Could not save profile." msgstr "Klarte ikke Ã¥ lagre profil." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -343,7 +341,7 @@ msgstr "Fant ingen status med den ID-en." msgid "This status is already a favorite." msgstr "Denne statusen er allerede en favoritt." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Kunne ikke opprette favoritt." @@ -460,7 +458,7 @@ msgstr "Gruppe ikke funnet!" msgid "You are already a member of that group." msgstr "Du er allerede medlem av den gruppen." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "Du har blitt blokkert fra den gruppen av administratoren." @@ -510,7 +508,7 @@ msgstr "Ugyldig symbol." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -577,9 +575,9 @@ msgstr "Konto" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Nick" @@ -648,12 +646,12 @@ msgstr "Maks notisstørrelse er %d tegn, inklusive vedleggs-URL." msgid "Unsupported format." msgstr "Formatet støttes ikke." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Favoritter fra %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%1$s oppdateringer markert som favoritt av %2$s / %2$s." @@ -663,7 +661,7 @@ msgstr "%1$s oppdateringer markert som favoritt av %2$s / %2$s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Oppdateringer som nevner %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s oppdateringer som svarer pÃ¥ oppdateringer fra %2$s / %3$s." @@ -673,7 +671,7 @@ msgstr "%1$s oppdateringer som svarer pÃ¥ oppdateringer fra %2$s / %3$s." msgid "%s public timeline" msgstr "%s offentlig tidslinje" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s oppdateringer fra alle sammen!" @@ -688,12 +686,12 @@ msgstr "Gjentatt til %s" msgid "Repeats of %s" msgstr "Repetisjoner av %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Notiser merket med %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Oppdateringer merket med %1$s pÃ¥ %2$s!" @@ -721,7 +719,7 @@ msgstr "Ingen størrelse." msgid "Invalid size." msgstr "Ugyldig størrelse" -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Brukerbilde" @@ -753,7 +751,7 @@ msgid "Preview" msgstr "ForhÃ¥ndsvis" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Slett" @@ -836,8 +834,8 @@ msgstr "Kunne ikke lagre blokkeringsinformasjon." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Ingen slik gruppe." @@ -938,7 +936,7 @@ msgstr "Du er ikke eieren av dette programmet." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "" @@ -999,7 +997,7 @@ msgstr "Er du sikker pÃ¥ at du vil slette denne notisen?" msgid "Do not delete this notice" msgstr "Ikke slett denne notisen" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Slett denne notisen" @@ -1252,7 +1250,7 @@ msgstr "beskrivelse er for lang (maks %d tegn)" msgid "Could not update group." msgstr "Kunne ikke oppdatere gruppe." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Kunne ikke opprette alias." @@ -1482,7 +1480,7 @@ msgstr "" #: lib/personalgroupnav.php:115 #, php-format msgid "%s's favorite notices" -msgstr "" +msgstr "%s sine favorittnotiser" #: actions/favoritesrss.php:115 #, php-format @@ -1502,7 +1500,7 @@ msgstr "" #: actions/featured.php:99 #, php-format msgid "A selection of some great users on %s" -msgstr "" +msgstr "Et utvalg av noen store brukere pÃ¥ %s" #: actions/file.php:34 msgid "No notice ID." @@ -1598,9 +1596,8 @@ msgid "Only an admin can block group members." msgstr "" #: actions/groupblock.php:95 -#, fuzzy msgid "User is already blocked from group." -msgstr "Du er allerede logget inn!" +msgstr "Bruker er allerede blokkert fra gruppe." #: actions/groupblock.php:100 msgid "User is not a member of group." @@ -1624,7 +1621,7 @@ msgstr "Ikke blokker denne brukeren fra denne gruppa" #: actions/groupblock.php:179 msgid "Block this user from this group" -msgstr "" +msgstr "Blokker denne brukeren fra denne gruppen" #: actions/groupblock.php:196 msgid "Database error blocking user from group." @@ -1797,9 +1794,8 @@ msgid "Error removing the block." msgstr "Feil under oppheving av blokkering." #: actions/imsettings.php:59 -#, fuzzy msgid "IM settings" -msgstr "Innstillinger for IM" +msgstr "Innstillinger for direktemeldinger" #: actions/imsettings.php:70 #, php-format @@ -1826,9 +1822,8 @@ msgstr "" "instruksjoner (la du %s til vennelisten din?)" #: actions/imsettings.php:124 -#, fuzzy msgid "IM address" -msgstr "IM-adresse" +msgstr "Direktemeldingsadresse" #: actions/imsettings.php:126 #, php-format @@ -1926,7 +1921,7 @@ msgstr "Inviter nye brukere" msgid "You are already subscribed to these users:" msgstr "" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2047,9 +2042,9 @@ msgstr "" msgid "You must be logged in to leave a group." msgstr "" -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." -msgstr "" +msgstr "Du er ikke et medlem av den gruppen." #: actions/leavegroup.php:137 #, php-format @@ -2075,7 +2070,7 @@ msgstr "Logg inn" #: actions/login.php:227 msgid "Login to site" -msgstr "" +msgstr "Logg inn pÃ¥ nettstedet" #: actions/login.php:236 actions/register.php:478 msgid "Remember me" @@ -2118,18 +2113,17 @@ msgid "Can't get membership record for %1$s in group %2$s." msgstr "Klarte ikke Ã¥ oppdatere bruker." #: actions/makeadmin.php:146 -#, fuzzy, php-format +#, php-format msgid "Can't make %1$s an admin for group %2$s." -msgstr "Gjør brukeren til en administrator for gruppen" +msgstr "Kan ikke gjøre %1$s til administrator for gruppen %2$s." #: actions/microsummary.php:69 msgid "No current status" msgstr "Ingen nÃ¥værende status" #: actions/newapplication.php:52 -#, fuzzy msgid "New Application" -msgstr "Ingen slik side" +msgstr "Nytt program" #: actions/newapplication.php:64 msgid "You must be logged in to register an application." @@ -2160,12 +2154,12 @@ msgstr "Bruk dette skjemaet for Ã¥ opprette en ny gruppe." msgid "New message" msgstr "Ny melding" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Du kan ikke sende en melding til denne brukeren." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Inget innhold." @@ -2173,7 +2167,7 @@ msgstr "Inget innhold." msgid "No recipient specified." msgstr "Ingen mottaker oppgitt." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2183,11 +2177,11 @@ msgid "Message sent" msgstr "Melding sendt" #: actions/newmessage.php:185 -#, fuzzy, php-format +#, php-format msgid "Direct message to %s sent." -msgstr "Direktemeldinger til %s" +msgstr "Direktemelding til %s sendt." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Ajax-feil" @@ -2211,9 +2205,9 @@ msgid "Text search" msgstr "Tekst-søk" #: actions/noticesearch.php:91 -#, fuzzy, php-format +#, php-format msgid "Search results for \"%1$s\" on %2$s" -msgstr "Søkestrøm for «%s»" +msgstr "Søkeresultat for «%1$s» pÃ¥ %2$s" #: actions/noticesearch.php:121 #, php-format @@ -2232,12 +2226,12 @@ msgstr "" #: actions/noticesearchrss.php:96 #, php-format msgid "Updates with \"%s\"" -msgstr "" +msgstr "Oppdateringer med «%s»" #: actions/noticesearchrss.php:98 -#, fuzzy, php-format +#, php-format msgid "Updates matching search term \"%1$s\" on %2$s!" -msgstr "Alle oppdateringer for søket: «%s»" +msgstr "Oppdateringer som samsvarer søkestrengen «%1$s» pÃ¥ %2$s." #: actions/nudge.php:85 msgid "" @@ -2258,7 +2252,7 @@ msgstr "" #: actions/oauthappssettings.php:74 msgid "OAuth applications" -msgstr "" +msgstr "OAuth-program" #: actions/oauthappssettings.php:85 msgid "Applications you have registered" @@ -2275,21 +2269,20 @@ msgstr "" #: actions/oauthconnectionssettings.php:83 msgid "You have allowed the following applications to access you account." -msgstr "" +msgstr "Du har tillatt følgende programmer Ã¥ fÃ¥ tilgang til den konto." #: actions/oauthconnectionssettings.php:175 -#, fuzzy msgid "You are not a user of that application." -msgstr "Du er allerede logget inn!" +msgstr "Du er ikke bruker av dette programmet." #: actions/oauthconnectionssettings.php:186 msgid "Unable to revoke access for app: " -msgstr "" +msgstr "Kunne ikke tilbakekalle tilgang for programmet: " #: actions/oauthconnectionssettings.php:198 #, php-format msgid "You have not authorized any applications to use your account." -msgstr "" +msgstr "Du har ikke tillatt noen programmer Ã¥ bruke din konto." #: actions/oauthconnectionssettings.php:211 msgid "Developers can edit the registration settings for their applications " @@ -2299,7 +2292,7 @@ msgstr "" msgid "Notice has no profile" msgstr "" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s sin status pÃ¥ %2$s" @@ -2312,8 +2305,8 @@ msgstr "innholdstype " msgid "Only " msgstr "Bare " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "" @@ -2448,7 +2441,7 @@ msgstr "Feil gammelt passord" msgid "Error saving user; invalid." msgstr "" -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Klarer ikke Ã¥ lagre nytt passord." @@ -2662,8 +2655,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 smÃ¥ bokstaver eller nummer, ingen punktum eller mellomrom" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Fullt navn" @@ -2691,9 +2684,9 @@ msgid "Bio" msgstr "Om meg" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "" @@ -2707,7 +2700,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Tagger" @@ -2935,7 +2928,7 @@ msgstr "" msgid "Recover password" msgstr "" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "" @@ -2955,19 +2948,19 @@ msgstr "Nullstill" msgid "Enter a nickname or email address." msgstr "" -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "" -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "" -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -2975,23 +2968,23 @@ msgstr "" "Instruksjoner om hvordan du kan gjenopprette ditt passord har blitt sendt " "til din registrerte e-postadresse." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "" -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Passordet mÃ¥ bestÃ¥ av 6 eller flere tegn." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "" -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "" -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "" @@ -3149,7 +3142,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "" @@ -3187,7 +3180,7 @@ msgstr "" msgid "You already repeated that notice." msgstr "Du er allerede logget inn!" -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Gjentatt" @@ -3332,7 +3325,7 @@ msgstr "Organisasjon" msgid "Description" msgstr "Beskrivelse" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Statistikk" @@ -3386,28 +3379,28 @@ msgid "Are you sure you want to reset your consumer key and secret?" msgstr "Er du sikker pÃ¥ at du vil slette denne notisen?" #: actions/showfavorites.php:79 -#, fuzzy, php-format +#, php-format msgid "%1$s's favorite notices, page %2$d" -msgstr "%s og venner" +msgstr "%1$s sine favorittnotiser, side %2$d" #: actions/showfavorites.php:132 msgid "Could not retrieve favorite notices." -msgstr "" +msgstr "Kunne ikke hente favorittnotiser." #: actions/showfavorites.php:171 -#, fuzzy, php-format +#, php-format msgid "Feed for favorites of %s (RSS 1.0)" -msgstr "Feed for %s sine venner" +msgstr "Mating for favoritter av %s (RSS 1.0)" #: actions/showfavorites.php:178 -#, fuzzy, php-format +#, php-format msgid "Feed for favorites of %s (RSS 2.0)" -msgstr "Feed for %s sine venner" +msgstr "Mating for favoritter av %s (RSS 2.0)" #: actions/showfavorites.php:185 -#, fuzzy, php-format +#, php-format msgid "Feed for favorites of %s (Atom)" -msgstr "Feed for %s sine venner" +msgstr "Mating for favoritter av %s (Atom)" #: actions/showfavorites.php:206 msgid "" @@ -3437,77 +3430,74 @@ msgstr "" #: actions/showgroup.php:82 lib/groupnav.php:86 #, php-format msgid "%s group" -msgstr "" +msgstr "%s gruppe" #: actions/showgroup.php:84 -#, fuzzy, php-format +#, php-format msgid "%1$s group, page %2$d" -msgstr "Alle abonnementer" +msgstr "%1$s gruppe, side %2$d" -#: actions/showgroup.php:226 -#, fuzzy +#: actions/showgroup.php:227 msgid "Group profile" -msgstr "Klarte ikke Ã¥ lagre profil." +msgstr "Gruppeprofil" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" -msgstr "" +msgstr "Nettadresse" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" -msgstr "" +msgstr "Notismating for %s gruppe (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" -msgstr "" +msgstr "Notismating for %s gruppe (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" -msgstr "" +msgstr "Notismating for %s gruppe (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, fuzzy, php-format msgid "FOAF for %s group" msgstr "Klarte ikke Ã¥ lagre profil." -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 -#, fuzzy +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" -msgstr "Medlem siden" +msgstr "Medlemmer" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" -msgstr "" +msgstr "(Ingen)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" -msgstr "" +msgstr "Alle medlemmer" -#: actions/showgroup.php:441 -#, fuzzy +#: actions/showgroup.php:442 msgid "Created" -msgstr "Opprett" +msgstr "Opprettet" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3516,8 +3506,14 @@ msgid "" "their life and interests. [Join now](%%%%action.register%%%%) to become part " "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" +"**%s** er en brukergruppe pÃ¥ %%%%site.name%%%%, en [mikrobloggingstjeneste]" +"(http://no.wikipedia.org/wiki/Mikroblogg) basert pÃ¥ det frie " +"programvareverktøyet [StatusNet](http://status.net/). Dets medlemmer deler " +"korte meldinger om deres liv og interesser. [Bli med nÃ¥](%%%%action.register%" +"%%%) for Ã¥ bli medlem av denne gruppen og mange fler. ([Les mer](%%%%doc.help" +"%%%%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3525,14 +3521,18 @@ msgid "" "[StatusNet](http://status.net/) tool. Its members share short messages about " "their life and interests. " msgstr "" +"**%s** er en brukergruppe pÃ¥ %%%%site.name%%%%, en [mikrobloggingstjeneste]" +"(http://no.wikipedia.org/wiki/Mikroblogg) basert pÃ¥ det frie " +"programvareverktøyet [StatusNet](http://status.net/). Dets medlemmer deler " +"korte meldinger om deres liv og interesser. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" -msgstr "" +msgstr "Administratorer" #: actions/showmessage.php:81 msgid "No such message." -msgstr "" +msgstr "Ingen slik melding." #: actions/showmessage.php:98 msgid "Only the sender and recipient may read this message." @@ -3541,16 +3541,16 @@ msgstr "" #: actions/showmessage.php:108 #, php-format msgid "Message to %1$s on %2$s" -msgstr "" +msgstr "Melding til %1$s pÃ¥ %2$s" #: actions/showmessage.php:113 #, php-format msgid "Message from %1$s on %2$s" -msgstr "" +msgstr "Melding fra %1$s pÃ¥ %2$s" #: actions/shownotice.php:90 msgid "Notice deleted." -msgstr "" +msgstr "Notis slettet." #: actions/showstream.php:73 #, fuzzy, php-format @@ -3558,29 +3558,29 @@ msgid " tagged %s" msgstr "Tagger" #: actions/showstream.php:79 -#, fuzzy, php-format +#, php-format msgid "%1$s, page %2$d" -msgstr "%s og venner" +msgstr "%1$s, side %2$d" #: actions/showstream.php:122 -#, fuzzy, php-format +#, php-format msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)" -msgstr "Feed for taggen %s" +msgstr "Notismating for %1$s merket %2$s (RSS 1.0)" #: actions/showstream.php:129 #, php-format msgid "Notice feed for %s (RSS 1.0)" -msgstr "" +msgstr "Notismating for %s (RSS 1.0)" #: actions/showstream.php:136 #, php-format msgid "Notice feed for %s (RSS 2.0)" -msgstr "" +msgstr "Notismating for %s (RSS 2.0)" #: actions/showstream.php:143 #, php-format msgid "Notice feed for %s (Atom)" -msgstr "" +msgstr "Notismating for %s (Atom)" #: actions/showstream.php:148 #, fuzzy, php-format @@ -3616,6 +3616,11 @@ msgid "" "[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to " "follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" +"**%s** har en konto pÃ¥ %%%%site.name%%%%, en [mikrobloggingstjeneste] " +"(http://no.wikipedia.org/wiki/Mikroblogg) basert pÃ¥ det frie " +"programvareverktøyet [StatusNet](http://status.net/). [Bli med nÃ¥](%%%%" +"action.register%%%%) for Ã¥ følge **%s** og mange flere sine notiser. ([Les " +"mer](%%%%doc.help%%%%))" #: actions/showstream.php:248 #, php-format @@ -3624,11 +3629,14 @@ msgid "" "wikipedia.org/wiki/Micro-blogging) service based on the Free Software " "[StatusNet](http://status.net/) tool. " msgstr "" +"**%s** har en konto pÃ¥ %%%%site.name%%%%, en [mikrobloggingstjeneste] " +"(http://no.wikipedia.org/wiki/Mikroblogg) basert pÃ¥ det frie " +"programvareverktøyet [StatusNet](http://status.net/). " #: actions/showstream.php:305 -#, fuzzy, php-format +#, php-format msgid "Repeat of %s" -msgstr "Svar til %s" +msgstr "Repetisjon av %s" #: actions/silence.php:65 actions/unsilence.php:65 msgid "You cannot silence users on this site." @@ -3648,14 +3656,13 @@ msgid "Site name must have non-zero length." msgstr "" #: actions/siteadminpanel.php:141 -#, fuzzy msgid "You must have a valid contact email address." -msgstr "Ugyldig e-postadresse" +msgstr "Du mÃ¥ ha en gyldig e-postadresse." #: actions/siteadminpanel.php:159 #, php-format msgid "Unknown language \"%s\"." -msgstr "" +msgstr "Ukjent sprÃ¥k «%s»." #: actions/siteadminpanel.php:165 msgid "Minimum text limit is 140 characters." @@ -3667,11 +3674,11 @@ msgstr "" #: actions/siteadminpanel.php:221 msgid "General" -msgstr "" +msgstr "Generell" #: actions/siteadminpanel.php:224 msgid "Site name" -msgstr "" +msgstr "Nettstedsnavn" #: actions/siteadminpanel.php:225 msgid "The name of your site, like \"Yourcompany Microblog\"" @@ -3703,16 +3710,15 @@ msgstr "" #: actions/siteadminpanel.php:256 msgid "Default timezone" -msgstr "" +msgstr "Standard tidssone" #: actions/siteadminpanel.php:257 msgid "Default timezone for the site; usually UTC." -msgstr "" +msgstr "Standard tidssone for nettstedet; vanligvis UTC." #: actions/siteadminpanel.php:262 -#, fuzzy msgid "Default language" -msgstr "Foretrukket sprÃ¥k" +msgstr "StandardsprÃ¥k" #: actions/siteadminpanel.php:263 msgid "Site language when autodetection from browser settings is not available" @@ -4062,13 +4068,13 @@ msgstr "" msgid "Tag %s" msgstr "Tagger" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 #, fuzzy msgid "User profile" msgstr "Klarte ikke Ã¥ lagre profil." #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "" @@ -4106,9 +4112,8 @@ msgid "API method under construction." msgstr "API-metode under utvikling." #: actions/unblock.php:59 -#, fuzzy msgid "You haven't blocked that user." -msgstr "Du er allerede logget inn!" +msgstr "Du har ikke blokkert den brukeren." #: actions/unsandbox.php:72 msgid "User is not sandboxed." @@ -4136,24 +4141,24 @@ msgstr "" #: actions/useradminpanel.php:59 msgctxt "TITLE" msgid "User" -msgstr "" +msgstr "Bruker" #: actions/useradminpanel.php:70 msgid "User settings for this StatusNet site." -msgstr "" +msgstr "Brukerinnstillinger for dette StatusNet-nettstedet." #: actions/useradminpanel.php:149 msgid "Invalid bio limit. Must be numeric." -msgstr "" +msgstr "Ugyldig biografigrense. MÃ¥ være numerisk." #: actions/useradminpanel.php:155 msgid "Invalid welcome text. Max length is 255 characters." -msgstr "" +msgstr "Ugyldig velkomsttekst. Maks lengde er 255 tegn." #: actions/useradminpanel.php:165 #, php-format msgid "Invalid default subscripton: '%1$s' is not user." -msgstr "" +msgstr "Ugyldig standardabonnement: '%1$s' er ikke bruker." #: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108 #: lib/personalgroupnav.php:109 @@ -4162,48 +4167,43 @@ msgstr "Profil" #: actions/useradminpanel.php:222 msgid "Bio Limit" -msgstr "" +msgstr "Biografigrense" #: actions/useradminpanel.php:223 msgid "Maximum length of a profile bio in characters." -msgstr "" +msgstr "Maks lengde pÃ¥ en profilbiografi i tegn." #: actions/useradminpanel.php:231 -#, fuzzy msgid "New users" -msgstr "slett" +msgstr "Nye brukere" #: actions/useradminpanel.php:235 msgid "New user welcome" -msgstr "" +msgstr "Velkomst av ny bruker" #: actions/useradminpanel.php:236 msgid "Welcome text for new users (Max 255 chars)." -msgstr "" +msgstr "Velkomsttekst for nye brukere (Maks 255 tegn)." #: actions/useradminpanel.php:241 -#, fuzzy msgid "Default subscription" -msgstr "Alle abonnementer" +msgstr "Standardabonnement" #: actions/useradminpanel.php:242 -#, fuzzy msgid "Automatically subscribe new users to this user." -msgstr "" -"Abonner automatisk pÃ¥ de som abonnerer pÃ¥ meg (best for ikke-mennesker)" +msgstr "Legger automatisk til et abonnement pÃ¥ denne brukeren til nye brukere." #: actions/useradminpanel.php:251 -#, fuzzy msgid "Invitations" -msgstr "Bekreftelseskode" +msgstr "Invitasjoner" #: actions/useradminpanel.php:256 msgid "Invitations enabled" -msgstr "" +msgstr "Invitasjoner aktivert" #: actions/useradminpanel.php:258 msgid "Whether to allow users to invite new users." -msgstr "" +msgstr "Hvorvidt brukere tillates Ã¥ invitere nye brukere." #: actions/userauthorization.php:105 msgid "Authorize subscription" @@ -4218,7 +4218,7 @@ msgstr "" #: actions/userauthorization.php:196 actions/version.php:165 msgid "License" -msgstr "" +msgstr "Lisens" #: actions/userauthorization.php:217 msgid "Accept" @@ -4227,16 +4227,15 @@ msgstr "Godta" #: actions/userauthorization.php:218 lib/subscribeform.php:115 #: lib/subscribeform.php:139 msgid "Subscribe to this user" -msgstr "" +msgstr "Abonner pÃ¥ denne brukeren" #: actions/userauthorization.php:219 msgid "Reject" -msgstr "" +msgstr "Avvis" #: actions/userauthorization.php:220 -#, fuzzy msgid "Reject this subscription" -msgstr "Alle abonnementer" +msgstr "Avvis dette abonnementet" #: actions/userauthorization.php:232 msgid "No authorization request!" @@ -4312,7 +4311,7 @@ msgstr "" #: actions/userdesignsettings.php:282 msgid "Enjoy your hotdog!" -msgstr "" +msgstr "Bon appétit." #: actions/usergroups.php:64 #, fuzzy, php-format @@ -4321,17 +4320,17 @@ msgstr "Alle abonnementer" #: actions/usergroups.php:130 msgid "Search for more groups" -msgstr "" +msgstr "Søk etter flere grupper" #: actions/usergroups.php:157 -#, fuzzy, php-format +#, php-format msgid "%s is not a member of any group." -msgstr "Du er allerede logget inn!" +msgstr "%s er ikke medlem av noen gruppe." #: actions/usergroups.php:162 #, php-format msgid "Try [searching for groups](%%action.groupsearch%%) and joining them." -msgstr "" +msgstr "Prøv Ã¥ [søke etter grupper](%%action.groupsearch%%) og bli med i dem." #: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66 #: lib/atomusernoticefeed.php:72 @@ -4340,9 +4339,9 @@ msgid "Updates from %1$s on %2$s!" msgstr "Oppdateringar fra %1$s pÃ¥ %2$s!" #: actions/version.php:73 -#, fuzzy, php-format +#, php-format msgid "StatusNet %s" -msgstr "Statistikk" +msgstr "StatusNet %s" #: actions/version.php:153 #, php-format @@ -4350,10 +4349,12 @@ msgid "" "This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, " "Inc. and contributors." msgstr "" +"Dette nettstedet drives av %1$s versjon %2$s, Copyright 2008-2010 StatusNet, " +"Inc. og andre bidragsytere." #: actions/version.php:161 msgid "Contributors" -msgstr "" +msgstr "Bidragsytere" #: actions/version.php:168 msgid "" @@ -4380,30 +4381,29 @@ msgstr "" #: actions/version.php:189 msgid "Plugins" -msgstr "" +msgstr "Programtillegg" #: actions/version.php:196 lib/action.php:767 -#, fuzzy msgid "Version" -msgstr "Personlig" +msgstr "Versjon" #: actions/version.php:197 msgid "Author(s)" -msgstr "" +msgstr "Forfatter(e)" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4445,46 +4445,46 @@ msgstr "" msgid "Could not update message with new URI." msgstr "" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "" -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "" -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "" -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "" -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" -msgstr "" +msgstr "RT @%1$s %2$s" #: classes/Subscription.php:66 lib/oauthstore.php:465 msgid "You have been banned from subscribing." @@ -4496,7 +4496,7 @@ msgstr "" #: classes/Subscription.php:74 msgid "User has blocked you." -msgstr "" +msgstr "Bruker har blokkert deg." #: classes/Subscription.php:157 #, fuzzy @@ -4513,34 +4513,30 @@ msgstr "Klarte ikke Ã¥ lagre avatar-informasjonen" msgid "Couldn't delete subscription OMB token." msgstr "Klarte ikke Ã¥ lagre avatar-informasjonen" -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "" -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" -msgstr "" +msgstr "Velkommen til %1$s, @%2$s." -#: classes/User_group.php:477 -#, fuzzy +#: classes/User_group.php:480 msgid "Could not create group." -msgstr "Klarte ikke Ã¥ lagre avatar-informasjonen" +msgstr "Kunne ikke opprette gruppe." -#: classes/User_group.php:486 -#, fuzzy +#: classes/User_group.php:489 msgid "Could not set group URI." -msgstr "Klarte ikke Ã¥ lagre avatar-informasjonen" +msgstr "Kunne ikke stille inn gruppe-URI." -#: classes/User_group.php:507 -#, fuzzy +#: classes/User_group.php:510 msgid "Could not set group membership." -msgstr "Klarte ikke Ã¥ lagre avatar-informasjonen" +msgstr "Kunne ikke stille inn gruppemedlemskap." -#: classes/User_group.php:521 -#, fuzzy +#: classes/User_group.php:524 msgid "Could not save local group info." -msgstr "Klarte ikke Ã¥ lagre avatar-informasjonen" +msgstr "Kunne ikke lagre lokal gruppeinformasjon." #: lib/accountsettingsaction.php:108 msgid "Change your profile settings" @@ -4565,20 +4561,20 @@ msgstr "Klarte ikke Ã¥ lagre profil." #: lib/accountsettingsaction.php:128 msgid "Other" -msgstr "" +msgstr "Andre" #: lib/accountsettingsaction.php:128 msgid "Other options" -msgstr "" +msgstr "Andre valg" #: lib/action.php:144 -#, fuzzy, php-format +#, php-format msgid "%1$s - %2$s" -msgstr "%1$s sin status pÃ¥ %2$s" +msgstr "%1$s - %2$s" #: lib/action.php:159 msgid "Untitled page" -msgstr "" +msgstr "Side uten tittel" #: lib/action.php:424 msgid "Primary site navigation" @@ -4591,7 +4587,6 @@ msgid "Personal profile and friends timeline" msgstr "" #: lib/action.php:433 -#, fuzzy msgctxt "MENU" msgid "Personal" msgstr "Personlig" @@ -4605,10 +4600,9 @@ msgstr "Endre passordet ditt" #. TRANS: Tooltip for main menu option "Services" #: lib/action.php:440 -#, fuzzy msgctxt "TOOLTIP" msgid "Connect to services" -msgstr "Koble til" +msgstr "Koble til tjenester" #: lib/action.php:443 msgid "Connect" @@ -4618,10 +4612,9 @@ msgstr "Koble til" #: lib/action.php:446 msgctxt "TOOLTIP" msgid "Change site configuration" -msgstr "" +msgstr "Endre nettstedskonfigurasjon" #: lib/action.php:449 -#, fuzzy msgctxt "MENU" msgid "Admin" msgstr "Administrator" @@ -4747,7 +4740,7 @@ msgstr "" msgid "StatusNet software license" msgstr "" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4756,12 +4749,12 @@ msgstr "" "**%%site.name%%** er en mikrobloggingtjeneste av [%%site.broughtby%%](%%site." "broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** er en mikrobloggingtjeneste. " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4769,41 +4762,41 @@ msgid "" "org/licensing/licenses/agpl-3.0.html)." msgstr "" -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Alle " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "lisens." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Etter" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Før" @@ -4819,6 +4812,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -4832,12 +4829,12 @@ msgstr "" #. TRANS: Client error message #: lib/adminpanelaction.php:229 msgid "showForm() not implemented." -msgstr "" +msgstr "showForm() ikke implementert." #. TRANS: Client error message #: lib/adminpanelaction.php:259 msgid "saveSettings() not implemented." -msgstr "" +msgstr "saveSettings() ikke implementert." #. TRANS: Client error message #: lib/adminpanelaction.php:283 @@ -4851,10 +4848,9 @@ msgstr "" #. TRANS: Menu item for site administration #: lib/adminpanelaction.php:350 -#, fuzzy msgctxt "MENU" msgid "Site" -msgstr "Nettstedslogo" +msgstr "Nettsted" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:356 @@ -4871,22 +4867,22 @@ msgstr "Personlig" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:364 msgid "User configuration" -msgstr "" +msgstr "Brukerkonfigurasjon" #. TRANS: Menu item for site administration #: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115 msgid "User" -msgstr "" +msgstr "Bruker" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:372 msgid "Access configuration" -msgstr "" +msgstr "Tilgangskonfigurasjon" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:380 msgid "Paths configuration" -msgstr "" +msgstr "Stikonfigurasjon" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:388 @@ -4908,38 +4904,35 @@ msgstr "" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" #: lib/applicationeditform.php:136 msgid "Edit application" -msgstr "" +msgstr "Rediger program" #: lib/applicationeditform.php:184 msgid "Icon for this application" -msgstr "" +msgstr "Ikon for dette programmet" #: lib/applicationeditform.php:204 -#, fuzzy, php-format +#, php-format msgid "Describe your application in %d characters" -msgstr "Beskriv degselv og dine interesser med 140 tegn" +msgstr "Beskriv programmet ditt med %d tegn" #: lib/applicationeditform.php:207 -#, fuzzy msgid "Describe your application" -msgstr "Beskriv degselv og dine interesser med 140 tegn" +msgstr "Beskriv programmet ditt" #: lib/applicationeditform.php:216 -#, fuzzy msgid "Source URL" -msgstr "Kilde" +msgstr "Nettadresse til kilde" #: lib/applicationeditform.php:218 -#, fuzzy msgid "URL of the homepage of this application" -msgstr "URL til din hjemmeside, blogg, eller profil pÃ¥ annen nettside." +msgstr "Nettadresse til hjemmesiden for dette programmet" #: lib/applicationeditform.php:224 msgid "Organization responsible for this application" @@ -4956,298 +4949,306 @@ msgstr "" #: lib/applicationeditform.php:258 msgid "Browser" -msgstr "" +msgstr "Nettleser" #: lib/applicationeditform.php:274 msgid "Desktop" -msgstr "" +msgstr "Skrivebord" #: lib/applicationeditform.php:275 msgid "Type of application, browser or desktop" -msgstr "" +msgstr "Type program, nettleser eller skrivebord" #: lib/applicationeditform.php:297 msgid "Read-only" -msgstr "" +msgstr "Skrivebeskyttet" #: lib/applicationeditform.php:315 msgid "Read-write" -msgstr "" +msgstr "Les og skriv" #: lib/applicationeditform.php:316 msgid "Default access for this application: read-only, or read-write" msgstr "" +"Standardtilgang for dette programmet: skrivebeskyttet eller lese- og " +"skrivetilgang" #: lib/applicationlist.php:154 -#, fuzzy msgid "Revoke" -msgstr "Fjern" +msgstr "Tilbakekall" #: lib/attachmentlist.php:87 msgid "Attachments" -msgstr "" +msgstr "Vedlegg" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" -msgstr "" +msgstr "Forfatter" -#: lib/attachmentlist.php:278 -#, fuzzy +#: lib/attachmentlist.php:276 msgid "Provider" -msgstr "Profil" +msgstr "Leverandør" #: lib/attachmentnoticesection.php:67 msgid "Notices where this attachment appears" -msgstr "" +msgstr "Notiser hvor dette vedlegget forekommer" #: lib/attachmenttagcloudsection.php:48 msgid "Tags for this attachment" msgstr "" #: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225 -#, fuzzy msgid "Password changing failed" -msgstr "Passordet ble lagret" +msgstr "Endring av passord mislyktes" #: lib/authenticationplugin.php:235 -#, fuzzy msgid "Password changing is not allowed" -msgstr "Passordet ble lagret" +msgstr "Endring av passord er ikke tillatt" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "" -#: lib/command.php:44 +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "Notis med den id'en finnes ikke" + +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "Bruker har ingen siste notis" + +#: lib/command.php:125 +#, php-format +msgid "Could not find a user with nickname %s" +msgstr "Fant ingen bruker med kallenavn %s" + +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Fant ingen bruker med kallenavn %s" + +#: lib/command.php:176 msgid "Sorry, this command is not yet implemented." msgstr "" -#: lib/command.php:88 -#, fuzzy, php-format -msgid "Could not find a user with nickname %s" -msgstr "Klarte ikke Ã¥ oppdatere bruker med bekreftet e-post." - -#: lib/command.php:92 +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" -msgstr "" +msgstr "Det gir ikke sÃ¥ mye mening Ã¥ knuffe seg selv." -#: lib/command.php:99 +#: lib/command.php:228 #, fuzzy, php-format msgid "Nudge sent to %s" msgstr "Svar til %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" "Subscribers: %2$s\n" "Notices: %3$s" msgstr "" +"Abonnement: %1$s\n" +"Abonnenter: %2$s\n" +"Notiser: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -#, fuzzy -msgid "User has no last notice" -msgstr "Brukeren har ingen profil." - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." -msgstr "" +msgstr "Notis markert som favoritt." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Du er allerede medlem av den gruppen." -#: lib/command.php:231 +#: lib/command.php:331 #, fuzzy, php-format msgid "Could not join user %s to group %s" msgstr "Klarte ikke Ã¥ oppdatere bruker." -#: lib/command.php:236 +#: lib/command.php:336 #, fuzzy, php-format msgid "%s joined group %s" msgstr "%1$s sin status pÃ¥ %2$s" -#: lib/command.php:275 +#: lib/command.php:373 #, fuzzy, php-format msgid "Could not remove user %s to group %s" msgstr "Klarte ikke Ã¥ oppdatere bruker." -#: lib/command.php:280 -#, fuzzy, php-format +#: lib/command.php:378 +#, php-format msgid "%s left group %s" -msgstr "%1$s sin status pÃ¥ %2$s" +msgstr "%s forlot gruppen %s" -#: lib/command.php:309 -#, fuzzy, php-format +#: lib/command.php:401 +#, php-format msgid "Fullname: %s" -msgstr "Fullt navn" +msgstr "Fullt navn: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" -msgstr "" +msgstr "Posisjon: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" -msgstr "" +msgstr "Hjemmeside: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" +msgstr "Om: %s" + +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." msgstr "" -#: lib/command.php:349 +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" -msgstr "" +msgstr "Melding for lang - maks er %d tegn, du sendte %d" -#: lib/command.php:367 -#, fuzzy, php-format +#: lib/command.php:468 +#, php-format msgid "Direct message to %s sent" -msgstr "Direktemeldinger til %s" +msgstr "Direktemelding til %s sendt" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." -msgstr "" +msgstr "Feil ved sending av direktemelding." -#: lib/command.php:413 -#, fuzzy +#: lib/command.php:490 msgid "Cannot repeat your own notice" -msgstr "Kan ikke slette notisen." +msgstr "Kan ikke repetere din egen notis" -#: lib/command.php:418 -#, fuzzy +#: lib/command.php:495 msgid "Already repeated that notice" -msgstr "Kan ikke slette notisen." +msgstr "Allerede repetert den notisen" -#: lib/command.php:426 -#, fuzzy, php-format +#: lib/command.php:503 +#, php-format msgid "Notice from %s repeated" -msgstr "Nytt nick" +msgstr "Notis fra %s repetert" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." -msgstr "" +msgstr "Feil ved repetering av notis." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" -msgstr "" +msgstr "Notis for lang - maks er %d tegn, du sendte %d" -#: lib/command.php:491 -#, fuzzy, php-format +#: lib/command.php:545 +#, php-format msgid "Reply to %s sent" -msgstr "Svar til %s" - -#: lib/command.php:493 -msgid "Error saving notice." -msgstr "" +msgstr "Svar til %s sendt" #: lib/command.php:547 +msgid "Error saving notice." +msgstr "Feil ved lagring av notis." + +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "" -#: lib/command.php:554 lib/command.php:589 -#, fuzzy -msgid "No such user" -msgstr "Ingen slik bruker" +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "" -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "" -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "" -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "" -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "Svar til %s" -#: lib/command.php:709 +#: lib/command.php:752 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Ikke autorisert." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Ikke autorisert." msgstr[1] "Ikke autorisert." -#: lib/command.php:731 +#: lib/command.php:774 #, fuzzy msgid "No one is subscribed to you." msgstr "Svar til %s" -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Svar til %s" msgstr[1] "Svar til %s" -#: lib/command.php:753 +#: lib/command.php:796 #, fuzzy msgid "You are not a member of any groups." msgstr "Du er allerede logget inn!" -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Du er allerede logget inn!" msgstr[1] "Du er allerede logget inn!" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5289,20 +5290,20 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 #, fuzzy msgid "No configuration file found. " msgstr "Fant ikke bekreftelseskode." -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "" @@ -5482,49 +5483,49 @@ msgstr "" msgid "This page is not available in a media type you accept" msgstr "Denne siden er ikke tilgjengelig i en mediatype du aksepterer" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Bildefilformatet støttes ikke." + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Filen er for stor. Maks filstørrelse er %s." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Delvis opplasting." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Systemfeil ved opplasting av fil." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Ikke et bilde eller en korrupt fil." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Bildefilformatet støttes ikke." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Mistet filen vÃ¥r." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Ukjent filtype" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "MB" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "kB" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "Ukjent innbokskilde %d." @@ -5804,7 +5805,7 @@ msgstr "" "engasjere andre brukere i en samtale. Personer kan sende deg meldinger som " "bare du kan se." -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "fra" @@ -5956,23 +5957,23 @@ msgstr "V" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Repetert av" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Svar pÃ¥ denne notisen" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Svar" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Notis repetert" @@ -6115,7 +6116,7 @@ msgstr "Repeter denne notisen" msgid "Revoke the \"%s\" role from this user" msgstr "" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6245,90 +6246,94 @@ msgstr "" msgid "Unsubscribe" msgstr "" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 #, fuzzy msgid "Edit Avatar" msgstr "Brukerbilde" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Endre profilinnstillinger" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Rediger" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Send en direktemelding til denne brukeren" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Melding" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Moderer" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 msgid "User role" msgstr "Brukerrolle" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "Administrator" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "Moderator" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "noen fÃ¥ sekunder siden" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "omtrent ett minutt siden" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "omtrent %d minutter siden" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "omtrent én time siden" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "omtrent %d timer siden" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "omtrent én dag siden" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "omtrent %d dager siden" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "omtrent én mÃ¥ned siden" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "omtrent %d mÃ¥neder siden" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "omtrent ett Ã¥r siden" @@ -6342,7 +6347,7 @@ msgstr "%s er ikke en gyldig farge." msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s er ikke en gyldig farge. Bruk 3 eller 6 heksadesimale tegn." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "Melding for lang - maks er %1$d tegn, du sendte %2$d." diff --git a/locale/nl/LC_MESSAGES/statusnet.po b/locale/nl/LC_MESSAGES/statusnet.po index c73771f84a..745e666c20 100644 --- a/locale/nl/LC_MESSAGES/statusnet.po +++ b/locale/nl/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:50:33+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:17+0000\n" "Language-Team: Dutch\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: out-statusnet\n" @@ -94,7 +94,7 @@ msgstr "Deze pagina bestaat niet" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -103,10 +103,8 @@ msgstr "Deze pagina bestaat niet" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Onbekende gebruiker." @@ -206,14 +204,14 @@ msgstr "Updates van %1$s en vrienden op %2$s." #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "De API-functie is niet aangetroffen." @@ -226,8 +224,8 @@ msgstr "De API-functie is niet aangetroffen." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Deze methode vereist een POST." @@ -258,7 +256,7 @@ msgid "Could not save profile." msgstr "Het was niet mogelijk het profiel op te slaan." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -346,7 +344,7 @@ msgstr "Er is geen status gevonden met dit ID." msgid "This status is already a favorite." msgstr "Deze mededeling staat al in uw favorietenlijst." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Het was niet mogelijk een favoriet aan te maken." @@ -469,7 +467,7 @@ msgstr "De groep is niet aangetroffen!" msgid "You are already a member of that group." msgstr "U bent al lid van die groep." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "Een beheerder heeft ingesteld dat u geen lid mag worden van die groep." @@ -519,7 +517,7 @@ msgstr "Ongeldig token." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -594,9 +592,9 @@ msgstr "Gebruiker" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Gebruikersnaam" @@ -667,12 +665,12 @@ msgstr "" msgid "Unsupported format." msgstr "Niet-ondersteund bestandsformaat." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Favorieten van %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%1$s updates op de favorietenlijst geplaatst door %2$s / %3$s" @@ -682,7 +680,7 @@ msgstr "%1$s updates op de favorietenlijst geplaatst door %2$s / %3$s" msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Updates over %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s updates die een reactie zijn op updates van %2$s / %3$s." @@ -692,7 +690,7 @@ msgstr "%1$s updates die een reactie zijn op updates van %2$s / %3$s." msgid "%s public timeline" msgstr "%s publieke tijdlijn" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s updates van iedereen" @@ -707,12 +705,12 @@ msgstr "Herhaald naar %s" msgid "Repeats of %s" msgstr "Herhaald van %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Mededelingen met het label %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Updates met het label %1$s op %2$s!" @@ -740,7 +738,7 @@ msgstr "Geen afmeting." msgid "Invalid size." msgstr "Ongeldige afmetingen." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Avatar" @@ -773,7 +771,7 @@ msgid "Preview" msgstr "Voorvertoning" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Verwijderen" @@ -857,8 +855,8 @@ msgstr "Het was niet mogelijk om de blokkadeinformatie op te slaan." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "De opgegeven groep bestaat niet." @@ -959,7 +957,7 @@ msgstr "U bent niet de eigenaar van deze applicatie." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Er is een probleem met uw sessietoken." @@ -1020,7 +1018,7 @@ msgstr "Weet u zeker dat u deze aankondiging wilt verwijderen?" msgid "Do not delete this notice" msgstr "Deze mededeling niet verwijderen" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Deze mededeling verwijderen" @@ -1274,7 +1272,7 @@ msgstr "de beschrijving is te lang (maximaal %d tekens)" msgid "Could not update group." msgstr "Het was niet mogelijk de groep bij te werken." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Het was niet mogelijk de aliassen aan te maken." @@ -1987,7 +1985,7 @@ msgstr "Nieuwe gebruikers uitnodigen" msgid "You are already subscribed to these users:" msgstr "U bent als geabonneerd op deze gebruikers:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2120,7 +2118,7 @@ msgstr "%1$s is lid geworden van de groep %2$s" msgid "You must be logged in to leave a group." msgstr "U moet aangemeld zijn om een groep te kunnen verlaten." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "U bent geen lid van deze groep" @@ -2235,12 +2233,12 @@ msgstr "Gebruik dit formulier om een nieuwe groep aan te maken." msgid "New message" msgstr "Nieuw bericht" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "U kunt geen bericht naar deze gebruiker zenden." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Geen inhoud!" @@ -2248,7 +2246,7 @@ msgstr "Geen inhoud!" msgid "No recipient specified." msgstr "Er is geen ontvanger aangegeven." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "Stuur geen berichten naar uzelf. Zeg het gewoon in uw hoofd." @@ -2262,7 +2260,7 @@ msgstr "Bericht verzonden." msgid "Direct message to %s sent." msgstr "Het directe bericht aan %s is verzonden." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Er is een Ajax-fout opgetreden" @@ -2388,7 +2386,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Mededeling heeft geen profiel" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "Status van %1$s op %2$s" @@ -2401,8 +2399,8 @@ msgstr "inhoudstype " msgid "Only " msgstr "Alleen " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Geen ondersteund gegevensformaat." @@ -2533,7 +2531,7 @@ msgstr "Het oude wachtwoord is onjuist" msgid "Error saving user; invalid." msgstr "Fout bij opslaan gebruiker; ongeldig." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Het was niet mogelijk het nieuwe wachtwoord op te slaan." @@ -2749,8 +2747,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 kleine letters of cijfers, geen leestekens of spaties" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Volledige naam" @@ -2777,9 +2775,9 @@ msgid "Bio" msgstr "Beschrijving" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Locatie" @@ -2793,7 +2791,7 @@ msgstr "Mijn huidige locatie weergeven bij het plaatsen van mededelingen" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Labels" @@ -3042,7 +3040,7 @@ msgstr "Wachtwoord herstellen" msgid "Recover password" msgstr "Wachtwoord herstellen" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Wachtwoordherstel aangevraagd" @@ -3062,21 +3060,21 @@ msgstr "Herstellen" msgid "Enter a nickname or email address." msgstr "Voer een gebruikersnaam of e-mailadres in." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" "Er bestaat geen gebruiker met het opgegeven e-mailadres of de opgegeven " "gebruikersnaam." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Die gebruiker heeft geen e-mailadres geregistreerd." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Er is een fout opgetreden bij het opslaan van de adresbevestiging." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3084,23 +3082,23 @@ msgstr "" "De instructies om uw wachtwoord te herstellen zijn verstuurd naar het e-" "mailadres dat voor uw gebruiker is geregistreerd." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Het wachtwoord is onverwacht opnieuw ingesteld." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Het wachtwoord moet uit zes of meer tekens bestaan." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Het wachtwoord en de bevestiging komen niet overeen." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Er is een fout opgetreden tijdens het instellen van de gebruiker." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Het nieuwe wachtwoord is opgeslagen. U bent nu aangemeld." @@ -3264,7 +3262,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "De URL van uw profiel bij een andere, compatibele microblogdienst" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Abonneren" @@ -3302,7 +3300,7 @@ msgstr "U kunt uw eigen mededeling niet herhalen." msgid "You already repeated that notice." msgstr "U hent die mededeling al herhaald." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Herhaald" @@ -3445,7 +3443,7 @@ msgstr "Organisatie" msgid "Description" msgstr "Beschrijving" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Statistieken" @@ -3568,67 +3566,67 @@ msgstr "%s groep" msgid "%1$s group, page %2$d" msgstr "Groep %1$s, pagina %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Groepsprofiel" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Opmerking" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Aliassen" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Groepshandelingen" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Mededelingenfeed voor groep %s (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Mededelingenfeed voor groep %s (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Mededelingenfeed voor groep %s (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "Vriend van een vriend voor de groep %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Leden" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(geen)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Alle leden" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Aangemaakt" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3644,7 +3642,7 @@ msgstr "" "lid te worden van deze groep en nog veel meer! [Meer lezen...](%%%%doc.help%%" "%%)" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3657,7 +3655,7 @@ msgstr "" "[StatusNet](http://status.net/). De leden wisselen korte mededelingen uit " "over hun ervaringen en interesses. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Beheerders" @@ -4218,12 +4216,12 @@ msgstr "Geen ID-argument." msgid "Tag %s" msgstr "Label %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Gebruikersprofiel" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Foto" @@ -4568,7 +4566,7 @@ msgstr "Versie" msgid "Author(s)" msgstr "Auteur(s)" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " @@ -4577,13 +4575,13 @@ msgstr "" "Bestanden mogen niet groter zijn dan %d bytes, en uw bestand was %d bytes. " "Probeer een kleinere versie te uploaden." -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" "Een bestand van deze grootte overschijdt uw gebruikersquota van %d bytes." -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4622,31 +4620,31 @@ msgstr "Het was niet mogelijk het bericht in te voegen." msgid "Could not update message with new URI." msgstr "Het was niet mogelijk het bericht bij te werken met de nieuwe URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Er is een databasefout opgetreden bij de invoer van de hashtag: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "" "Er is een probleem opgetreden bij het opslaan van de mededeling. Deze is te " "lang." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "" "Er was een probleem bij het opslaan van de mededeling. De gebruiker is " "onbekend." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "U hebt te snel te veel mededelingen verstuurd. Kom even op adem en probeer " "het over enige tijd weer." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4654,22 +4652,22 @@ msgstr "" "Te veel duplicaatberichten te snel achter elkaar. Neem een adempauze en " "plaats over een aantal minuten pas weer een bericht." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "" "U bent geblokkeerd en mag geen mededelingen meer achterlaten op deze site." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Er is een probleem opgetreden bij het opslaan van de mededeling." -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "" "Er is een probleem opgetreden bij het opslaan van het Postvak IN van de " "groep." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4699,28 +4697,28 @@ msgid "Couldn't delete subscription OMB token." msgstr "" "Het was niet mogelijk om het OMB-token voor het abonnement te verwijderen." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Kon abonnement niet verwijderen." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Welkom bij %1$s, @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Het was niet mogelijk de groep aan te maken." -#: classes/User_group.php:486 +#: classes/User_group.php:489 msgid "Could not set group URI." msgstr "Het was niet mogelijk de groeps-URI in te stellen." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Het was niet mogelijk het groepslidmaatschap in te stellen." -#: classes/User_group.php:521 +#: classes/User_group.php:524 msgid "Could not save local group info." msgstr "Het was niet mogelijk de lokale groepsinformatie op te slaan." @@ -4924,7 +4922,7 @@ msgstr "Widget" msgid "StatusNet software license" msgstr "Licentie van de StatusNet-software" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4933,12 +4931,12 @@ msgstr "" "**%%site.name%%** is een microblogdienst van [%%site.broughtby%%](%%site." "broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** is een microblogdienst. " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4949,45 +4947,45 @@ msgstr "" "versie %s, beschikbaar onder de [GNU Affero General Public License](http://" "www.fsf.org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Licentie voor siteinhoud" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "Inhoud en gegevens van %1$s zijn persoonlijk en vertrouwelijk." -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" "Auteursrechten op inhoud en gegevens rusten bij %1$s. Alle rechten " "voorbehouden." -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" "Auteursrechten op inhoud en gegevens rusten bij de respectievelijke " "gebruikers. Alle rechten voorbehouden." -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Alle " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "licentie." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Paginering" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Later" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Eerder" @@ -5003,6 +5001,10 @@ msgstr "Het is nog niet mogelijk ingebedde XML-inhoud te verwerken" msgid "Can't handle embedded Base64 content yet." msgstr "Het is nog niet mogelijk ingebedde Base64-inhoud te verwerken" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5091,7 +5093,7 @@ msgstr "" "Het API-programma heeft lezen-en-schrijventoegang nodig, maar u hebt alleen " "maar leestoegang." -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5167,11 +5169,11 @@ msgstr "Intrekken" msgid "Attachments" msgstr "Bijlagen" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Auteur" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Provider" @@ -5191,37 +5193,50 @@ msgstr "Wachtwoord wijzigen is mislukt" msgid "Password changing is not allowed" msgstr "Wachtwoord wijzigen is niet toegestaan" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Commandoresultaten" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Het commando is uitgevoerd" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Het uitvoeren van het commando is mislukt" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Dit commando is nog niet geïmplementeerd." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "Er bestaat geen mededeling met dat ID" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "Deze gebruiker heeft geen laatste mededeling" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "De gebruiker %s is niet aangetroffen" -#: lib/command.php:92 +#: lib/command.php:143 +#, php-format +msgid "Could not find a local user with nickname %s" +msgstr "De lokale gebruiker %s is niet aangetroffen" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Dit commando is nog niet geïmplementeerd." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "Het heeft niet zoveel zin om uzelf te porren..." -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "De por naar %s is verzonden" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5232,202 +5247,202 @@ msgstr "" "Abonnees: %2$s\n" "Mededelingen: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "Er bestaat geen mededeling met dat ID" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "Deze gebruiker heeft geen laatste mededeling" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "De mededeling is op de favorietenlijst geplaatst." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "U bent al lid van deze groep" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Het was niet mogelijk om de gebruiker %s toe te voegen aan de groep %s" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s is lid geworden van de groep %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "De gebruiker %s kon niet uit de groep %s verwijderd worden" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s heeft de groep %s verlaten" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Volledige naam: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Locatie: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Thuispagina: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Over: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" +"%s is een profiel op afstand. U kunt alle privéberichten verzenden aan " +"gebruikers op dezelfde server." + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" "Het bericht te is lang. De maximale lengte is %d tekens. De lengte van uw " "bericht was %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Het directe bericht aan %s is verzonden" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Er is een fout opgetreden bij het verzonden van het directe bericht." -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "U kunt uw eigen mededelingen niet herhalen." -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "U hebt die mededeling al herhaald." -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "De mededeling van %s is herhaald" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "Er is een fout opgetreden bij het herhalen van de mededeling." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" "De mededeling is te lang. De maximale lengte is %d tekens. Uw mededeling " "bevatte %d tekens" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "Het antwoord aan %s is verzonden" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "Er is een fout opgetreden bij het opslaan van de mededeling." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Geef de naam op van de gebruiker waarop u wilt abonneren" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "De opgegeven gebruiker bestaat niet" +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "Abonneren op OMB-profielen op commando is niet mogelijk." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Geabonneerd op %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "" "Geef de naam op van de gebruiker waarvoor u het abonnement wilt opzeggen" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Uw abonnement op %s is opgezegd" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Dit commando is nog niet geïmplementeerd." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Notificaties uitgeschakeld." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Het is niet mogelijk de mededelingen uit te schakelen." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Notificaties ingeschakeld." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Het is niet mogelijk de notificatie uit te schakelen." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "Het aanmeldcommando is uitgeschakeld" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" "Deze verwijzing kan slechts één keer gebruikt worden en is twee minuten " "geldig: %s" -#: lib/command.php:692 +#: lib/command.php:735 #, php-format msgid "Unsubscribed %s" msgstr "Het abonnement van %s is opgeheven" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "U bent op geen enkele gebruiker geabonneerd." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "U bent geabonneerd op deze gebruiker:" msgstr[1] "U bent geabonneerd op deze gebruikers:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "Niemand heeft een abonnenment op u." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Deze gebruiker is op u geabonneerd:" msgstr[1] "Deze gebruikers zijn op u geabonneerd:" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "U bent lid van geen enkele groep." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "U bent lid van deze groep:" msgstr[1] "U bent lid van deze groepen:" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5509,20 +5524,20 @@ msgstr "" "tracks - nog niet beschikbaar\n" "tracking - nog niet beschikbaar\n" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Er is geen instellingenbestand aangetroffen. " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "Er is gezocht naar instellingenbestanden op de volgende plaatsen: " -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" "U kunt proberen de installer uit te voeren om dit probleem op te lossen." -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "Naar het installatieprogramma gaan." @@ -5700,49 +5715,49 @@ msgstr "Labels in de groepsmededelingen van %s" msgid "This page is not available in a media type you accept" msgstr "Deze pagina is niet beschikbaar in een mediatype dat u accepteert" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Niet ondersteund beeldbestandsformaat." + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Dat bestand is te groot. De maximale bestandsgrootte is %s." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Gedeeltelijke upload." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Er is een systeemfout opgetreden tijdens het uploaden van het bestand." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Het bestand is geen afbeelding of het bestand is beschadigd." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Niet ondersteund beeldbestandsformaat." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Het bestand is zoekgeraakt." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Onbekend bestandstype" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "MB" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "kB" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "Onbekende bron Postvak IN %d." @@ -6024,7 +6039,7 @@ msgstr "" "U hebt geen privéberichten. U kunt privéberichten verzenden aan andere " "gebruikers. Mensen kunnen u privéberichten sturen die alleen u kunt lezen." -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "van" @@ -6182,23 +6197,23 @@ msgstr "W" msgid "at" msgstr "op" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "in context" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Herhaald door" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Op deze mededeling antwoorden" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Antwoorden" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Mededeling herhaald" @@ -6341,7 +6356,7 @@ msgstr "Deze mededeling herhalen" msgid "Revoke the \"%s\" role from this user" msgstr "De gebruikersrol \"%s\" voor deze gebruiker intrekken" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "Er is geen gebruiker gedefinieerd voor single-usermodus." @@ -6467,89 +6482,93 @@ msgstr "Uitschrijven van deze gebruiker" msgid "Unsubscribe" msgstr "Abonnement opheffen" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Avatar bewerken" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Gebruikershandelingen" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Profielinstellingen bewerken" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Bewerken" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Deze gebruiker een direct bericht zenden" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Bericht" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Modereren" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 msgid "User role" msgstr "Gebruikersrol" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "Beheerder" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "Moderator" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "een paar seconden geleden" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "ongeveer een minuut geleden" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "ongeveer %d minuten geleden" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "ongeveer een uur geleden" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "ongeveer %d uur geleden" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "ongeveer een dag geleden" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "ongeveer %d dagen geleden" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "ongeveer een maand geleden" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "ongeveer %d maanden geleden" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "ongeveer een jaar geleden" @@ -6563,7 +6582,7 @@ msgstr "%s is geen geldige kleur." msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s is geen geldige kleur. Gebruik drie of zes hexadecimale tekens." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/nn/LC_MESSAGES/statusnet.po b/locale/nn/LC_MESSAGES/statusnet.po index a16e156496..4b1110eae2 100644 --- a/locale/nn/LC_MESSAGES/statusnet.po +++ b/locale/nn/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:50:30+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:14+0000\n" "Language-Team: Norwegian Nynorsk\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nn\n" "X-Message-Group: out-statusnet\n" @@ -100,7 +100,7 @@ msgstr "Dette emneord finst ikkje." #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -109,10 +109,8 @@ msgstr "Dette emneord finst ikkje." #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Brukaren finst ikkje." @@ -204,14 +202,14 @@ msgstr "Oppdateringar frÃ¥ %1$s og vener pÃ¥ %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "Fann ikkje API-metode." @@ -225,8 +223,8 @@ msgstr "Fann ikkje API-metode." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Dette krev ein POST." @@ -257,7 +255,7 @@ msgid "Could not save profile." msgstr "Kan ikkje lagra profil." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -345,7 +343,7 @@ msgstr "Fann ingen status med den ID-en." msgid "This status is already a favorite." msgstr "Denne notisen er alt ein favoritt!" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Kunne ikkje lagre favoritt." @@ -469,7 +467,7 @@ msgstr "Fann ikkje API-metode." msgid "You are already a member of that group." msgstr "Du er allereie medlem av den gruppa" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -521,7 +519,7 @@ msgstr "Ugyldig storleik." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -588,9 +586,9 @@ msgstr "Konto" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Kallenamn" @@ -664,12 +662,12 @@ msgstr "" msgid "Unsupported format." msgstr "Støttar ikkje bileteformatet." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, fuzzy, php-format msgid "%1$s / Favorites from %2$s" msgstr "%s / Favorittar frÃ¥ %s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%s oppdateringar favorisert av %s / %s." @@ -679,7 +677,7 @@ msgstr "%s oppdateringar favorisert av %s / %s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Oppdateringar som svarar til %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s oppdateringar som svarar pÃ¥ oppdateringar frÃ¥ %2$s / %3$s." @@ -689,7 +687,7 @@ msgstr "%1$s oppdateringar som svarar pÃ¥ oppdateringar frÃ¥ %2$s / %3$s." msgid "%s public timeline" msgstr "%s offentleg tidsline" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s oppdateringar frÃ¥ alle saman!" @@ -704,12 +702,12 @@ msgstr "Svar til %s" msgid "Repeats of %s" msgstr "Svar til %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Notisar merka med %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, fuzzy, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Oppdateringar frÃ¥ %1$s pÃ¥ %2$s!" @@ -738,7 +736,7 @@ msgstr "Ingen storleik." msgid "Invalid size." msgstr "Ugyldig storleik." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Brukarbilete" @@ -770,7 +768,7 @@ msgid "Preview" msgstr "Forhandsvis" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Slett" @@ -853,8 +851,8 @@ msgstr "Lagring av informasjon feila." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Denne gruppa finst ikkje." @@ -963,7 +961,7 @@ msgstr "Du er ikkje medlem av den gruppa." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Det var eit problem med sesjons billetten din." @@ -1026,7 +1024,7 @@ msgstr "Sikker pÃ¥ at du vil sletta notisen?" msgid "Do not delete this notice" msgstr "Kan ikkje sletta notisen." -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Slett denne notisen" @@ -1301,7 +1299,7 @@ msgstr "skildringa er for lang (maks 140 teikn)." msgid "Could not update group." msgstr "Kann ikkje oppdatera gruppa." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 #, fuzzy msgid "Could not create aliases." msgstr "Kunne ikkje lagre favoritt." @@ -2014,7 +2012,7 @@ msgstr "Invitér nye brukarar" msgid "You are already subscribed to these users:" msgstr "Du tingar allereie oppdatering frÃ¥ desse brukarane:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2142,7 +2140,7 @@ msgstr "%s blei medlem av gruppe %s" msgid "You must be logged in to leave a group." msgstr "Du mÃ¥ være innlogga for Ã¥ melde deg ut av ei gruppe." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Du er ikkje medlem av den gruppa." @@ -2261,12 +2259,12 @@ msgstr "Bruk dette skjemaet for Ã¥ lage ein ny gruppe." msgid "New message" msgstr "Ny melding" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Du kan ikkje sende melding til denne brukaren." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Ingen innhald." @@ -2274,7 +2272,7 @@ msgstr "Ingen innhald." msgid "No recipient specified." msgstr "Ingen mottakar spesifisert." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2291,7 +2289,7 @@ msgstr "Melding" msgid "Direct message to %s sent." msgstr "Direkte melding til %s sendt" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Ajax feil" @@ -2409,7 +2407,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Notisen har ingen profil" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s sin status pÃ¥ %2$s" @@ -2423,8 +2421,8 @@ msgstr "Kopla til" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Ikkje eit støtta dataformat." @@ -2562,7 +2560,7 @@ msgstr "Det gamle passordet stemmer ikkje" msgid "Error saving user; invalid." msgstr "Feil ved lagring av brukar; fungerer ikkje." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Klarar ikkje lagra nytt passord." @@ -2788,8 +2786,8 @@ msgstr "" "1-64 smÃ¥ bokstavar eller tal, ingen punktum (og liknande) eller mellomrom" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Fullt namn" @@ -2817,9 +2815,9 @@ msgid "Bio" msgstr "Om meg" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Plassering" @@ -2833,7 +2831,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Merkelappar" @@ -3066,7 +3064,7 @@ msgstr "Tilbakestill passord" msgid "Recover password" msgstr "Hent fram passord" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Passord opphenting etterspurt" @@ -3086,19 +3084,19 @@ msgstr "Avbryt" msgid "Enter a nickname or email address." msgstr "Skriv inn kallenamn eller epostadresse." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "Ingen brukar med den epostadressa eller det brukarnamnet." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Ingen registrert epostadresse for den brukaren." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Feil med lagring av adressestadfesting." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3106,23 +3104,23 @@ msgstr "" "Instruksjonar for Ã¥ fÃ¥ att passordet ditt er send til epostadressa som er " "lagra i kontoen din." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Uventa passordnullstilling." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Passord mÃ¥ vera 6 tekn eller meir." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Passord og stadfesting stemmer ikkje." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Feil ved Ã¥ setja brukar." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Lagra det nye passordet. Du er logga inn." @@ -3288,7 +3286,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "URL til profilsida di pÃ¥ ei anna kompatibel mikrobloggingteneste." #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Ting" @@ -3331,7 +3329,7 @@ msgstr "Du kan ikkje registrera deg om du ikkje godtek vilkÃ¥ra i lisensen." msgid "You already repeated that notice." msgstr "Du har allereie blokkert denne brukaren." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 #, fuzzy msgid "Repeated" msgstr "Lag" @@ -3480,7 +3478,7 @@ msgstr "Paginering" msgid "Description" msgstr "Beskriving" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Statistikk" @@ -3592,68 +3590,68 @@ msgstr "%s gruppe" msgid "%1$s group, page %2$d" msgstr "%s medlemmar i gruppa, side %d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Gruppe profil" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Merknad" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Gruppe handlingar" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Notisstraum for %s gruppa" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Notisstraum for %s gruppa" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "Notisstraum for %s gruppa" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "Utboks for %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Medlemmar" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Ingen)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Alle medlemmar" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 #, fuzzy msgid "Created" msgstr "Lag" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3663,7 +3661,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3674,7 +3672,7 @@ msgstr "" "**%s** er ei brukargruppe pÃ¥ %%%%site.name%%%%, ei [mikroblogging](http://en." "wikipedia.org/wiki/Micro-blogging)-teneste" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 #, fuzzy msgid "Admins" msgstr "Administrator" @@ -4222,12 +4220,12 @@ msgstr "Manglar argumentet ID." msgid "Tag %s" msgstr "Merkelapp %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Brukarprofil" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Bilete" @@ -4570,19 +4568,19 @@ msgstr "Personleg" msgid "Author(s)" msgstr "" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4625,27 +4623,27 @@ msgstr "Kunne ikkje lagre melding." msgid "Could not update message with new URI." msgstr "Kunne ikkje oppdatere melding med ny URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "databasefeil ved innsetjing av skigardmerkelapp (#merkelapp): %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 #, fuzzy msgid "Problem saving notice. Too long." msgstr "Eit problem oppstod ved lagring av notis." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Feil ved lagring av notis. Ukjend brukar." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "For mange notisar for raskt; tek ei pause, og prøv igjen om eit par minutt." -#: classes/Notice.php:256 +#: classes/Notice.php:259 #, fuzzy msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " @@ -4653,20 +4651,20 @@ msgid "" msgstr "" "For mange notisar for raskt; tek ei pause, og prøv igjen om eit par minutt." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Du kan ikkje lengre legge inn notisar pÃ¥ denne sida." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Eit problem oppstod ved lagring av notis." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "Eit problem oppstod ved lagring av notis." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%1$s (%2$s)" @@ -4699,29 +4697,29 @@ msgstr "Kan ikkje sletta tinging." msgid "Couldn't delete subscription OMB token." msgstr "Kan ikkje sletta tinging." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Kan ikkje sletta tinging." -#: classes/User.php:373 +#: classes/User.php:378 #, fuzzy, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Melding til %1$s pÃ¥ %2$s" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Kunne ikkje laga gruppa." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "Kunne ikkje bli med i gruppa." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Kunne ikkje bli med i gruppa." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "Kunne ikkje lagra abonnement." @@ -4945,7 +4943,7 @@ msgstr "Dult" msgid "StatusNet software license" msgstr "StatusNets programvarelisens" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4954,12 +4952,12 @@ msgstr "" "**%%site.name%%** er ei mikrobloggingteneste av [%%site.broughtby%%](%%site." "broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** er ei mikrobloggingteneste. " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4970,42 +4968,42 @@ msgstr "" "%s, tilgjengeleg under [GNU Affero General Public License](http://www.fsf." "org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 #, fuzzy msgid "Site content license" msgstr "StatusNets programvarelisens" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Alle" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "lisens." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Paginering" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "« Etter" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Før »" @@ -5021,6 +5019,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 #, fuzzy @@ -5122,7 +5124,7 @@ msgstr "SMS bekreftelse" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5201,11 +5203,11 @@ msgstr "Fjern" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 #, fuzzy msgid "Provider" msgstr "Profil" @@ -5228,37 +5230,51 @@ msgstr "Endra passord" msgid "Password changing is not allowed" msgstr "Endra passord" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Resultat frÃ¥ kommandoen" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Kommandoen utførd" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Kommandoen feila" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Orsak, men kommandoen er ikkje laga enno." +#: lib/command.php:83 lib/command.php:105 +#, fuzzy +msgid "Notice with that id does not exist" +msgstr "Fann ingen profil med den IDen." -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "Brukaren har ikkje siste notis" + +#: lib/command.php:125 #, fuzzy, php-format msgid "Could not find a user with nickname %s" msgstr "Kan ikkje oppdatera brukar med stadfesta e-postadresse." -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Kan ikkje oppdatera brukar med stadfesta e-postadresse." + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Orsak, men kommandoen er ikkje laga enno." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, fuzzy, php-format msgid "Nudge sent to %s" msgstr "Dytta!" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5266,203 +5282,201 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -#, fuzzy -msgid "Notice with that id does not exist" -msgstr "Fann ingen profil med den IDen." - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "Brukaren har ikkje siste notis" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Notis markert som favoritt." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Du er allereie medlem av den gruppa" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Kunne ikkje melde brukaren %s inn i gruppa %s" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s blei medlem av gruppe %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Kunne ikkje fjerne %s fra %s gruppa " -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s forlot %s gruppa" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Fullt namn: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Stad: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Heimeside: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Om: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, fuzzy, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "Melding for lang - maksimum 140 teikn, du skreiv %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Direkte melding til %s sendt" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Ein feil oppstod ved sending av direkte melding." -#: lib/command.php:413 +#: lib/command.php:490 #, fuzzy msgid "Cannot repeat your own notice" msgstr "Kan ikkje slÃ¥ pÃ¥ notifikasjon." -#: lib/command.php:418 +#: lib/command.php:495 #, fuzzy msgid "Already repeated that notice" msgstr "Slett denne notisen" -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "Melding lagra" -#: lib/command.php:428 +#: lib/command.php:505 #, fuzzy msgid "Error repeating notice." msgstr "Eit problem oppstod ved lagring av notis." -#: lib/command.php:482 +#: lib/command.php:536 #, fuzzy, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Melding for lang - maksimum 140 teikn, du skreiv %d" -#: lib/command.php:491 +#: lib/command.php:545 #, fuzzy, php-format msgid "Reply to %s sent" msgstr "Svar pÃ¥ denne notisen" -#: lib/command.php:493 +#: lib/command.php:547 #, fuzzy msgid "Error saving notice." msgstr "Eit problem oppstod ved lagring av notis." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Spesifer namnet til brukaren du vil tinge" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "Brukaren finst ikkje." +#: lib/command.php:602 +#, fuzzy +msgid "Can't subscribe to OMB profiles by command." +msgstr "Du tingar ikkje oppdateringar til den profilen." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Tingar %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Spesifer namnet til brukar du vil fjerne tinging pÃ¥" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Tingar ikkje %s lengre" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Kommando ikkje implementert." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Notifikasjon av." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Kan ikkje skru av notifikasjon." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Notifikasjon pÃ¥." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Kan ikkje slÃ¥ pÃ¥ notifikasjon." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "Tingar ikkje %s lengre" -#: lib/command.php:709 +#: lib/command.php:752 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Du tingar ikkje oppdateringar til den profilen." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Du tingar allereie oppdatering frÃ¥ desse brukarane:" msgstr[1] "Du tingar allereie oppdatering frÃ¥ desse brukarane:" -#: lib/command.php:731 +#: lib/command.php:774 #, fuzzy msgid "No one is subscribed to you." msgstr "Kan ikkje tinga andre til deg." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Kan ikkje tinga andre til deg." msgstr[1] "Kan ikkje tinga andre til deg." -#: lib/command.php:753 +#: lib/command.php:796 #, fuzzy msgid "You are not a member of any groups." msgstr "Du er ikkje medlem av den gruppa." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Du er ikkje medlem av den gruppa." msgstr[1] "Du er ikkje medlem av den gruppa." -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5504,20 +5518,20 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 #, fuzzy msgid "No configuration file found. " msgstr "Ingen stadfestingskode." -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 #, fuzzy msgid "Go to the installer." msgstr "Logg inn or sida" @@ -5698,49 +5712,49 @@ msgstr "Merkelappar i %s gruppa sine notisar" msgid "This page is not available in a media type you accept" msgstr "Denne sida er ikkje tilgjengeleg i nokon mediatype du aksepterer." -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Støttar ikkje bileteformatet." + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Du kan lasta opp ein logo for gruppa." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Hallvegs opplasta." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Systemfeil ved opplasting av fil." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Korrupt bilete." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Støttar ikkje bileteformatet." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Mista fila vÃ¥r." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Ukjend fil type" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5950,7 +5964,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 #, fuzzy msgid "from" msgstr " frÃ¥ " @@ -6106,25 +6120,25 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 #, fuzzy msgid "in context" msgstr "Ingen innhald." -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 #, fuzzy msgid "Repeated by" msgstr "Lag" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Svar pÃ¥ denne notisen" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Svar" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "Melding lagra" @@ -6273,7 +6287,7 @@ msgstr "Svar pÃ¥ denne notisen" msgid "Revoke the \"%s\" role from this user" msgstr "Ei liste over brukarane i denne gruppa." -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6407,93 +6421,97 @@ msgstr "Fjern tinging fra denne brukaren" msgid "Unsubscribe" msgstr "Fjern tinging" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 #, fuzzy msgid "Edit Avatar" msgstr "Brukarbilete" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Brukarverkty" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 #, fuzzy msgid "Edit profile settings" msgstr "Profilinnstillingar" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Send ei direktemelding til denne brukaren" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Melding" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "Brukarprofil" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 #, fuzzy msgctxt "role" msgid "Administrator" msgstr "Administrator" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "eit par sekund sidan" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "omtrent eitt minutt sidan" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "~%d minutt sidan" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "omtrent ein time sidan" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "~%d timar sidan" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "omtrent ein dag sidan" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "~%d dagar sidan" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "omtrent ein mÃ¥nad sidan" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "~%d mÃ¥nadar sidan" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "omtrent eitt Ã¥r sidan" @@ -6507,7 +6525,7 @@ msgstr "Heimesida er ikkje ei gyldig internettadresse." msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, fuzzy, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "Melding for lang - maksimum 140 teikn, du skreiv %d" diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po index 3a0bd39c32..816eb6e850 100644 --- a/locale/pl/LC_MESSAGES/statusnet.po +++ b/locale/pl/LC_MESSAGES/statusnet.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:50:36+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:20+0000\n" "Last-Translator: Piotr DrÄ…g \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" @@ -19,7 +19,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pl\n" "X-Message-Group: out-statusnet\n" @@ -97,7 +97,7 @@ msgstr "Nie ma takiej strony" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -106,10 +106,8 @@ msgstr "Nie ma takiej strony" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Brak takiego użytkownika." @@ -209,14 +207,14 @@ msgstr "Aktualizacje z %1$s i przyjaciół na %2$s." #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "Nie odnaleziono metody API." @@ -229,8 +227,8 @@ msgstr "Nie odnaleziono metody API." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Ta metoda wymaga POST." @@ -260,7 +258,7 @@ msgid "Could not save profile." msgstr "Nie można zapisać profilu." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -348,7 +346,7 @@ msgstr "Nie odnaleziono stanów z tym identyfikatorem." msgid "This status is already a favorite." msgstr "Ten stan jest już ulubiony." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Nie można utworzyć ulubionego wpisu." @@ -466,7 +464,7 @@ msgstr "Nie odnaleziono grupy." msgid "You are already a member of that group." msgstr "JesteÅ› już czÅ‚onkiem tej grupy." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "ZostaÅ‚eÅ› zablokowany w tej grupie przez administratora." @@ -516,7 +514,7 @@ msgstr "NieprawidÅ‚owy token." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -584,9 +582,9 @@ msgstr "Konto" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Pseudonim" @@ -655,12 +653,12 @@ msgstr "Maksymalny rozmiar wpisu wynosi %d znaków, w tym adres URL zaÅ‚Ä…cznika msgid "Unsupported format." msgstr "NieobsÅ‚ugiwany format." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s/ulubione wpisy od %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "Użytkownik %1$s aktualizuje ulubione wedÅ‚ug %2$s/%2$s." @@ -670,7 +668,7 @@ msgstr "Użytkownik %1$s aktualizuje ulubione wedÅ‚ug %2$s/%2$s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s/aktualizacje wspominajÄ…ce %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s aktualizuje tÄ™ odpowiedź na aktualizacje od %2$s/%3$s." @@ -680,7 +678,7 @@ msgstr "%1$s aktualizuje tÄ™ odpowiedź na aktualizacje od %2$s/%3$s." msgid "%s public timeline" msgstr "Publiczna oÅ› czasu użytkownika %s" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "Użytkownik %s aktualizuje od każdego." @@ -695,12 +693,12 @@ msgstr "Powtórzone dla %s" msgid "Repeats of %s" msgstr "Powtórzenia %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Wpisy ze znacznikiem %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Aktualizacje ze znacznikiem %1$s na %2$s." @@ -728,7 +726,7 @@ msgstr "Brak rozmiaru." msgid "Invalid size." msgstr "NieprawidÅ‚owy rozmiar." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Awatar" @@ -760,7 +758,7 @@ msgid "Preview" msgstr "PodglÄ…d" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "UsuÅ„" @@ -843,8 +841,8 @@ msgstr "Zapisanie informacji o blokadzie nie powiodÅ‚o siÄ™." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Nie ma takiej grupy." @@ -945,7 +943,7 @@ msgstr "Nie jesteÅ› wÅ‚aÅ›cicielem tej aplikacji." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "WystÄ…piÅ‚ problem z tokenem sesji." @@ -1005,7 +1003,7 @@ msgstr "JesteÅ› pewien, że chcesz usunąć ten wpis?" msgid "Do not delete this notice" msgstr "Nie usuwaj tego wpisu" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "UsuÅ„ ten wpis" @@ -1256,7 +1254,7 @@ msgstr "opis jest za dÅ‚ugi (maksymalnie %d znaków)." msgid "Could not update group." msgstr "Nie można zaktualizować grupy." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Nie można utworzyć aliasów." @@ -1955,7 +1953,7 @@ msgstr "ZaproÅ› nowych użytkowników" msgid "You are already subscribed to these users:" msgstr "JesteÅ› już subskrybowany do tych użytkowników:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2086,7 +2084,7 @@ msgstr "Użytkownik %1$s doÅ‚Ä…czyÅ‚ do grupy %2$s" msgid "You must be logged in to leave a group." msgstr "Musisz być zalogowany, aby opuÅ›cić grupÄ™." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Nie jesteÅ› czÅ‚onkiem tej grupy." @@ -2201,12 +2199,12 @@ msgstr "Użyj tego formularza, aby utworzyć nowÄ… grupÄ™." msgid "New message" msgstr "Nowa wiadomość" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Nie można wysÅ‚ać wiadomoÅ›ci do tego użytkownika." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Brak treÅ›ci." @@ -2214,7 +2212,7 @@ msgstr "Brak treÅ›ci." msgid "No recipient specified." msgstr "Nie podano odbiorcy." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "Nie wysyÅ‚aj wiadomoÅ›ci do siebie, po prostu powiedz to sobie po cichu." @@ -2228,7 +2226,7 @@ msgstr "WysÅ‚ano wiadomość" msgid "Direct message to %s sent." msgstr "WysÅ‚ano bezpoÅ›redniÄ… wiadomość do użytkownika %s." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "BÅ‚Ä…d AJAX" @@ -2348,7 +2346,7 @@ msgstr "ProgramiÅ›ci mogÄ… zmodyfikować ustawienia rejestracji swoich aplikacji msgid "Notice has no profile" msgstr "Wpis nie posiada profilu" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "Stan użytkownika %1$s na %2$s" @@ -2361,8 +2359,8 @@ msgstr "typ zawartoÅ›ci " msgid "Only " msgstr "Tylko " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "To nie jest obsÅ‚ugiwany format danych." @@ -2493,7 +2491,7 @@ msgstr "Niepoprawne poprzednie hasÅ‚o" msgid "Error saving user; invalid." msgstr "BÅ‚Ä…d podczas zapisywania użytkownika; nieprawidÅ‚owy." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Nie można zapisać nowego hasÅ‚a." @@ -2709,8 +2707,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 maÅ‚e litery lub liczby, bez spacji i znaków przestankowych" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "ImiÄ™ i nazwisko" @@ -2737,9 +2735,9 @@ msgid "Bio" msgstr "O mnie" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "PoÅ‚ożenie" @@ -2753,7 +2751,7 @@ msgstr "Podziel siÄ™ swoim obecnym poÅ‚ożeniem podczas wysyÅ‚ania wpisów" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Znaczniki" @@ -2995,7 +2993,7 @@ msgstr "Przywróć hasÅ‚o" msgid "Recover password" msgstr "Przywróć hasÅ‚o" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Zażądano przywracania hasÅ‚a" @@ -3015,19 +3013,19 @@ msgstr "Przywróć" msgid "Enter a nickname or email address." msgstr "Podaj pseudonim lub adres e-mail." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "Brak użytkownika z tym adresem e-mail lub nazwÄ… użytkownika." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Brak zarejestrowanych adresów e-mail dla tego użytkownika." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "BÅ‚Ä…d podczas zapisywania potwierdzenia adresu." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3035,23 +3033,23 @@ msgstr "" "Instrukcje przywracania hasÅ‚a zostaÅ‚y wysÅ‚ane na adres e-mail zarejestrowany " "z twoim kontem." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Nieoczekiwane przywrócenie hasÅ‚a." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "HasÅ‚o musi mieć sześć lub wiÄ™cej znaków." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "HasÅ‚o i potwierdzenie nie pasujÄ… do siebie." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "BÅ‚Ä…d podczas ustawiania użytkownika." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "PomyÅ›lnie zapisano nowe hasÅ‚o. JesteÅ› teraz zalogowany." @@ -3216,7 +3214,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "Adres URL profilu na innej, zgodnej usÅ‚udze mikroblogowania" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Subskrybuj" @@ -3254,7 +3252,7 @@ msgstr "Nie można powtórzyć wÅ‚asnego wpisu." msgid "You already repeated that notice." msgstr "Już powtórzono ten wpis." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Powtórzono" @@ -3397,7 +3395,7 @@ msgstr "Organizacja" msgid "Description" msgstr "Opis" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Statystyki" @@ -3518,67 +3516,67 @@ msgstr "Grupa %s" msgid "%1$s group, page %2$d" msgstr "Grupa %1$s, strona %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Profil grupy" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "Adres URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Wpis" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Aliasy" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "DziaÅ‚ania grupy" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "KanaÅ‚ wpisów dla grupy %s (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "KanaÅ‚ wpisów dla grupy %s (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "KanaÅ‚ wpisów dla grupy %s (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "FOAF dla grupy %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "CzÅ‚onkowie" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Brak)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Wszyscy czÅ‚onkowie" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Utworzono" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3594,7 +3592,7 @@ msgstr "" "action.register%%%%), aby stać siÄ™ częściÄ… tej grupy i wiele wiÄ™cej. " "([Przeczytaj wiÄ™cej](%%%%doc.help%%%%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3607,7 +3605,7 @@ msgstr "" "narzÄ™dziu [StatusNet](http://status.net/). Jej czÅ‚onkowie dzielÄ… siÄ™ " "krótkimi wiadomoÅ›ciami o swoim życiu i zainteresowaniach. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Administratorzy" @@ -4161,12 +4159,12 @@ msgstr "Brak parametru identyfikatora." msgid "Tag %s" msgstr "Znacznik %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Profil użytkownika" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "ZdjÄ™cie" @@ -4507,7 +4505,7 @@ msgstr "Wersja" msgid "Author(s)" msgstr "Autorzy" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " @@ -4516,13 +4514,13 @@ msgstr "" "Å»aden plik nie może być wiÄ™kszy niż %d bajty, a wysÅ‚any plik miaÅ‚ %d bajty. " "Spróbuj wysÅ‚ać mniejszÄ… wersjÄ™." -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" "Plik tej wielkoÅ›ci przekroczyÅ‚by przydziaÅ‚ użytkownika wynoszÄ…cy %d bajty." -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4562,27 +4560,27 @@ msgstr "Nie można wprowadzić wiadomoÅ›ci." msgid "Could not update message with new URI." msgstr "Nie można zaktualizować wiadomoÅ›ci za pomocÄ… nowego adresu URL." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "BÅ‚Ä…d bazy danych podczas wprowadzania znacznika mieszania: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "Problem podczas zapisywania wpisu. Za dÅ‚ugi." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Problem podczas zapisywania wpisu. Nieznany użytkownik." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Za dużo wpisów w za krótkim czasie, weź gÅ‚Ä™boki oddech i wyÅ›lij ponownie za " "kilka minut." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4590,19 +4588,19 @@ msgstr "" "Za dużo takich samych wiadomoÅ›ci w za krótkim czasie, weź gÅ‚Ä™boki oddech i " "wyÅ›lij ponownie za kilka minut." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Zabroniono ci wysyÅ‚ania wpisów na tej witrynie." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Problem podczas zapisywania wpisu." -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "Problem podczas zapisywania skrzynki odbiorczej grupy." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4631,28 +4629,28 @@ msgstr "Nie można usunąć autosubskrypcji." msgid "Couldn't delete subscription OMB token." msgstr "Nie można usunąć tokenu subskrypcji OMB." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Nie można usunąć subskrypcji." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Witaj w %1$s, @%2$s." -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Nie można utworzyć grupy." -#: classes/User_group.php:486 +#: classes/User_group.php:489 msgid "Could not set group URI." msgstr "Nie można ustawić adresu URI grupy." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Nie można ustawić czÅ‚onkostwa w grupie." -#: classes/User_group.php:521 +#: classes/User_group.php:524 msgid "Could not save local group info." msgstr "Nie można zapisać informacji o lokalnej grupie." @@ -4856,7 +4854,7 @@ msgstr "Odznaka" msgid "StatusNet software license" msgstr "Licencja oprogramowania StatusNet" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4865,12 +4863,12 @@ msgstr "" "**%%site.name%%** jest usÅ‚ugÄ… mikroblogowania prowadzonÄ… przez [%%site." "broughtby%%](%%site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** jest usÅ‚ugÄ… mikroblogowania. " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4881,45 +4879,45 @@ msgstr "" "status.net/) w wersji %s, dostÄ™pnego na [Powszechnej Licencji Publicznej GNU " "Affero](http://www.fsf.org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Licencja zawartoÅ›ci witryny" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "Treść i dane %1$s sÄ… prywatne i poufne." -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" "Prawa autorskie do treÅ›ci i danych sÄ… wÅ‚asnoÅ›ciÄ… %1$s. Wszystkie prawa " "zastrzeżone." -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" "Prawa autorskie do treÅ›ci i danych sÄ… wÅ‚asnoÅ›ciÄ… współtwórców. Wszystkie " "prawa zastrzeżone." -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Wszystko " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "licencja." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Paginacja" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Później" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "WczeÅ›niej" @@ -4935,6 +4933,10 @@ msgstr "Nie można jeszcze obsÅ‚ugiwać zagnieżdżonej treÅ›ci XML." msgid "Can't handle embedded Base64 content yet." msgstr "Nie można jeszcze obsÅ‚ugiwać zagnieżdżonej treÅ›ci Base64." +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5023,7 +5025,7 @@ msgstr "" "Zasób API wymaga dostÄ™pu do zapisu i do odczytu, ale powiadasz dostÄ™p tylko " "do odczytu." -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5100,11 +5102,11 @@ msgstr "Unieważnij" msgid "Attachments" msgstr "ZaÅ‚Ä…czniki" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Autor" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Dostawca" @@ -5124,37 +5126,50 @@ msgstr "Zmiana hasÅ‚a nie powiodÅ‚a siÄ™" msgid "Password changing is not allowed" msgstr "Zmiana hasÅ‚a nie jest dozwolona" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Wyniki polecenia" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "ZakoÅ„czono polecenie" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Polecenie nie powiodÅ‚o siÄ™" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Te polecenie nie zostaÅ‚o jeszcze zaimplementowane." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "Wpis z tym identyfikatorem nie istnieje." -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "Użytkownik nie posiada ostatniego wpisu." + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "Nie można odnaleźć użytkownika z pseudonimem %s." -#: lib/command.php:92 +#: lib/command.php:143 +#, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Nie można odnaleźć lokalnego użytkownika z pseudonimem %s." + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Te polecenie nie zostaÅ‚o jeszcze zaimplementowane." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "Szturchanie samego siebie nie ma zbyt wiele sensu." -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "WysÅ‚ano szturchniÄ™cie do użytkownika %s." -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5165,200 +5180,200 @@ msgstr "" "Subskrybenci: %2$s\n" "Wpisy: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "Wpis z tym identyfikatorem nie istnieje." - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "Użytkownik nie posiada ostatniego wpisu." - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Zaznaczono wpis jako ulubiony." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "JesteÅ› już czÅ‚onkiem tej grupy." -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Nie można doÅ‚Ä…czyć użytkownika %1$s do grupy %2$s." -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "Użytkownik %1$s doÅ‚Ä…czyÅ‚ do grupy %2$s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Nie można usunąć użytkownika %1$s z grupy %2$s." -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "Użytkownik %1$s opuÅ›ciÅ‚ grupÄ™ %2$s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "ImiÄ™ i nazwisko: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "PoÅ‚ożenie: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Strona domowa: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "O mnie: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" +"%s to zdalny profil; można wysyÅ‚ać bezpoÅ›rednie wiadomoÅ›ci tylko do " +"użytkowników na tym samym serwerze." + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "Wiadomość jest za dÅ‚uga - maksymalnie %1$d znaków, wysÅ‚ano %2$d." -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "WysÅ‚ano bezpoÅ›redniÄ… wiadomość do użytkownika %s." -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "BÅ‚Ä…d podczas wysyÅ‚ania bezpoÅ›redniej wiadomoÅ›ci." -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "Nie można powtórzyć wÅ‚asnego wpisu" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "Już powtórzono ten wpis" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "Powtórzono wpis od użytkownika %s" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "BÅ‚Ä…d podczas powtarzania wpisu." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Wpis jest za dÅ‚ugi - maksymalnie %1$d znaków, wysÅ‚ano %2$d." -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "WysÅ‚ano odpowiedź do %s." -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "BÅ‚Ä…d podczas zapisywania wpisu." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Podaj nazwÄ™ użytkownika do subskrybowania." -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "Brak takiego użytkownika." +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "Nie można subskrybować profili OMB za pomocÄ… polecenia." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Subskrybowano użytkownika %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Podaj nazwÄ™ użytkownika do usuniÄ™cia subskrypcji." -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "UsuniÄ™to subskrypcjÄ™ użytkownika %s" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Nie zaimplementowano polecenia." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "WyÅ‚Ä…czono powiadomienia." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Nie można wyÅ‚Ä…czyć powiadomieÅ„." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "WÅ‚Ä…czono powiadomienia." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Nie można wÅ‚Ä…czyć powiadomieÅ„." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "Polecenie logowania jest wyÅ‚Ä…czone" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" "Tego odnoÅ›nika można użyć tylko raz i bÄ™dzie prawidÅ‚owy tylko przez dwie " "minuty: %s." -#: lib/command.php:692 +#: lib/command.php:735 #, php-format msgid "Unsubscribed %s" msgstr "UsuniÄ™to subskrypcjÄ™ użytkownika %s" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "Nie subskrybujesz nikogo." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Subskrybujesz tÄ™ osobÄ™:" msgstr[1] "Subskrybujesz te osoby:" msgstr[2] "Subskrybujesz te osoby:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "Nikt ciÄ™ nie subskrybuje." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Ta osoba ciÄ™ subskrybuje:" msgstr[1] "Te osoby ciÄ™ subskrybujÄ…:" msgstr[2] "Te osoby ciÄ™ subskrybujÄ…:" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "Nie jesteÅ› czÅ‚onkiem żadnej grupy." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "JesteÅ› czÅ‚onkiem tej grupy:" msgstr[1] "JesteÅ› czÅ‚onkiem tych grup:" msgstr[2] "JesteÅ› czÅ‚onkiem tych grup:" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5440,19 +5455,19 @@ msgstr "" "tracks - jeszcze nie zaimplementowano\n" "tracking - jeszcze nie zaimplementowano\n" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Nie odnaleziono pliku konfiguracji." -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "Szukano plików konfiguracji w nastÄ™pujÄ…cych miejscach: " -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "Należy uruchomić instalator, aby to naprawić." -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "Przejdź do instalatora." @@ -5630,49 +5645,49 @@ msgstr "Znaczniki we wpisach grupy %s" msgid "This page is not available in a media type you accept" msgstr "Ta strona jest niedostÄ™pna dla akceptowanego typu medium" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "NieobsÅ‚ugiwany format pliku obrazu." + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Ten plik jest za duży. Maksymalny rozmiar pliku to %s." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Częściowo wysÅ‚ano." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "BÅ‚Ä…d systemu podczas wysyÅ‚ania pliku." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "To nie jest obraz lub lub plik jest uszkodzony." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "NieobsÅ‚ugiwany format pliku obrazu." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Utracono plik." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Nieznany typ pliku" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "MB" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "KB" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "Nieznane źródÅ‚o skrzynki odbiorczej %d." @@ -5954,7 +5969,7 @@ msgstr "" "rozmowÄ™ z innymi użytkownikami. Inni mogÄ… wysyÅ‚ać ci wiadomoÅ›ci tylko dla " "twoich oczu." -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "z" @@ -6107,23 +6122,23 @@ msgstr "Zachód" msgid "at" msgstr "w" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "w rozmowie" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Powtórzone przez" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Odpowiedz na ten wpis" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Odpowiedz" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Powtórzono wpis" @@ -6265,7 +6280,7 @@ msgstr "Powtórz ten wpis" msgid "Revoke the \"%s\" role from this user" msgstr "Unieważnij rolÄ™ \"%s\" tego użytkownika" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" "Nie okreÅ›lono pojedynczego użytkownika dla trybu pojedynczego użytkownika." @@ -6392,89 +6407,93 @@ msgstr "Zrezygnuj z subskrypcji tego użytkownika" msgid "Unsubscribe" msgstr "Zrezygnuj z subskrypcji" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Zmodyfikuj awatar" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "CzynnoÅ›ci użytkownika" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Zmodyfikuj ustawienia profilu" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Edycja" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "WyÅ›lij bezpoÅ›redniÄ… wiadomość do tego użytkownika" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Wiadomość" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Moderuj" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 msgid "User role" msgstr "Rola użytkownika" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "Administrator" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "Moderator" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "kilka sekund temu" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "okoÅ‚o minutÄ™ temu" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "okoÅ‚o %d minut temu" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "okoÅ‚o godzinÄ™ temu" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "okoÅ‚o %d godzin temu" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "blisko dzieÅ„ temu" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "okoÅ‚o %d dni temu" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "okoÅ‚o miesiÄ…c temu" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "okoÅ‚o %d miesiÄ™cy temu" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "okoÅ‚o rok temu" @@ -6490,7 +6509,7 @@ msgstr "" "%s nie jest prawidÅ‚owym kolorem. Użyj trzech lub szeÅ›ciu znaków " "szesnastkowych." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "Wiadomość jest za dÅ‚uga - maksymalnie %1$d znaków, wysÅ‚ano %2$d." diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po index 7041bea819..4d94d95b0a 100644 --- a/locale/pt/LC_MESSAGES/statusnet.po +++ b/locale/pt/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:50:48+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:23+0000\n" "Language-Team: Portuguese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt\n" "X-Message-Group: out-statusnet\n" @@ -98,7 +98,7 @@ msgstr "Página não encontrada." #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -107,10 +107,8 @@ msgstr "Página não encontrada." #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Utilizador não encontrado." @@ -208,14 +206,14 @@ msgstr "Actualizações de %1$s e amigos no %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "Método da API não encontrado." @@ -228,8 +226,8 @@ msgstr "Método da API não encontrado." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Este método requer um POST." @@ -259,7 +257,7 @@ msgid "Could not save profile." msgstr "Não foi possível gravar o perfil." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -346,7 +344,7 @@ msgstr "Nenhum estado encontrado com esse ID." msgid "This status is already a favorite." msgstr "Este estado já é um favorito." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Não foi possível criar o favorito." @@ -464,7 +462,7 @@ msgstr "Grupo não foi encontrado!" msgid "You are already a member of that group." msgstr "Já é membro desse grupo." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "Foi bloqueado desse grupo pelo gestor." @@ -515,7 +513,7 @@ msgstr "Tamanho inválido." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -582,9 +580,9 @@ msgstr "Conta" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Utilizador" @@ -655,12 +653,12 @@ msgstr "Tamanho máx. das notas é %d caracteres, incluíndo a URL do anexo." msgid "Unsupported format." msgstr "Formato não suportado." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Favoritas de %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%1$s actualizações preferidas por %2$s / %2$s." @@ -670,7 +668,7 @@ msgstr "%1$s actualizações preferidas por %2$s / %2$s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Actualizações que mencionam %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s actualizações em resposta a actualizações de %2$s / %3$s." @@ -680,7 +678,7 @@ msgstr "%1$s actualizações em resposta a actualizações de %2$s / %3$s." msgid "%s public timeline" msgstr "Notas públicas de %s" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s actualizações de todos!" @@ -695,12 +693,12 @@ msgstr "Repetida para %s" msgid "Repeats of %s" msgstr "Repetências de %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Notas categorizadas com %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Actualizações categorizadas com %1$s em %2$s!" @@ -728,7 +726,7 @@ msgstr "Tamanho não definido." msgid "Invalid size." msgstr "Tamanho inválido." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Avatar" @@ -760,7 +758,7 @@ msgid "Preview" msgstr "Antevisão" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Apagar" @@ -843,8 +841,8 @@ msgstr "Não foi possível gravar informação do bloqueio." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Grupo não foi encontrado." @@ -949,7 +947,7 @@ msgstr "Não é membro deste grupo." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Ocorreu um problema com a sua sessão." @@ -1013,7 +1011,7 @@ msgstr "Tem a certeza de que quer apagar esta nota?" msgid "Do not delete this notice" msgstr "Não apagar esta nota" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Apagar esta nota" @@ -1278,7 +1276,7 @@ msgstr "descrição é demasiada extensa (máx. %d caracteres)." msgid "Could not update group." msgstr "Não foi possível actualizar o grupo." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Não foi possível criar sinónimos." @@ -1989,7 +1987,7 @@ msgstr "Convidar novos utilizadores" msgid "You are already subscribed to these users:" msgstr "Já subscreveu estes utilizadores:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2120,7 +2118,7 @@ msgstr "%1$s juntou-se ao grupo %2$s" msgid "You must be logged in to leave a group." msgstr "Precisa de iniciar uma sessão para deixar um grupo." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Não é um membro desse grupo." @@ -2239,12 +2237,12 @@ msgstr "Use este formulário para criar um grupo novo." msgid "New message" msgstr "Mensagem nova" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Não pode enviar uma mensagem a este utilizador." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Sem conteúdo!" @@ -2252,7 +2250,7 @@ msgstr "Sem conteúdo!" msgid "No recipient specified." msgstr "Não especificou um destinatário." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "Não auto-envie uma mensagem; basta lê-la baixinho a si próprio." @@ -2266,7 +2264,7 @@ msgstr "Mensagem enviada" msgid "Direct message to %s sent." msgstr "Mensagem directa para %s foi enviada." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Erro do Ajax" @@ -2388,7 +2386,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Nota não tem perfil" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "Estado de %1$s em %2$s" @@ -2401,8 +2399,8 @@ msgstr "tipo de conteúdo " msgid "Only " msgstr "Apenas " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Formato de dados não suportado." @@ -2540,7 +2538,7 @@ msgstr "Senha antiga incorrecta." msgid "Error saving user; invalid." msgstr "Erro ao guardar utilizador; inválido." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Não é possível guardar a nova senha." @@ -2755,8 +2753,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 letras minúsculas ou números, sem pontuação ou espaços" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nome completo" @@ -2783,9 +2781,9 @@ msgid "Bio" msgstr "Biografia" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Localidade" @@ -2799,7 +2797,7 @@ msgstr "Compartilhar a minha localização presente ao publicar notas" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Categorias" @@ -3043,7 +3041,7 @@ msgstr "Reiniciar senha" msgid "Recover password" msgstr "Recuperar senha" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Solicitada recuperação da senha" @@ -3063,20 +3061,20 @@ msgstr "Reiniciar" msgid "Enter a nickname or email address." msgstr "Introduza uma utilizador ou um endereço de correio electrónico." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" "Não existe nenhum utilizador com esse correio electrónico nem com esse nome." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Nenhum endereço de email registado para esse utilizador." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Erro ao guardar confirmação do endereço." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3084,23 +3082,23 @@ msgstr "" "Instruções para recuperação da sua senha foram enviadas para o correio " "electrónico registado na sua conta." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Reinício inesperado da senha." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Senha tem de ter 6 ou mais caracteres." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "A senha e a confirmação não coincidem." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Erro ao configurar utilizador." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "A senha nova foi gravada com sucesso. Iniciou uma sessão." @@ -3264,7 +3262,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "URL do seu perfil noutro serviço de microblogues compatível" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Subscrever" @@ -3302,7 +3300,7 @@ msgstr "Não pode repetir a sua própria nota." msgid "You already repeated that notice." msgstr "Já repetiu essa nota." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Repetida" @@ -3451,7 +3449,7 @@ msgstr "Paginação" msgid "Description" msgstr "Descrição" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Estatísticas" @@ -3572,67 +3570,67 @@ msgstr "Grupo %s" msgid "%1$s group, page %2$d" msgstr "Membros do grupo %1$s, página %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Perfil do grupo" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Anotação" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Sinónimos" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Acções do grupo" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Fonte de notas do grupo %s (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Fonte de notas do grupo %s (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Fonte de notas do grupo %s (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "FOAF do grupo %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Membros" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Nenhum)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Todos os membros" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Criado" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3648,7 +3646,7 @@ msgstr "" "[Registe-se agora](%%action.register%%) para se juntar a este grupo e a " "muitos mais! ([Saber mais](%%doc.help%%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3661,7 +3659,7 @@ msgstr "" "programa de Software Livre [StatusNet](http://status.net/). Os membros deste " "grupo partilham mensagens curtas acerca das suas vidas e interesses. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Gestores" @@ -4221,12 +4219,12 @@ msgstr "Argumento de identificação (ID) em falta." msgid "Tag %s" msgstr "Categoria %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Perfil" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Foto" @@ -4567,7 +4565,7 @@ msgstr "Versão" msgid "Author(s)" msgstr "Autores" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " @@ -4576,13 +4574,13 @@ msgstr "" "Nenhum ficheiro pode ter mais de %d bytes e o que enviou tinha %d bytes. " "Tente carregar uma versão menor." -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" "Um ficheiro desta dimensão excederia a sua quota de utilizador de %d bytes." -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "Um ficheiro desta dimensão excederia a sua quota mensal de %d bytes." @@ -4624,27 +4622,27 @@ msgstr "Não foi possível inserir a mensagem." msgid "Could not update message with new URI." msgstr "Não foi possível actualizar a mensagem com a nova URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Erro na base de dados ao inserir a marca: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "Problema na gravação da nota. Demasiado longa." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Problema na gravação da nota. Utilizador desconhecido." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Demasiadas notas, demasiado rápido; descanse e volte a publicar daqui a " "alguns minutos." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4652,20 +4650,20 @@ msgstr "" "Demasiadas mensagens duplicadas, demasiado rápido; descanse e volte a " "publicar daqui a alguns minutos." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Está proibido de publicar notas neste site." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Problema na gravação da nota." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "Problema na gravação da nota." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4695,29 +4693,29 @@ msgstr "Não foi possível apagar a auto-subscrição." msgid "Couldn't delete subscription OMB token." msgstr "Não foi possível apagar a subscrição." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Não foi possível apagar a subscrição." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "%1$s dá-lhe as boas-vindas, @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Não foi possível criar o grupo." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "Não foi possível configurar membros do grupo." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Não foi possível configurar membros do grupo." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "Não foi possível gravar a subscrição." @@ -4939,7 +4937,7 @@ msgstr "Emblema" msgid "StatusNet software license" msgstr "Licença de software do StatusNet" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4948,12 +4946,12 @@ msgstr "" "**%%site.name%%** é um serviço de microblogues disponibilizado por [%%site." "broughtby%%](%%site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** é um serviço de microblogues. " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4964,41 +4962,41 @@ msgstr "" "disponibilizado nos termos da [GNU Affero General Public License](http://www." "fsf.org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Licença de conteúdos do site" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Tudo " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "licença." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Paginação" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Posteriores" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Anteriores" @@ -5014,6 +5012,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5107,7 +5109,7 @@ msgstr "Configuração das localizações" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5186,11 +5188,11 @@ msgstr "Remover" msgid "Attachments" msgstr "Anexos" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Autor" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Fornecedor" @@ -5210,37 +5212,50 @@ msgstr "Não foi possível mudar a palavra-chave" msgid "Password changing is not allowed" msgstr "Não é permitido mudar a palavra-chave" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Resultados do comando" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Comando terminado" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Comando falhou" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Desculpe, este comando ainda não foi implementado." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "Não existe nenhuma nota com essa identificação" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "Utilizador não tem nenhuma última nota" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "Não foi encontrado um utilizador com a alcunha %s" -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Não foi encontrado um utilizador com a alcunha %s" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Desculpe, este comando ainda não foi implementado." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "Não faz muito sentido tocar-nos a nós mesmos!" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "Cotovelada enviada a %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5251,198 +5266,196 @@ msgstr "" "Subscritores: %2$s\n" "Notas: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "Não existe nenhuma nota com essa identificação" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "Utilizador não tem nenhuma última nota" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Nota marcada como favorita." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Já é membro desse grupo" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Não foi possível juntar o utilizador %s ao grupo %s" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s juntou-se ao grupo %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Não foi possível remover o utilizador %s do grupo %s" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s deixou o grupo %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Nome completo: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Localidade: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Página pessoal: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Sobre: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "Mensagem demasiado extensa - máx. %d caracteres, enviou %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Mensagem directa para %s enviada" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Erro no envio da mensagem directa." -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "Não pode repetir a sua própria nota" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "Já repetiu essa nota" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "Nota de %s repetida" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "Erro ao repetir nota." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Nota demasiado extensa - máx. %d caracteres, enviou %d" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "Resposta a %s enviada" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "Erro ao gravar nota." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Introduza o nome do utilizador para subscrever" -#: lib/command.php:554 lib/command.php:589 +#: lib/command.php:602 #, fuzzy -msgid "No such user" -msgstr "Utilizador não encontrado." +msgid "Can't subscribe to OMB profiles by command." +msgstr "Não subscreveu esse perfil." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Subscreveu %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Introduza o nome do utilizador para deixar de subscrever" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Deixou de subscrever %s" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Comando ainda não implementado." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Notificação desligada." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Não foi possível desligar a notificação." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Notificação ligada." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Não foi possível ligar a notificação." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "Comando para iniciar sessão foi desactivado" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" "Esta ligação é utilizável uma única vez e só durante os próximos 2 minutos: %" "s" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "Deixou de subscrever %s" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "Não subscreveu ninguém." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Subscreveu esta pessoa:" msgstr[1] "Subscreveu estas pessoas:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "Ninguém subscreve as suas notas." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Esta pessoa subscreve as suas notas:" msgstr[1] "Estas pessoas subscrevem as suas notas:" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "Não está em nenhum grupo." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Está no grupo:" msgstr[1] "Está nos grupos:" -#: lib/command.php:769 +#: lib/command.php:812 #, fuzzy msgid "" "Commands:\n" @@ -5522,19 +5535,19 @@ msgstr "" "tracks - ainda não implementado.\n" "tracking - ainda não implementado.\n" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Ficheiro de configuração não encontrado. " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "Procurei ficheiros de configuração nos seguintes sítios: " -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "Talvez queira correr o instalador para resolver esta questão." -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "Ir para o instalador." @@ -5712,49 +5725,49 @@ msgstr "Categorias nas notas do grupo %s" msgid "This page is not available in a media type you accept" msgstr "Esta página não está disponível num formato que você aceite" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Formato do ficheiro da imagem não é suportado." + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Esse ficheiro é demasiado grande. O tamanho máximo de ficheiro é %s." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Transferência parcial." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Ocorreu um erro de sistema ao transferir o ficheiro." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Ficheiro não é uma imagem ou está corrompido." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Formato do ficheiro da imagem não é suportado." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Perdi o nosso ficheiro." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Tipo do ficheiro é desconhecido" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "MB" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "kB" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, fuzzy, php-format msgid "Unknown inbox source %d." msgstr "Língua desconhecida \"%s\"." @@ -6035,7 +6048,7 @@ msgstr "" "conversa com outros utilizadores. Outros podem enviar-lhe mensagens, a que " "só você terá acesso." -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "de" @@ -6191,23 +6204,23 @@ msgstr "O" msgid "at" msgstr "coords." -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "no contexto" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Repetida por" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Responder a esta nota" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Responder" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Nota repetida" @@ -6349,7 +6362,7 @@ msgstr "Repetir esta nota" msgid "Revoke the \"%s\" role from this user" msgstr "Bloquear acesso deste utilizador a este grupo" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6475,92 +6488,96 @@ msgstr "Deixar de subscrever este utilizador" msgid "Unsubscribe" msgstr "Abandonar" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Editar Avatar" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Acções do utilizador" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Editar configurações do perfil" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Editar" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Enviar mensagem directa a este utilizador" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Mensagem" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Moderar" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "Perfil" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 #, fuzzy msgctxt "role" msgid "Administrator" msgstr "Gestores" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 #, fuzzy msgctxt "role" msgid "Moderator" msgstr "Moderar" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "há alguns segundos" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "há cerca de um minuto" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "há cerca de %d minutos" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "há cerca de uma hora" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "há cerca de %d horas" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "há cerca de um dia" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "há cerca de %d dias" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "há cerca de um mês" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "há cerca de %d meses" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "há cerca de um ano" @@ -6574,7 +6591,7 @@ msgstr "%s não é uma cor válida!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s não é uma cor válida! Use 3 ou 6 caracteres hexadecimais." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "Mensagem demasiado extensa - máx. %1$d caracteres, enviou %2$d." diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po index 51d926ebab..a431c99b8f 100644 --- a/locale/pt_BR/LC_MESSAGES/statusnet.po +++ b/locale/pt_BR/LC_MESSAGES/statusnet.po @@ -2,6 +2,7 @@ # # Author@translatewiki.net: Aracnus # Author@translatewiki.net: Ewout +# Author@translatewiki.net: Luckas Blade # Author@translatewiki.net: McDutchie # Author@translatewiki.net: Vuln # -- @@ -11,12 +12,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:50:51+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:27+0000\n" "Language-Team: Brazilian Portuguese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt-br\n" "X-Message-Group: out-statusnet\n" @@ -76,7 +77,6 @@ msgid "Save access settings" msgstr "Salvar as configurações de acesso" #: actions/accessadminpanel.php:203 -#, fuzzy msgctxt "BUTTON" msgid "Save" msgstr "Salvar" @@ -97,7 +97,7 @@ msgstr "Esta página não existe." #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -106,10 +106,8 @@ msgstr "Esta página não existe." #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Este usuário não existe." @@ -209,14 +207,14 @@ msgstr "Atualizações de %1$s e amigos no %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "O método da API não foi encontrado!" @@ -229,8 +227,8 @@ msgstr "O método da API não foi encontrado!" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Este método requer um POST." @@ -261,7 +259,7 @@ msgid "Could not save profile." msgstr "Não foi possível salvar o perfil." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -349,7 +347,7 @@ msgstr "Não foi encontrado nenhum status com esse ID." msgid "This status is already a favorite." msgstr "Esta mensagem já é favorita!" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Não foi possível criar a favorita." @@ -468,7 +466,7 @@ msgstr "O grupo não foi encontrado!" msgid "You are already a member of that group." msgstr "Você já é membro desse grupo." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "O administrador desse grupo bloqueou sua inscrição." @@ -518,7 +516,7 @@ msgstr "Token inválido." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -591,9 +589,9 @@ msgstr "Conta" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Usuário" @@ -662,12 +660,12 @@ msgstr "O tamanho máximo da mensagem é de %s caracteres" msgid "Unsupported format." msgstr "Formato não suportado." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Favoritas de %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%1$s marcadas como favoritas por %2$s / %2$s." @@ -677,7 +675,7 @@ msgstr "%1$s marcadas como favoritas por %2$s / %2$s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Mensagens mencionando %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s mensagens em resposta a mensagens de %2$s / %3$s." @@ -687,7 +685,7 @@ msgstr "%1$s mensagens em resposta a mensagens de %2$s / %3$s." msgid "%s public timeline" msgstr "Mensagens públicas de %s" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s mensagens de todo mundo!" @@ -702,12 +700,12 @@ msgstr "Repetida para %s" msgid "Repeats of %s" msgstr "Repetições de %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Mensagens etiquetadas como %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Mensagens etiquetadas como %1$s no %2$s!" @@ -735,7 +733,7 @@ msgstr "Sem tamanho definido." msgid "Invalid size." msgstr "Tamanho inválido." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Avatar" @@ -768,7 +766,7 @@ msgid "Preview" msgstr "Visualização" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Excluir" @@ -852,8 +850,8 @@ msgstr "Não foi possível salvar a informação de bloqueio." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Esse grupo não existe." @@ -954,7 +952,7 @@ msgstr "Você não é o dono desta aplicação." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Ocorreu um problema com o seu token de sessão." @@ -1015,7 +1013,7 @@ msgstr "Tem certeza que deseja excluir esta mensagem?" msgid "Do not delete this notice" msgstr "Não excluir esta mensagem." -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Excluir esta mensagem" @@ -1268,7 +1266,7 @@ msgstr "descrição muito extensa (máximo %d caracteres)." msgid "Could not update group." msgstr "Não foi possível atualizar o grupo." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Não foi possível criar os apelidos." @@ -1982,7 +1980,7 @@ msgstr "Convidar novos usuários" msgid "You are already subscribed to these users:" msgstr "Você já está assinando esses usuários:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2029,7 +2027,6 @@ msgstr "Você pode, opcionalmente, adicionar uma mensagem pessoal ao convite." #. TRANS: Send button for inviting friends #: actions/invite.php:198 -#, fuzzy msgctxt "BUTTON" msgid "Send" msgstr "Enviar" @@ -2114,7 +2111,7 @@ msgstr "%1$s associou-se ao grupo %2$s" msgid "You must be logged in to leave a group." msgstr "Você deve estar autenticado para sair de um grupo." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Você não é um membro desse grupo." @@ -2232,12 +2229,12 @@ msgstr "Utilize este formulário para criar um novo grupo." msgid "New message" msgstr "Nova mensagem" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Você não pode enviar mensagens para este usuário." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Nenhum conteúdo!" @@ -2245,7 +2242,7 @@ msgstr "Nenhum conteúdo!" msgid "No recipient specified." msgstr "Não foi especificado nenhum destinatário." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2261,7 +2258,7 @@ msgstr "A mensagem foi enviada" msgid "Direct message to %s sent." msgstr "A mensagem direta para %s foi enviada." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Erro no Ajax" @@ -2383,7 +2380,7 @@ msgstr "" msgid "Notice has no profile" msgstr "A mensagem não está associada a nenhum perfil" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "Mensagem de %1$s no %2$s" @@ -2396,8 +2393,8 @@ msgstr "tipo de conteúdo " msgid "Only " msgstr "Apenas " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Não é um formato de dados suportado." @@ -2530,7 +2527,7 @@ msgstr "A senha anterior está errada" msgid "Error saving user; invalid." msgstr "Erro ao salvar usuário; inválido." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Não é possível salvar a nova senha." @@ -2745,8 +2742,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 letras minúsculas ou números, sem pontuações ou espaços" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nome completo" @@ -2773,9 +2770,9 @@ msgid "Bio" msgstr "Descrição" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Localização" @@ -2789,7 +2786,7 @@ msgstr "Compartilhe minha localização atual ao publicar mensagens" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Etiquetas" @@ -3032,7 +3029,7 @@ msgstr "Restaurar a senha" msgid "Recover password" msgstr "Recuperar a senha" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Foi solicitada a recuperação da senha" @@ -3052,21 +3049,21 @@ msgstr "Restaurar" msgid "Enter a nickname or email address." msgstr "Digite a identificação ou endereço de e-mail." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" "Não foi encontrado nenhum usuário com essa identificação ou endereço de " "email." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Nenhum endereço de e-mail registrado para esse usuário." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Erro ao salvar o endereço de confirmação." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3074,23 +3071,23 @@ msgstr "" "As instruções para recuperar a sua senha foram enviadas para o endereço de e-" "mail informado no seu cadastro." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Restauração inesperada da senha." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "A senha deve ter 6 ou mais caracteres." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "A senha e a confirmação não coincidem." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Erro na configuração do usuário." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "" "A nova senha foi salva com sucesso. A partir de agora você já está " @@ -3256,7 +3253,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "URL do seu perfil em outro serviço de microblog compatível" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Assinar" @@ -3293,7 +3290,7 @@ msgstr "Você não pode repetir sua própria mensagem." msgid "You already repeated that notice." msgstr "Você já repetiu essa mensagem." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Repetida" @@ -3439,7 +3436,7 @@ msgstr "Organização" msgid "Description" msgstr "Descrição" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Estatísticas" @@ -3560,67 +3557,67 @@ msgstr "Grupo %s" msgid "%1$s group, page %2$d" msgstr "Grupo %1$s, pág. %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Perfil do grupo" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "Site" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Mensagem" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Apelidos" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Ações do grupo" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Fonte de mensagens do grupo %s (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Fonte de mensagens do grupo %s (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Fonte de mensagens do grupo %s (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "FOAF para o grupo %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Membros" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Nenhum)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Todos os membros" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Criado" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3636,7 +3633,7 @@ msgstr "" "para se tornar parte deste grupo e muito mais! ([Saiba mais](%%%%doc.help%%%" "%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3649,7 +3646,7 @@ msgstr "" "[StatusNet](http://status.net/). Seus membros compartilham mensagens curtas " "sobre suas vidas e interesses. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Administradores" @@ -3843,9 +3840,8 @@ msgid "Default timezone for the site; usually UTC." msgstr "Fuso horário padrão para o seu site; geralmente UTC." #: actions/siteadminpanel.php:262 -#, fuzzy msgid "Default language" -msgstr "Idioma padrão do site" +msgstr "Idioma padrão" #: actions/siteadminpanel.php:263 msgid "Site language when autodetection from browser settings is not available" @@ -4209,12 +4205,12 @@ msgstr "Nenhum argumento de ID." msgid "Tag %s" msgstr "Etiqueta %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Perfil do usuário" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Imagem" @@ -4283,7 +4279,6 @@ msgstr "" #. TRANS: User admin panel title #: actions/useradminpanel.php:59 -#, fuzzy msgctxt "TITLE" msgid "User" msgstr "Usuário" @@ -4559,7 +4554,7 @@ msgstr "Versão" msgid "Author(s)" msgstr "Autor(es)" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " @@ -4568,12 +4563,12 @@ msgstr "" "Nenhum arquivo pode ser maior que %d bytes e o arquivo que você enviou " "possui %d bytes. Experimente enviar uma versão menor." -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "Um arquivo deste tamanho excederá a sua conta de %d bytes." -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "Um arquivo deste tamanho excederá a sua conta mensal de %d bytes." @@ -4612,27 +4607,27 @@ msgstr "Não foi possível inserir a mensagem." msgid "Could not update message with new URI." msgstr "Não foi possível atualizar a mensagem com a nova URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Erro no banco de dados durante a inserção da hashtag: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "Problema no salvamento da mensagem. Ela é muito extensa." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Problema no salvamento da mensagem. Usuário desconhecido." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Muitas mensagens em um período curto de tempo; dê uma respirada e publique " "novamente daqui a alguns minutos." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4640,19 +4635,19 @@ msgstr "" "Muitas mensagens duplicadas em um período curto de tempo; dê uma respirada e " "publique novamente daqui a alguns minutos." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Você está proibido de publicar mensagens neste site." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Problema no salvamento da mensagem." -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "Problema no salvamento das mensagens recebidas do grupo." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4682,29 +4677,29 @@ msgstr "Não foi possível excluir a auto-assinatura." msgid "Couldn't delete subscription OMB token." msgstr "Não foi possível excluir a assinatura." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Não foi possível excluir a assinatura." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Bem vindo(a) a %1$s, @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Não foi possível criar o grupo." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "Não foi possível configurar a associação ao grupo." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Não foi possível configurar a associação ao grupo." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "Não foi possível salvar a assinatura." @@ -4802,33 +4797,28 @@ msgid "Invite friends and colleagues to join you on %s" msgstr "Convide seus amigos e colegas para unir-se a você no %s" #: lib/action.php:456 -#, fuzzy msgctxt "MENU" msgid "Invite" msgstr "Convidar" #. TRANS: Tooltip for main menu option "Logout" #: lib/action.php:462 -#, fuzzy msgctxt "TOOLTIP" msgid "Logout from the site" -msgstr "Sai do site" +msgstr "Sair do site" #: lib/action.php:465 -#, fuzzy msgctxt "MENU" msgid "Logout" msgstr "Sair" #. TRANS: Tooltip for main menu option "Register" #: lib/action.php:470 -#, fuzzy msgctxt "TOOLTIP" msgid "Create an account" -msgstr "Cria uma conta" +msgstr "Criar uma conta" #: lib/action.php:473 -#, fuzzy msgctxt "MENU" msgid "Register" msgstr "Registrar-se" @@ -4854,7 +4844,6 @@ msgid "Help me!" msgstr "Ajudem-me!" #: lib/action.php:485 -#, fuzzy msgctxt "MENU" msgid "Help" msgstr "Ajuda" @@ -4867,10 +4856,9 @@ msgid "Search for people or text" msgstr "Procura por pessoas ou textos" #: lib/action.php:491 -#, fuzzy msgctxt "MENU" msgid "Search" -msgstr "Procurar" +msgstr "Pesquisar" #. TRANS: DT element for site notice. String is hidden in default CSS. #. TRANS: Menu item for site administration @@ -4926,7 +4914,7 @@ msgstr "Mini-aplicativo" msgid "StatusNet software license" msgstr "Licença do software StatusNet" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4935,12 +4923,12 @@ msgstr "" "**%%site.name%%** é um serviço de microblog disponibilizado por [%%site." "broughtby%%](%%site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** é um serviço de microblog. " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4951,43 +4939,43 @@ msgstr "" "versão %s, disponível sob a [GNU Affero General Public License] (http://www." "fsf.org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Licença do conteúdo do site" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "O conteúdo e os dados de %1$s são privados e confidenciais." -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "Conteúdo e dados licenciados sob %1$s. Todos os direitos reservados." -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" "Conteúdo e dados licenciados pelos colaboradores. Todos os direitos " "reservados." -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Todas " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "licença." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Paginação" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Próximo" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Anterior" @@ -5003,6 +4991,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5095,7 +5087,7 @@ msgstr "" "Os recursos de API exigem acesso de leitura e escrita, mas você possui " "somente acesso de leitura." -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5172,11 +5164,11 @@ msgstr "Revogar" msgid "Attachments" msgstr "Anexos" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Autor" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Operadora" @@ -5196,37 +5188,50 @@ msgstr "Não foi possível alterar a senha" msgid "Password changing is not allowed" msgstr "Não é permitido alterar a senha" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Resultados do comando" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "O comando foi completado" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "O comando falhou" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Desculpe, mas esse comando ainda não foi implementado." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "Não existe uma mensagem com essa id" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "O usuário não tem uma \"última mensagem\"" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "Não foi possível encontrar um usuário com a identificação %s" -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Não foi possível encontrar um usuário com a identificação %s" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Desculpe, mas esse comando ainda não foi implementado." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "Não faz muito sentido chamar a sua própria atenção!" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "Foi enviada a chamada de atenção para %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5237,199 +5242,198 @@ msgstr "" "Assinantes: %2$s\n" "Mensagens: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "Não existe uma mensagem com essa id" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "O usuário não tem uma \"última mensagem\"" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Mensagem marcada como favorita." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Você já é um membro desse grupo." -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Não foi possível associar o usuário %s ao grupo %s" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s associou-se ao grupo %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Não foi possível remover o usuário %s do grupo %s" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s deixou o grupo %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Nome completo: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Localização: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Site: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Sobre: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" "A mensagem é muito extensa - o máximo são %d caracteres e você enviou %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "A mensagem direta para %s foi enviada" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Ocorreu um erro durante o envio da mensagem direta." -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "Você não pode repetir sua própria mensagem" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "Você já repetiu essa mensagem" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "Mensagem de %s repetida" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "Erro na repetição da mensagem." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" "A mensagem é muito extensa - o máximo são %d caracteres e você enviou %d" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "A resposta a %s foi enviada" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "Erro no salvamento da mensagem." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Especifique o nome do usuário que será assinado" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "Este usuário não existe." +#: lib/command.php:602 +#, fuzzy +msgid "Can't subscribe to OMB profiles by command." +msgstr "Você não está assinando esse perfil." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Efetuada a assinatura de %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Especifique o nome do usuário cuja assinatura será cancelada" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Cancelada a assinatura de %s" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "O comando não foi implementado ainda." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Notificação desligada." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Não é possível desligar a notificação." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Notificação ligada." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Não é possível ligar a notificação." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "O comando para autenticação está desabilitado" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" "Este link é utilizável somente uma vez e é válido somente por dois minutos: %" "s" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "Cancelada a assinatura de %s" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "Você não está assinando ninguém." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Você já está assinando esta pessoa:" msgstr[1] "Você já está assinando estas pessoas:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "Ninguém o assinou ainda." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Esta pessoa está assinando você:" msgstr[1] "Estas pessoas estão assinando você:" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "Você não é membro de nenhum grupo." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Você é membro deste grupo:" msgstr[1] "Você é membro destes grupos:" -#: lib/command.php:769 +#: lib/command.php:812 #, fuzzy msgid "" "Commands:\n" @@ -5510,19 +5514,19 @@ msgstr "" "tracks - não implementado ainda\n" "tracking - não implementado ainda\n" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Não foi encontrado nenhum arquivo de configuração. " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "Eu procurei pelos arquivos de configuração nos seguintes lugares: " -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "Você pode querer executar o instalador para corrigir isto." -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "Ir para o instalador." @@ -5700,49 +5704,49 @@ msgstr "Etiquetas nas mensagens do grupo %s" msgid "This page is not available in a media type you accept" msgstr "Esta página não está disponível em um tipo de mídia que você aceita" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Formato de imagem não suportado." + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "O arquivo é muito grande. O tamanho máximo é de %s." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Envio parcial." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Erro no sistema durante o envio do arquivo." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Imagem inválida ou arquivo corrompido." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Formato de imagem não suportado." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Nosso arquivo foi perdido." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Tipo de arquivo desconhecido" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "Mb" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "Kb" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "Fonte da caixa de entrada desconhecida %d." @@ -6022,7 +6026,7 @@ msgstr "" "privadas para envolver outras pessoas em uma conversa. Você também pode " "receber mensagens privadas." -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "de" @@ -6118,7 +6122,6 @@ msgid "Available characters" msgstr "Caracteres disponíveis" #: lib/messageform.php:178 lib/noticeform.php:236 -#, fuzzy msgctxt "Send button for sending notice" msgid "Send" msgstr "Enviar" @@ -6181,23 +6184,23 @@ msgstr "O" msgid "at" msgstr "em" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "no contexto" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Repetida por" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Responder a esta mensagem" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Responder" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Mensagem repetida" @@ -6339,7 +6342,7 @@ msgstr "Repetir esta mensagem" msgid "Revoke the \"%s\" role from this user" msgstr "Bloquear este usuário neste grupo" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "Nenhum usuário definido para o modo de usuário único." @@ -6465,92 +6468,95 @@ msgstr "Cancelar a assinatura deste usuário" msgid "Unsubscribe" msgstr "Cancelar" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Editar o avatar" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Ações do usuário" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Editar as configurações do perfil" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Editar" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Enviar uma mensagem para este usuário." -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Mensagem" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Moderar" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "Perfil do usuário" -#: lib/userprofile.php:354 -#, fuzzy +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" -msgstr "Administradores" +msgstr "Administrador" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 #, fuzzy msgctxt "role" msgid "Moderator" msgstr "Moderar" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "alguns segundos atrás" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "cerca de 1 minuto atrás" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "cerca de %d minutos atrás" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "cerca de 1 hora atrás" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "cerca de %d horas atrás" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "cerca de 1 dia atrás" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "cerca de %d dias atrás" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "cerca de 1 mês atrás" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "cerca de %d meses atrás" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "cerca de 1 ano atrás" @@ -6564,7 +6570,7 @@ msgstr "%s não é uma cor válida!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s não é uma cor válida! Utilize 3 ou 6 caracteres hexadecimais." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po index 03aaa074a2..b436d9f1e3 100644 --- a/locale/ru/LC_MESSAGES/statusnet.po +++ b/locale/ru/LC_MESSAGES/statusnet.po @@ -12,12 +12,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:50:54+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:30+0000\n" "Language-Team: Russian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ru\n" "X-Message-Group: out-statusnet\n" @@ -98,7 +98,7 @@ msgstr "Ðет такой Ñтраницы" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -107,10 +107,8 @@ msgstr "Ðет такой Ñтраницы" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Ðет такого пользователÑ." @@ -208,14 +206,14 @@ msgstr "Обновлено от %1$s и его друзей на %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "Метод API не найден." @@ -228,8 +226,8 @@ msgstr "Метод API не найден." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Этот метод требует POST." @@ -258,7 +256,7 @@ msgid "Could not save profile." msgstr "Ðе удаётÑÑ Ñохранить профиль." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -346,7 +344,7 @@ msgstr "Ðет ÑтатуÑа Ñ Ñ‚Ð°ÐºÐ¸Ð¼ ID." msgid "This status is already a favorite." msgstr "Этот ÑÑ‚Ð°Ñ‚ÑƒÑ ÑƒÐ¶Ðµ входит в чиÑло любимых." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Ðе удаётÑÑ Ñоздать любимую запиÑÑŒ." @@ -468,7 +466,7 @@ msgstr "Группа не найдена!" msgid "You are already a member of that group." msgstr "Ð’Ñ‹ уже ÑвлÑетеÑÑŒ членом Ñтой группы." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "Ð’Ñ‹ заблокированы из Ñтой группы админиÑтратором." @@ -518,7 +516,7 @@ msgstr "Ðеправильный токен" #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -587,9 +585,9 @@ msgstr "ÐаÑтройки" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "ИмÑ" @@ -658,12 +656,12 @@ msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° запиÑи — %d Ñимволов msgid "Unsupported format." msgstr "Ðеподдерживаемый формат." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Любимое от %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ %1$s, отмеченные как любимые %2$s / %2$s." @@ -673,7 +671,7 @@ msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ %1$s, отмеченные как любимые %2 msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / ОбновлениÑ, упоминающие %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s обновил Ñтот ответ на Ñообщение: %2$s / %3$s." @@ -683,7 +681,7 @@ msgstr "%1$s обновил Ñтот ответ на Ñообщение: %2$s / msgid "%s public timeline" msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð»ÐµÐ½Ñ‚Ð° %s" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ %s от вÑех!" @@ -698,12 +696,12 @@ msgstr "Повторено Ð´Ð»Ñ %s" msgid "Repeats of %s" msgstr "Повторы за %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "ЗапиÑи Ñ Ñ‚ÐµÐ³Ð¾Ð¼ %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ñ‚ÐµÐ³Ð¾Ð¼ %1$s на %2$s!" @@ -731,7 +729,7 @@ msgstr "Ðет размера." msgid "Invalid size." msgstr "Ðеверный размер." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Ðватара" @@ -764,7 +762,7 @@ msgid "Preview" msgstr "ПроÑмотр" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Удалить" @@ -847,8 +845,8 @@ msgstr "Ðе удаётÑÑ Ñохранить информацию о блок #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Ðет такой группы." @@ -949,7 +947,7 @@ msgstr "Ð’Ñ‹ не ÑвлÑетеÑÑŒ владельцем Ñтого прило #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Проблема Ñ Ð’Ð°ÑˆÐµÐ¹ ÑеÑÑией. Попробуйте ещё раз, пожалуйÑта." @@ -1010,7 +1008,7 @@ msgstr "Ð’Ñ‹ уверены, что хотите удалить Ñту запи msgid "Do not delete this notice" msgstr "Ðе удалÑÑ‚ÑŒ Ñту запиÑÑŒ" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Удалить Ñту запиÑÑŒ" @@ -1263,7 +1261,7 @@ msgstr "Слишком длинное опиÑание (макÑимум %d Ñи msgid "Could not update group." msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ информацию о группе." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Ðе удаётÑÑ Ñоздать алиаÑÑ‹." @@ -1978,7 +1976,7 @@ msgstr "ПриглаÑить новых пользователей" msgid "You are already subscribed to these users:" msgstr "Ð’Ñ‹ уже подпиÑаны на пользователÑ:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2108,7 +2106,7 @@ msgstr "%1$s вÑтупил в группу %2$s" msgid "You must be logged in to leave a group." msgstr "Ð’Ñ‹ должны авторизоватьÑÑ, чтобы покинуть группу." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Ð’Ñ‹ не ÑвлÑетеÑÑŒ членом Ñтой группы." @@ -2222,12 +2220,12 @@ msgstr "ИÑпользуйте Ñту форму Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð² msgid "New message" msgstr "Ðовое Ñообщение" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Ð’Ñ‹ не можете поÑлать Ñообщение Ñтому пользователю." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Ðет контента!" @@ -2235,7 +2233,7 @@ msgstr "Ðет контента!" msgid "No recipient specified." msgstr "Ðет адреÑата." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "Ðе поÑылайте ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñами Ñебе; проÑто потихоньку Ñкажите Ñто Ñебе." @@ -2249,7 +2247,7 @@ msgstr "Сообщение отправлено" msgid "Direct message to %s sent." msgstr "ПрÑмое Ñообщение Ð´Ð»Ñ %s поÑлано." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Ошибка AJAX" @@ -2368,7 +2366,7 @@ msgstr "Разработчики могут изменÑÑ‚ÑŒ наÑтройки msgid "Notice has no profile" msgstr "ЗапиÑÑŒ без профилÑ" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ %1$s на %2$s" @@ -2381,8 +2379,8 @@ msgstr "тип Ñодержимого " msgid "Only " msgstr "Только " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Ðеподдерживаемый формат данных." @@ -2515,7 +2513,7 @@ msgstr "Ðекорректный Ñтарый пароль" msgid "Error saving user; invalid." msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ; неверное имÑ." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Ðе удаётÑÑ Ñохранить новый пароль." @@ -2728,8 +2726,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 латинÑких Ñтрочных буквы или цифры, без пробелов" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Полное имÑ" @@ -2756,9 +2754,9 @@ msgid "Bio" msgstr "БиографиÑ" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "МеÑтораÑположение" @@ -2772,7 +2770,7 @@ msgstr "ДелитьÑÑ Ñвоим текущим меÑтоположение #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Теги" @@ -3012,7 +3010,7 @@ msgstr "ПереуÑтановить пароль" msgid "Recover password" msgstr "ВоÑÑтановление паролÑ" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Запрошено воÑÑтановление паролÑ" @@ -3032,19 +3030,19 @@ msgstr "СброÑить" msgid "Enter a nickname or email address." msgstr "Введите Ð¸Ð¼Ñ Ð¸Ð»Ð¸ Ñлектронный адреÑ." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "Ðет Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ñ‚Ð°ÐºÐ¸Ð¼ Ñлектронным адреÑом или именем." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Ðет зарегиÑтрированных Ñлектронных адреÑов Ð´Ð»Ñ Ñтого пользователÑ." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´Ñ‘Ð½Ð½Ð¾Ð³Ð¾ адреÑа." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3052,23 +3050,23 @@ msgstr "" "ИнÑтрукции по воÑÑтановлению Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¿Ð¾Ñланы на Ñлектронный адреÑ, который Ð’Ñ‹ " "указали при региÑтрации вашего аккаунта." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "ÐÐµÑ‚Ð¸Ð¿Ð¾Ð²Ð°Ñ Ð¿ÐµÑ€ÐµÑƒÑтановка паролÑ." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Пароль должен быть длиной не менее 6 Ñимволов." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Пароль и его подтверждение не Ñовпадают." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Ошибка в уÑтановках пользователÑ." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Ðовый пароль уÑпешно Ñохранён. Ð’Ñ‹ авторизовалиÑÑŒ." @@ -3235,7 +3233,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "ÐÐ´Ñ€ÐµÑ URL твоего Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð½Ð° другом подходÑщем ÑервиÑе микроблогинга" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "ПодпиÑатьÑÑ" @@ -3271,7 +3269,7 @@ msgstr "Ð’Ñ‹ не можете повторить ÑобÑтвенную зап msgid "You already repeated that notice." msgstr "Ð’Ñ‹ уже повторили Ñту запиÑÑŒ." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Повторено" @@ -3415,7 +3413,7 @@ msgstr "ОрганизациÑ" msgid "Description" msgstr "ОпиÑание" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "СтатиÑтика" @@ -3536,67 +3534,67 @@ msgstr "Группа %s" msgid "%1$s group, page %2$d" msgstr "Группа %1$s, Ñтраница %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Профиль группы" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "ЗапиÑÑŒ" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "ÐлиаÑÑ‹" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "ДейÑÑ‚Ð²Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Лента запиÑей группы %s (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Лента запиÑей группы %s (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Лента запиÑей группы %s (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "FOAF Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "УчаÑтники" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(пока ничего нет)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Ð’Ñе учаÑтники" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Создано" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3612,7 +3610,7 @@ msgstr "" "action.register%%%%), чтобы Ñтать учаÑтником группы и получить множеÑтво " "других возможноÑтей! ([Читать далее](%%%%doc.help%%%%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3625,7 +3623,7 @@ msgstr "" "обеÑпечении [StatusNet](http://status.net/). УчаÑтники обмениваютÑÑ " "короткими ÑообщениÑми о Ñвоей жизни и интереÑах. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "ÐдминиÑтраторы" @@ -4182,12 +4180,12 @@ msgstr "Ðет аргумента ID." msgid "Tag %s" msgstr "Теги %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Профиль пользователÑ" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Фото" @@ -4528,7 +4526,7 @@ msgstr "ВерÑиÑ" msgid "Author(s)" msgstr "Ðвтор(Ñ‹)" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " @@ -4537,12 +4535,12 @@ msgstr "" "Файл не может быть больше %d байт, тогда как отправленный вами файл Ñодержал " "%d байт. Попробуйте загрузить меньшую верÑию." -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "Файл такого размера превыÑит вашу пользовательÑкую квоту в %d байта." -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "Файл такого размера превыÑит вашу меÑÑчную квоту в %d байта." @@ -4580,27 +4578,27 @@ msgstr "Ðе удаётÑÑ Ð²Ñтавить Ñообщение." msgid "Could not update message with new URI." msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ñообщение Ñ Ð½Ð¾Ð²Ñ‹Ð¼ URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Ошибка баз данных при вÑтавке хеш-тегов Ð´Ð»Ñ %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "Проблемы Ñ Ñохранением запиÑи. Слишком длинно." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Проблема при Ñохранении запиÑи. ÐеизвеÑтный пользователь." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Слишком много запиÑей за Ñтоль короткий Ñрок; передохните немного и " "попробуйте вновь через пару минут." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4608,19 +4606,19 @@ msgstr "" "Слишком много одинаковых запиÑей за Ñтоль короткий Ñрок; передохните немного " "и попробуйте вновь через пару минут." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Вам запрещено поÑтитьÑÑ Ð½Ð° Ñтом Ñайте (бан)" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Проблемы Ñ Ñохранением запиÑи." -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "Проблемы Ñ Ñохранением входÑщих Ñообщений группы." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4649,28 +4647,28 @@ msgstr "Ðевозможно удалить ÑамоподпиÑку." msgid "Couldn't delete subscription OMB token." msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ подпиÑочный жетон OMB." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ подпиÑку." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Добро пожаловать на %1$s, @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Ðе удаётÑÑ Ñоздать группу." -#: classes/User_group.php:486 +#: classes/User_group.php:489 msgid "Could not set group URI." msgstr "Ðе удаётÑÑ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ URI группы." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Ðе удаётÑÑ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ членÑтво в группе." -#: classes/User_group.php:521 +#: classes/User_group.php:524 msgid "Could not save local group info." msgstr "Ðе удаётÑÑ Ñохранить информацию о локальной группе." @@ -4874,7 +4872,7 @@ msgstr "Бедж" msgid "StatusNet software license" msgstr "StatusNet лицензиÑ" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4883,12 +4881,12 @@ msgstr "" "**%%site.name%%** — Ñто ÑÐµÑ€Ð²Ð¸Ñ Ð¼Ð¸ÐºÑ€Ð¾Ð±Ð»Ð¾Ð³Ð¸Ð½Ð³Ð°, Ñозданный Ð´Ð»Ñ Ð²Ð°Ñ Ð¿Ñ€Ð¸ помощи [%" "%site.broughtby%%](%%site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** — ÑÐµÑ€Ð²Ð¸Ñ Ð¼Ð¸ÐºÑ€Ð¾Ð±Ð»Ð¾Ð³Ð¸Ð½Ð³Ð°. " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4900,44 +4898,44 @@ msgstr "" "лицензией [GNU Affero General Public License](http://www.fsf.org/licensing/" "licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ñодержимого Ñайта" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "Содержание и данные %1$s ÑвлÑÑŽÑ‚ÑÑ Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ и конфиденциальными." -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" "ÐвторÑкие права на Ñодержание и данные принадлежат %1$s. Ð’Ñе права защищены." -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" "ÐвторÑкие права на Ñодержание и данные принадлежат разработчикам. Ð’Ñе права " "защищены." -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "All " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "license." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Разбиение на Ñтраницы" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Сюда" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Туда" @@ -4953,6 +4951,10 @@ msgstr "Пока ещё Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ñ‚ÑŒ вÑтроенны msgid "Can't handle embedded Base64 content yet." msgstr "Пока ещё Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ñ‚ÑŒ вÑтроенное Ñодержание Base64." +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5041,7 +5043,7 @@ msgstr "" "API реÑурÑа требует доÑтуп Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи, но у Ð²Ð°Ñ ÐµÑÑ‚ÑŒ только доÑтуп " "Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ." -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5118,11 +5120,11 @@ msgstr "Отозвать" msgid "Attachments" msgstr "ВложениÑ" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Ðвтор" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "СервиÑ" @@ -5142,37 +5144,50 @@ msgstr "Изменение Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ удалоÑÑŒ" msgid "Password changing is not allowed" msgstr "Смена Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ разрешена" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Команда иÑполнена" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Команда завершена" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Команда неудачна" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "ПроÑтите, Ñта команда ещё не выполнена." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "ЗапиÑи Ñ Ñ‚Ð°ÐºÐ¸Ð¼ id не ÑущеÑтвует" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "У Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑ‚ поÑледней запиÑи." + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "Ðе удаётÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ %s" -#: lib/command.php:92 +#: lib/command.php:143 +#, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Ðе удаётÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ %s" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "ПроÑтите, Ñта команда ещё не выполнена." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "Ðет ÑмыÑла «подталкивать» Ñамого ÑебÑ!" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "«Подталкивание» поÑлано %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5183,198 +5198,198 @@ msgstr "" "ПодпиÑчиков: %2$s\n" "ЗапиÑей: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "ЗапиÑи Ñ Ñ‚Ð°ÐºÐ¸Ð¼ id не ÑущеÑтвует" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "У Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑ‚ поÑледней запиÑи." - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "ЗапиÑÑŒ помечена как любимаÑ." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Ð’Ñ‹ уже ÑвлÑетеÑÑŒ членом Ñтой группы." -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Ðе удаётÑÑ Ð¿Ñ€Ð¸Ñоединить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %s к группе %s" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%1$s вÑтупил в группу %2$s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1$s из группы %2$s." -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%1$s покинул группу %2$s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Полное имÑ: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "МеÑтораÑположение: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "ДомашнÑÑ Ñтраница: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "О пользователе: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" +"%s профиль другой ÑиÑтемы; вы можете отÑылать личное Ñообщение только " +"пользователÑм Ñтой ÑиÑтемы." + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "Сообщение Ñлишком длинное — не больше %d Ñимволов, вы поÑылаете %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "ПрÑмое Ñообщение Ð´Ð»Ñ %s поÑлано." -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Ошибка при отправке прÑмого ÑообщениÑ." -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "Ðевозможно повторить ÑобÑтвенную запиÑÑŒ." -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "Эта запиÑÑŒ уже повторена" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "ЗапиÑÑŒ %s повторена" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "Ошибка при повторении запиÑи." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "ЗапиÑÑŒ Ñлишком Ð´Ð»Ð¸Ð½Ð½Ð°Ñ â€” не больше %d Ñимволов, вы поÑылаете %d" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "Ответ %s отправлен" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "Проблемы Ñ Ñохранением запиÑи." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Укажите Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки." -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "Ðет такого пользователÑ." +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "Ðевозможно подпиÑатьÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ на профили OMB." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "ПодпиÑано на %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Укажите Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ подпиÑки." -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "ОтпиÑано от %s" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Команда ещё не выполнена." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Оповещение отÑутÑтвует." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Ðет оповещениÑ." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "ЕÑÑ‚ÑŒ оповещение." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "ЕÑÑ‚ÑŒ оповещение." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "Команда входа отключена" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "Эта ÑÑылка дейÑтвительна только один раз в течение 2 минут: %s" -#: lib/command.php:692 +#: lib/command.php:735 #, php-format msgid "Unsubscribed %s" msgstr "ОтпиÑано %s" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "Ð’Ñ‹ ни на кого не подпиÑаны." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Ð’Ñ‹ подпиÑаны на Ñтих людей:" msgstr[1] "Ð’Ñ‹ подпиÑаны на Ñтих людей:" msgstr[2] "Ð’Ñ‹ подпиÑаны на Ñтих людей:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "Ðикто не подпиÑан на ваÑ." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Эти люди подпиÑалиÑÑŒ на ваÑ:" msgstr[1] "Эти люди подпиÑалиÑÑŒ на ваÑ:" msgstr[2] "Эти люди подпиÑалиÑÑŒ на ваÑ:" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "Ð’Ñ‹ не ÑоÑтоите ни в одной группе." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Ð’Ñ‹ ÑвлÑетеÑÑŒ учаÑтником Ñледующих групп:" msgstr[1] "Ð’Ñ‹ ÑвлÑетеÑÑŒ учаÑтником Ñледующих групп:" msgstr[2] "Ð’Ñ‹ ÑвлÑетеÑÑŒ учаÑтником Ñледующих групп:" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5454,19 +5469,19 @@ msgstr "" "tracks — пока не реализовано.\n" "tracking — пока не реализовано.\n" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Конфигурационный файл не найден. " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "Конфигурационные файлы иÑкалиÑÑŒ в Ñледующих меÑтах: " -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "Возможно, вы решите запуÑтить уÑтановщик Ð´Ð»Ñ Ð¸ÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñтого." -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "Перейти к уÑтановщику" @@ -5644,49 +5659,49 @@ msgstr "Теги запиÑей группы %s" msgid "This page is not available in a media type you accept" msgstr "Страница недоÑтупна Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ типа, который Ð’Ñ‹ задейÑтвовали." -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Ðеподдерживаемый формат файла изображениÑ." + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Этот файл Ñлишком большой. МакÑимальный размер файла ÑоÑтавлÑет %s." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "ЧаÑÑ‚Ð¸Ñ‡Ð½Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при загрузке файла." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Ðе ÑвлÑетÑÑ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼ или повреждённый файл." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Ðеподдерживаемый формат файла изображениÑ." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "ПотерÑн файл." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Ðеподдерживаемый тип файла" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "МБ" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "КБ" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "ÐеизвеÑтный иÑточник входÑщих Ñообщений %d." @@ -5967,7 +5982,7 @@ msgstr "" "Ð²Ð¾Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… пользователей в разговор. СообщениÑ, получаемые от других " "людей, видите только вы." -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "от " @@ -6122,23 +6137,23 @@ msgstr "з. д." msgid "at" msgstr "на" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "в контекÑте" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Повторено" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Ответить на Ñту запиÑÑŒ" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Ответить" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "ЗапиÑÑŒ повторена" @@ -6280,7 +6295,7 @@ msgstr "Повторить Ñту запиÑÑŒ" msgid "Revoke the \"%s\" role from this user" msgstr "Отозвать у Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ€Ð¾Ð»ÑŒ «%s»" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "Ðи задан пользователь Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого режима." @@ -6406,89 +6421,93 @@ msgstr "ОтпиÑатьÑÑ Ð¾Ñ‚ Ñтого пользователÑ" msgid "Unsubscribe" msgstr "ОтпиÑатьÑÑ" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Изменить аватару" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "ДейÑÑ‚Ð²Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Изменение наÑтроек профилÑ" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Редактировать" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "ПоÑлать приватное Ñообщение Ñтому пользователю." -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Сообщение" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Модерировать" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 msgid "User role" msgstr "Роль пользователÑ" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "ÐдминиÑтратор" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "Модератор" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "пару Ñекунд назад" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "около минуты назад" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "около %d минут(Ñ‹) назад" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "около чаÑа назад" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "около %d чаÑа(ов) назад" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "около Ð´Ð½Ñ Ð½Ð°Ð·Ð°Ð´" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "около %d днÑ(ей) назад" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "около меÑÑца назад" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "около %d меÑÑца(ев) назад" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "около года назад" @@ -6504,7 +6523,7 @@ msgstr "" "%s не ÑвлÑетÑÑ Ð´Ð¾Ð¿ÑƒÑтимым цветом! ИÑпользуйте 3 или 6 шеÑтнадцатеричных " "Ñимволов." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/statusnet.po b/locale/statusnet.po index 61d902a1a9..eccc291e20 100644 --- a/locale/statusnet.po +++ b/locale/statusnet.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-08 21:09+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -90,7 +90,7 @@ msgstr "" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -99,10 +99,8 @@ msgstr "" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "" @@ -193,14 +191,14 @@ msgstr "" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "" @@ -213,8 +211,8 @@ msgstr "" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "" @@ -243,7 +241,7 @@ msgid "Could not save profile." msgstr "" #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -327,7 +325,7 @@ msgstr "" msgid "This status is already a favorite." msgstr "" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "" @@ -444,7 +442,7 @@ msgstr "" msgid "You are already a member of that group." msgstr "" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -494,7 +492,7 @@ msgstr "" #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -558,9 +556,9 @@ msgstr "" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "" @@ -629,12 +627,12 @@ msgstr "" msgid "Unsupported format." msgstr "" -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "" @@ -644,7 +642,7 @@ msgstr "" msgid "%1$s / Updates mentioning %2$s" msgstr "" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "" @@ -654,7 +652,7 @@ msgstr "" msgid "%s public timeline" msgstr "" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "" @@ -669,12 +667,12 @@ msgstr "" msgid "Repeats of %s" msgstr "" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "" @@ -702,7 +700,7 @@ msgstr "" msgid "Invalid size." msgstr "" -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "" @@ -734,7 +732,7 @@ msgid "Preview" msgstr "" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "" @@ -814,8 +812,8 @@ msgstr "" #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "" @@ -916,7 +914,7 @@ msgstr "" #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "" @@ -972,7 +970,7 @@ msgstr "" msgid "Do not delete this notice" msgstr "" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "" @@ -1221,7 +1219,7 @@ msgstr "" msgid "Could not update group." msgstr "" -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "" @@ -1882,7 +1880,7 @@ msgstr "" msgid "You are already subscribed to these users:" msgstr "" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "" @@ -1982,7 +1980,7 @@ msgstr "" msgid "You must be logged in to leave a group." msgstr "" -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "" @@ -2091,12 +2089,12 @@ msgstr "" msgid "New message" msgstr "" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "" -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "" @@ -2104,7 +2102,7 @@ msgstr "" msgid "No recipient specified." msgstr "" -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2118,7 +2116,7 @@ msgstr "" msgid "Direct message to %s sent." msgstr "" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "" @@ -2229,7 +2227,7 @@ msgstr "" msgid "Notice has no profile" msgstr "" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "" @@ -2242,8 +2240,8 @@ msgstr "" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "" @@ -2374,7 +2372,7 @@ msgstr "" msgid "Error saving user; invalid." msgstr "" -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "" @@ -2583,8 +2581,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "" @@ -2611,9 +2609,9 @@ msgid "Bio" msgstr "" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "" @@ -2627,7 +2625,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "" @@ -2851,7 +2849,7 @@ msgstr "" msgid "Recover password" msgstr "" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "" @@ -2871,41 +2869,41 @@ msgstr "" msgid "Enter a nickname or email address." msgstr "" -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "" -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "" -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." msgstr "" -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "" -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "" -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "" -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "" -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "" @@ -3044,7 +3042,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "" @@ -3080,7 +3078,7 @@ msgstr "" msgid "You already repeated that notice." msgstr "" -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "" @@ -3217,7 +3215,7 @@ msgstr "" msgid "Description" msgstr "" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "" @@ -3328,67 +3326,67 @@ msgstr "" msgid "%1$s group, page %2$d" msgstr "" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3398,7 +3396,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3407,7 +3405,7 @@ msgid "" "their life and interests. " msgstr "" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "" @@ -3924,12 +3922,12 @@ msgstr "" msgid "Tag %s" msgstr "" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "" @@ -4241,19 +4239,19 @@ msgstr "" msgid "Author(s)" msgstr "" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4291,43 +4289,43 @@ msgstr "" msgid "Could not update message with new URI." msgstr "" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "" -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "" -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "" -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "" -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "" @@ -4356,28 +4354,28 @@ msgstr "" msgid "Couldn't delete subscription OMB token." msgstr "" -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "" -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "" -#: classes/User_group.php:486 +#: classes/User_group.php:489 msgid "Could not set group URI." msgstr "" -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "" -#: classes/User_group.php:521 +#: classes/User_group.php:524 msgid "Could not save local group info." msgstr "" @@ -4581,19 +4579,19 @@ msgstr "" msgid "StatusNet software license" msgstr "" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." "broughtby%%](%%site.broughtbyurl%%). " msgstr "" -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "" -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4601,41 +4599,41 @@ msgid "" "org/licensing/licenses/agpl-3.0.html)." msgstr "" -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "" -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "" @@ -4651,6 +4649,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -4737,7 +4739,7 @@ msgstr "" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -4811,11 +4813,11 @@ msgstr "" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "" @@ -4835,37 +4837,50 @@ msgstr "" msgid "Password changing is not allowed" msgstr "" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" msgstr "" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "" -#: lib/command.php:92 +#: lib/command.php:143 +#, php-format +msgid "Could not find a local user with nickname %s" +msgstr "" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "" + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -4873,195 +4888,193 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "" -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "" -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "" -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "" -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." msgstr "" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "" -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "" -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "" -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "" -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, php-format msgid "Unsubscribed %s" msgstr "" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "" -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "" msgstr[1] "" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "" -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "" msgstr[1] "" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "" -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "" msgstr[1] "" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5103,19 +5116,19 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "" -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "" @@ -5289,49 +5302,49 @@ msgstr "" msgid "This page is not available in a media type you accept" msgstr "" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "" + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "" -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "" -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "" -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "" -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "" - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "" -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5526,7 +5539,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "" @@ -5676,23 +5689,23 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "" @@ -5834,7 +5847,7 @@ msgstr "" msgid "Revoke the \"%s\" role from this user" msgstr "" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -5960,89 +5973,93 @@ msgstr "" msgid "Unsubscribe" msgstr "" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 msgid "User role" msgstr "" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "" @@ -6056,7 +6073,7 @@ msgstr "" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po index 2a508849f2..eee7b6d722 100644 --- a/locale/sv/LC_MESSAGES/statusnet.po +++ b/locale/sv/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:50:58+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:33+0000\n" "Language-Team: Swedish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: sv\n" "X-Message-Group: out-statusnet\n" @@ -94,7 +94,7 @@ msgstr "Ingen sÃ¥dan sida" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -103,10 +103,8 @@ msgstr "Ingen sÃ¥dan sida" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Ingen sÃ¥dan användare." @@ -204,14 +202,14 @@ msgstr "Uppdateringar frÃ¥n %1$s och vänner pÃ¥ %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "API-metod hittades inte." @@ -224,8 +222,8 @@ msgstr "API-metod hittades inte." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Denna metod kräver en POST." @@ -254,7 +252,7 @@ msgid "Could not save profile." msgstr "Kunde inte spara profil." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -340,7 +338,7 @@ msgstr "Ingen status hittad med det ID:t." msgid "This status is already a favorite." msgstr "Denna status är redan en favorit." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Kunde inte skapa favorit." @@ -458,7 +456,7 @@ msgstr "Grupp hittades inte!" msgid "You are already a member of that group." msgstr "Du är redan en medlem i denna grupp." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "Du har blivit blockerad frÃ¥n denna grupp av administratören." @@ -508,7 +506,7 @@ msgstr "Ogiltig token." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -575,9 +573,9 @@ msgstr "Konto" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Smeknamn" @@ -646,12 +644,12 @@ msgstr "Maximal notisstorlek är %d tecken, inklusive URL för bilaga." msgid "Unsupported format." msgstr "Format som inte stödjs." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Favoriter frÃ¥n %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%1$s uppdateringar markerade som favorit av %2$s / %2$s." @@ -661,7 +659,7 @@ msgstr "%1$s uppdateringar markerade som favorit av %2$s / %2$s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Uppdateringar som nämner %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s uppdateringar med svar pÃ¥ uppdatering frÃ¥n %2$s / %3$s." @@ -671,7 +669,7 @@ msgstr "%1$s uppdateringar med svar pÃ¥ uppdatering frÃ¥n %2$s / %3$s." msgid "%s public timeline" msgstr "%s publika tidslinje" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s uppdateringar frÃ¥n alla!" @@ -686,12 +684,12 @@ msgstr "Upprepat till %s" msgid "Repeats of %s" msgstr "Upprepningar av %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Notiser taggade med %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Uppdateringar taggade med %1$s pÃ¥ %2$s!" @@ -719,7 +717,7 @@ msgstr "Ingen storlek." msgid "Invalid size." msgstr "Ogiltig storlek." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Avatar" @@ -752,7 +750,7 @@ msgid "Preview" msgstr "Förhandsgranska" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Ta bort" @@ -835,8 +833,8 @@ msgstr "Misslyckades att spara blockeringsinformation." #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Ingen sÃ¥dan grupp." @@ -938,7 +936,7 @@ msgstr "Du är inte ägaren av denna applikation." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Det var ett problem med din sessions-token." @@ -999,7 +997,7 @@ msgstr "Är du säker pÃ¥ att du vill ta bort denna notis?" msgid "Do not delete this notice" msgstr "Ta inte bort denna notis" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Ta bort denna notis" @@ -1252,7 +1250,7 @@ msgstr "beskrivning är för lÃ¥ng (max %d tecken)." msgid "Could not update group." msgstr "Kunde inte uppdatera grupp." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Kunde inte skapa alias." @@ -1954,7 +1952,7 @@ msgstr "Bjud in nya användare" msgid "You are already subscribed to these users:" msgstr "Du prenumererar redan pÃ¥ dessa användare:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2086,7 +2084,7 @@ msgstr "%1$s gick med i grupp %2$s" msgid "You must be logged in to leave a group." msgstr "Du mÃ¥ste vara inloggad för att lämna en grupp." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Du är inte en medlem i den gruppen." @@ -2199,12 +2197,12 @@ msgstr "Använd detta formulär för att skapa en ny grupp." msgid "New message" msgstr "Nytt meddelande" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Du kan inte skicka ett meddelande till den användaren." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Inget innehÃ¥ll!" @@ -2212,7 +2210,7 @@ msgstr "Inget innehÃ¥ll!" msgid "No recipient specified." msgstr "Ingen mottagare angiven." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2228,7 +2226,7 @@ msgstr "Meddelande skickat" msgid "Direct message to %s sent." msgstr "Direktmeddelande till %s skickat." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "AJAX-fel" @@ -2348,7 +2346,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Notisen har ingen profil" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$ss status den %2$s" @@ -2361,8 +2359,8 @@ msgstr "innehÃ¥llstyp " msgid "Only " msgstr "Bara " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Ett dataformat som inte stödjs" @@ -2493,7 +2491,7 @@ msgstr "Felaktigt gammalt lösenord" msgid "Error saving user; invalid." msgstr "Fel vid sparande av användare; ogiltig." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Kan inte spara nytt lösenord." @@ -2707,8 +2705,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 smÃ¥ bokstäver eller nummer, inga punkter eller mellanslag" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Fullständigt namn" @@ -2735,9 +2733,9 @@ msgid "Bio" msgstr "Biografi" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Plats" @@ -2751,7 +2749,7 @@ msgstr "Dela min nuvarande plats när jag skickar notiser" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Taggar" @@ -2995,7 +2993,7 @@ msgstr "Ã…terställ lösenord" msgid "Recover password" msgstr "Ã…terskapa lösenord" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Ã…terskapande av lösenord begärd" @@ -3015,19 +3013,19 @@ msgstr "Ã…terställ" msgid "Enter a nickname or email address." msgstr "Skriv in ett smeknamn eller en e-postadress." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "Ingen användare med den e-postadressen eller användarnamn." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Ingen registrerad e-postadress för den användaren." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Fel vid sparande av adressbekräftelse." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3035,23 +3033,23 @@ msgstr "" "Instruktioner för att Ã¥terställa ditt lösenord har skickats till e-" "postadressen som är registrerat till ditt konto " -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Oväntad Ã¥terställning av lösenord." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Lösenordet mÃ¥ste vara minst 6 tecken." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Lösenord och bekräftelse matchar inte." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Fel uppstog i användarens inställning" -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Nya lösenordet sparat. Du är nu inloggad." @@ -3218,7 +3216,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "URL till din profil pÃ¥ en annan kompatibel mikrobloggtjänst" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Prenumerera" @@ -3256,7 +3254,7 @@ msgstr "Du kan inte upprepa din egna notis." msgid "You already repeated that notice." msgstr "Du har redan upprepat denna notis." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Upprepad" @@ -3327,9 +3325,8 @@ msgid "You cannot revoke user roles on this site." msgstr "Du kan inte Ã¥terkalla användarroller pÃ¥ denna webbplats." #: actions/revokerole.php:82 -#, fuzzy msgid "User doesn't have this role." -msgstr "Användare utan matchande profil." +msgstr "Användare har inte denna roll." #: actions/rsd.php:146 actions/version.php:157 msgid "StatusNet" @@ -3400,7 +3397,7 @@ msgstr "Organisation" msgid "Description" msgstr "Beskrivning" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Statistik" @@ -3522,67 +3519,67 @@ msgstr "%s grupp" msgid "%1$s group, page %2$d" msgstr "%1$s grupp, sida %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Grupprofil" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Notis" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Alias" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "Ã…tgärder för grupp" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Flöde av notiser för %s grupp (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Flöde av notiser för %s grupp (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Flöde av notiser för %s grupp (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "FOAF för %s grupp" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Medlemmar" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Ingen)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Alla medlemmar" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Skapad" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3597,7 +3594,7 @@ msgstr "" "sina liv och intressen. [GÃ¥ med nu](%%%%action.register%%%%) för att bli en " "del av denna grupp och mÃ¥nga fler! ([Läs mer](%%%%doc.help%%%%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3610,7 +3607,7 @@ msgstr "" "[StatusNet](http://status.net/). Dess medlemmar delar korta meddelande om " "sina liv och intressen. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Administratörer" @@ -3731,7 +3728,6 @@ msgid "User is already silenced." msgstr "Användaren är redan nedtystad." #: actions/siteadminpanel.php:69 -#, fuzzy msgid "Basic settings for this StatusNet site" msgstr "Grundinställningar för din StatusNet-webbplats" @@ -3801,13 +3797,14 @@ msgid "Default timezone for the site; usually UTC." msgstr "Standardtidzon för denna webbplats; vanligtvis UTC." #: actions/siteadminpanel.php:262 -#, fuzzy msgid "Default language" -msgstr "Webbplatsens standardsprÃ¥k" +msgstr "StandardsprÃ¥k" #: actions/siteadminpanel.php:263 msgid "Site language when autodetection from browser settings is not available" msgstr "" +"WebbplatssprÃ¥k när automatisk identifiering av inställningar i webbläsaren " +"inte är tillgänglig" #: actions/siteadminpanel.php:271 msgid "Limits" @@ -3831,37 +3828,32 @@ msgstr "" "Hur länge användare mÃ¥ste vänta (i sekunder) för att posta samma sak igen." #: actions/sitenoticeadminpanel.php:56 -#, fuzzy msgid "Site Notice" msgstr "Webbplatsnotis" #: actions/sitenoticeadminpanel.php:67 -#, fuzzy msgid "Edit site-wide message" -msgstr "Nytt meddelande" +msgstr "Redigera webbplastsnotis" #: actions/sitenoticeadminpanel.php:103 -#, fuzzy msgid "Unable to save site notice." -msgstr "Kunde inte spara dina utseendeinställningar." +msgstr "Kunde inte spara webbplatsnotis." #: actions/sitenoticeadminpanel.php:113 msgid "Max length for the site-wide notice is 255 chars" -msgstr "" +msgstr "Maximal längd för webbplatsnotisen är 255 tecken" #: actions/sitenoticeadminpanel.php:176 -#, fuzzy msgid "Site notice text" -msgstr "Webbplatsnotis" +msgstr "Text för webbplatsnotis" #: actions/sitenoticeadminpanel.php:178 msgid "Site-wide notice text (255 chars max; HTML okay)" -msgstr "" +msgstr "Text för webbplatsnotis (max 255 tecken; HTML ok)" #: actions/sitenoticeadminpanel.php:198 -#, fuzzy msgid "Save site notice" -msgstr "Webbplatsnotis" +msgstr "Spara webbplatsnotis" #: actions/smssettings.php:58 msgid "SMS settings" @@ -3966,12 +3958,11 @@ msgstr "Ingen kod ifylld" #: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196 #: lib/adminpanelaction.php:406 msgid "Snapshots" -msgstr "Ögonblicksbild" +msgstr "Ögonblicksbilder" #: actions/snapshotadminpanel.php:65 -#, fuzzy msgid "Manage snapshot configuration" -msgstr "Ändra webbplatskonfiguration" +msgstr "Hantera konfiguration för ögonblicksbild" #: actions/snapshotadminpanel.php:127 msgid "Invalid snapshot run value." @@ -4018,9 +4009,8 @@ msgid "Snapshots will be sent to this URL" msgstr "Ögonblicksbild kommer skickat till denna URL" #: actions/snapshotadminpanel.php:248 -#, fuzzy msgid "Save snapshot settings" -msgstr "Spara webbplatsinställningar" +msgstr "Spara inställningar för ögonblicksbild" #: actions/subedit.php:70 msgid "You are not subscribed to that profile." @@ -4165,12 +4155,12 @@ msgstr "Inget ID-argument." msgid "Tag %s" msgstr "Tagg %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Användarprofil" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Foto" @@ -4514,7 +4504,7 @@ msgstr "Version" msgid "Author(s)" msgstr "Författare" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " @@ -4523,12 +4513,12 @@ msgstr "" "Inga filer fÃ¥r vara större än %d byte och filen du skickade var %d byte. " "Prova att ladda upp en mindre version." -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "En sÃ¥ här stor fil skulle överskrida din användarkvot pÃ¥ %d byte." -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "En sÃ¥dan här stor fil skulle överskrida din mÃ¥natliga kvot pÃ¥ %d byte." @@ -4566,27 +4556,27 @@ msgstr "Kunde inte infoga meddelande." msgid "Could not update message with new URI." msgstr "Kunde inte uppdatera meddelande med ny URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Databasfel vid infogning av hashtag: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "Problem vid sparande av notis. För lÃ¥ngt." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Problem vid sparande av notis. Okänd användare." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "För mÃ¥nga notiser för snabbt; ta en vilopaus och posta igen om ett par " "minuter." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4594,19 +4584,19 @@ msgstr "" "För mÃ¥nga duplicerade meddelanden för snabbt; ta en vilopaus och posta igen " "om ett par minuter." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Du är utestängd frÃ¥n att posta notiser pÃ¥ denna webbplats." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Problem med att spara notis." -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "Problem med att spara gruppinkorg." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4632,32 +4622,31 @@ msgid "Couldn't delete self-subscription." msgstr "Kunde inte ta bort själv-prenumeration." #: classes/Subscription.php:190 -#, fuzzy msgid "Couldn't delete subscription OMB token." -msgstr "Kunde inte ta bort prenumeration." +msgstr "Kunde inte radera OMB prenumerations-token." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Kunde inte ta bort prenumeration." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Välkommen till %1$s, @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Kunde inte skapa grupp." -#: classes/User_group.php:486 +#: classes/User_group.php:489 msgid "Could not set group URI." msgstr "Kunde inte ställa in grupp-URI." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Kunde inte ställa in gruppmedlemskap." -#: classes/User_group.php:521 +#: classes/User_group.php:524 msgid "Could not save local group info." msgstr "Kunde inte spara lokal gruppinformation." @@ -4861,7 +4850,7 @@ msgstr "Emblem" msgid "StatusNet software license" msgstr "Programvarulicens för StatusNet" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4870,12 +4859,12 @@ msgstr "" "**%%site.name%%** är en mikrobloggtjänst tillhandahÃ¥llen av [%%site.broughtby" "%%](%%site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** är en mikrobloggtjänst. " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4886,42 +4875,42 @@ msgstr "" "version %s, tillgänglig under [GNU Affero General Public License](http://www." "fsf.org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Licens för webbplatsinnehÃ¥ll" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "InnehÃ¥ll och data av %1$s är privat och konfidensiell." -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "InnehÃ¥ll och data copyright av %1$s. Alla rättigheter reserverade." -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" "InnehÃ¥ll och data copyright av medarbetare. Alla rättigheter reserverade." -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Alla " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "licens." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "Numrering av sidor" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Senare" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Tidigare" @@ -4937,6 +4926,10 @@ msgstr "Kan inte hantera inbäddat XML-innehÃ¥ll ännu." msgid "Can't handle embedded Base64 content yet." msgstr "Kan inte hantera inbäddat Base64-innehÃ¥ll ännu." +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5011,22 +5004,20 @@ msgstr "Konfiguration av sessioner" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:396 -#, fuzzy msgid "Edit site notice" -msgstr "Webbplatsnotis" +msgstr "Redigera webbplatsnotis" #. TRANS: Menu item title/tooltip #: lib/adminpanelaction.php:404 -#, fuzzy msgid "Snapshots configuration" -msgstr "Konfiguration av sökvägar" +msgstr "Konfiguration av ögonblicksbilder" #: lib/apiauth.php:94 msgid "API resource requires read-write access, but you only have read access." msgstr "" "API-resursen kräver läs- och skrivrättigheter, men du har bara läsrättighet." -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5103,11 +5094,11 @@ msgstr "Ã…terkalla" msgid "Attachments" msgstr "Bilagor" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Författare" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "TillhandahÃ¥llare" @@ -5127,37 +5118,50 @@ msgstr "Byte av lösenord misslyckades" msgid "Password changing is not allowed" msgstr "Byte av lösenord är inte tillÃ¥tet" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Resultat av kommando" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Kommando komplett" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Kommando misslyckades" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Tyvärr, detta kommando är inte implementerat än." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "Notis med den ID:n finns inte" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "Användare har ingen sista notis" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "Kunde inte hitta en användare med smeknamnet %s" -#: lib/command.php:92 +#: lib/command.php:143 +#, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Kunde inte hitta en lokal användare med smeknamnet %s" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Tyvärr, detta kommando är inte implementerat än." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "Det verkar inte vara särskilt meningsfullt att knuffa dig själv!" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "Knuff skickad till %s" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5168,196 +5172,196 @@ msgstr "" "Prenumeranter: %2$s\n" "Notiser: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "Notis med den ID:n finns inte" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "Användare har ingen sista notis" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Notis markerad som favorit." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Du är redan en medlem i denna grupp" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Kunde inte ansluta användare %s till groupp %s" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s gick med i grupp %s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Kunde inte ta bort användare %s frÃ¥n grupp %s" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s lämnade grupp %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Fullständigt namn: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "Plats: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Hemsida: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Om: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" +"%s är en fjärrprofil; du kan bara skicka direktmeddelanden till användare pÃ¥ " +"samma server." + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "Meddelande för lÃ¥ngt - maximum är %d tecken, du skickade %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "Direktmeddelande till %s skickat" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Fel vid sändning av direktmeddelande." -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "Kan inte upprepa din egen notis" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "Redan upprepat denna notis" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "Notis fron %s upprepad" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "Fel vid upprepning av notis." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Notis för lÃ¥ngt - maximum är %d tecken, du skickade %d" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "Svar pÃ¥ %s skickat" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "Fel vid sparande av notis." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Ange namnet pÃ¥ användaren att prenumerara pÃ¥" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "Ingen sÃ¥dan användare." +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "Kan inte prenumera pÃ¥ OMB-profiler via kommando." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "Prenumerar pÃ¥ %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Ange namnet pÃ¥ användaren att avsluta prenumeration pÃ¥" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "Prenumeration hos %s avslutad" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Kommando inte implementerat än." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Notifikation av." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Kan inte sätta pÃ¥ notifikation." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Notifikation pÃ¥." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Kan inte stänga av notifikation." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "Inloggningskommando är inaktiverat" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" "Denna länk är endast användbar en gÃ¥ng, och gäller bara i 2 minuter: %s" -#: lib/command.php:692 +#: lib/command.php:735 #, php-format msgid "Unsubscribed %s" msgstr "Prenumeration avslutad %s" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "Du prenumererar inte pÃ¥ nÃ¥gon." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Du prenumererar pÃ¥ denna person:" msgstr[1] "Du prenumererar pÃ¥ dessa personer:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "Ingen prenumerar pÃ¥ dig." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Denna person prenumererar pÃ¥ dig:" msgstr[1] "Dessa personer prenumererar pÃ¥ dig:" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "Du är inte medlem i nÃ¥gra grupper." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Du är en medlem i denna grupp:" msgstr[1] "Du är en medlem i dessa grupper:" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5437,19 +5441,19 @@ msgstr "" "tracks - inte implementerat än.\n" "tracking - inte implementerat än.\n" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Ingen konfigurationsfil hittades. " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "Jag letade efter konfigurationsfiler pÃ¥ följande platser: " -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "Du kanske vill köra installeraren för att Ã¥tgärda detta." -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "GÃ¥ till installeraren." @@ -5551,7 +5555,7 @@ msgstr "GÃ¥" #: lib/grantroleform.php:91 #, php-format msgid "Grant this user the \"%s\" role" -msgstr "" +msgstr "Bevilja denna användare \"%s\"-rollen" #: lib/groupeditform.php:163 msgid "URL of the homepage or blog of the group or topic" @@ -5625,49 +5629,49 @@ msgstr "Taggar i %s grupps notiser" msgid "This page is not available in a media type you accept" msgstr "Denna sida är inte tillgänglig i den mediatyp du accepterat" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Bildfilens format stödjs inte." + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Denna fil är för stor. Den maximala filstorleken är %s." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Bitvis uppladdad." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Systemfel vid uppladdning av fil." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Inte en bildfil eller sÃ¥ är filen korrupt." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Bildfilens format stödjs inte." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Förlorade vÃ¥r fil." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Okänd filtyp" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "MB" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "kB" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "Okänd källa för inkorg %d." @@ -5947,7 +5951,7 @@ msgstr "" "engagera andra användare i konversationen. Folk kan skicka meddelanden till " "dig som bara du ser." -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "frÃ¥n" @@ -6103,23 +6107,23 @@ msgstr "V" msgid "at" msgstr "pÃ¥" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "i sammanhang" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Upprepad av" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "Svara pÃ¥ denna notis" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Svara" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Notis upprepad" @@ -6257,11 +6261,11 @@ msgid "Repeat this notice" msgstr "Upprepa denna notis" #: lib/revokeroleform.php:91 -#, fuzzy, php-format +#, php-format msgid "Revoke the \"%s\" role from this user" -msgstr "Blockera denna användare frÃ¥n denna grupp" +msgstr "Ã…terkalla rollen \"%s\" frÃ¥n denna användare" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "Ingen enskild användare definierad för enanvändarläge." @@ -6387,92 +6391,93 @@ msgstr "Avsluta prenumerationen pÃ¥ denna användare" msgid "Unsubscribe" msgstr "Avsluta pren." -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Redigera avatar" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "Ã…tgärder för användare" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "Redigera profilinställningar" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Redigera" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "Skicka ett direktmeddelande till denna användare" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "Meddelande" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Moderera" -#: lib/userprofile.php:352 -#, fuzzy +#: lib/userprofile.php:364 msgid "User role" -msgstr "Användarprofil" +msgstr "Användarroll" -#: lib/userprofile.php:354 -#, fuzzy +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" -msgstr "Administratörer" +msgstr "Administratör" -#: lib/userprofile.php:355 -#, fuzzy +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" -msgstr "Moderera" +msgstr "Moderator" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "ett par sekunder sedan" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "för nÃ¥n minut sedan" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "för %d minuter sedan" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "för en timma sedan" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "för %d timmar sedan" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "för en dag sedan" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "för %d dagar sedan" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "för en mÃ¥nad sedan" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "för %d mÃ¥nader sedan" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "för ett Ã¥r sedan" @@ -6486,7 +6491,7 @@ msgstr "%s är inte en giltig färg!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s är inte en giltig färg! Använd 3 eller 6 hexadecimala tecken." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "Meddelande för lÃ¥ngt - maximum är %1$d tecken, du skickade %2$d." diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po index c8a2f5c1ad..091dd8fda0 100644 --- a/locale/te/LC_MESSAGES/statusnet.po +++ b/locale/te/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:51:01+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:36+0000\n" "Language-Team: Telugu\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: te\n" "X-Message-Group: out-statusnet\n" @@ -23,9 +23,8 @@ msgstr "" #. TRANS: Page title #. TRANS: Menu item for site administration #: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374 -#, fuzzy msgid "Access" -msgstr "అంగీకరించà±" +msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±" #. TRANS: Page notice #: actions/accessadminpanel.php:67 @@ -44,7 +43,6 @@ msgstr "à°…à°œà±à°žà°¾à°¤ (à°ªà±à°°à°µà±‡à°¶à°¿à°‚చని) వాడà±à°• #. TRANS: Checkbox label for prohibiting anonymous users from viewing site. #: actions/accessadminpanel.php:167 -#, fuzzy msgctxt "LABEL" msgid "Private" msgstr "అంతరంగికం" @@ -66,18 +64,15 @@ msgstr "కొతà±à°¤ నమోదà±à°²à°¨à± అచేతనంచేయి. #. TRANS: Checkbox label for disabling new user registrations. #: actions/accessadminpanel.php:185 -#, fuzzy msgid "Closed" -msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±." +msgstr "మూసివేయబడింది" #. TRANS: Title / tooltip for button to save access settings in site admin panel #: actions/accessadminpanel.php:202 -#, fuzzy msgid "Save access settings" -msgstr "సైటౠఅమరికలనౠభదà±à°°à°ªà°°à°šà±" +msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà± అమరికలనౠభదà±à°°à°ªà°°à°šà±" #: actions/accessadminpanel.php:203 -#, fuzzy msgctxt "BUTTON" msgid "Save" msgstr "à°­à°¦à±à°°à°ªà°°à°šà±" @@ -98,7 +93,7 @@ msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ పేజీ లేదà±" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -107,10 +102,8 @@ msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ పేజీ లేదà±" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±." @@ -201,14 +194,14 @@ msgstr "" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "నిరà±à°§à°¾à°°à°£ సంకేతం కనబడలేదà±." @@ -222,8 +215,8 @@ msgstr "నిరà±à°§à°¾à°°à°£ సంకేతం కనబడలేదà±." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "" @@ -254,7 +247,7 @@ msgid "Could not save profile." msgstr "à°ªà±à°°à±Šà°«à±ˆà°²à±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°²à±‡à°•à±à°¨à±à°¨à°¾à°‚." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -273,7 +266,7 @@ msgstr "" #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings." -msgstr "" +msgstr "మీ రూపà±à°°à±‡à°–à°² అమరికలని à°­à°¦à±à°°à°ªà°°à°šà°²à±‡à°•à±à°¨à±à°¨à°¾à°‚." #: actions/apiaccountupdateprofilebackgroundimage.php:187 #: actions/apiaccountupdateprofilecolors.php:142 @@ -339,7 +332,7 @@ msgstr "" msgid "This status is already a favorite." msgstr "à°ˆ నోటీసౠఇపà±à°ªà°Ÿà°¿à°•à±‡ మీ ఇషà±à°Ÿà°¾à°‚శం." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "ఇషà±à°Ÿà°¾à°‚శానà±à°¨à°¿ సృషà±à°Ÿà°¿à°‚చలేకపోయాం." @@ -459,7 +452,7 @@ msgstr "à°—à±à°‚పౠదొరకలేదà±!" msgid "You are already a member of that group." msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°† à°—à±à°‚à°ªà±à°²à±‹ సభà±à°¯à±à°²à±." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à± à°† à°—à±à°‚పౠనà±à°‚à°¡à°¿ మిమà±à°®à°²à±à°¨à°¿ నిరోధించారà±." @@ -510,7 +503,7 @@ msgstr "తపà±à°ªà±à°¡à± పరిమాణం." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -556,11 +549,11 @@ msgstr "" #: actions/apioauthauthorize.php:259 msgid "An application would like to connect to your account" -msgstr "" +msgstr "à°’à°• ఉపకరణం మీ ఖాతాకి à°…à°¨à±à°¸à°‚ధానమవà±à°µà°¾à°²à°¨à±à°•à±à°‚టూంది." #: actions/apioauthauthorize.php:276 msgid "Allow or deny access" -msgstr "" +msgstr "à°…à°¨à±à°®à°¤à°¿à°¨à°¿ ఇవà±à°µà°‚à°¡à°¿ లేదా తిరసà±à°•à°°à°¿à°‚à°šà°‚à°¡à°¿" #: actions/apioauthauthorize.php:292 #, php-format @@ -576,9 +569,9 @@ msgstr "ఖాతా" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "పేరà±" @@ -597,7 +590,7 @@ msgstr "à°…à°¨à±à°®à°¤à°¿à°‚à°šà±" #: actions/apioauthauthorize.php:351 msgid "Allow or deny access to your account information." -msgstr "" +msgstr "మీ ఖాతా సమాచారానà±à°¨à°¿ సంపà±à°°à°¾à°ªà°¿à°‚చడానికి à°…à°¨à±à°®à°¤à°¿à°‚à°šà°‚à°¡à°¿ లేదా నిరాకరించండి." #: actions/apistatusesdestroy.php:107 msgid "This method requires a POST or DELETE." @@ -626,7 +619,7 @@ msgstr "à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ తొలగించాం." #: actions/apistatusesshow.php:144 msgid "No status with that ID found." -msgstr "" +msgstr "à°† IDతో ఠనోటీసౠకనబడలేదà±." #: actions/apistatusesupdate.php:161 actions/newnotice.php:155 #: lib/mailhandler.php:60 @@ -647,12 +640,12 @@ msgstr "à°—à°°à°¿à°·à±à°  నోటీసౠపొడవౠ%d à°…à°•à±à°·à°° msgid "Unsupported format." msgstr "" -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%s యొకà±à°• మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±" @@ -662,7 +655,7 @@ msgstr "%s యొకà±à°• మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±" msgid "%1$s / Updates mentioning %2$s" msgstr "" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "" @@ -672,7 +665,7 @@ msgstr "" msgid "%s public timeline" msgstr "%s బహిరంగ కాలరేఖ" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "అందరి à°¨à±à°‚à°¡à°¿ %s తాజాకరణలà±!" @@ -687,12 +680,12 @@ msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" msgid "Repeats of %s" msgstr "%s యొకà±à°• à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¾à°²à±" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, fuzzy, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "%s యొకà±à°• మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±" @@ -721,7 +714,7 @@ msgstr "పరిమాణం లేదà±." msgid "Invalid size." msgstr "తపà±à°ªà±à°¡à± పరిమాణం." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "అవతారం" @@ -753,7 +746,7 @@ msgid "Preview" msgstr "à°®à±à°¨à±à°œà±‚à°ªà±" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "తొలగించà±" @@ -799,6 +792,8 @@ msgid "" "unsubscribed from you, unable to subscribe to you in the future, and you " "will not be notified of any @-replies from them." msgstr "" +"మీరౠఈ వాడà±à°•à°°à°¿à°¨à°¿ నిజంగానే నిరోధించాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? à°† తరà±à°µà°¾à°¤, వారౠమీ à°¨à±à°‚à°¡à°¿ చందా విరమింపబడతారà±, " +"భవిషà±à°¯à°¤à±à°¤à±à°²à±‹ మీకౠచందా చేరలేరà±, మరియౠవారి à°¨à±à°‚à°¡à°¿ @-à°¸à±à°ªà°‚దనలని మీకౠతెలియజేయమà±." #: actions/block.php:143 actions/deleteapplication.php:153 #: actions/deletenotice.php:145 actions/deleteuser.php:150 @@ -833,8 +828,8 @@ msgstr "నిరోధపౠసమాచారానà±à°¨à°¿ à°­à°¦à±à°°à°ª #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ à°—à±à°‚పౠలేదà±." @@ -937,7 +932,7 @@ msgstr "మీరౠఈ ఉపకరణం యొకà±à°• యజమాని #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "" @@ -995,7 +990,7 @@ msgstr "మీరౠనిజంగానే à°ˆ నోటీసà±à°¨à°¿ à°¤ msgid "Do not delete this notice" msgstr "à°ˆ నోటీసà±à°¨à°¿ తొలగించకà±" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "à°ˆ నోటీసà±à°¨à°¿ తొలగించà±" @@ -1115,7 +1110,7 @@ msgstr "లంకెలà±" #: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" -msgstr "" +msgstr "à°…à°ªà±à°°à°®à±‡à°¯à°¾à°²à°¨à°¿ ఉపయోగించà±" #: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" @@ -1155,7 +1150,6 @@ msgid "No such document \"%s\"" msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ పతà±à°°à°®à±‡à°®à±€ లేదà±." #: actions/editapplication.php:54 -#, fuzzy msgid "Edit Application" msgstr "ఉపకరణానà±à°¨à°¿ మారà±à°šà±" @@ -1181,7 +1175,6 @@ msgid "Name is too long (max 255 chars)." msgstr "పేరౠచాలా పెదà±à°¦à°—à°¾ ఉంది (à°—à°°à°¿à°·à±à° à°‚à°—à°¾ 255 à°…à°•à±à°·à°°à°¾à°²à±)." #: actions/editapplication.php:183 actions/newapplication.php:162 -#, fuzzy msgid "Name already in use. Try another one." msgstr "à°† పేరà±à°¨à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ వాడà±à°¤à±à°¨à±à°¨à°¾à°°à±. మరోటి à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿." @@ -1250,7 +1243,7 @@ msgstr "వివరణ చాలా పెదà±à°¦à°¦à°¿à°—à°¾ ఉంది (1 msgid "Could not update group." msgstr "à°—à±à°‚à°ªà±à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "మారà±à°ªà±‡à°°à±à°²à°¨à°¿ సృషà±à°Ÿà°¿à°‚చలేకపోయాం." @@ -1265,7 +1258,7 @@ msgstr "ఈమెయిలౠఅమరికలà±" #: actions/emailsettings.php:71 #, php-format msgid "Manage how you get email from %%site.name%%." -msgstr "" +msgstr "%%site.name%% à°¨à±à°‚à°¡à°¿ మీకౠఎలా మెయిలౠవసà±à°¤à±‚ంతో సంభాళించà±à°•à±‹à°‚à°¡à°¿." #: actions/emailsettings.php:100 actions/imsettings.php:100 #: actions/smssettings.php:104 @@ -1287,6 +1280,8 @@ msgid "" "Awaiting confirmation on this address. Check your inbox (and spam box!) for " "a message with further instructions." msgstr "" +"à°ˆ à°šà°¿à°°à±à°¨à°¾à°®à°¾ నిరà±à°§à°¾à°°à°£à°•à±ˆ వేచివà±à°¨à±à°¨à°¾à°‚. తదà±à°ªà°°à°¿ సూచనలతో ఉనà±à°¨ సందేశానికై మీ ఇనà±â€Œà°¬à°¾à°•à±à°¸à±â€Œà°²à±‹ (à°¸à±à°ªà°¾à°®à± బాకà±à°¸à±à°²à±‹ కూడా!) " +"చూడండి." #: actions/emailsettings.php:117 actions/imsettings.php:120 #: actions/smssettings.php:126 lib/applicationeditform.php:331 @@ -1556,23 +1551,20 @@ msgid "Cannot read file." msgstr "ఫైలà±à°¨à°¿ చదవలేకపోతà±à°¨à±à°¨à°¾à°‚." #: actions/grantrole.php:62 actions/revokerole.php:62 -#, fuzzy msgid "Invalid role." -msgstr "తపà±à°ªà±à°¡à± పరిమాణం." +msgstr "తపà±à°ªà±à°¡à± పాతà±à°°." #: actions/grantrole.php:66 actions/revokerole.php:66 msgid "This role is reserved and cannot be set." msgstr "" #: actions/grantrole.php:75 -#, fuzzy msgid "You cannot grant user roles on this site." -msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!" +msgstr "à°ˆ సైటà±à°²à±‹ మీరౠవాడà±à°•à°°à°²à°•à°¿ పాతà±à°°à°²à°¨à± ఇవà±à°µà°²à±‡à°°à±." #: actions/grantrole.php:82 -#, fuzzy msgid "User already has this role." -msgstr "వాడà±à°•à°°à°¿à°¨à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°—à±à°‚à°ªà±à°¨à±à°‚à°¡à°¿ నిరోధించారà±." +msgstr "వాడà±à°•à°°à°¿à°•à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°ˆ పాతà±à°° ఉంది." #: actions/groupblock.php:71 actions/groupunblock.php:71 #: actions/makeadmin.php:71 actions/subedit.php:46 @@ -1646,7 +1638,7 @@ msgstr "à°—à±à°‚పౠఅలంకారం" msgid "" "Customize the way your group looks with a background image and a colour " "palette of your choice." -msgstr "" +msgstr "నేపథà±à°¯ à°šà°¿à°¤à±à°°à°‚ మరియౠరంగà±à°² ఎంపికతో మీ à°—à±à°‚పౠఎలా కనిపించాలో మలచà±à°•à±‹à°‚à°¡à°¿." #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 #: lib/designsettings.php:391 lib/designsettings.php:413 @@ -1701,7 +1693,7 @@ msgstr "à°ˆ à°—à±à°‚à°ªà±à°²à±‹ వాడà±à°•à°°à±à°²à± జాబితా #: actions/groupmembers.php:182 lib/groupnav.php:107 msgid "Admin" -msgstr "" +msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à±" #: actions/groupmembers.php:355 lib/blockform.php:69 msgid "Block" @@ -1890,9 +1882,9 @@ msgid "That is not your Jabber ID." msgstr "ఇది మీ Jabber ID కాదà±" #: actions/inbox.php:59 -#, fuzzy, php-format +#, php-format msgid "Inbox for %1$s - page %2$d" -msgstr "%sà°•à°¿ వచà±à°šà°¿à°¨à°µà°¿" +msgstr "%1$sà°•à°¿ వచà±à°šà°¿à°¨à°µà°¿ - %2$dà°µ పేజీ" #: actions/inbox.php:62 #, php-format @@ -1929,7 +1921,7 @@ msgstr "కొతà±à°¤ వాడà±à°•à°°à±à°²à°¨à°¿ ఆహà±à°µà°¾à°¨à°¿à°‚ msgid "You are already subscribed to these users:" msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°ˆ వాడà±à°•à°°à±à°²à°•à± చందాచేరి ఉనà±à°¨à°¾à°°à±:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -1972,7 +1964,6 @@ msgstr "à°à°šà±à°›à°¿à°•à°‚à°—à°¾ ఆహà±à°µà°¾à°¨à°¾à°¨à°¿à°•à°¿ à°µà±à°¯ #. TRANS: Send button for inviting friends #: actions/invite.php:198 -#, fuzzy msgctxt "BUTTON" msgid "Send" msgstr "పంపించà±" @@ -2031,7 +2022,7 @@ msgstr "%1$s %2$s à°—à±à°‚à°ªà±à°²à±‹ చేరారà±" msgid "You must be logged in to leave a group." msgstr "à°—à±à°‚à°ªà±à°¨à°¿ వదిలివెళà±à°³à°¡à°¾à°¨à°¿à°•à°¿ మీరౠపà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿ ఉండాలి." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "మీరౠఆ à°—à±à°‚à°ªà±à°²à±‹ సభà±à°¯à±à°²à± కాదà±." @@ -2050,7 +2041,7 @@ msgstr "వాడà±à°•à°°à°¿à°ªà±‡à°°à± లేదా సంకేతపదం #: actions/login.php:132 actions/otp.php:120 msgid "Error setting user. You are probably not authorized." -msgstr "" +msgstr "వాడà±à°•à°°à°¿à°¨à°¿ అమరà±à°šà°¡à°‚లో పొరపాటà±. బహà±à°¶à°¾ మీకౠఅధీకరణ లేకపోవచà±à°šà±." #: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79 msgid "Login" @@ -2144,12 +2135,12 @@ msgstr "కొతà±à°¤ à°—à±à°‚à°ªà±à°¨à°¿ సృషà±à°Ÿà°¿à°‚డాని msgid "New message" msgstr "కొతà±à°¤ సందేశం" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "à°ˆ వాడà±à°•à°°à°¿à°•à°¿ మీరౠసందేశానà±à°¨à°¿ పంపించలేరà±." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "విషయం లేదà±!" @@ -2157,7 +2148,7 @@ msgstr "విషయం లేదà±!" msgid "No recipient specified." msgstr "" -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "మీకౠమీరే సందేశానà±à°¨à°¿ పంపà±à°•à±‹à°•à°‚à°¡à°¿; దాని బదà±à°²à± మీలో మీరే మెలà±à°²à°—à°¾ చెపà±à°ªà±à°•à±‹à°‚à°¡à°¿." @@ -2171,7 +2162,7 @@ msgstr "సందేశానà±à°¨à°¿ పంపించాం" msgid "Direct message to %s sent." msgstr "%sà°•à°¿ నేరౠసందేశానà±à°¨à°¿ పంపించాం" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "అజాకà±à°¸à± పొరపాటà±" @@ -2287,10 +2278,10 @@ msgstr "" msgid "Notice has no profile" msgstr "" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" -msgstr "" +msgstr "%2$sలో %1$s యొకà±à°• à°¸à±à°¥à°¿à°¤à°¿" #: actions/oembed.php:157 msgid "content type " @@ -2300,8 +2291,8 @@ msgstr "విషయ à°°à°•à°‚ " msgid "Only " msgstr "మాతà±à°°à°®à±‡ " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "" @@ -2437,7 +2428,7 @@ msgstr "పాత సంకేతపదం తపà±à°ªà±" msgid "Error saving user; invalid." msgstr "వాడà±à°•à°°à°¿à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±: సరికాదà±." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "కొతà±à°¤ సంకేతపదానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°²à±‡à°®à±." @@ -2448,7 +2439,7 @@ msgstr "సంకేతపదం à°­à°¦à±à°°à°®à°¯à±à°¯à°¿à°‚ది." #. TRANS: Menu item for site administration #: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382 msgid "Paths" -msgstr "" +msgstr "à°¤à±à°°à±‹à°µà°²à±" #: actions/pathsadminpanel.php:70 msgid "Path and server settings for this StatusNet site." @@ -2656,8 +2647,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 à°šà°¿à°¨à±à°¨à°¬à°¡à°¿ à°…à°•à±à°·à°°à°¾à°²à± లేదా అంకెలà±, విరామచిహà±à°¨à°¾à°²à± మరియౠఖాళీలౠతపà±à°ª" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "పూరà±à°¤à°¿ పేరà±" @@ -2684,9 +2675,9 @@ msgid "Bio" msgstr "à°¸à±à°µà°ªà°°à°¿à°šà°¯à°‚" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "à°ªà±à°°à°¾à°‚తం" @@ -2700,7 +2691,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "à°Ÿà±à°¯à°¾à°—à±à°²à±" @@ -2789,19 +2780,16 @@ msgid "Public timeline" msgstr "à°ªà±à°°à°œà°¾ కాలరేఖ" #: actions/public.php:160 -#, fuzzy msgid "Public Stream Feed (RSS 1.0)" -msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడà±" +msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడౠ(RSS 1.0)" #: actions/public.php:164 -#, fuzzy msgid "Public Stream Feed (RSS 2.0)" -msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడà±" +msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడౠ(RSS 2.0)" #: actions/public.php:168 -#, fuzzy msgid "Public Stream Feed (Atom)" -msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడà±" +msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడౠ(ఆటమà±)" #: actions/public.php:188 #, php-format @@ -2818,7 +2806,7 @@ msgstr "" #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" -msgstr "" +msgstr "[ఖాతా నమోదౠచేసà±à°•à±à°¨à°¿](%%action.register%%) మొదటగా à°µà±à°°à°¾à°¸à±‡à°¦à°¿ మీరే à°Žà°‚à°¦à±à°•à± కాకూడదà±!" #: actions/public.php:242 #, php-format @@ -2895,7 +2883,7 @@ msgstr "à°ˆ నిరà±à°§à°¾à°°à°£ సంకేతం చాలా పాత #: actions/recoverpassword.php:111 msgid "Could not update user with confirmed email address." -msgstr "" +msgstr "నిరà±à°§à°¾à°°à°¿à°¤ ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾à°¤à±‹ వాడà±à°•à°°à°¿à°¨à°¿ తాజాకరించలేకపోయాం." #: actions/recoverpassword.php:152 msgid "" @@ -2932,7 +2920,7 @@ msgstr "" msgid "Recover password" msgstr "" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "" @@ -2952,41 +2940,41 @@ msgstr "" msgid "Enter a nickname or email address." msgstr "పేరౠలేదా ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾ ఇవà±à°µà°‚à°¡à°¿." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "à°† ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾ లేదా వాడà±à°•à°°à°¿à°ªà±‡à°°à±à°¤à±‹ వాడà±à°•à°°à±à°²à±†à°µà°°à±‚ లేరà±." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "à°ˆ వాడà±à°•à°°à°¿à°•à±ˆ నమోదైన ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾à°²à± à°à°®à±€ లేవà±." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "à°šà°¿à°°à±à°¨à°¾à°®à°¾ నిరà±à°§à°¾à°°à°£à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." msgstr "మీ సంకేతపదానà±à°¨à°¿ తిరిగి పొందడానికై అవసరమైన సూచనలని మీ ఖాతాతో నమోదైన ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾à°•à°¿ పంపించాం." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "" -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "సంకేతపదం 6 లేదా అంతకంటే à°Žà°•à±à°•à°µ à°…à°•à±à°·à°°à°¾à°²à±à°‚డాలి." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "సంకేతపదం మరియౠనిరà±à°§à°¾à°°à°£ సరిపోలేదà±." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "" -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "మీ కొతà±à°¤ సంకేతపదం à°­à°¦à±à°°à°®à±ˆà°‚ది. మీరౠఇపà±à°ªà±à°¡à± లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±." @@ -3103,6 +3091,8 @@ msgid "" "(You should receive a message by email momentarily, with instructions on how " "to confirm your email address.)" msgstr "" +"(మీ ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾à°¨à°¿ ఎలా నిరà±à°§à°¾à°°à°¿à°‚చాలో తెలిపే సూచనలతో à°’à°• సందేశం మీరౠఈమెయిలౠదà±à°µà°¾à°°à°¾ మరి కొదà±à°¦à°¿à°¸à±‡à°ªà°Ÿà±à°²à±‹à°¨à±‡ " +"à°…à°‚à°¦à±à°¤à±à°‚ది.)" #: actions/remotesubscribe.php:98 #, php-format @@ -3111,6 +3101,9 @@ msgid "" "register%%) a new account. If you already have an account on a [compatible " "microblogging site](%%doc.openmublog%%), enter your profile URL below." msgstr "" +"చందా చేరడానికి, మీరౠ[à°ªà±à°°à°µà±‡à°¶à°¿à°‚చవచà±à°šà±](%%action.login%%), లేదా కొతà±à°¤ ఖాతాని [నమోదà±à°šà±‡à°¸à±à°•à±‹à°µà°šà±à°šà±](%%" +"action.register%%). ఒకవేళ మీకౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°à°¦à±ˆà°¨à°¾ [పొసగే మైకà±à°°à±‹à°¬à±à°²à°¾à°—ింగౠసైటà±à°²à±‹](%%doc.openmublog%" +"%) ఖాతా ఉంటే, మీ à°ªà±à°°à±Šà°«à±ˆà°²à± à°šà°¿à°°à±à°¨à°¾à°®à°¾à°¨à°¿ à°•à±à°°à°¿à°‚à°¦ ఇవà±à°µà°‚à°¡à°¿." #: actions/remotesubscribe.php:112 msgid "Remote subscribe" @@ -3138,7 +3131,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "చందాచేరà±" @@ -3160,7 +3153,7 @@ msgstr "" #: actions/repeat.php:57 msgid "Only logged-in users can repeat notices." -msgstr "" +msgstr "కేవలం à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿à°¨ వాడà±à°•à°°à±à°²à± మాతà±à°°à°®à±‡ నోటీసà±à°²à°¨à°¿ à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చగలరà±." #: actions/repeat.php:64 actions/repeat.php:71 #, fuzzy @@ -3168,16 +3161,14 @@ msgid "No notice specified." msgstr "కొతà±à°¤ సందేశం" #: actions/repeat.php:76 -#, fuzzy msgid "You can't repeat your own notice." -msgstr "à°ˆ లైసెనà±à°¸à±à°•à°¿ అంగీకరించకపోతే మీరౠనమోదà±à°šà±‡à°¸à±à°•à±‹à°²à±‡à°°à±." +msgstr "మీ నోటీసà±à°¨à°¿ మీరే à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చలేరà±." #: actions/repeat.php:90 -#, fuzzy msgid "You already repeated that notice." -msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°† వాడà±à°•à°°à°¿à°¨à°¿ నిరోధించారà±." +msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°† నోటీసà±à°¨à°¿ à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చారà±." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 #, fuzzy msgid "Repeated" msgstr "సృషà±à°Ÿà°¿à°¤à°‚" @@ -3194,24 +3185,24 @@ msgid "Replies to %s" msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" #: actions/replies.php:128 -#, fuzzy, php-format +#, php-format msgid "Replies to %1$s, page %2$d" -msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" +msgstr "%1$sà°•à°¿ à°¸à±à°ªà°‚దనలà±, %2$dà°µ పేజీ" #: actions/replies.php:145 -#, fuzzy, php-format +#, php-format msgid "Replies feed for %s (RSS 1.0)" -msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±" +msgstr "%s కొరకౠసà±à°ªà°‚దనల ఫీడౠ(RSS 1.0)" #: actions/replies.php:152 -#, fuzzy, php-format +#, php-format msgid "Replies feed for %s (RSS 2.0)" -msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±" +msgstr "%s కొరకౠసà±à°ªà°‚దనల ఫీడౠ(RSS 2.0)" #: actions/replies.php:159 -#, fuzzy, php-format +#, php-format msgid "Replies feed for %s (Atom)" -msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±" +msgstr "%s కొరకౠసà±à°ªà°‚దనల ఫీడౠ(ఆటమà±)" #: actions/replies.php:199 #, fuzzy, php-format @@ -3237,9 +3228,9 @@ msgid "" msgstr "" #: actions/repliesrss.php:72 -#, fuzzy, php-format +#, php-format msgid "Replies to %1$s on %2$s!" -msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" +msgstr "%2$sలో %1$sà°•à°¿ à°¸à±à°ªà°‚దనలà±!" #: actions/revokerole.php:75 #, fuzzy @@ -3304,7 +3295,7 @@ msgstr "à°—à±à°‚à°ªà±à°¨à°¿ వదిలివెళà±à°³à°¡à°¾à°¨à°¿à°•à°¿ #: actions/showapplication.php:157 msgid "Application profile" -msgstr "" +msgstr "ఉపకరణ à°ªà±à°°à°µà°°" #: actions/showapplication.php:159 lib/applicationeditform.php:180 msgid "Icon" @@ -3324,7 +3315,7 @@ msgstr "సంసà±à°§" msgid "Description" msgstr "వివరణ" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "గణాంకాలà±" @@ -3433,71 +3424,71 @@ msgid "%s group" msgstr "%s à°—à±à°‚à°ªà±" #: actions/showgroup.php:84 -#, fuzzy, php-format +#, php-format msgid "%1$s group, page %2$d" -msgstr "%1$s à°—à±à°‚పౠసభà±à°¯à±à°²à±, పేజీ %2$d" +msgstr "%1$s à°—à±à°‚పౠ, %2$dà°µ పేజీ" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "à°—à±à°‚పౠపà±à°°à±Šà°«à±ˆà°²à±" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "గమనిక" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "మారà±à°ªà±‡à°°à±à°²à±" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "à°—à±à°‚పౠచరà±à°¯à°²à±" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "%s à°—à±à°‚à°ªà±" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "సభà±à°¯à±à°²à±" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(à°à°®à±€à°²à±‡à°¦à±)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "అందరౠసభà±à°¯à±à°²à±‚" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "సృషà±à°Ÿà°¿à°¤à°‚" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3507,7 +3498,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3516,7 +3507,7 @@ msgid "" "their life and interests. " msgstr "" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à±" @@ -3548,9 +3539,9 @@ msgid " tagged %s" msgstr "" #: actions/showstream.php:79 -#, fuzzy, php-format +#, php-format msgid "%1$s, page %2$d" -msgstr "%1$s మరియౠమితà±à°°à±à°²à±, పేజీ %2$d" +msgstr "%1$s, %2$dà°µ పేజీ" #: actions/showstream.php:122 #, fuzzy, php-format @@ -3699,9 +3690,8 @@ msgid "Default timezone for the site; usually UTC." msgstr "" #: actions/siteadminpanel.php:262 -#, fuzzy msgid "Default language" -msgstr "à°…à°ªà±à°°à°®à±‡à°¯ సైటౠభాష" +msgstr "à°…à°ªà±à°°à°®à±‡à°¯ భాష" #: actions/siteadminpanel.php:263 msgid "Site language when autodetection from browser settings is not available" @@ -3744,7 +3734,7 @@ msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొ #: actions/sitenoticeadminpanel.php:113 msgid "Max length for the site-wide notice is 255 chars" -msgstr "" +msgstr "సైటà±-వారీ నోటీసà±à°•à°¿ à°—à°°à°¿à°·à±à°  పొడవౠ255 à°…à°•à±à°·à°°à°¾à°²à±" #: actions/sitenoticeadminpanel.php:176 #, fuzzy @@ -3753,7 +3743,7 @@ msgstr "సైటౠగమనిక" #: actions/sitenoticeadminpanel.php:178 msgid "Site-wide notice text (255 chars max; HTML okay)" -msgstr "" +msgstr "సైటà±-వారీ నోటీసౠపాఠà±à°¯à°‚ (255 à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚; HTML పరà±à°²à±‡à°¦à±)" #: actions/sitenoticeadminpanel.php:198 #, fuzzy @@ -4012,7 +4002,7 @@ msgstr "" #: actions/subscriptions.php:128 actions/subscriptions.php:132 #, php-format msgid "%s is not listening to anyone." -msgstr "" +msgstr "%s à°ªà±à°°à°¸à±à°¤à±à°¤à°‚ ఎవరినీ వినడంలేదà±." #: actions/subscriptions.php:199 msgid "Jabber" @@ -4052,12 +4042,12 @@ msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ పతà±à°°à°®à±‡à°®à±€ లేదà±." msgid "Tag %s" msgstr "" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "వాడà±à°•à°°à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à±" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "ఫొటో" @@ -4123,7 +4113,6 @@ msgstr "" #. TRANS: User admin panel title #: actions/useradminpanel.php:59 -#, fuzzy msgctxt "TITLE" msgid "User" msgstr "వాడà±à°•à°°à°¿" @@ -4225,11 +4214,11 @@ msgstr "à°ˆ చందాని తిరసà±à°•à°°à°¿à°‚à°šà±" #: actions/userauthorization.php:232 msgid "No authorization request!" -msgstr "" +msgstr "అధీకరణ à°…à°­à±à°¯à°°à±à°¥à°¨ లేదà±!" #: actions/userauthorization.php:254 msgid "Subscription authorized" -msgstr "" +msgstr "చందాని అధీకరించారà±" #: actions/userauthorization.php:256 msgid "" @@ -4299,9 +4288,9 @@ msgid "Enjoy your hotdog!" msgstr "" #: actions/usergroups.php:64 -#, fuzzy, php-format +#, php-format msgid "%1$s groups, page %2$d" -msgstr "%1$s à°—à±à°‚పౠసభà±à°¯à±à°²à±, పేజీ %2$d" +msgstr "%1$s à°—à±à°‚à°ªà±à°²à±, %2$dà°µ పేజీ" #: actions/usergroups.php:130 msgid "Search for more groups" @@ -4374,19 +4363,19 @@ msgstr "సంచిక" msgid "Author(s)" msgstr "రచయిత(à°²à±)" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4404,9 +4393,8 @@ msgid "Group leave failed." msgstr "à°—à±à°‚పౠనà±à°‚à°¡à°¿ వైదొలగడం విఫలమైంది." #: classes/Local_group.php:41 -#, fuzzy msgid "Could not update local group." -msgstr "à°—à±à°‚à°ªà±à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚." +msgstr "à°¸à±à°¥à°¾à°¨à°¿à°• à°—à±à°‚à°ªà±à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚." #: classes/Login_token.php:76 #, fuzzy, php-format @@ -4425,46 +4413,46 @@ msgstr "" msgid "Could not update message with new URI." msgstr "" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "" -#: classes/Notice.php:241 +#: classes/Notice.php:244 #, fuzzy msgid "Problem saving notice. Too long." msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±." -#: classes/Notice.php:245 +#: classes/Notice.php:248 #, fuzzy msgid "Problem saving notice. Unknown user." msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "à°ˆ సైటà±à°²à±‹ నోటీసà±à°²à± రాయడం à°¨à±à°‚à°¡à°¿ మిమà±à°®à°²à±à°¨à°¿ నిషేధించారà±." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%1$s (%2$s)" @@ -4496,29 +4484,29 @@ msgstr "చందాని తొలగించలేకపోయాం." msgid "Couldn't delete subscription OMB token." msgstr "చందాని తొలగించలేకపోయాం." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "చందాని తొలగించలేకపోయాం." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "@%2$s, %1$sà°•à°¿ à°¸à±à°µà°¾à°—తం!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "à°—à±à°‚à°ªà±à°¨à°¿ సృషà±à°Ÿà°¿à°‚చలేకపోయాం." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "à°—à±à°‚పౠసభà±à°¯à°¤à±à°µà°¾à°¨à±à°¨à°¿ అమరà±à°šà°²à±‡à°•à°ªà±‹à°¯à°¾à°‚." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "à°—à±à°‚పౠసభà±à°¯à°¤à±à°µà°¾à°¨à±à°¨à°¿ అమరà±à°šà°²à±‡à°•à°ªà±‹à°¯à°¾à°‚." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "చందాని సృషà±à°Ÿà°¿à°‚చలేకపోయాం." @@ -4559,7 +4547,7 @@ msgstr "%1$s - %2$s" #: lib/action.php:159 msgid "Untitled page" -msgstr "" +msgstr "శీరà±à°·à°¿à°•à°²à±‡à°¨à°¿ పేజీ" #: lib/action.php:424 msgid "Primary site navigation" @@ -4572,7 +4560,6 @@ msgid "Personal profile and friends timeline" msgstr "" #: lib/action.php:433 -#, fuzzy msgctxt "MENU" msgid "Personal" msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤" @@ -4597,13 +4584,11 @@ msgstr "à°…à°¨à±à°¸à°‚ధానించà±" #. TRANS: Tooltip for menu option "Admin" #: lib/action.php:446 -#, fuzzy msgctxt "TOOLTIP" msgid "Change site configuration" -msgstr "చందాలà±" +msgstr "సైటౠసà±à°µà°°à±‚పణానà±à°¨à°¿ మారà±à°šà°‚à°¡à°¿" #: lib/action.php:449 -#, fuzzy msgctxt "MENU" msgid "Admin" msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à±" @@ -4616,72 +4601,61 @@ msgid "Invite friends and colleagues to join you on %s" msgstr "à°ˆ ఫారానà±à°¨à°¿ ఉపయోగించి మీ à°¸à±à°¨à±‡à°¹à°¿à°¤à±à°²à°¨à± మరియౠసహోదà±à°¯à±‹à°—à±à°²à°¨à± à°ˆ సేవనౠవినియోగించà±à°•à±‹à°®à°¨à°¿ ఆహà±à°µà°¾à°¨à°¿à°‚à°šà°‚à°¡à°¿." #: lib/action.php:456 -#, fuzzy msgctxt "MENU" msgid "Invite" msgstr "ఆహà±à°µà°¾à°¨à°¿à°‚à°šà±" #. TRANS: Tooltip for main menu option "Logout" #: lib/action.php:462 -#, fuzzy msgctxt "TOOLTIP" msgid "Logout from the site" msgstr "సైటౠనà±à°‚à°¡à°¿ నిషà±à°•à±à°°à°®à°¿à°‚à°šà±" #: lib/action.php:465 -#, fuzzy msgctxt "MENU" msgid "Logout" msgstr "నిషà±à°•à±à°°à°®à°¿à°‚à°šà±" #. TRANS: Tooltip for main menu option "Register" #: lib/action.php:470 -#, fuzzy msgctxt "TOOLTIP" msgid "Create an account" -msgstr "కొతà±à°¤ ఖాతా సృషà±à°Ÿà°¿à°‚à°šà±" +msgstr "ఖాతాని సృషà±à°Ÿà°¿à°‚à°šà±à°•à±‹à°‚à°¡à°¿" #: lib/action.php:473 -#, fuzzy msgctxt "MENU" msgid "Register" msgstr "నమోదà±" #. TRANS: Tooltip for main menu option "Login" #: lib/action.php:476 -#, fuzzy msgctxt "TOOLTIP" msgid "Login to the site" -msgstr "సైటà±à°²à±‹à°¨à°¿ à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà±" +msgstr "సైటౠలోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°‚à°¡à°¿" #: lib/action.php:479 -#, fuzzy msgctxt "MENU" msgid "Login" -msgstr "à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°‚à°¡à°¿" +msgstr "à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà±" #. TRANS: Tooltip for main menu option "Help" #: lib/action.php:482 -#, fuzzy msgctxt "TOOLTIP" msgid "Help me!" msgstr "సహాయం కావాలి!" #: lib/action.php:485 -#, fuzzy msgctxt "MENU" msgid "Help" msgstr "సహాయం" #. TRANS: Tooltip for main menu option "Search" #: lib/action.php:488 -#, fuzzy msgctxt "TOOLTIP" msgid "Search for people or text" -msgstr "మరినà±à°¨à°¿ à°—à±à°‚à°ªà±à°²à°•à±ˆ వెతà±à°•à±" +msgstr "à°ªà±à°°à°œà°²à± లేదా పాఠà±à°¯à°‚ కొరకౠవెతకండి" #: lib/action.php:491 -#, fuzzy msgctxt "MENU" msgid "Search" msgstr "వెతà±à°•à±" @@ -4741,7 +4715,7 @@ msgstr "బాడà±à°œà°¿" msgid "StatusNet software license" msgstr "à°¸à±à°Ÿà±‡à°Ÿà°¸à±â€Œà°¨à±†à°Ÿà± మృదూపకరణ లైసెనà±à°¸à±" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4750,12 +4724,12 @@ msgstr "" "**%%site.name%%** అనేది [%%site.broughtby%%](%%site.broughtbyurl%%) వారౠ" "అందిసà±à°¤à±à°¨à±à°¨ మైకà±à°°à±‹ à°¬à±à°²à°¾à°—ింగౠసదà±à°ªà°¾à°¯à°‚. " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** అనేది మైకà±à°°à±‹ à°¬à±à°²à°¾à°—ింగౠసదà±à°ªà°¾à°¯à°‚." -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4766,42 +4740,42 @@ msgstr "" "html) à°•à°¿à°‚à°¦ లభà±à°¯à°®à°¯à±à°¯à±‡ [à°¸à±à°Ÿà±‡à°Ÿà°¸à±‌నెటà±](http://status.net/) మైకà±à°°à±‹à°¬à±à°²à°¾à°—ింగౠఉపకరణం సంచిక %s " "పై నడà±à°¸à±à°¤à±à°‚ది." -#: lib/action.php:821 +#: lib/action.php:824 #, fuzzy msgid "Site content license" msgstr "కొతà±à°¤ సందేశం" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "à°…à°¨à±à°¨à±€ " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." -msgstr "" +msgstr "లైసెనà±à°¸à±." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "పేజీకరణ" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "తరà±à°µà°¾à°¤" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "ఇంతకà±à°°à°¿à°¤à°‚" @@ -4817,6 +4791,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -4849,7 +4827,6 @@ msgstr "à°ªà±à°°à°¾à°¥à°®à°¿à°• సైటౠసà±à°µà°°à±‚పణం" #. TRANS: Menu item for site administration #: lib/adminpanelaction.php:350 -#, fuzzy msgctxt "MENU" msgid "Site" msgstr "సైటà±" @@ -4861,7 +4838,6 @@ msgstr "రూపకలà±à°ªà°¨ à°¸à±à°µà°°à±‚పణం" #. TRANS: Menu item for site administration #: lib/adminpanelaction.php:358 -#, fuzzy msgctxt "MENU" msgid "Design" msgstr "రూపà±à°°à±‡à°–à°²à±" @@ -4910,7 +4886,7 @@ msgstr "SMS నిరà±à°§à°¾à°°à°£" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -4960,11 +4936,11 @@ msgstr "విహారిణి" #: lib/applicationeditform.php:274 msgid "Desktop" -msgstr "" +msgstr "మేజోపరి" #: lib/applicationeditform.php:275 msgid "Type of application, browser or desktop" -msgstr "" +msgstr "ఉపకరణ à°°à°•à°‚, విహారిణి లేదా మేజోపరి" #: lib/applicationeditform.php:297 msgid "Read-only" @@ -4987,11 +4963,11 @@ msgstr "తొలగించà±" msgid "Attachments" msgstr "జోడింపà±à°²à±" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "రచయిత" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 #, fuzzy msgid "Provider" msgstr "à°ªà±à°°à±Šà°«à±ˆà°²à±" @@ -5014,37 +4990,52 @@ msgstr "సంకేతపదం మారà±à°ªà±" msgid "Password changing is not allowed" msgstr "సంకేతపదం మారà±à°ªà±" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "ఆదేశ ఫలితాలà±" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "ఆదేశం పూరà±à°¤à°¯à±à°¯à°¿à°‚ది" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "ఆదేశం విఫలమైంది" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "" +#: lib/command.php:83 lib/command.php:105 +#, fuzzy +msgid "Notice with that id does not exist" +msgstr "à°† ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾ లేదా వాడà±à°•à°°à°¿à°ªà±‡à°°à±à°¤à±‹ వాడà±à°•à°°à±à°²à±†à°µà°°à±‚ లేరà±." -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +#, fuzzy +msgid "User has no last notice" +msgstr "వాడà±à°•à°°à°¿à°•à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à± లేదà±." + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "వాడà±à°•à°°à°¿à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚." -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "వాడà±à°•à°°à°¿à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚." + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "à°•à±à°·à°®à°¿à°‚à°šà°‚à°¡à°¿, à°ˆ ఆదేశం ఇంకా అమలà±à°ªà°°à°šà°¬à°¡à°²à±‡à°¦à±." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, fuzzy, php-format msgid "Nudge sent to %s" msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5055,199 +5046,195 @@ msgstr "" "చందాదారà±à°²à±: %2$s\n" "నోటీసà±à°²à±: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -#, fuzzy -msgid "Notice with that id does not exist" -msgstr "à°† ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾ లేదా వాడà±à°•à°°à°¿à°ªà±‡à°°à±à°¤à±‹ వాడà±à°•à°°à±à°²à±†à°µà°°à±‚ లేరà±." - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -#, fuzzy -msgid "User has no last notice" -msgstr "వాడà±à°•à°°à°¿à°•à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à± లేదà±." - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "" -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°† à°—à±à°‚à°ªà±à°²à±‹ సభà±à°¯à±à°²à±" -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "వాడà±à°•à°°à°¿ %sని %s à°—à±à°‚à°ªà±à°²à±‹ చేరà±à°šà°²à±‡à°•à°ªà±‹à°¯à°¾à°‚" -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%s %s à°—à±à°‚à°ªà±à°²à±‹ చేరారà±" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "వాడà±à°•à°°à°¿ %sని %s à°—à±à°‚పౠనà±à°‚à°¡à°¿ తొలగించలేకపోయాం" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%2$s à°—à±à°‚పౠనà±à°‚à°¡à°¿ %1$s వైదొలిగారà±" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "పూరà±à°¤à°¿à°ªà±‡à°°à±: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "à°ªà±à°°à°¾à°‚తం: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "హోంపేజీ: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "à°—à±à°°à°¿à°‚à°šà°¿: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, fuzzy, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "నోటిసౠచాలా పొడవà±à°—à°¾ ఉంది - %d à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚, మీరౠ%d పంపించారà±" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "%sà°•à°¿ నేరౠసందేశానà±à°¨à°¿ పంపించాం" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "" -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "మీ నోటిసà±à°¨à°¿ మీరే à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చలేరà±" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°ˆ నోటీసà±à°¨à°¿ à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చారà±" -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "సందేశాలà±" -#: lib/command.php:428 +#: lib/command.php:505 #, fuzzy msgid "Error repeating notice." msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "నోటిసౠచాలా పొడవà±à°—à°¾ ఉంది - %d à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚, మీరౠ%d పంపించారà±" -#: lib/command.php:491 +#: lib/command.php:545 #, fuzzy, php-format msgid "Reply to %s sent" msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" -#: lib/command.php:493 +#: lib/command.php:547 #, fuzzy msgid "Error saving notice." msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "à°à°µà°°à°¿à°•à°¿ చందా చేరాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à±‹ à°† వాడà±à°•à°°à°¿ పేరౠతెలియజేయండి" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±" +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "%sà°•à°¿ చందా చేరారà±" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "ఎవరి à°¨à±à°‚à°¡à°¿ చందా విరమించాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à±‹ à°† వాడà±à°•à°°à°¿ పేరౠతెలియజేయండి" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "%s à°¨à±à°‚à°¡à°¿ చందా విరమించారà±" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "" -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "" -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "" -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "" -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "à°ˆ లంకెని ఒకే సారి ఉపయోగించగలరà±, మరియౠఅది పనిచేసేది 2 నిమిషాలౠమాతà±à°°à°®à±‡: %s" -#: lib/command.php:692 -#, fuzzy, php-format +#: lib/command.php:735 +#, php-format msgid "Unsubscribed %s" msgstr "%s à°¨à±à°‚à°¡à°¿ చందా విరమించారà±" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "మీరౠఎవరికీ చందాచేరలేదà±." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" msgstr[1] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "మీకౠచందాదారà±à°²à± ఎవరూ లేరà±." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" msgstr[1] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "మీరౠఠగà±à°‚à°ªà±à°²à±‹à°¨à±‚ సభà±à°¯à±à°²à± కాదà±." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!" msgstr[1] "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5289,20 +5276,20 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 #, fuzzy msgid "No configuration file found. " msgstr "నిరà±à°§à°¾à°°à°£ సంకేతం లేదà±." -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "" @@ -5324,7 +5311,7 @@ msgstr "à°…à°¨à±à°¸à°‚ధానాలà±" #: lib/connectsettingsaction.php:121 msgid "Authorized connected applications" -msgstr "" +msgstr "అధీకృత à°…à°¨à±à°¸à°‚ధాన ఉపకరణాలà±" #: lib/dberroraction.php:60 msgid "Database error" @@ -5480,50 +5467,50 @@ msgstr "" msgid "This page is not available in a media type you accept" msgstr "" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "" + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "ఇది చాలా పొడవà±à°‚ది. à°—à°°à°¿à°·à±à°  సందేశ పరిమాణం 140 à°…à°•à±à°·à°°à°¾à°²à±." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "పాకà±à°·à°¿à°• à°Žà°—à±à°®à°¤à°¿." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "" -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "బొమà±à°® కాదౠలేదా పాడైపోయిన ఫైలà±." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "" - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 #, fuzzy msgid "Lost our file." msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ సందేశమేమీ లేదà±." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "తెలియని ఫైలౠరకం" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "మెబై" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "కిబై" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, fuzzy, php-format msgid "Unknown inbox source %d." msgstr "à°—à±à°°à±à°¤à± తెలియని భాష \"%s\"" @@ -5672,6 +5659,20 @@ msgid "" "With kind regards,\n" "%5$s\n" msgstr "" +"%1$s (%2$s) మీకౠఒక అంతరంగిక సందేశానà±à°¨à°¿ పంపించారà±:\n" +"\n" +"------------------------------------------------------\n" +"%3$s\n" +"------------------------------------------------------\n" +"\n" +"వారి సందేశానికి మీరౠఇకà±à°•à°¡ జవాబివà±à°µà°µà°šà±à°šà±:\n" +"\n" +"%4$s\n" +"\n" +"à°ˆ ఈమెయిలà±à°•à°¿ à°¸à±à°ªà°‚దించకండి; ఇది వారికి వెళà±à°³à°¦à±.\n" +"\n" +"à°¶à±à°­à°¾à°•à°¾à°‚à°•à±à°·à°²à°¤à±‹,\n" +"%5$s\n" #: lib/mail.php:568 #, php-format @@ -5739,7 +5740,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "à°¨à±à°‚à°¡à°¿" @@ -5780,11 +5781,11 @@ msgstr "" #: lib/mediafile.php:152 msgid "The uploaded file was only partially uploaded." -msgstr "" +msgstr "à°Žà°•à±à°•à°¿à°‚à°šà°¿à°¨ ఫైలౠకేవలం పాకà±à°·à°¿à°•à°‚à°—à°¾ మాతà±à°°à°®à±‡ à°Žà°•à±à°•à°¿à°‚ది." #: lib/mediafile.php:159 msgid "Missing a temporary folder." -msgstr "" +msgstr "తాతà±à°•à°¾à°²à°¿à°• సంచయం కనబడటంలేదà±." #: lib/mediafile.php:162 msgid "Failed to write file to disk." @@ -5830,7 +5831,6 @@ msgid "Available characters" msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ ఉనà±à°¨ à°…à°•à±à°·à°°à°¾à°²à±" #: lib/messageform.php:178 lib/noticeform.php:236 -#, fuzzy msgctxt "Send button for sending notice" msgid "Send" msgstr "పంపించà±" @@ -5868,6 +5868,8 @@ msgid "" "Sorry, retrieving your geo location is taking longer than expected, please " "try again later" msgstr "" +"à°•à±à°·à°®à°¿à°‚à°šà°‚à°¡à°¿, మీ భౌగోళిక à°ªà±à°°à°¾à°‚తానà±à°¨à°¿ తెలà±à°¸à±à°•à±‹à°µà°¡à°‚ à°…à°¨à±à°•à±à°¨à±à°¨à°¦à°¾à°¨à°¿à°•à°‚టే à°Žà°•à±à°•à°µ సమయం తీసà±à°•à±à°‚టూంది, దయచేసి " +"కాసేపాగి à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿" #: lib/noticelist.php:429 #, php-format @@ -5894,24 +5896,24 @@ msgstr "à°ª" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "సందరà±à°­à°‚లో" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 #, fuzzy msgid "Repeated by" msgstr "సృషà±à°Ÿà°¿à°¤à°‚" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "à°ˆ నోటీసà±à°ªà±ˆ à°¸à±à°ªà°‚దించండి" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "à°¸à±à°ªà°‚దించండి" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "నోటీసà±à°¨à°¿ తొలగించాం." @@ -5948,7 +5950,7 @@ msgstr "కొతà±à°¤ సందేశం" #: lib/oauthstore.php:490 msgid "Couldn't insert new subscription." -msgstr "" +msgstr "కొతà±à°¤ చందాని చేరà±à°šà°²à±‡à°•à°ªà±‹à°¯à°¾à°‚." #: lib/personalgroupnav.php:99 msgid "Personal" @@ -6057,7 +6059,7 @@ msgstr "à°ˆ నోటీసà±à°¨à°¿ à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚à°šà±" msgid "Revoke the \"%s\" role from this user" msgstr "à°ˆ à°—à±à°‚à°ªà±à°¨à±à°‚à°¡à°¿ à°ˆ వాడà±à°•à°°à°¿à°¨à°¿ నిరోధించà±" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6092,7 +6094,7 @@ msgstr "à°ªà±à°°à°œà°²à±" #: lib/searchgroupnav.php:81 msgid "Find people on this site" -msgstr "" +msgstr "à°ˆ సైటà±à°²à±‹à°¨à°¿ à°µà±à°¯à°•à±à°¤à±à°²à°¨à°¿ à°•à°¨à±à°—ొనండి" #: lib/searchgroupnav.php:83 msgid "Find content of notices" @@ -6100,11 +6102,11 @@ msgstr "" #: lib/searchgroupnav.php:85 msgid "Find groups on this site" -msgstr "" +msgstr "à°ˆ సైటà±à°²à±‹à°¨à°¿ à°—à±à°‚à°ªà±à°²à°¨à°¿ à°•à°¨à±à°—ొనండి" #: lib/section.php:89 msgid "Untitled section" -msgstr "" +msgstr "శీరà±à°·à°¿à°•à°²à±‡à°¨à°¿ విభాగం" #: lib/section.php:106 msgid "More..." @@ -6142,7 +6144,7 @@ msgstr "ఆహà±à°µà°¾à°¨à°¿à°‚à°šà±" #: lib/subgroupnav.php:106 #, php-format msgid "Invite friends and colleagues to join you on %s" -msgstr "" +msgstr "%sలో తోడà±à°•à±ˆ మీ à°¸à±à°¨à±‡à°¹à°¿à°¤à±à°²à°¨à°¿ మరియౠసహోదà±à°¯à±‹à°—à±à°²à°¨à°¿ ఆహà±à°µà°¾à°¨à°¿à°‚à°šà°‚à°¡à°¿" #: lib/subscriberspeopleselftagcloudsection.php:48 #: lib/subscriptionspeopleselftagcloudsection.php:48 @@ -6188,92 +6190,94 @@ msgstr "à°ˆ వాడà±à°•à°°à°¿ à°¨à±à°‚à°¡à°¿ చందామానà±" msgid "Unsubscribe" msgstr "చందామానà±" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "అవతారానà±à°¨à°¿ మారà±à°šà±" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "వాడà±à°•à°°à°¿ à°šà°°à±à°¯à°²à±" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 #, fuzzy msgid "Edit profile settings" msgstr "à°«à±à°°à±Šà°«à±ˆà°²à± అమరికలà±" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "మారà±à°šà±" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "à°ˆ వాడà±à°•à°°à°¿à°•à°¿ à°’à°• నేరౠసందేశానà±à°¨à°¿ పంపించండి" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "సందేశం" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 -#, fuzzy +#: lib/userprofile.php:364 msgid "User role" -msgstr "వాడà±à°•à°°à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à±" +msgstr "వాడà±à°•à°°à°¿ పాతà±à°°" -#: lib/userprofile.php:354 -#, fuzzy +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à±" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" -msgstr "" +msgstr "సమనà±à°µà°¯à°•à°°à±à°¤" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "కొనà±à°¨à°¿ à°•à±à°·à°£à°¾à°² à°•à±à°°à°¿à°¤à°‚" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "à°“ నిమిషం à°•à±à°°à°¿à°¤à°‚" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "%d నిమిషాల à°•à±à°°à°¿à°¤à°‚" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "à°’à°• à°—à°‚à°Ÿ à°•à±à°°à°¿à°¤à°‚" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "%d à°—à°‚à°Ÿà°² à°•à±à°°à°¿à°¤à°‚" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "à°“ రోజౠకà±à°°à°¿à°¤à°‚" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "%d రోజà±à°² à°•à±à°°à°¿à°¤à°‚" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "à°“ నెల à°•à±à°°à°¿à°¤à°‚" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "%d నెలల à°•à±à°°à°¿à°¤à°‚" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "à°’à°• సంవతà±à°¸à°°à°‚ à°•à±à°°à°¿à°¤à°‚" @@ -6287,7 +6291,7 @@ msgstr "%s అనేది సరైన రంగౠకాదà±!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s అనేది సరైన రంగౠకాదà±! 3 లేదా 6 హెకà±à°¸à± à°…à°•à±à°·à°°à°¾à°²à°¨à± వాడండి." -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "నోటిసౠచాలా పొడవà±à°—à°¾ ఉంది - %1$d à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚, మీరౠ%2$d పంపించారà±." diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po index 805e552688..b6668adcde 100644 --- a/locale/tr/LC_MESSAGES/statusnet.po +++ b/locale/tr/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:51:04+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:39+0000\n" "Language-Team: Turkish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: tr\n" "X-Message-Group: out-statusnet\n" @@ -101,7 +101,7 @@ msgstr "Böyle bir durum mesajı yok." #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -110,10 +110,8 @@ msgstr "Böyle bir durum mesajı yok." #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Böyle bir kullanıcı yok." @@ -205,14 +203,14 @@ msgstr "" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "Onay kodu bulunamadı." @@ -226,8 +224,8 @@ msgstr "Onay kodu bulunamadı." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "" @@ -258,7 +256,7 @@ msgid "Could not save profile." msgstr "Profil kaydedilemedi." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -346,7 +344,7 @@ msgstr "" msgid "This status is already a favorite." msgstr "Bu zaten sizin Jabber ID'niz." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "" @@ -471,7 +469,7 @@ msgstr "Ä°stek bulunamadı!" msgid "You are already a member of that group." msgstr "Zaten giriÅŸ yapmış durumdasıznız!" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -523,7 +521,7 @@ msgstr "Geçersiz büyüklük." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -591,9 +589,9 @@ msgstr "Hakkında" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Takma ad" @@ -667,12 +665,12 @@ msgstr "" msgid "Unsupported format." msgstr "Desteklenmeyen görüntü dosyası biçemi." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, fuzzy, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s'in %2$s'deki durum mesajları " -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%s adli kullanicinin durum mesajlari" @@ -682,7 +680,7 @@ msgstr "%s adli kullanicinin durum mesajlari" msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s'in %2$s'deki durum mesajları " -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "" @@ -692,7 +690,7 @@ msgstr "" msgid "%s public timeline" msgstr "" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "" @@ -707,12 +705,12 @@ msgstr "%s için cevaplar" msgid "Repeats of %s" msgstr "%s için cevaplar" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, fuzzy, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "%s adli kullanicinin durum mesajlari" @@ -742,7 +740,7 @@ msgstr "" msgid "Invalid size." msgstr "Geçersiz büyüklük." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Avatar" @@ -775,7 +773,7 @@ msgid "Preview" msgstr "" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "" @@ -860,8 +858,8 @@ msgstr "" #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 #, fuzzy msgid "No such group." msgstr "Böyle bir durum mesajı yok." @@ -970,7 +968,7 @@ msgstr "Bize o profili yollamadınız" #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "" @@ -1030,7 +1028,7 @@ msgstr "" msgid "Do not delete this notice" msgstr "Böyle bir durum mesajı yok." -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "" @@ -1301,7 +1299,7 @@ msgstr "Hakkında bölümü çok uzun (azm 140 karakter)." msgid "Could not update group." msgstr "Kullanıcı güncellenemedi." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 #, fuzzy msgid "Could not create aliases." msgstr "Avatar bilgisi kaydedilemedi" @@ -2009,7 +2007,7 @@ msgstr "" msgid "You are already subscribed to these users:" msgstr "" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "" @@ -2111,7 +2109,7 @@ msgstr "" msgid "You must be logged in to leave a group." msgstr "" -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 #, fuzzy msgid "You are not a member of that group." msgstr "Bize o profili yollamadınız" @@ -2230,12 +2228,12 @@ msgstr "" msgid "New message" msgstr "" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "" -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "İçerik yok!" @@ -2243,7 +2241,7 @@ msgstr "İçerik yok!" msgid "No recipient specified." msgstr "" -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2257,7 +2255,7 @@ msgstr "" msgid "Direct message to %s sent." msgstr "" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "" @@ -2372,7 +2370,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Bu durum mesajının ait oldugu kullanıcı profili yok" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s'in %2$s'deki durum mesajları " @@ -2386,8 +2384,8 @@ msgstr "BaÄŸlan" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "" @@ -2527,7 +2525,7 @@ msgstr "Eski parola yanlış" msgid "Error saving user; invalid." msgstr "Kullanıcıyı kaydetmede hata oluÅŸtu; geçersiz." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Yeni parola kaydedilemedi." @@ -2753,8 +2751,8 @@ msgstr "" "verilmez" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Tam Ä°sim" @@ -2783,9 +2781,9 @@ msgid "Bio" msgstr "Hakkında" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Yer" @@ -2799,7 +2797,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "" @@ -3029,7 +3027,7 @@ msgstr "Parolayı sıfırla" msgid "Recover password" msgstr "Parolanı geri al" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Parola geri alma isteÄŸi" @@ -3049,19 +3047,19 @@ msgstr "Sıfırla" msgid "Enter a nickname or email address." msgstr "Bir takma ad veya eposta adresi girin." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Kullanıcı için kaydedilmiÅŸ eposta adresi yok." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Adres onayını kaydetmede hata." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3069,23 +3067,23 @@ msgstr "" "Hesabınıza eklemiÅŸ olduÄŸunuz eposta adresine parolanızı geri getirmek için " "gerekli olan talimatlar yollanmıştır." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "BeklemeÄŸen parola sıfırlaması." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Parola 6 veya daha fazla karakterden oluÅŸmalıdır." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Parola ve onaylaması birbirini tutmuyor." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Kullanıcı ayarlamada hata oluÅŸtu." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Yeni parola baÅŸarıyla kaydedildi. Åžimdi giriÅŸ yaptınız." @@ -3230,7 +3228,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Abone ol" @@ -3270,7 +3268,7 @@ msgstr "EÄŸer lisansı kabul etmezseniz kayıt olamazsınız." msgid "You already repeated that notice." msgstr "Zaten giriÅŸ yapmış durumdasıznız!" -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 #, fuzzy msgid "Repeated" msgstr "Yarat" @@ -3419,7 +3417,7 @@ msgstr "Yer" msgid "Description" msgstr "Abonelikler" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Ä°statistikler" @@ -3530,71 +3528,71 @@ msgstr "" msgid "%1$s group, page %2$d" msgstr "Bütün abonelikler" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 #, fuzzy msgid "Group profile" msgstr "Böyle bir durum mesajı yok." -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 #, fuzzy msgid "Note" msgstr "Durum mesajları" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "%s için durum RSS beslemesi" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "%s için durum RSS beslemesi" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "%s için durum RSS beslemesi" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, fuzzy, php-format msgid "FOAF for %s group" msgstr "%s için durum RSS beslemesi" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 #, fuzzy msgid "Members" msgstr "Ãœyelik baÅŸlangıcı" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 #, fuzzy msgid "Created" msgstr "Yarat" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3604,7 +3602,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3613,7 +3611,7 @@ msgid "" "their life and interests. " msgstr "" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "" @@ -4152,13 +4150,13 @@ msgstr "Böyle bir belge yok." msgid "Tag %s" msgstr "" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 #, fuzzy msgid "User profile" msgstr "Kullanıcının profili yok." #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "" @@ -4488,19 +4486,19 @@ msgstr "KiÅŸisel" msgid "Author(s)" msgstr "" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4542,46 +4540,46 @@ msgstr "" msgid "Could not update message with new URI." msgstr "" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "" -#: classes/Notice.php:241 +#: classes/Notice.php:244 #, fuzzy msgid "Problem saving notice. Too long." msgstr "Durum mesajını kaydederken hata oluÅŸtu." -#: classes/Notice.php:245 +#: classes/Notice.php:248 #, fuzzy msgid "Problem saving notice. Unknown user." msgstr "Durum mesajını kaydederken hata oluÅŸtu." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Durum mesajını kaydederken hata oluÅŸtu." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "Durum mesajını kaydederken hata oluÅŸtu." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "" @@ -4614,31 +4612,31 @@ msgstr "Abonelik silinemedi." msgid "Couldn't delete subscription OMB token." msgstr "Abonelik silinemedi." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Abonelik silinemedi." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "" -#: classes/User_group.php:477 +#: classes/User_group.php:480 #, fuzzy msgid "Could not create group." msgstr "Avatar bilgisi kaydedilemedi" -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "Abonelik oluÅŸturulamadı." -#: classes/User_group.php:507 +#: classes/User_group.php:510 #, fuzzy msgid "Could not set group membership." msgstr "Abonelik oluÅŸturulamadı." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "Abonelik oluÅŸturulamadı." @@ -4860,7 +4858,7 @@ msgstr "" msgid "StatusNet software license" msgstr "" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4869,12 +4867,12 @@ msgstr "" "**%%site.name%%** [%%site.broughtby%%](%%site.broughtbyurl%%)\" tarafından " "hazırlanan anında mesajlaÅŸma ağıdır. " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** bir aninda mesajlaÅŸma sosyal ağıdır." -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4885,43 +4883,43 @@ msgstr "" "licenses/agpl-3.0.html) lisansı ile korunan [StatusNet](http://status.net/) " "microbloglama yazılımının %s. versiyonunu kullanmaktadır." -#: lib/action.php:821 +#: lib/action.php:824 #, fuzzy msgid "Site content license" msgstr "Yeni durum mesajı" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "" -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "" -#: lib/action.php:1161 +#: lib/action.php:1164 #, fuzzy msgid "After" msgstr "« Sonra" -#: lib/action.php:1169 +#: lib/action.php:1172 #, fuzzy msgid "Before" msgstr "Önce »" @@ -4938,6 +4936,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5034,7 +5036,7 @@ msgstr "Eposta adresi onayı" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5115,11 +5117,11 @@ msgstr "Kaldır" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 #, fuzzy msgid "Provider" msgstr "Profil" @@ -5142,37 +5144,51 @@ msgstr "Parola kaydedildi." msgid "Password changing is not allowed" msgstr "Parola kaydedildi." -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" msgstr "" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +#, fuzzy +msgid "User has no last notice" +msgstr "Kullanıcının profili yok." + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "Kullanıcı güncellenemedi." -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Kullanıcı güncellenemedi." + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "" + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, fuzzy, php-format msgid "Nudge sent to %s" msgstr "%s için cevaplar" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5180,202 +5196,199 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -#, fuzzy -msgid "User has no last notice" -msgstr "Kullanıcının profili yok." - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "" -#: lib/command.php:217 +#: lib/command.php:317 #, fuzzy msgid "You are already a member of that group" msgstr "Zaten giriÅŸ yapmış durumdasıznız!" -#: lib/command.php:231 +#: lib/command.php:331 #, fuzzy, php-format msgid "Could not join user %s to group %s" msgstr "Sunucuya yönlendirme yapılamadı: %s" -#: lib/command.php:236 +#: lib/command.php:336 #, fuzzy, php-format msgid "%s joined group %s" msgstr "%1$s'in %2$s'deki durum mesajları " -#: lib/command.php:275 +#: lib/command.php:373 #, fuzzy, php-format msgid "Could not remove user %s to group %s" msgstr "OpenID formu yaratılamadı: %s" -#: lib/command.php:280 +#: lib/command.php:378 #, fuzzy, php-format msgid "%s left group %s" msgstr "%1$s'in %2$s'deki durum mesajları " -#: lib/command.php:309 +#: lib/command.php:401 #, fuzzy, php-format msgid "Fullname: %s" msgstr "Tam Ä°sim" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "" -#: lib/command.php:413 +#: lib/command.php:490 #, fuzzy msgid "Cannot repeat your own notice" msgstr "EÄŸer lisansı kabul etmezseniz kayıt olamazsınız." -#: lib/command.php:418 +#: lib/command.php:495 #, fuzzy msgid "Already repeated that notice" msgstr "Zaten giriÅŸ yapmış durumdasıznız!" -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "Durum mesajları" -#: lib/command.php:428 +#: lib/command.php:505 #, fuzzy msgid "Error repeating notice." msgstr "Durum mesajını kaydederken hata oluÅŸtu." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:491 +#: lib/command.php:545 #, fuzzy, php-format msgid "Reply to %s sent" msgstr "%s için cevaplar" -#: lib/command.php:493 +#: lib/command.php:547 #, fuzzy msgid "Error saving notice." msgstr "Durum mesajını kaydederken hata oluÅŸtu." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "" -#: lib/command.php:554 lib/command.php:589 +#: lib/command.php:602 #, fuzzy -msgid "No such user" -msgstr "Böyle bir kullanıcı yok." +msgid "Can't subscribe to OMB profiles by command." +msgstr "Bize o profili yollamadınız" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "" -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "" -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "" -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "" -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "AboneliÄŸi sonlandır" -#: lib/command.php:709 +#: lib/command.php:752 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Bize o profili yollamadınız" -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Bize o profili yollamadınız" -#: lib/command.php:731 +#: lib/command.php:774 #, fuzzy msgid "No one is subscribed to you." msgstr "Uzaktan abonelik" -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Uzaktan abonelik" -#: lib/command.php:753 +#: lib/command.php:796 #, fuzzy msgid "You are not a member of any groups." msgstr "Bize o profili yollamadınız" -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Bize o profili yollamadınız" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5417,20 +5430,20 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 #, fuzzy msgid "No configuration file found. " msgstr "Onay kodu yok." -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "" @@ -5615,51 +5628,51 @@ msgstr "" msgid "This page is not available in a media type you accept" msgstr "Bu sayfa kabul ettiÄŸiniz ortam türünde kullanılabilir deÄŸil" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Desteklenmeyen görüntü dosyası biçemi." + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "" "Ah, durumunuz biraz uzun kaçtı. Azami 180 karaktere sığdırmaya ne dersiniz?" -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Kısmi yükleme." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Dosya yüklemede sistem hatası." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Bu bir resim dosyası deÄŸil ya da dosyada hata var" -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Desteklenmeyen görüntü dosyası biçemi." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 #, fuzzy msgid "Lost our file." msgstr "Böyle bir durum mesajı yok." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5864,7 +5877,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "" @@ -6020,26 +6033,26 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 #, fuzzy msgid "in context" msgstr "İçerik yok!" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 #, fuzzy msgid "Repeated by" msgstr "Yarat" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 #, fuzzy msgid "Reply" msgstr "cevapla" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "Durum mesajları" @@ -6188,7 +6201,7 @@ msgstr "Böyle bir durum mesajı yok." msgid "Revoke the \"%s\" role from this user" msgstr "Böyle bir kullanıcı yok." -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6321,92 +6334,96 @@ msgstr "" msgid "Unsubscribe" msgstr "AboneliÄŸi sonlandır" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 #, fuzzy msgid "Edit Avatar" msgstr "Avatar" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 #, fuzzy msgid "Edit profile settings" msgstr "Profil ayarları" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "Kullanıcının profili yok." -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "birkaç saniye önce" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "yaklaşık bir dakika önce" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "yaklaşık %d dakika önce" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "yaklaşık bir saat önce" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "yaklaşık %d saat önce" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "yaklaşık bir gün önce" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "yaklaşık %d gün önce" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "yaklaşık bir ay önce" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "yaklaşık %d ay önce" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "yaklaşık bir yıl önce" @@ -6420,7 +6437,7 @@ msgstr "BaÅŸlangıç sayfası adresi geçerli bir URL deÄŸil." msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po index 78aa5dc235..39b7d186b5 100644 --- a/locale/uk/LC_MESSAGES/statusnet.po +++ b/locale/uk/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:51:07+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:42+0000\n" "Language-Team: Ukrainian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: out-statusnet\n" @@ -97,7 +97,7 @@ msgstr "Ðемає такої Ñторінки" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -106,10 +106,8 @@ msgstr "Ðемає такої Ñторінки" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Такого кориÑтувача немає." @@ -206,14 +204,14 @@ msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ %1$s та друзів на %2$s!" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 msgid "API method not found." msgstr "API метод не знайдено." @@ -226,8 +224,8 @@ msgstr "API метод не знайдено." #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "Цей метод потребує POST." @@ -257,7 +255,7 @@ msgid "Could not save profile." msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ профіль." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -344,7 +342,7 @@ msgstr "Жодних ÑтатуÑів з таким ID." msgid "This status is already a favorite." msgstr "Цей ÑÑ‚Ð°Ñ‚ÑƒÑ Ð²Ð¶Ðµ Ñ” обраним." -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Ðе можна позначити Ñк обране." @@ -463,7 +461,7 @@ msgstr "Групу не знайдено!" msgid "You are already a member of that group." msgstr "Ви вже Ñ” учаÑником цієї групи." -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "Ðдмін цієї групи заблокував Вашу приÑутніÑÑ‚ÑŒ в ній." @@ -513,7 +511,7 @@ msgstr "Ðевірний токен." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -584,9 +582,9 @@ msgstr "Ðкаунт" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача" @@ -657,12 +655,12 @@ msgstr "" msgid "Unsupported format." msgstr "Формат не підтримуєтьÑÑ." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s / Обрані від %2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%1$s Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ñ€Ð°Ð½Ð¸Ñ… від %2$s / %2$s." @@ -672,7 +670,7 @@ msgstr "%1$s Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ñ€Ð°Ð½Ð¸Ñ… від %2$s / %2$s." msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Оновленні відповіді %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "%1$s оновив цю відповідь на Ð´Ð¾Ð¿Ð¸Ñ Ð²Ñ–Ð´ %2$s / %3$s." @@ -682,7 +680,7 @@ msgstr "%1$s оновив цю відповідь на Ð´Ð¾Ð¿Ð¸Ñ Ð²Ñ–Ð´ %2$s / msgid "%s public timeline" msgstr "%s загальна Ñтрічка" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ уÑÑ–Ñ…!" @@ -697,12 +695,12 @@ msgstr "Повторено Ð´Ð»Ñ %s" msgid "Repeats of %s" msgstr "ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "ДопиÑи позначені з %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ñ– з %1$s на %2$s!" @@ -730,7 +728,7 @@ msgstr "Ðемає розміру." msgid "Invalid size." msgstr "ÐедійÑний розмір." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Ðватара" @@ -762,7 +760,7 @@ msgid "Preview" msgstr "ПереглÑд" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "Видалити" @@ -845,8 +843,8 @@ msgstr "Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— про Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð· #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "Такої групи немає." @@ -947,7 +945,7 @@ msgstr "Ви не Ñ” влаÑником цього додатку." #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "Виникли певні проблеми з токеном поточної ÑеÑÑ–Ñ—." @@ -1006,7 +1004,7 @@ msgstr "Ви впевненні, що бажаєте видалити цей д msgid "Do not delete this notice" msgstr "Ðе видалÑти цей допиÑ" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "Видалити допиÑ" @@ -1259,7 +1257,7 @@ msgstr "Ð¾Ð¿Ð¸Ñ Ð½Ð°Ð´Ñ‚Ð¾ довгий (%d знаків макÑимум)." msgid "Could not update group." msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ групу." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 msgid "Could not create aliases." msgstr "Ðеможна призначити додаткові імена." @@ -1961,7 +1959,7 @@ msgstr "ЗапроÑити нових кориÑтувачів" msgid "You are already subscribed to these users:" msgstr "Ви вже підпиÑані до цих кориÑтувачів:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2093,7 +2091,7 @@ msgstr "%1$s приєднавÑÑ Ð´Ð¾ групи %2$s" msgid "You must be logged in to leave a group." msgstr "Ви повинні Ñпочатку увійти на Ñайт, аби залишити групу." -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "Ви не Ñ” учаÑником цієї групи." @@ -2209,12 +2207,12 @@ msgstr "СкориÑтайтеÑÑŒ цією формою Ð´Ð»Ñ Ñтворенн msgid "New message" msgstr "Ðове повідомленнÑ" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "Ви не можете надіÑлати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð¼Ñƒ кориÑтувачеві." -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Ðемає зміÑту!" @@ -2222,7 +2220,7 @@ msgstr "Ðемає зміÑту!" msgid "No recipient specified." msgstr "Жодного отримувача не визначено." -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2237,7 +2235,7 @@ msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð´Ñ–Ñлано" msgid "Direct message to %s sent." msgstr "ПрÑме Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ %s надіÑлано." -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Помилка в Ajax" @@ -2357,7 +2355,7 @@ msgstr "Розробники можуть змінити налаштуванн msgid "Notice has no profile" msgstr "Ð”Ð¾Ð¿Ð¸Ñ Ð½Ðµ має профілю" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s має ÑÑ‚Ð°Ñ‚ÑƒÑ Ð½Ð° %2$s" @@ -2370,8 +2368,8 @@ msgstr "тип зміÑту " msgid "Only " msgstr "Лише " -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Такий формат даних не підтримуєтьÑÑ." @@ -2504,7 +2502,7 @@ msgstr "Старий пароль Ñ” неточним" msgid "Error saving user; invalid." msgstr "Помилка при збереженні кориÑтувача; недійÑний." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Ðеможна зберегти новий пароль." @@ -2718,8 +2716,8 @@ msgstr "" "1-64 літери нижнього регіÑтру Ñ– цифри, ніÑкої пунктуації або інтервалів" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Повне ім’Ñ" @@ -2746,9 +2744,9 @@ msgid "Bio" msgstr "Про Ñебе" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "РозташуваннÑ" @@ -2762,7 +2760,7 @@ msgstr "Показувати мою поточну локацію при над #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Теґи" @@ -2846,7 +2844,7 @@ msgstr "Ðе вдаєтьÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ загальну Ñтрічку #: actions/public.php:130 #, php-format msgid "Public timeline, page %d" -msgstr "Загальний Ñтрічка, Ñторінка %d" +msgstr "Загальна Ñтрічка, Ñторінка %d" #: actions/public.php:132 lib/publicgroupnav.php:79 msgid "Public timeline" @@ -3005,7 +3003,7 @@ msgstr "Скинути пароль" msgid "Recover password" msgstr "Відновити пароль" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Запит на Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŽ відправлено" @@ -3025,19 +3023,19 @@ msgstr "Скинути" msgid "Enter a nickname or email address." msgstr "Введіть Ñ–Ð¼â€™Ñ Ð°Ð±Ð¾ електронну адреÑу." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "КориÑтувача з такою електронною адреÑою або ім’Ñм немає." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ кориÑтувача немає зареєÑтрованої електронної адреÑи." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Помилка при збереженні Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3045,23 +3043,23 @@ msgstr "" "ІнÑтрукції з Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŽ було надіÑлано на електронну адреÑу, Ñку Ви " "вказали у налаштуваннÑÑ… Вашого профілю." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "ÐеÑподіване ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŽ." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Пароль має ÑкладатиÑÑŒ з 6-ти або більше знаків." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Пароль та Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ Ñпівпадають." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Помилка в налаштуваннÑÑ… кориÑтувача." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Ðовий пароль уÑпішно збережено. Тепер Ви увійшли." @@ -3226,7 +3224,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "URL-адреÑа Вашого профілю на іншому ÑуміÑному ÑервіÑÑ–" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "ПідпиÑатиÑÑŒ" @@ -3263,7 +3261,7 @@ msgstr "Ви не можете повторювати Ñвої влаÑні до msgid "You already repeated that notice." msgstr "Ви вже повторили цей допиÑ." -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 msgid "Repeated" msgstr "Повторено" @@ -3406,7 +3404,7 @@ msgstr "ОрганізаціÑ" msgid "Description" msgstr "ОпиÑ" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "СтатиÑтика" @@ -3527,67 +3525,67 @@ msgstr "Група %s" msgid "%1$s group, page %2$d" msgstr "Група %1$s, Ñторінка %2$d" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 msgid "Group profile" msgstr "Профіль групи" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "ЗауваженнÑ" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "Додаткові імена" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "ДіÑльніÑÑ‚ÑŒ групи" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Стрічка допиÑів групи %s (RSS 1.0)" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Стрічка допиÑів групи %s (RSS 2.0)" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Стрічка допиÑів групи %s (Atom)" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "FOAF Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¸ %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "УчаÑники" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(ПуÑто)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "Ð’ÑÑ– учаÑники" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 msgid "Created" msgstr "Створено" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3602,7 +3600,7 @@ msgstr "" "короткі допиÑи про Ñвоє Ð¶Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° інтереÑи. [ПриєднуйтеÑÑŒ](%%action.register%" "%) зараз Ñ– долучітьÑÑ Ð´Ð¾ ÑпілкуваннÑ! ([ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ](%%doc.help%%))" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3615,7 +3613,7 @@ msgstr "" "забезпеченні [StatusNet](http://status.net/). Члени цієї групи роблÑÑ‚ÑŒ " "короткі допиÑи про Ñвоє Ð¶Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° інтереÑи. " -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "Ðдміни" @@ -4167,12 +4165,12 @@ msgstr "Ðемає ID аргументу." msgid "Tag %s" msgstr "Позначити %s" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" msgstr "Профіль кориÑтувача." #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "Фото" @@ -4513,7 +4511,7 @@ msgstr "ВерÑÑ–Ñ" msgid "Author(s)" msgstr "Ðвтор(и)" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " @@ -4522,12 +4520,12 @@ msgstr "" "ÐÑ–, файл не може бути більшим за %d байтів, а те, що Ви хочете надіÑлати, " "важить %d байтів. Спробуйте меншу верÑÑ–ÑŽ." -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "Розміри цього файлу перевищують Вашу квоту на %d байтів." -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "Розміри цього файлу перевищують Вашу міÑÑчну квоту на %d байтів." @@ -4565,27 +4563,27 @@ msgstr "Ðе можна долучити повідомленнÑ." msgid "Could not update message with new URI." msgstr "Ðе можна оновити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· новим URI." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "Помилка бази даних при додаванні теґу: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 msgid "Problem saving notice. Too long." msgstr "Проблема при збереженні допиÑу. Ðадто довге." -#: classes/Notice.php:245 +#: classes/Notice.php:248 msgid "Problem saving notice. Unknown user." msgstr "Проблема при збереженні допиÑу. Ðевідомий кориÑтувач." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" "Дуже багато допиÑів за короткий термін; ходіть подихайте повітрÑм Ñ– " "повертайтеÑÑŒ за кілька хвилин." -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." @@ -4593,19 +4591,19 @@ msgstr "" "Дуже багато повідомлень за короткий термін; ходіть подихайте повітрÑм Ñ– " "повертайтеÑÑŒ за кілька хвилин." -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "Вам заборонено надÑилати допиÑи до цього Ñайту." -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Проблема при збереженні допиÑу." -#: classes/Notice.php:927 +#: classes/Notice.php:941 msgid "Problem saving group inbox." msgstr "Проблема при збереженні вхідних допиÑів Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¸." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" @@ -4634,28 +4632,28 @@ msgstr "Ðе можу видалити ÑамопідпиÑку." msgid "Couldn't delete subscription OMB token." msgstr "Ðе вдаєтьÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ токен підпиÑки OMB." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ підпиÑку." -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "Вітаємо на %1$s, @%2$s!" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "Ðе вдалоÑÑ Ñтворити нову групу." -#: classes/User_group.php:486 +#: classes/User_group.php:489 msgid "Could not set group URI." msgstr "Ðе вдалоÑÑ Ð²Ñтановити URI групи." -#: classes/User_group.php:507 +#: classes/User_group.php:510 msgid "Could not set group membership." msgstr "Ðе вдалоÑÑ Ð²Ñтановити членÑтво." -#: classes/User_group.php:521 +#: classes/User_group.php:524 msgid "Could not save local group info." msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ інформацію про локальну групу." @@ -4859,7 +4857,7 @@ msgstr "Бедж" msgid "StatusNet software license" msgstr "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ StatusNet" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4868,12 +4866,12 @@ msgstr "" "**%%site.name%%** — це ÑÐµÑ€Ð²Ñ–Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð±Ð»Ð¾Ò‘Ñ–Ð² наданий вам [%%site.broughtby%%](%%" "site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** — це ÑÐµÑ€Ð²Ñ–Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð±Ð»Ð¾Ò‘Ñ–Ð². " -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4884,42 +4882,42 @@ msgstr "" "Ð´Ð»Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð±Ð»Ð¾Ò‘Ñ–Ð², верÑÑ–Ñ %s, доÑтупному під [GNU Affero General Public " "License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 msgid "Site content license" msgstr "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ð·Ð¼Ñ–Ñту Ñайту" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "ЗміÑÑ‚ Ñ– дані %1$s Ñ” приватними Ñ– конфіденційними." -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "ÐвторÑькі права на зміÑÑ‚ Ñ– дані належать %1$s. Ð’ÑÑ– права захищено." -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" "ÐвторÑькі права на зміÑÑ‚ Ñ– дані належать розробникам. Ð’ÑÑ– права захищено." -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "Ð’ÑÑ– " -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "ліцензіÑ." -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "ÐÑƒÐ¼ÐµÑ€Ð°Ñ†Ñ–Ñ Ñторінок" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "Вперед" -#: lib/action.php:1169 +#: lib/action.php:1172 msgid "Before" msgstr "Ðазад" @@ -4935,6 +4933,10 @@ msgstr "Поки що не можу обробити вбудований XML к msgid "Can't handle embedded Base64 content yet." msgstr "Поки що не можу обробити вбудований контент Base64." +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -5023,7 +5025,7 @@ msgstr "" "API-реÑÑƒÑ€Ñ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ” дозвіл типу «читаннÑ-запиÑ», але у Ð²Ð°Ñ Ñ” лише доÑтуп Ð´Ð»Ñ " "читаннÑ." -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5099,11 +5101,11 @@ msgstr "Відкликати" msgid "Attachments" msgstr "ВкладеннÑ" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "Ðвтор" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "Провайдер" @@ -5123,37 +5125,50 @@ msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ пароль" msgid "Password changing is not allowed" msgstr "Змінювати пароль не дозволено" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "Результати команди" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "Команду виконано" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "Команду не виконано" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "Даруйте, але Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ще не завершено." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" +msgstr "Такого допиÑу не Ñ–Ñнує" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "КориÑтувач не має оÑтаннього допиÑу" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ кориÑтувача з іменем %s" -#: lib/command.php:92 +#: lib/command.php:143 +#, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ локального кориÑтувача з іменем %s" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "Даруйте, але Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ще не завершено." + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "Гадаємо, кориÑÑ‚Ñ– від «розштовхуваннÑ» Ñамого Ñебе небагато, чи не так?!" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "Спробу «розштовхати» %s зараховано" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5164,199 +5179,199 @@ msgstr "" "ПідпиÑчики: %2$s\n" "ДопиÑи: %3$s" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "Такого допиÑу не Ñ–Ñнує" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "КориÑтувач не має оÑтаннього допиÑу" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "Ð”Ð¾Ð¿Ð¸Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñк обраний." -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "Ви вже Ñ” учаÑником цієї групи." -#: lib/command.php:231 +#: lib/command.php:331 #, php-format msgid "Could not join user %s to group %s" msgstr "Ðе вдалоÑÑŒ долучити кориÑтувача %1$s до групи %2$s." -#: lib/command.php:236 +#: lib/command.php:336 #, php-format msgid "%s joined group %s" msgstr "%1$s приєднавÑÑ Ð´Ð¾ групи %2$s" -#: lib/command.php:275 +#: lib/command.php:373 #, php-format msgid "Could not remove user %s to group %s" msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ кориÑтувача %1$s з групи %2$s." -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%1$s залишив групу %2$s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "Повне ім’Ñ: %s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "ЛокаціÑ: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "Веб-Ñторінка: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "Про мене: %s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" +"%s — це віддалений профіль; Ви можете надÑилати приватні Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ " +"кориÑтувачам одного з вами ÑервіÑу." + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð´Ñ‚Ð¾ довге — макÑимум %d знаків, а ви надÑилаєте %d" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "ПрÑме Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ %s надіÑлано." -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "Помилка при відправці прÑмого повідомленнÑ." -#: lib/command.php:413 +#: lib/command.php:490 msgid "Cannot repeat your own notice" msgstr "Ðе можу повторити Ваш влаÑний допиÑ" -#: lib/command.php:418 +#: lib/command.php:495 msgid "Already repeated that notice" msgstr "Цей Ð´Ð¾Ð¿Ð¸Ñ Ð²Ð¶Ðµ повторили" -#: lib/command.php:426 +#: lib/command.php:503 #, php-format msgid "Notice from %s repeated" msgstr "Ð”Ð¾Ð¿Ð¸Ñ %s повторили" -#: lib/command.php:428 +#: lib/command.php:505 msgid "Error repeating notice." msgstr "Помилка при повторенні допиÑу." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Ð”Ð¾Ð¿Ð¸Ñ Ð½Ð°Ð´Ñ‚Ð¾ довгий — макÑимум %d знаків, а ви надÑилаєте %d" -#: lib/command.php:491 +#: lib/command.php:545 #, php-format msgid "Reply to %s sent" msgstr "Відповідь до %s надіÑлано" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "Проблема при збереженні допиÑу." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "Зазначте Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, до Ñкого бажаєте підпиÑатиÑÑŒ" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "Такого кориÑтувача немає." +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "Ðе можу підпиÑатиÑÑŒ до профілю OMB за командою." -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "ПідпиÑано до %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "Зазначте Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, від Ñкого бажаєте відпиÑатиÑÑŒ" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "ВідпиÑано від %s" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "Ð’Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ще не завершено." -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÑƒÑ‚Ð¾." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "Ðе можна вимкнути ÑповіщеннÑ." -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¾." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "Ðе можна увімкнути ÑповіщеннÑ." -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "Команду входу відключено" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" "Це поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° викориÑтати лише раз, воно дійÑне протÑгом 2 хвилин: %s" -#: lib/command.php:692 +#: lib/command.php:735 #, php-format msgid "Unsubscribed %s" msgstr "ВідпиÑано %s" -#: lib/command.php:709 +#: lib/command.php:752 msgid "You are not subscribed to anyone." msgstr "Ви не маєте жодних підпиÑок." -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Ви підпиÑані до цієї оÑоби:" msgstr[1] "Ви підпиÑані до цих людей:" msgstr[2] "Ви підпиÑані до цих людей:" -#: lib/command.php:731 +#: lib/command.php:774 msgid "No one is subscribed to you." msgstr "До Ð’Ð°Ñ Ð½Ñ–Ñ…Ñ‚Ð¾ не підпиÑаний." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Ð¦Ñ Ð¾Ñоба Ñ” підпиÑаною до ВаÑ:" msgstr[1] "Ці люди підпиÑані до ВаÑ:" msgstr[2] "Ці люди підпиÑані до ВаÑ:" -#: lib/command.php:753 +#: lib/command.php:796 msgid "You are not a member of any groups." msgstr "Ви не Ñ” учаÑником жодної групи." -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Ви Ñ” учаÑником групи:" msgstr[1] "Ви Ñ” учаÑником таких груп:" msgstr[2] "Ви Ñ” учаÑником таких груп:" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5433,19 +5448,19 @@ msgstr "" "tracks — наразі не виконуєтьÑÑ\n" "tracking — наразі не виконуєтьÑÑ\n" -#: lib/common.php:148 +#: lib/common.php:136 msgid "No configuration file found. " msgstr "Файлу конфігурації не знайдено. " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "Шукав файли конфігурації в цих міÑцÑÑ…: " -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "ЗапуÑÑ‚Ñ–Ñ‚ÑŒ файл інÑталÑції, аби полагодити це." -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "Іти до файлу інÑталÑції." @@ -5622,49 +5637,49 @@ msgstr "Теґи у допиÑах групи %s" msgid "This page is not available in a media type you accept" msgstr "Ð¦Ñ Ñторінка не доÑтупна Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ типу медіа, з Ñким ви погодилиÑÑŒ" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Формат Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ підтримуєтьÑÑ." + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "Цей файл завеликий. МакÑимальний розмір %s." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "ЧаÑткове завантаженнÑ." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "СиÑтема відповіла помилкою при завантаженні цього файла." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "Це не зображеннÑ, або файл зіпÑовано." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Формат Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ підтримуєтьÑÑ." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 msgid "Lost our file." msgstr "Файл втрачено." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "Тип файлу не підтримуєтьÑÑ" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "Мб" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "кб" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "[%s]" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "Ðевідоме джерело вхідного Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ %d." @@ -5945,7 +5960,7 @@ msgstr "" "Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¸ долучити кориÑтувачів до розмови. Такі Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±Ð°Ñ‡Ð¸Ñ‚Ðµ " "лише Ви." -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "від" @@ -6100,23 +6115,23 @@ msgstr "Зах." msgid "at" msgstr "в" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 msgid "in context" msgstr "в контекÑÑ‚Ñ–" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 msgid "Repeated by" msgstr "Повторено" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "ВідповіÑти на цей допиÑ" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "ВідповіÑти" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 msgid "Notice repeated" msgstr "Ð”Ð¾Ð¿Ð¸Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð¸Ð»Ð¸" @@ -6258,7 +6273,7 @@ msgstr "Повторити цей допиÑ" msgid "Revoke the \"%s\" role from this user" msgstr "Відкликати роль \"%s\" Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ кориÑтувача" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "КориÑтувача Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾ÐºÐ¾Ñ€Ð¸Ñтувацького режиму не визначено." @@ -6384,89 +6399,93 @@ msgstr "ВідпиÑатиÑÑŒ від цього кориÑтувача" msgid "Unsubscribe" msgstr "ВідпиÑатиÑÑŒ" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 msgid "Edit Avatar" msgstr "Ðватара" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "ДіÑльніÑÑ‚ÑŒ кориÑтувача" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 msgid "Edit profile settings" msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽ" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "Правка" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "ÐадіÑлати прÑме Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð¼Ñƒ кориÑтувачеві" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "ПовідомленнÑ" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "Модерувати" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 msgid "User role" msgstr "Роль кориÑтувача" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "ÐдмініÑтратор" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "Модератор" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "мить тому" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "хвилину тому" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "близько %d хвилин тому" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "годину тому" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "близько %d годин тому" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "день тому" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "близько %d днів тому" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "міÑÑць тому" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "близько %d міÑÑців тому" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "рік тому" @@ -6480,7 +6499,7 @@ msgstr "%s Ñ” неприпуÑтимим кольором!" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "%s неприпуÑтимий колір! ВикориÑтайте 3 або 6 знаків (HEX-формат)" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/vi/LC_MESSAGES/statusnet.po b/locale/vi/LC_MESSAGES/statusnet.po index 59751aa5d1..0f560f41d7 100644 --- a/locale/vi/LC_MESSAGES/statusnet.po +++ b/locale/vi/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:51:10+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:45+0000\n" "Language-Team: Vietnamese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: vi\n" "X-Message-Group: out-statusnet\n" @@ -100,7 +100,7 @@ msgstr "Không có tin nhắn nào." #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -109,10 +109,8 @@ msgstr "Không có tin nhắn nào." #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "Không có user nào." @@ -204,14 +202,14 @@ msgstr "" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "PhÆ°Æ¡ng thức API không tìm thấy!" @@ -225,8 +223,8 @@ msgstr "PhÆ°Æ¡ng thức API không tìm thấy!" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "PhÆ°Æ¡ng thức này yêu cầu là POST." @@ -257,7 +255,7 @@ msgid "Could not save profile." msgstr "Không thể lÆ°u hồ sÆ¡ cá nhân." #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -347,7 +345,7 @@ msgstr "Không tìm thấy trạng thái nào tÆ°Æ¡ng ứng vá»›i ID đó." msgid "This status is already a favorite." msgstr "Tin nhắn này đã có trong danh sách tin nhắn Æ°a thích của bạn rồi!" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "Không thể tạo favorite." @@ -473,7 +471,7 @@ msgstr "PhÆ°Æ¡ng thức API không tìm thấy!" msgid "You are already a member of that group." msgstr "Bạn đã theo những ngÆ°á»i này:" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -525,7 +523,7 @@ msgstr "Kích thÆ°á»›c không hợp lệ." #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -593,9 +591,9 @@ msgstr "Giá»›i thiệu" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "Biệt danh" @@ -668,12 +666,12 @@ msgstr "" msgid "Unsupported format." msgstr "Không há»— trợ kiểu file ảnh này." -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, fuzzy, php-format msgid "%1$s / Favorites from %2$s" msgstr "Tìm kiếm các tin nhắn Æ°a thích của %s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "Tất cả các cập nhật của %s" @@ -683,7 +681,7 @@ msgstr "Tất cả các cập nhật của %s" msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / Các cập nhật Ä‘ang trả lá»i tá»›i %2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "" @@ -693,7 +691,7 @@ msgstr "" msgid "%s public timeline" msgstr "Dòng tin công cá»™ng" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "%s cập nhật từ tất cả má»i ngÆ°á»i!" @@ -708,12 +706,12 @@ msgstr "Trả lá»i cho %s" msgid "Repeats of %s" msgstr "Trả lá»i cho %s" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "Thông báo được gắn thẻ %s" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, fuzzy, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "Dòng tin nhắn cho %s" @@ -743,7 +741,7 @@ msgstr "Không có kích thÆ°á»›c." msgid "Invalid size." msgstr "Kích thÆ°á»›c không hợp lệ." -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "Hình đại diện" @@ -778,7 +776,7 @@ msgid "Preview" msgstr "Xem trÆ°á»›c" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 #, fuzzy msgid "Delete" msgstr "Xóa tin nhắn" @@ -865,8 +863,8 @@ msgstr "" #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 #, fuzzy msgid "No such group." msgstr "Không có tin nhắn nào." @@ -974,7 +972,7 @@ msgstr "Bạn chÆ°a cập nhật thông tin riêng" #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 #, fuzzy msgid "There was a problem with your session token." msgstr "Có lá»—i xảy ra khi thao tác. Hãy thá»­ lại lần nữa." @@ -1036,7 +1034,7 @@ msgstr "Bạn có chắc chắn là muốn xóa tin nhắn này không?" msgid "Do not delete this notice" msgstr "Không thể xóa tin nhắn này." -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 #, fuzzy msgid "Delete this notice" msgstr "Xóa tin nhắn" @@ -1320,7 +1318,7 @@ msgstr "Lý lịch quá dài (không quá 140 ký tá»±)" msgid "Could not update group." msgstr "Không thể cập nhật thành viên." -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 #, fuzzy msgid "Could not create aliases." msgstr "Không thể tạo favorite." @@ -2055,7 +2053,7 @@ msgstr "Gá»­i thÆ° má»i đến những ngÆ°á»i chÆ°a có tài khoản" msgid "You are already subscribed to these users:" msgstr "Bạn đã theo những ngÆ°á»i này:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, fuzzy, php-format msgid "%1$s (%2$s)" msgstr "%s (%s)" @@ -2192,7 +2190,7 @@ msgstr "%s và nhóm" msgid "You must be logged in to leave a group." msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những " -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 #, fuzzy msgid "You are not a member of that group." msgstr "Bạn chÆ°a cập nhật thông tin riêng" @@ -2313,13 +2311,13 @@ msgstr "" msgid "New message" msgstr "Tin má»›i nhất" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 #, fuzzy msgid "You can't send a message to this user." msgstr "Bạn đã theo những ngÆ°á»i này:" -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "Không có ná»™i dung!" @@ -2327,7 +2325,7 @@ msgstr "Không có ná»™i dung!" msgid "No recipient specified." msgstr "" -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2342,7 +2340,7 @@ msgstr "Tin má»›i nhất" msgid "Direct message to %s sent." msgstr "Tin nhắn riêng" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 #, fuzzy msgid "Ajax Error" msgstr "Lá»—i" @@ -2461,7 +2459,7 @@ msgstr "" msgid "Notice has no profile" msgstr "Tin nhắn không có hồ sÆ¡ cá nhân" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "Trạng thái của %1$s vào %2$s" @@ -2475,8 +2473,8 @@ msgstr "Kết nối" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "Không há»— trợ định dạng dữ liệu này." @@ -2620,7 +2618,7 @@ msgstr "Mật khẩu cÅ© sai" msgid "Error saving user; invalid." msgstr "Lá»—i xảy ra khi lÆ°u thành viên; không hợp lệ." -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "Không thể lÆ°u mật khẩu má»›i" @@ -2850,8 +2848,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 chữ cái thÆ°á»ng hoặc là chữ số, không có dấu chấm hay " #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Tên đầy đủ" @@ -2879,9 +2877,9 @@ msgid "Bio" msgstr "Lý lịch" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "Thành phố" @@ -2895,7 +2893,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "Từ khóa" @@ -3128,7 +3126,7 @@ msgstr "Khởi tạo lại mật khẩu" msgid "Recover password" msgstr "Khôi phục mật khẩu" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "Yêu cầu khôi phục lại mật khẩu đã được gá»­i" @@ -3148,20 +3146,20 @@ msgstr "Khởi tạo" msgid "Enter a nickname or email address." msgstr "Nhập biệt hiệu hoặc email." -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" "Không tìm thấy ngÆ°á»i dùng nào tÆ°Æ¡ng ứng vá»›i địa chỉ email hoặc username đó." -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "Thành viên này đã không đăng ký địa chỉ email." -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "Lá»—i xảy ra khi lÆ°u địa chỉ đã được xác nhận." -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." @@ -3169,23 +3167,23 @@ msgstr "" "HÆ°á»›ng dẫn cách khôi phục mật khẩu đã được gá»­i đến địa chỉ email đăng ký " "trong tài khoản của bạn." -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "Bất ngá» reset mật khẩu." -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "Mật khẩu phải nhiá»u hÆ¡n 6 ký tá»±." -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "Mật khẩu và mật khẩu xác nhận không khá»›p nhau." -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "Lá»—i xảy ra khi tạo thành viên." -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "Mật khẩu má»›i đã được lÆ°u. Bạn có thể đăng nhập ngay bây giá»." @@ -3348,7 +3346,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "URL trong hồ sÆ¡ cá nhân của bạn ở trên các trang microblogging khác" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "Theo bạn này" @@ -3389,7 +3387,7 @@ msgstr "Bạn không thể đăng ký nếu không đồng ý các Ä‘iá»u kho msgid "You already repeated that notice." msgstr "Bạn đã theo những ngÆ°á»i này:" -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 #, fuzzy msgid "Repeated" msgstr "Tạo" @@ -3538,7 +3536,7 @@ msgstr "ThÆ° má»i đã gá»­i" msgid "Description" msgstr "Mô tả" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "Số liệu thống kê" @@ -3650,72 +3648,72 @@ msgstr "%s và nhóm" msgid "%1$s group, page %2$d" msgstr "Thành viên" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 #, fuzzy msgid "Group profile" msgstr "Thông tin nhóm" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 #, fuzzy msgid "Note" msgstr "Tin nhắn" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 #, fuzzy msgid "Group actions" msgstr "Mã nhóm" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Dòng tin nhắn cho %s" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Dòng tin nhắn cho %s" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "Dòng tin nhắn cho %s" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "Há»™p thÆ° Ä‘i của %s" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 msgid "Members" msgstr "Thành viên" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 #, fuzzy msgid "All members" msgstr "Thành viên" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 #, fuzzy msgid "Created" msgstr "Tạo" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3725,7 +3723,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3734,7 +3732,7 @@ msgid "" "their life and interests. " msgstr "" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "" @@ -4292,13 +4290,13 @@ msgstr "Không có tài liệu nào." msgid "Tag %s" msgstr "Từ khóa" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 #, fuzzy msgid "User profile" msgstr "Hồ sÆ¡" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "" @@ -4638,19 +4636,19 @@ msgstr "Cá nhân" msgid "Author(s)" msgstr "" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4695,46 +4693,46 @@ msgstr "Không thể chèn thêm vào đăng nhận." msgid "Could not update message with new URI." msgstr "Không thể cập nhật thông tin user vá»›i địa chỉ email đã được xác nhận." -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, fuzzy, php-format msgid "DB error inserting hashtag: %s" msgstr "Lá»—i cÆ¡ sở dữ liệu khi chèn trả lá»i: %s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 #, fuzzy msgid "Problem saving notice. Too long." msgstr "Có lá»—i xảy ra khi lÆ°u tin nhắn." -#: classes/Notice.php:245 +#: classes/Notice.php:248 #, fuzzy msgid "Problem saving notice. Unknown user." msgstr "Có lá»—i xảy ra khi lÆ°u tin nhắn." -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "Có lá»—i xảy ra khi lÆ°u tin nhắn." -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "Có lá»—i xảy ra khi lÆ°u tin nhắn." -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%s (%s)" @@ -4767,31 +4765,31 @@ msgstr "Không thể xóa đăng nhận." msgid "Couldn't delete subscription OMB token." msgstr "Không thể xóa đăng nhận." -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "Không thể xóa đăng nhận." -#: classes/User.php:373 +#: classes/User.php:378 #, fuzzy, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "%s chào mừng bạn " -#: classes/User_group.php:477 +#: classes/User_group.php:480 #, fuzzy msgid "Could not create group." msgstr "Không thể tạo favorite." -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "Không thể tạo đăng nhận." -#: classes/User_group.php:507 +#: classes/User_group.php:510 #, fuzzy msgid "Could not set group membership." msgstr "Không thể tạo đăng nhận." -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "Không thể tạo đăng nhận." @@ -5017,7 +5015,7 @@ msgstr "Tin đã gá»­i" msgid "StatusNet software license" msgstr "" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -5026,12 +5024,12 @@ msgstr "" "**%%site.name%%** là dịch vụ gá»­i tin nhắn được cung cấp từ [%%site.broughtby%" "%](%%site.broughtbyurl%%). " -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** là dịch vụ gá»­i tin nhắn. " -#: lib/action.php:806 +#: lib/action.php:809 #, fuzzy, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -5042,43 +5040,43 @@ msgstr "" "quyá»n [GNU Affero General Public License](http://www.fsf.org/licensing/" "licenses/agpl-3.0.html)." -#: lib/action.php:821 +#: lib/action.php:824 #, fuzzy msgid "Site content license" msgstr "Tìm theo ná»™i dung của tin nhắn" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "" -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "" -#: lib/action.php:1161 +#: lib/action.php:1164 #, fuzzy msgid "After" msgstr "Sau" -#: lib/action.php:1169 +#: lib/action.php:1172 #, fuzzy msgid "Before" msgstr "TrÆ°á»›c" @@ -5095,6 +5093,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 #, fuzzy @@ -5194,7 +5196,7 @@ msgstr "Xác nhận SMS" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5273,11 +5275,11 @@ msgstr "Xóa" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 #, fuzzy msgid "Provider" msgstr "Hồ sÆ¡ " @@ -5300,39 +5302,54 @@ msgstr "Äã lÆ°u mật khẩu." msgid "Password changing is not allowed" msgstr "Äã lÆ°u mật khẩu." -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 #, fuzzy msgid "Command results" msgstr "Không có kết quả nào" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "" -#: lib/channel.php:221 +#: lib/channel.php:240 #, fuzzy msgid "Command failed" msgstr " và bạn bè" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "" +#: lib/command.php:83 lib/command.php:105 +#, fuzzy +msgid "Notice with that id does not exist" +msgstr "Không tìm thấy trạng thái nào tÆ°Æ¡ng ứng vá»›i ID đó." -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +#, fuzzy +msgid "User has no last notice" +msgstr "NgÆ°á»i dùng không có thông tin." + +#: lib/command.php:125 #, fuzzy, php-format msgid "Could not find a user with nickname %s" msgstr "Không thể cập nhật thông tin user vá»›i địa chỉ email đã được xác nhận." -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "Không thể cập nhật thông tin user vá»›i địa chỉ email đã được xác nhận." + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "" + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, fuzzy, php-format msgid "Nudge sent to %s" msgstr "Tin đã gá»­i" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5340,207 +5357,203 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -#, fuzzy -msgid "Notice with that id does not exist" -msgstr "Không tìm thấy trạng thái nào tÆ°Æ¡ng ứng vá»›i ID đó." - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -#, fuzzy -msgid "User has no last notice" -msgstr "NgÆ°á»i dùng không có thông tin." - -#: lib/command.php:190 +#: lib/command.php:296 #, fuzzy msgid "Notice marked as fave." msgstr "Tin nhắn này đã có trong danh sách tin nhắn Æ°a thích của bạn rồi!" -#: lib/command.php:217 +#: lib/command.php:317 #, fuzzy msgid "You are already a member of that group" msgstr "Bạn đã theo những ngÆ°á»i này:" -#: lib/command.php:231 +#: lib/command.php:331 #, fuzzy, php-format msgid "Could not join user %s to group %s" msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi." -#: lib/command.php:236 +#: lib/command.php:336 #, fuzzy, php-format msgid "%s joined group %s" msgstr "%s và nhóm" -#: lib/command.php:275 +#: lib/command.php:373 #, fuzzy, php-format msgid "Could not remove user %s to group %s" msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi." -#: lib/command.php:280 +#: lib/command.php:378 #, fuzzy, php-format msgid "%s left group %s" msgstr "%s và nhóm" -#: lib/command.php:309 +#: lib/command.php:401 #, fuzzy, php-format msgid "Fullname: %s" msgstr "Tên đầy đủ" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, fuzzy, php-format msgid "Location: %s" msgstr "Thành phố: %s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, fuzzy, php-format msgid "Homepage: %s" msgstr "Trang chủ hoặc Blog: %s" -#: lib/command.php:318 +#: lib/command.php:410 #, fuzzy, php-format msgid "About: %s" msgstr "Giá»›i thiệu" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:367 +#: lib/command.php:468 #, fuzzy, php-format msgid "Direct message to %s sent" msgstr "Tin nhắn riêng" -#: lib/command.php:369 +#: lib/command.php:470 #, fuzzy msgid "Error sending direct message." msgstr "ThÆ° bạn đã gá»­i" -#: lib/command.php:413 +#: lib/command.php:490 #, fuzzy msgid "Cannot repeat your own notice" msgstr "Bạn không thể đăng ký nếu không đồng ý các Ä‘iá»u khoản." -#: lib/command.php:418 +#: lib/command.php:495 #, fuzzy msgid "Already repeated that notice" msgstr "Xóa tin nhắn" -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "Tin đã gá»­i" -#: lib/command.php:428 +#: lib/command.php:505 #, fuzzy msgid "Error repeating notice." msgstr "Có lá»—i xảy ra khi lÆ°u tin nhắn." -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:491 +#: lib/command.php:545 #, fuzzy, php-format msgid "Reply to %s sent" msgstr "Trả lá»i tin nhắn này" -#: lib/command.php:493 +#: lib/command.php:547 #, fuzzy msgid "Error saving notice." msgstr "Có lá»—i xảy ra khi lÆ°u tin nhắn." -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "" -#: lib/command.php:554 lib/command.php:589 +#: lib/command.php:602 #, fuzzy -msgid "No such user" -msgstr "Không có user nào." +msgid "Can't subscribe to OMB profiles by command." +msgstr "Bạn chÆ°a cập nhật thông tin riêng" -#: lib/command.php:561 +#: lib/command.php:608 #, fuzzy, php-format msgid "Subscribed to %s" msgstr "Theo nhóm này" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "" -#: lib/command.php:595 +#: lib/command.php:638 #, fuzzy, php-format msgid "Unsubscribed from %s" msgstr "Hết theo" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "" -#: lib/command.php:616 +#: lib/command.php:659 #, fuzzy msgid "Notification off." msgstr "Không có mã số xác nhận." -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "" -#: lib/command.php:639 +#: lib/command.php:682 #, fuzzy msgid "Notification on." msgstr "Không có mã số xác nhận." -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "" -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "Hết theo" -#: lib/command.php:709 +#: lib/command.php:752 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Bạn chÆ°a cập nhật thông tin riêng" -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Bạn đã theo những ngÆ°á»i này:" -#: lib/command.php:731 +#: lib/command.php:774 #, fuzzy msgid "No one is subscribed to you." msgstr "Không thể tạo favorite." -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Không thể tạo favorite." -#: lib/command.php:753 +#: lib/command.php:796 #, fuzzy msgid "You are not a member of any groups." msgstr "Bạn chÆ°a cập nhật thông tin riêng" -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Bạn chÆ°a cập nhật thông tin riêng" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5582,20 +5595,20 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 #, fuzzy msgid "No configuration file found. " msgstr "Không có mã số xác nhận." -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "" @@ -5785,53 +5798,53 @@ msgstr "" msgid "This page is not available in a media type you accept" msgstr "Trang này không phải là phÆ°Æ¡ng tiện truyá»n thông mà bạn chấp nhận." -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "Không há»— trợ kiểu file ảnh này." + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "" "Bạn có thể cập nhật hồ sÆ¡ cá nhân tại đây để má»i ngÆ°á»i có thể biết thông tin " "vá» bạn." -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "Upload từng phần." -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "Hệ thống xảy ra lá»—i trong khi tải file." -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "File há»ng hoặc không phải là file ảnh." -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "Không há»— trợ kiểu file ảnh này." - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 #, fuzzy msgid "Lost our file." msgstr "Không có tin nhắn nào." -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 #, fuzzy msgid "Unknown file type" msgstr "Không há»— trợ kiểu file ảnh này." -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -6086,7 +6099,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 #, fuzzy msgid "from" msgstr " từ " @@ -6246,26 +6259,26 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 #, fuzzy msgid "in context" msgstr "Không có ná»™i dung!" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 #, fuzzy msgid "Repeated by" msgstr "Tạo" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 #, fuzzy msgid "Reply to this notice" msgstr "Trả lá»i tin nhắn này" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "Trả lá»i" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "Tin đã gá»­i" @@ -6421,7 +6434,7 @@ msgstr "Trả lá»i tin nhắn này" msgid "Revoke the \"%s\" role from this user" msgstr "Ban user" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6560,95 +6573,99 @@ msgstr "Ngừng đăng ký từ ngÆ°á»i dùng này" msgid "Unsubscribe" msgstr "Hết theo" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 #, fuzzy msgid "Edit Avatar" msgstr "Hình đại diện" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 #, fuzzy msgid "User actions" msgstr "Không tìm thấy action" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 #, fuzzy msgid "Edit profile settings" msgstr "Các thiết lập cho Hồ sÆ¡ cá nhân" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 #, fuzzy msgid "Send a direct message to this user" msgstr "Bạn đã theo những ngÆ°á»i này:" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 #, fuzzy msgid "Message" msgstr "Tin má»›i nhất" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "Hồ sÆ¡" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "vài giây trÆ°á»›c" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "1 phút trÆ°á»›c" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "%d phút trÆ°á»›c" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "1 giá» trÆ°á»›c" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "%d giá» trÆ°á»›c" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "1 ngày trÆ°á»›c" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "%d ngày trÆ°á»›c" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "1 tháng trÆ°á»›c" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "%d tháng trÆ°á»›c" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "1 năm trÆ°á»›c" @@ -6662,7 +6679,7 @@ msgstr "Trang chủ không phải là URL" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po index cc17616169..a5cef8add8 100644 --- a/locale/zh_CN/LC_MESSAGES/statusnet.po +++ b/locale/zh_CN/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:51:13+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:49+0000\n" "Language-Team: Simplified Chinese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: zh-hans\n" "X-Message-Group: out-statusnet\n" @@ -102,7 +102,7 @@ msgstr "没有该页é¢" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -111,10 +111,8 @@ msgstr "没有该页é¢" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "没有这个用户。" @@ -206,14 +204,14 @@ msgstr "æ¥è‡ª%2$s 上 %1$s 和好å‹çš„æ›´æ–°ï¼" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "API 方法未实现ï¼" @@ -227,8 +225,8 @@ msgstr "API 方法未实现ï¼" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "此方法接å—POST请求。" @@ -259,7 +257,7 @@ msgid "Could not save profile." msgstr "无法ä¿å­˜ä¸ªäººä¿¡æ¯ã€‚" #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -347,7 +345,7 @@ msgstr "没有找到此IDçš„ä¿¡æ¯ã€‚" msgid "This status is already a favorite." msgstr "已收è—此通告ï¼" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "无法创建收è—。" @@ -471,7 +469,7 @@ msgstr "API 方法未实现ï¼" msgid "You are already a member of that group." msgstr "您已ç»æ˜¯è¯¥ç»„æˆå‘˜" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -523,7 +521,7 @@ msgstr "大å°ä¸æ­£ç¡®ã€‚" #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -590,9 +588,9 @@ msgstr "å¸å·" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "昵称" @@ -666,12 +664,12 @@ msgstr "" msgid "Unsupported format." msgstr "ä¸æ”¯æŒè¿™ç§å›¾åƒæ ¼å¼ã€‚" -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, fuzzy, php-format msgid "%1$s / Favorites from %2$s" msgstr "%s çš„æ”¶è— / %s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "%s 收è—了 %s çš„ %s 通告。" @@ -681,7 +679,7 @@ msgstr "%s 收è—了 %s çš„ %s 通告。" msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s / å›žå¤ %2$s 的消æ¯" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "å›žå¤ %2$s / %3$s çš„ %1$s 更新。" @@ -691,7 +689,7 @@ msgstr "å›žå¤ %2$s / %3$s çš„ %1$s 更新。" msgid "%s public timeline" msgstr "%s 公众时间表" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "æ¥è‡ªæ‰€æœ‰äººçš„ %s 消æ¯ï¼" @@ -706,12 +704,12 @@ msgstr "%s 的回å¤" msgid "Repeats of %s" msgstr "%s 的回å¤" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "带 %s 标签的通告" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, fuzzy, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "%2$s 上 %1$s çš„æ›´æ–°ï¼" @@ -741,7 +739,7 @@ msgstr "没有大å°ã€‚" msgid "Invalid size." msgstr "大å°ä¸æ­£ç¡®ã€‚" -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "头åƒ" @@ -773,7 +771,7 @@ msgid "Preview" msgstr "预览" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 #, fuzzy msgid "Delete" msgstr "删除" @@ -859,8 +857,8 @@ msgstr "ä¿å­˜é˜»æ­¢ä¿¡æ¯å¤±è´¥ã€‚" #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 msgid "No such group." msgstr "没有这个组。" @@ -970,7 +968,7 @@ msgstr "您未告知此个人信æ¯" #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 #, fuzzy msgid "There was a problem with your session token." msgstr "会è¯æ ‡è¯†æœ‰é—®é¢˜ï¼Œè¯·é‡è¯•ã€‚" @@ -1032,7 +1030,7 @@ msgstr "确定è¦åˆ é™¤è¿™æ¡æ¶ˆæ¯å—?" msgid "Do not delete this notice" msgstr "无法删除通告。" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 #, fuzzy msgid "Delete this notice" msgstr "删除通告" @@ -1308,7 +1306,7 @@ msgstr "æ述过长(ä¸èƒ½è¶…过140字符)。" msgid "Could not update group." msgstr "无法更新组" -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 #, fuzzy msgid "Could not create aliases." msgstr "无法创建收è—。" @@ -2026,7 +2024,7 @@ msgstr "邀请新用户" msgid "You are already subscribed to these users:" msgstr "您已订阅这些用户:" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2150,7 +2148,7 @@ msgstr "%s 加入 %s 组" msgid "You must be logged in to leave a group." msgstr "您必须登录æ‰èƒ½é‚€è¯·å…¶ä»–人使用 %s" -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 #, fuzzy msgid "You are not a member of that group." msgstr "您未告知此个人信æ¯" @@ -2267,12 +2265,12 @@ msgstr "使用此表格创建组。" msgid "New message" msgstr "新消æ¯" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "无法å‘此用户å‘é€æ¶ˆæ¯ã€‚" -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "没有内容ï¼" @@ -2280,7 +2278,7 @@ msgstr "没有内容ï¼" msgid "No recipient specified." msgstr "没有收件人。" -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "ä¸è¦å‘自己å‘é€æ¶ˆæ¯ï¼›è·Ÿè‡ªå·±æ‚„悄说就得了。" @@ -2295,7 +2293,7 @@ msgstr "新消æ¯" msgid "Direct message to %s sent." msgstr "å·²å‘ %s å‘é€æ¶ˆæ¯" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "Ajax错误" @@ -2411,7 +2409,7 @@ msgstr "" msgid "Notice has no profile" msgstr "通告没有关è”个人信æ¯" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s çš„ %2$s 状æ€" @@ -2425,8 +2423,8 @@ msgstr "连接" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "ä¸æ”¯æŒçš„æ•°æ®æ ¼å¼ã€‚" @@ -2567,7 +2565,7 @@ msgstr "旧密ç ä¸æ­£ç¡®" msgid "Error saving user; invalid." msgstr "ä¿å­˜ç”¨æˆ·æ—¶å‡ºé”™ï¼›ä¸æ­£ç¡®ã€‚" -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "无法ä¿å­˜æ–°å¯†ç ã€‚" @@ -2791,8 +2789,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1 到 64 个å°å†™å­—æ¯æˆ–数字,ä¸åŒ…å«æ ‡ç‚¹åŠç©ºç™½" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "å…¨å" @@ -2820,9 +2818,9 @@ msgid "Bio" msgstr "自述" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "ä½ç½®" @@ -2836,7 +2834,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "标签" @@ -3069,7 +3067,7 @@ msgstr "é‡ç½®å¯†ç " msgid "Recover password" msgstr "æ¢å¤å¯†ç " -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "请求æ¢å¤å¯†ç " @@ -3089,41 +3087,41 @@ msgstr "é‡ç½®" msgid "Enter a nickname or email address." msgstr "输入昵称或电å­é‚®ä»¶ã€‚" -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "没有拥有这个用户å或电å­é‚®ä»¶çš„用户。" -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "用户没有注册电å­é‚®ä»¶ã€‚" -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "ä¿å­˜åœ°å€ç¡®è®¤æ—¶å‡ºé”™ã€‚" -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." msgstr "æ¢å¤å¯†ç çš„指示已被å‘é€åˆ°æ‚¨çš„注册邮箱。" -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "未预料的密ç é‡ç½®ã€‚" -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "密ç å¿…须是 6 个字符或更多。" -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "密ç å’Œç¡®è®¤ä¸åŒ¹é…。" -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "ä¿å­˜ç”¨æˆ·è®¾ç½®æ—¶å‡ºé”™ã€‚" -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "新密ç å·²ä¿å­˜ï¼Œæ‚¨çŽ°åœ¨å·²ç™»å½•ã€‚" @@ -3280,7 +3278,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "您在其他兼容的微åšå®¢æœåŠ¡çš„个人信æ¯URL" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "订阅" @@ -3323,7 +3321,7 @@ msgstr "您必须åŒæ„此授æƒæ–¹å¯æ³¨å†Œã€‚" msgid "You already repeated that notice." msgstr "您已æˆåŠŸé˜»æ­¢è¯¥ç”¨æˆ·ï¼š" -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 #, fuzzy msgid "Repeated" msgstr "创建" @@ -3473,7 +3471,7 @@ msgstr "分页" msgid "Description" msgstr "æè¿°" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "统计" @@ -3585,71 +3583,71 @@ msgstr "%s 组" msgid "%1$s group, page %2$d" msgstr "%s 组æˆå‘˜, 第 %d 页" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 #, fuzzy msgid "Group profile" msgstr "组资料" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL 互è”网地å€" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 #, fuzzy msgid "Note" msgstr "通告" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "组动作" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "%s 的通告èšåˆ" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "%s 的通告èšåˆ" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "%s 的通告èšåˆ" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, php-format msgid "FOAF for %s group" msgstr "%s çš„å‘件箱" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 #, fuzzy msgid "Members" msgstr "注册于" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(没有)" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "所有æˆå‘˜" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 #, fuzzy msgid "Created" msgstr "创建" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3659,7 +3657,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3670,7 +3668,7 @@ msgstr "" "**%s** 是一个 %%%%site.name%%%% 的用户组,一个微åšå®¢æœåŠ¡ [micro-blogging]" "(http://en.wikipedia.org/wiki/Micro-blogging)" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 #, fuzzy msgid "Admins" msgstr "admin管ç†å‘˜" @@ -4221,13 +4219,13 @@ msgstr "没有这份文档。" msgid "Tag %s" msgstr "标签" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 #, fuzzy msgid "User profile" msgstr "用户没有个人信æ¯ã€‚" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "相片" @@ -4566,19 +4564,19 @@ msgstr "个人" msgid "Author(s)" msgstr "" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4621,47 +4619,47 @@ msgstr "无法添加信æ¯ã€‚" msgid "Could not update message with new URI." msgstr "无法添加新URIçš„ä¿¡æ¯ã€‚" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "添加标签时数æ®åº“出错:%s" -#: classes/Notice.php:241 +#: classes/Notice.php:244 #, fuzzy msgid "Problem saving notice. Too long." msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚" -#: classes/Notice.php:245 +#: classes/Notice.php:248 #, fuzzy msgid "Problem saving notice. Unknown user." msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚" -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "你在短时间里å‘布了过多的消æ¯ï¼Œè¯·æ·±å‘¼å¸ï¼Œè¿‡å‡ åˆ†é’Ÿå†å‘消æ¯ã€‚" -#: classes/Notice.php:256 +#: classes/Notice.php:259 #, fuzzy msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "你在短时间里å‘布了过多的消æ¯ï¼Œè¯·æ·±å‘¼å¸ï¼Œè¿‡å‡ åˆ†é’Ÿå†å‘消æ¯ã€‚" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "在这个网站你被ç¦æ­¢å‘布消æ¯ã€‚" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚" -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚" -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%1$s (%2$s)" @@ -4695,30 +4693,30 @@ msgstr "无法删除订阅。" msgid "Couldn't delete subscription OMB token." msgstr "无法删除订阅。" -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "无法删除订阅。" -#: classes/User.php:373 +#: classes/User.php:378 #, fuzzy, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "å‘é€ç»™ %1$s çš„ %2$s 消æ¯" -#: classes/User_group.php:477 +#: classes/User_group.php:480 msgid "Could not create group." msgstr "无法创建组。" -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "无法删除订阅。" -#: classes/User_group.php:507 +#: classes/User_group.php:510 #, fuzzy msgid "Could not set group membership." msgstr "无法删除订阅。" -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "无法删除订阅。" @@ -4945,7 +4943,7 @@ msgstr "呼å«" msgid "StatusNet software license" msgstr "StatusNet软件注册è¯" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4954,12 +4952,12 @@ msgstr "" "**%%site.name%%** 是一个微åšå®¢æœåŠ¡ï¼Œæ供者为 [%%site.broughtby%%](%%site." "broughtbyurl%%)。" -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%** 是一个微åšå®¢æœåŠ¡ã€‚" -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4970,43 +4968,43 @@ msgstr "" "General Public License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)" "授æƒã€‚" -#: lib/action.php:821 +#: lib/action.php:824 #, fuzzy msgid "Site content license" msgstr "StatusNet软件注册è¯" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "全部" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "注册è¯" -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "分页" -#: lib/action.php:1161 +#: lib/action.php:1164 #, fuzzy msgid "After" msgstr "« 之åŽ" -#: lib/action.php:1169 +#: lib/action.php:1172 #, fuzzy msgid "Before" msgstr "ä¹‹å‰ Â»" @@ -5023,6 +5021,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 #, fuzzy @@ -5124,7 +5126,7 @@ msgstr "SMS短信确认" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5203,11 +5205,11 @@ msgstr "移除" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 #, fuzzy msgid "Provider" msgstr "个人信æ¯" @@ -5230,37 +5232,51 @@ msgstr "密ç å·²ä¿å­˜ã€‚" msgid "Password changing is not allowed" msgstr "密ç å·²ä¿å­˜ã€‚" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "执行结果" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "执行完毕" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "执行失败" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." -msgstr "对ä¸èµ·ï¼Œè¿™ä¸ªå‘½ä»¤è¿˜æ²¡æœ‰å®žçŽ°ã€‚" +#: lib/command.php:83 lib/command.php:105 +#, fuzzy +msgid "Notice with that id does not exist" +msgstr "没有找到此IDçš„ä¿¡æ¯ã€‚" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +msgid "User has no last notice" +msgstr "用户没有通告。" + +#: lib/command.php:125 #, fuzzy, php-format msgid "Could not find a user with nickname %s" msgstr "无法更新已确认的电å­é‚®ä»¶ã€‚" -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "无法更新已确认的电å­é‚®ä»¶ã€‚" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "对ä¸èµ·ï¼Œè¿™ä¸ªå‘½ä»¤è¿˜æ²¡æœ‰å®žçŽ°ã€‚" + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, fuzzy, php-format msgid "Nudge sent to %s" msgstr "振铃呼å«å‘出。" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5268,200 +5284,198 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -#, fuzzy -msgid "Notice with that id does not exist" -msgstr "没有找到此IDçš„ä¿¡æ¯ã€‚" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -msgid "User has no last notice" -msgstr "用户没有通告。" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "通告被标记为收è—。" -#: lib/command.php:217 +#: lib/command.php:317 msgid "You are already a member of that group" msgstr "您已ç»æ˜¯è¯¥ç»„æˆå‘˜" -#: lib/command.php:231 +#: lib/command.php:331 #, fuzzy, php-format msgid "Could not join user %s to group %s" msgstr "无法把 %s 用户添加到 %s 组" -#: lib/command.php:236 +#: lib/command.php:336 #, fuzzy, php-format msgid "%s joined group %s" msgstr "%s 加入 %s 组" -#: lib/command.php:275 +#: lib/command.php:373 #, fuzzy, php-format msgid "Could not remove user %s to group %s" msgstr "无法订阅用户:未找到。" -#: lib/command.php:280 +#: lib/command.php:378 #, php-format msgid "%s left group %s" msgstr "%s 离开群 %s" -#: lib/command.php:309 +#: lib/command.php:401 #, php-format msgid "Fullname: %s" msgstr "å…¨å:%s" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "ä½ç½®ï¼š%s" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "主页:%s" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "关于:%s" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, fuzzy, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "您的消æ¯åŒ…å« %d 个字符,超出长度é™åˆ¶ - ä¸èƒ½è¶…过 140 个字符。" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "å·²å‘ %s å‘é€æ¶ˆæ¯" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "å‘é€æ¶ˆæ¯å‡ºé”™ã€‚" -#: lib/command.php:413 +#: lib/command.php:490 #, fuzzy msgid "Cannot repeat your own notice" msgstr "无法开å¯é€šå‘Šã€‚" -#: lib/command.php:418 +#: lib/command.php:495 #, fuzzy msgid "Already repeated that notice" msgstr "删除通告" -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "消æ¯å·²å‘布。" -#: lib/command.php:428 +#: lib/command.php:505 #, fuzzy msgid "Error repeating notice." msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚" -#: lib/command.php:482 +#: lib/command.php:536 #, fuzzy, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "您的消æ¯åŒ…å« %d 个字符,超出长度é™åˆ¶ - ä¸èƒ½è¶…过 140 个字符。" -#: lib/command.php:491 +#: lib/command.php:545 #, fuzzy, php-format msgid "Reply to %s sent" msgstr "无法删除通告。" -#: lib/command.php:493 +#: lib/command.php:547 #, fuzzy msgid "Error saving notice." msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚" -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "指定è¦è®¢é˜…的用户å" -#: lib/command.php:554 lib/command.php:589 -msgid "No such user" -msgstr "没有这个用户。" +#: lib/command.php:602 +#, fuzzy +msgid "Can't subscribe to OMB profiles by command." +msgstr "您未告知此个人信æ¯" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "订阅 %s" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "指定è¦å–消订阅的用户å" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "å–消订阅 %s" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "命令尚未实现。" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "通告关闭。" -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "无法关闭通告。" -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "通告开å¯ã€‚" -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "无法开å¯é€šå‘Šã€‚" -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "å–消订阅 %s" -#: lib/command.php:709 +#: lib/command.php:752 #, fuzzy msgid "You are not subscribed to anyone." msgstr "您未告知此个人信æ¯" -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "您已订阅这些用户:" -#: lib/command.php:731 +#: lib/command.php:774 #, fuzzy msgid "No one is subscribed to you." msgstr "无法订阅他人更新。" -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "无法订阅他人更新。" -#: lib/command.php:753 +#: lib/command.php:796 #, fuzzy msgid "You are not a member of any groups." msgstr "您未告知此个人信æ¯" -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "您未告知此个人信æ¯" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5503,20 +5517,20 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 #, fuzzy msgid "No configuration file found. " msgstr "没有验è¯ç " -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 #, fuzzy msgid "Go to the installer." msgstr "登入本站" @@ -5704,50 +5718,50 @@ msgstr "这个组所å‘布的消æ¯çš„标签" msgid "This page is not available in a media type you accept" msgstr "这个页é¢ä¸æ供您想è¦çš„媒体类型" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "ä¸æ”¯æŒè¿™ç§å›¾åƒæ ¼å¼ã€‚" + +#: lib/imagefile.php:90 #, fuzzy, php-format msgid "That file is too big. The maximum file size is %s." msgstr "ä½ å¯ä»¥ç»™ä½ çš„组上载一个logo图。" -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "部分上传。" -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "上传文件时出错。" -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "ä¸æ˜¯å›¾ç‰‡æ–‡ä»¶æˆ–文件已æŸå。" -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "ä¸æ”¯æŒè¿™ç§å›¾åƒæ ¼å¼ã€‚" - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 #, fuzzy msgid "Lost our file." msgstr "没有这份通告。" -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "未知文件类型" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5960,7 +5974,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 #, fuzzy msgid "from" msgstr " 从 " @@ -6119,27 +6133,27 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 #, fuzzy msgid "in context" msgstr "没有内容ï¼" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 #, fuzzy msgid "Repeated by" msgstr "创建" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 #, fuzzy msgid "Reply to this notice" msgstr "无法删除通告。" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 #, fuzzy msgid "Reply" msgstr "回å¤" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "消æ¯å·²å‘布。" @@ -6292,7 +6306,7 @@ msgstr "无法删除通告。" msgid "Revoke the \"%s\" role from this user" msgstr "该组æˆå‘˜åˆ—表。" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6430,96 +6444,100 @@ msgstr "å–消订阅 %s" msgid "Unsubscribe" msgstr "退订" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 #, fuzzy msgid "Edit Avatar" msgstr "头åƒ" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 #, fuzzy msgid "User actions" msgstr "未知动作" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 #, fuzzy msgid "Edit profile settings" msgstr "个人设置" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 #, fuzzy msgid "Send a direct message to this user" msgstr "无法å‘此用户å‘é€æ¶ˆæ¯ã€‚" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 #, fuzzy msgid "Message" msgstr "新消æ¯" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "用户没有个人信æ¯ã€‚" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 #, fuzzy msgctxt "role" msgid "Administrator" msgstr "admin管ç†å‘˜" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "几秒å‰" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "一分钟å‰" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "%d 分钟å‰" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "一å°æ—¶å‰" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "%d å°æ—¶å‰" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "一天å‰" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "%d 天å‰" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "一个月å‰" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "%d 个月å‰" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "一年å‰" @@ -6533,7 +6551,7 @@ msgstr "主页的URLä¸æ­£ç¡®ã€‚" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, fuzzy, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "您的消æ¯åŒ…å« %d 个字符,超出长度é™åˆ¶ - ä¸èƒ½è¶…过 140 个字符。" diff --git a/locale/zh_TW/LC_MESSAGES/statusnet.po b/locale/zh_TW/LC_MESSAGES/statusnet.po index 3ea887beb8..a7b777d9d6 100644 --- a/locale/zh_TW/LC_MESSAGES/statusnet.po +++ b/locale/zh_TW/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-06 23:49+0000\n" -"PO-Revision-Date: 2010-03-06 23:51:15+0000\n" +"POT-Creation-Date: 2010-03-17 21:39+0000\n" +"PO-Revision-Date: 2010-03-17 21:41:53+0000\n" "Language-Team: Traditional Chinese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n" +"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: zh-hant\n" "X-Message-Group: out-statusnet\n" @@ -97,7 +97,7 @@ msgstr "無此通知" #: actions/apigroupismember.php:90 actions/apigroupjoin.php:99 #: actions/apigroupleave.php:99 actions/apigrouplist.php:90 #: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87 -#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78 +#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78 #: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79 #: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75 #: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58 @@ -106,10 +106,8 @@ msgstr "無此通知" #: actions/remotesubscribe.php:154 actions/replies.php:73 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105 #: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40 -#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302 -#: lib/command.php:355 lib/command.php:401 lib/command.php:462 -#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82 -#: lib/profileaction.php:77 +#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59 +#: lib/mailbox.php:82 lib/profileaction.php:77 msgid "No such user." msgstr "無此使用者" @@ -201,14 +199,14 @@ msgstr "" #: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106 #: actions/apigroupshow.php:115 actions/apihelptest.php:88 #: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112 -#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135 +#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141 #: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111 -#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187 -#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184 -#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148 +#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174 +#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173 +#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151 #: actions/apitimelineretweetedtome.php:121 -#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166 -#: actions/apitimelineuser.php:165 actions/apiusershow.php:101 +#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160 +#: actions/apitimelineuser.php:162 actions/apiusershow.php:101 #, fuzzy msgid "API method not found." msgstr "確èªç¢¼éºå¤±" @@ -222,8 +220,8 @@ msgstr "確èªç¢¼éºå¤±" #: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91 #: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91 #: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91 -#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65 -#: actions/apistatusesupdate.php:118 +#: actions/apigroupleave.php:91 actions/apimediaupload.php:67 +#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118 msgid "This method requires a POST." msgstr "" @@ -254,7 +252,7 @@ msgid "Could not save profile." msgstr "無法儲存個人資料" #: actions/apiaccountupdateprofilebackgroundimage.php:108 -#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80 #: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257 #: actions/designadminpanel.php:122 actions/editapplication.php:118 #: actions/newapplication.php:101 actions/newnotice.php:94 @@ -340,7 +338,7 @@ msgstr "" msgid "This status is already a favorite." msgstr "" -#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279 msgid "Could not create favorite." msgstr "" @@ -462,7 +460,7 @@ msgstr "ç›®å‰ç„¡è«‹æ±‚" msgid "You are already a member of that group." msgstr "" -#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221 +#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321 msgid "You have been blocked from that group by the admin." msgstr "" @@ -514,7 +512,7 @@ msgstr "尺寸錯誤" #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135 #: actions/othersettings.php:145 actions/passwordsettings.php:138 -#: actions/profilesettings.php:194 actions/recoverpassword.php:337 +#: actions/profilesettings.php:194 actions/recoverpassword.php:350 #: actions/register.php:165 actions/remotesubscribe.php:77 #: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38 #: actions/subscribe.php:86 actions/tagother.php:166 @@ -582,9 +580,9 @@ msgstr "關於" #: actions/apioauthauthorize.php:313 actions/login.php:230 #: actions/profilesettings.php:106 actions/register.php:424 -#: actions/showgroup.php:244 actions/tagother.php:94 +#: actions/showgroup.php:245 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 -#: lib/userprofile.php:131 +#: lib/userprofile.php:132 msgid "Nickname" msgstr "暱稱" @@ -656,12 +654,12 @@ msgstr "" msgid "Unsupported format." msgstr "" -#: actions/apitimelinefavorites.php:108 +#: actions/apitimelinefavorites.php:109 #, fuzzy, php-format msgid "%1$s / Favorites from %2$s" msgstr "%1$s的狀態是%2$s" -#: actions/apitimelinefavorites.php:117 +#: actions/apitimelinefavorites.php:118 #, fuzzy, php-format msgid "%1$s updates favorited by %2$s / %2$s." msgstr "&s的微型部è½æ ¼" @@ -671,7 +669,7 @@ msgstr "&s的微型部è½æ ¼" msgid "%1$s / Updates mentioning %2$s" msgstr "%1$s的狀態是%2$s" -#: actions/apitimelinementions.php:127 +#: actions/apitimelinementions.php:130 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." msgstr "" @@ -681,7 +679,7 @@ msgstr "" msgid "%s public timeline" msgstr "" -#: actions/apitimelinepublic.php:111 actions/publicrss.php:105 +#: actions/apitimelinepublic.php:112 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" msgstr "" @@ -696,12 +694,12 @@ msgstr "" msgid "Repeats of %s" msgstr "" -#: actions/apitimelinetag.php:102 actions/tag.php:67 +#: actions/apitimelinetag.php:104 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" msgstr "" -#: actions/apitimelinetag.php:104 actions/tagrss.php:65 +#: actions/apitimelinetag.php:106 actions/tagrss.php:65 #, fuzzy, php-format msgid "Updates tagged with %1$s on %2$s!" msgstr "&s的微型部è½æ ¼" @@ -731,7 +729,7 @@ msgstr "無尺寸" msgid "Invalid size." msgstr "尺寸錯誤" -#: actions/avatarsettings.php:67 actions/showgroup.php:229 +#: actions/avatarsettings.php:67 actions/showgroup.php:230 #: lib/accountsettingsaction.php:112 msgid "Avatar" msgstr "個人圖åƒ" @@ -764,7 +762,7 @@ msgid "Preview" msgstr "" #: actions/avatarsettings.php:149 actions/showapplication.php:252 -#: lib/deleteuserform.php:66 lib/noticelist.php:655 +#: lib/deleteuserform.php:66 lib/noticelist.php:658 msgid "Delete" msgstr "" @@ -849,8 +847,8 @@ msgstr "" #: actions/groupunblock.php:86 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212 -#: lib/command.php:260 +#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162 +#: lib/command.php:358 #, fuzzy msgid "No such group." msgstr "無此通知" @@ -959,7 +957,7 @@ msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s" #: actions/deleteapplication.php:102 actions/editapplication.php:127 #: actions/newapplication.php:110 actions/showapplication.php:118 -#: lib/action.php:1217 +#: lib/action.php:1220 msgid "There was a problem with your session token." msgstr "" @@ -1019,7 +1017,7 @@ msgstr "" msgid "Do not delete this notice" msgstr "無此通知" -#: actions/deletenotice.php:146 lib/noticelist.php:655 +#: actions/deletenotice.php:146 lib/noticelist.php:658 msgid "Delete this notice" msgstr "" @@ -1288,7 +1286,7 @@ msgstr "自我介紹éŽé•·(å…±140個字元)" msgid "Could not update group." msgstr "無法更新使用者" -#: actions/editgroup.php:264 classes/User_group.php:493 +#: actions/editgroup.php:264 classes/User_group.php:496 #, fuzzy msgid "Could not create aliases." msgstr "無法存å–個人圖åƒè³‡æ–™" @@ -1977,7 +1975,7 @@ msgstr "" msgid "You are already subscribed to these users:" msgstr "" -#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306 +#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398 #, php-format msgid "%1$s (%2$s)" msgstr "" @@ -2078,7 +2076,7 @@ msgstr "" msgid "You must be logged in to leave a group." msgstr "" -#: actions/leavegroup.php:100 lib/command.php:265 +#: actions/leavegroup.php:100 lib/command.php:363 msgid "You are not a member of that group." msgstr "" @@ -2189,12 +2187,12 @@ msgstr "" msgid "New message" msgstr "" -#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 +#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459 msgid "You can't send a message to this user." msgstr "" -#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 -#: lib/command.php:475 +#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443 +#: lib/command.php:529 msgid "No content!" msgstr "無內容" @@ -2202,7 +2200,7 @@ msgstr "無內容" msgid "No recipient specified." msgstr "" -#: actions/newmessage.php:164 lib/command.php:361 +#: actions/newmessage.php:164 lib/command.php:462 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -2216,7 +2214,7 @@ msgstr "" msgid "Direct message to %s sent." msgstr "" -#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170 +#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189 msgid "Ajax Error" msgstr "" @@ -2328,7 +2326,7 @@ msgstr "" msgid "Notice has no profile" msgstr "" -#: actions/oembed.php:86 actions/shownotice.php:180 +#: actions/oembed.php:86 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s的狀態是%2$s" @@ -2342,8 +2340,8 @@ msgstr "連çµ" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042 -#: lib/apiaction.php:1070 lib/apiaction.php:1179 +#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069 +#: lib/apiaction.php:1097 lib/apiaction.php:1213 msgid "Not a supported data format." msgstr "" @@ -2481,7 +2479,7 @@ msgstr "舊密碼錯誤" msgid "Error saving user; invalid." msgstr "儲存使用者發生錯誤;使用者å稱無效" -#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +#: actions/passwordsettings.php:186 actions/recoverpassword.php:381 msgid "Can't save new password." msgstr "無法存å–新密碼" @@ -2697,8 +2695,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64個å°å¯«è‹±æ–‡å­—æ¯æˆ–數字,勿加標點符號或空格" #: actions/profilesettings.php:111 actions/register.php:448 -#: actions/showgroup.php:255 actions/tagother.php:104 -#: lib/groupeditform.php:157 lib/userprofile.php:149 +#: actions/showgroup.php:256 actions/tagother.php:104 +#: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "å…¨å" @@ -2726,9 +2724,9 @@ msgid "Bio" msgstr "自我介紹" #: actions/profilesettings.php:132 actions/register.php:471 -#: actions/showgroup.php:264 actions/tagother.php:112 +#: actions/showgroup.php:265 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:177 -#: lib/userprofile.php:164 +#: lib/userprofile.php:165 msgid "Location" msgstr "地點" @@ -2742,7 +2740,7 @@ msgstr "" #: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/tagother.php:209 lib/subscriptionlist.php:106 -#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +#: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" msgstr "" @@ -2969,7 +2967,7 @@ msgstr "" msgid "Recover password" msgstr "" -#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +#: actions/recoverpassword.php:210 actions/recoverpassword.php:335 msgid "Password recovery requested" msgstr "" @@ -2989,41 +2987,41 @@ msgstr "" msgid "Enter a nickname or email address." msgstr "請輸入暱稱或電å­ä¿¡ç®±" -#: actions/recoverpassword.php:272 +#: actions/recoverpassword.php:282 msgid "No user with that email address or username." msgstr "" -#: actions/recoverpassword.php:287 +#: actions/recoverpassword.php:299 msgid "No registered email address for that user." msgstr "查無此使用者所註冊的信箱" -#: actions/recoverpassword.php:301 +#: actions/recoverpassword.php:313 msgid "Error saving address confirmation." msgstr "儲存信箱確èªç™¼ç”ŸéŒ¯èª¤" -#: actions/recoverpassword.php:325 +#: actions/recoverpassword.php:338 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." msgstr "我們已寄出一å°ä¿¡åˆ°ä½ å¸³è™Ÿä¸­çš„信箱,告訴你如何å–回你的密碼。" -#: actions/recoverpassword.php:344 +#: actions/recoverpassword.php:357 msgid "Unexpected password reset." msgstr "" -#: actions/recoverpassword.php:352 +#: actions/recoverpassword.php:365 msgid "Password must be 6 chars or more." msgstr "" -#: actions/recoverpassword.php:356 +#: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." msgstr "" -#: actions/recoverpassword.php:375 actions/register.php:248 +#: actions/recoverpassword.php:388 actions/register.php:248 msgid "Error setting user." msgstr "使用者設定發生錯誤" -#: actions/recoverpassword.php:382 +#: actions/recoverpassword.php:395 msgid "New password successfully saved. You are now logged in." msgstr "新密碼已儲存æˆåŠŸã€‚你已登入。" @@ -3164,7 +3162,7 @@ msgid "URL of your profile on another compatible microblogging service" msgstr "" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 -#: lib/userprofile.php:394 +#: lib/userprofile.php:406 msgid "Subscribe" msgstr "" @@ -3203,7 +3201,7 @@ msgstr "" msgid "You already repeated that notice." msgstr "無此使用者" -#: actions/repeat.php:114 lib/noticelist.php:674 +#: actions/repeat.php:114 lib/noticelist.php:677 #, fuzzy msgid "Repeated" msgstr "新增" @@ -3349,7 +3347,7 @@ msgstr "地點" msgid "Description" msgstr "所有訂閱" -#: actions/showapplication.php:192 actions/showgroup.php:438 +#: actions/showapplication.php:192 actions/showgroup.php:439 #: lib/profileaction.php:176 msgid "Statistics" msgstr "" @@ -3460,70 +3458,70 @@ msgstr "" msgid "%1$s group, page %2$d" msgstr "所有訂閱" -#: actions/showgroup.php:226 +#: actions/showgroup.php:227 #, fuzzy msgid "Group profile" msgstr "無此通知" -#: actions/showgroup.php:271 actions/tagother.php:118 -#: actions/userauthorization.php:175 lib/userprofile.php:177 +#: actions/showgroup.php:272 actions/tagother.php:118 +#: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "" -#: actions/showgroup.php:282 actions/tagother.php:128 -#: actions/userauthorization.php:187 lib/userprofile.php:194 +#: actions/showgroup.php:283 actions/tagother.php:128 +#: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "" -#: actions/showgroup.php:292 lib/groupeditform.php:184 +#: actions/showgroup.php:293 lib/groupeditform.php:184 msgid "Aliases" msgstr "" -#: actions/showgroup.php:301 +#: actions/showgroup.php:302 msgid "Group actions" msgstr "" -#: actions/showgroup.php:337 +#: actions/showgroup.php:338 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" -#: actions/showgroup.php:343 +#: actions/showgroup.php:344 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" -#: actions/showgroup.php:349 +#: actions/showgroup.php:350 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" -#: actions/showgroup.php:354 +#: actions/showgroup.php:355 #, fuzzy, php-format msgid "FOAF for %s group" msgstr "無此通知" -#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91 +#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91 #, fuzzy msgid "Members" msgstr "何時加入會員的呢?" -#: actions/showgroup.php:395 lib/profileaction.php:117 +#: actions/showgroup.php:396 lib/profileaction.php:117 #: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95 #: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71 msgid "(None)" msgstr "" -#: actions/showgroup.php:401 +#: actions/showgroup.php:402 msgid "All members" msgstr "" -#: actions/showgroup.php:441 +#: actions/showgroup.php:442 #, fuzzy msgid "Created" msgstr "新增" -#: actions/showgroup.php:457 +#: actions/showgroup.php:458 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3533,7 +3531,7 @@ msgid "" "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -#: actions/showgroup.php:463 +#: actions/showgroup.php:464 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -3542,7 +3540,7 @@ msgid "" "their life and interests. " msgstr "" -#: actions/showgroup.php:491 +#: actions/showgroup.php:492 msgid "Admins" msgstr "" @@ -4078,13 +4076,13 @@ msgstr "無此文件" msgid "Tag %s" msgstr "" -#: actions/tagother.php:77 lib/userprofile.php:75 +#: actions/tagother.php:77 lib/userprofile.php:76 #, fuzzy msgid "User profile" msgstr "無此通知" #: actions/tagother.php:81 actions/userauthorization.php:132 -#: lib/userprofile.php:102 +#: lib/userprofile.php:103 msgid "Photo" msgstr "" @@ -4405,19 +4403,19 @@ msgstr "地點" msgid "Author(s)" msgstr "" -#: classes/File.php:144 +#: classes/File.php:169 #, php-format msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" -#: classes/File.php:154 +#: classes/File.php:179 #, php-format msgid "A file this large would exceed your user quota of %d bytes." msgstr "" -#: classes/File.php:161 +#: classes/File.php:186 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." msgstr "" @@ -4459,46 +4457,46 @@ msgstr "" msgid "Could not update message with new URI." msgstr "" -#: classes/Notice.php:172 +#: classes/Notice.php:175 #, php-format msgid "DB error inserting hashtag: %s" msgstr "" -#: classes/Notice.php:241 +#: classes/Notice.php:244 #, fuzzy msgid "Problem saving notice. Too long." msgstr "儲存使用者發生錯誤" -#: classes/Notice.php:245 +#: classes/Notice.php:248 #, fuzzy msgid "Problem saving notice. Unknown user." msgstr "儲存使用者發生錯誤" -#: classes/Notice.php:250 +#: classes/Notice.php:253 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" -#: classes/Notice.php:256 +#: classes/Notice.php:259 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" -#: classes/Notice.php:262 +#: classes/Notice.php:265 msgid "You are banned from posting notices on this site." msgstr "" -#: classes/Notice.php:328 classes/Notice.php:354 +#: classes/Notice.php:331 classes/Notice.php:357 msgid "Problem saving notice." msgstr "" -#: classes/Notice.php:927 +#: classes/Notice.php:941 #, fuzzy msgid "Problem saving group inbox." msgstr "儲存使用者發生錯誤" -#: classes/Notice.php:1459 +#: classes/Notice.php:1479 #, php-format msgid "RT @%1$s %2$s" msgstr "" @@ -4530,31 +4528,31 @@ msgstr "無法刪除帳號" msgid "Couldn't delete subscription OMB token." msgstr "無法刪除帳號" -#: classes/Subscription.php:201 lib/subs.php:69 +#: classes/Subscription.php:201 msgid "Couldn't delete subscription." msgstr "無法刪除帳號" -#: classes/User.php:373 +#: classes/User.php:378 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "" -#: classes/User_group.php:477 +#: classes/User_group.php:480 #, fuzzy msgid "Could not create group." msgstr "無法存å–個人圖åƒè³‡æ–™" -#: classes/User_group.php:486 +#: classes/User_group.php:489 #, fuzzy msgid "Could not set group URI." msgstr "註冊失敗" -#: classes/User_group.php:507 +#: classes/User_group.php:510 #, fuzzy msgid "Could not set group membership." msgstr "註冊失敗" -#: classes/User_group.php:521 +#: classes/User_group.php:524 #, fuzzy msgid "Could not save local group info." msgstr "註冊失敗" @@ -4774,7 +4772,7 @@ msgstr "" msgid "StatusNet software license" msgstr "" -#: lib/action.php:802 +#: lib/action.php:804 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -4783,12 +4781,12 @@ msgstr "" "**%%site.name%%**是由[%%site.broughtby%%](%%site.broughtbyurl%%)所æ供的微型" "部è½æ ¼æœå‹™" -#: lib/action.php:804 +#: lib/action.php:806 #, php-format msgid "**%%site.name%%** is a microblogging service. " msgstr "**%%site.name%%**是個微型部è½æ ¼" -#: lib/action.php:806 +#: lib/action.php:809 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -4796,42 +4794,42 @@ msgid "" "org/licensing/licenses/agpl-3.0.html)." msgstr "" -#: lib/action.php:821 +#: lib/action.php:824 #, fuzzy msgid "Site content license" msgstr "新訊æ¯" -#: lib/action.php:826 +#: lib/action.php:829 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" -#: lib/action.php:831 +#: lib/action.php:834 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" -#: lib/action.php:834 +#: lib/action.php:837 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" -#: lib/action.php:847 +#: lib/action.php:850 msgid "All " msgstr "" -#: lib/action.php:853 +#: lib/action.php:856 msgid "license." msgstr "" -#: lib/action.php:1152 +#: lib/action.php:1155 msgid "Pagination" msgstr "" -#: lib/action.php:1161 +#: lib/action.php:1164 msgid "After" msgstr "" -#: lib/action.php:1169 +#: lib/action.php:1172 #, fuzzy msgid "Before" msgstr "之å‰çš„內容»" @@ -4848,6 +4846,10 @@ msgstr "" msgid "Can't handle embedded Base64 content yet." msgstr "" +#: lib/activity.php:1089 +msgid "Expecting a root feed element but got a whole XML document." +msgstr "" + #. TRANS: Client error message #: lib/adminpanelaction.php:98 msgid "You cannot make changes to this site." @@ -4944,7 +4946,7 @@ msgstr "確èªä¿¡ç®±" msgid "API resource requires read-write access, but you only have read access." msgstr "" -#: lib/apiauth.php:272 +#: lib/apiauth.php:276 #, php-format msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s" msgstr "" @@ -5019,11 +5021,11 @@ msgstr "" msgid "Attachments" msgstr "" -#: lib/attachmentlist.php:265 +#: lib/attachmentlist.php:263 msgid "Author" msgstr "" -#: lib/attachmentlist.php:278 +#: lib/attachmentlist.php:276 msgid "Provider" msgstr "" @@ -5043,37 +5045,51 @@ msgstr "" msgid "Password changing is not allowed" msgstr "" -#: lib/channel.php:138 lib/channel.php:158 +#: lib/channel.php:157 lib/channel.php:177 msgid "Command results" msgstr "" -#: lib/channel.php:210 lib/mailhandler.php:142 +#: lib/channel.php:229 lib/mailhandler.php:142 msgid "Command complete" msgstr "" -#: lib/channel.php:221 +#: lib/channel.php:240 msgid "Command failed" msgstr "" -#: lib/command.php:44 -msgid "Sorry, this command is not yet implemented." +#: lib/command.php:83 lib/command.php:105 +msgid "Notice with that id does not exist" msgstr "" -#: lib/command.php:88 +#: lib/command.php:99 lib/command.php:570 +#, fuzzy +msgid "User has no last notice" +msgstr "新訊æ¯" + +#: lib/command.php:125 #, php-format msgid "Could not find a user with nickname %s" msgstr "無法更新使用者" -#: lib/command.php:92 +#: lib/command.php:143 +#, fuzzy, php-format +msgid "Could not find a local user with nickname %s" +msgstr "無法更新使用者" + +#: lib/command.php:176 +msgid "Sorry, this command is not yet implemented." +msgstr "" + +#: lib/command.php:221 msgid "It does not make a lot of sense to nudge yourself!" msgstr "" -#: lib/command.php:99 +#: lib/command.php:228 #, php-format msgid "Nudge sent to %s" msgstr "" -#: lib/command.php:126 +#: lib/command.php:254 #, php-format msgid "" "Subscriptions: %1$s\n" @@ -5081,201 +5097,197 @@ msgid "" "Notices: %3$s" msgstr "" -#: lib/command.php:152 lib/command.php:390 lib/command.php:451 -msgid "Notice with that id does not exist" -msgstr "" - -#: lib/command.php:168 lib/command.php:406 lib/command.php:467 -#: lib/command.php:523 -#, fuzzy -msgid "User has no last notice" -msgstr "新訊æ¯" - -#: lib/command.php:190 +#: lib/command.php:296 msgid "Notice marked as fave." msgstr "" -#: lib/command.php:217 +#: lib/command.php:317 #, fuzzy msgid "You are already a member of that group" msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s" -#: lib/command.php:231 +#: lib/command.php:331 #, fuzzy, php-format msgid "Could not join user %s to group %s" msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s" -#: lib/command.php:236 +#: lib/command.php:336 #, fuzzy, php-format msgid "%s joined group %s" msgstr "%1$s的狀態是%2$s" -#: lib/command.php:275 +#: lib/command.php:373 #, fuzzy, php-format msgid "Could not remove user %s to group %s" msgstr "無法從 %s 建立OpenID" -#: lib/command.php:280 +#: lib/command.php:378 #, fuzzy, php-format msgid "%s left group %s" msgstr "%1$s的狀態是%2$s" -#: lib/command.php:309 +#: lib/command.php:401 #, fuzzy, php-format msgid "Fullname: %s" msgstr "å…¨å" -#: lib/command.php:312 lib/mail.php:258 +#: lib/command.php:404 lib/mail.php:258 #, php-format msgid "Location: %s" msgstr "" -#: lib/command.php:315 lib/mail.php:260 +#: lib/command.php:407 lib/mail.php:260 #, php-format msgid "Homepage: %s" msgstr "" -#: lib/command.php:318 +#: lib/command.php:410 #, php-format msgid "About: %s" msgstr "" -#: lib/command.php:349 +#: lib/command.php:437 +#, php-format +msgid "" +"%s is a remote profile; you can only send direct messages to users on the " +"same server." +msgstr "" + +#: lib/command.php:450 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:367 +#: lib/command.php:468 #, php-format msgid "Direct message to %s sent" msgstr "" -#: lib/command.php:369 +#: lib/command.php:470 msgid "Error sending direct message." msgstr "" -#: lib/command.php:413 +#: lib/command.php:490 #, fuzzy msgid "Cannot repeat your own notice" msgstr "儲存使用者發生錯誤" -#: lib/command.php:418 +#: lib/command.php:495 #, fuzzy msgid "Already repeated that notice" msgstr "無此使用者" -#: lib/command.php:426 +#: lib/command.php:503 #, fuzzy, php-format msgid "Notice from %s repeated" msgstr "更新個人圖åƒ" -#: lib/command.php:428 +#: lib/command.php:505 #, fuzzy msgid "Error repeating notice." msgstr "儲存使用者發生錯誤" -#: lib/command.php:482 +#: lib/command.php:536 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "" -#: lib/command.php:491 +#: lib/command.php:545 #, fuzzy, php-format msgid "Reply to %s sent" msgstr "&s的微型部è½æ ¼" -#: lib/command.php:493 +#: lib/command.php:547 msgid "Error saving notice." msgstr "儲存使用者發生錯誤" -#: lib/command.php:547 +#: lib/command.php:594 msgid "Specify the name of the user to subscribe to" msgstr "" -#: lib/command.php:554 lib/command.php:589 -#, fuzzy -msgid "No such user" -msgstr "無此使用者" +#: lib/command.php:602 +msgid "Can't subscribe to OMB profiles by command." +msgstr "" -#: lib/command.php:561 +#: lib/command.php:608 #, php-format msgid "Subscribed to %s" msgstr "" -#: lib/command.php:582 lib/command.php:685 +#: lib/command.php:629 lib/command.php:728 msgid "Specify the name of the user to unsubscribe from" msgstr "" -#: lib/command.php:595 +#: lib/command.php:638 #, php-format msgid "Unsubscribed from %s" msgstr "" -#: lib/command.php:613 lib/command.php:636 +#: lib/command.php:656 lib/command.php:679 msgid "Command not yet implemented." msgstr "" -#: lib/command.php:616 +#: lib/command.php:659 msgid "Notification off." msgstr "" -#: lib/command.php:618 +#: lib/command.php:661 msgid "Can't turn off notification." msgstr "" -#: lib/command.php:639 +#: lib/command.php:682 msgid "Notification on." msgstr "" -#: lib/command.php:641 +#: lib/command.php:684 msgid "Can't turn on notification." msgstr "" -#: lib/command.php:654 +#: lib/command.php:697 msgid "Login command is disabled" msgstr "" -#: lib/command.php:665 +#: lib/command.php:708 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" msgstr "" -#: lib/command.php:692 +#: lib/command.php:735 #, fuzzy, php-format msgid "Unsubscribed %s" msgstr "此帳號已註冊" -#: lib/command.php:709 +#: lib/command.php:752 #, fuzzy msgid "You are not subscribed to anyone." msgstr "此帳號已註冊" -#: lib/command.php:711 +#: lib/command.php:754 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "此帳號已註冊" -#: lib/command.php:731 +#: lib/command.php:774 #, fuzzy msgid "No one is subscribed to you." msgstr "無此訂閱" -#: lib/command.php:733 +#: lib/command.php:776 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "無此訂閱" -#: lib/command.php:753 +#: lib/command.php:796 #, fuzzy msgid "You are not a member of any groups." msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s" -#: lib/command.php:755 +#: lib/command.php:798 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "無法連çµåˆ°ä¼ºæœå™¨:%s" -#: lib/command.php:769 +#: lib/command.php:812 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -5317,20 +5329,20 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" -#: lib/common.php:148 +#: lib/common.php:136 #, fuzzy msgid "No configuration file found. " msgstr "無確èªç¢¼" -#: lib/common.php:149 +#: lib/common.php:137 msgid "I looked for configuration files in the following places: " msgstr "" -#: lib/common.php:151 +#: lib/common.php:139 msgid "You may wish to run the installer to fix this." msgstr "" -#: lib/common.php:152 +#: lib/common.php:140 msgid "Go to the installer." msgstr "" @@ -5510,50 +5522,50 @@ msgstr "" msgid "This page is not available in a media type you accept" msgstr "" -#: lib/imagefile.php:75 +#: lib/imagefile.php:74 +msgid "Unsupported image file format." +msgstr "" + +#: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "" -#: lib/imagefile.php:80 +#: lib/imagefile.php:95 msgid "Partial upload." msgstr "" -#: lib/imagefile.php:88 lib/mediafile.php:170 +#: lib/imagefile.php:103 lib/mediafile.php:170 msgid "System error uploading file." msgstr "" -#: lib/imagefile.php:96 +#: lib/imagefile.php:111 msgid "Not an image or corrupt file." msgstr "" -#: lib/imagefile.php:109 -msgid "Unsupported image file format." -msgstr "" - -#: lib/imagefile.php:122 +#: lib/imagefile.php:124 #, fuzzy msgid "Lost our file." msgstr "無此通知" -#: lib/imagefile.php:166 lib/imagefile.php:231 +#: lib/imagefile.php:168 lib/imagefile.php:233 msgid "Unknown file type" msgstr "" -#: lib/imagefile.php:251 +#: lib/imagefile.php:253 msgid "MB" msgstr "" -#: lib/imagefile.php:253 +#: lib/imagefile.php:255 msgid "kB" msgstr "" -#: lib/jabber.php:220 +#: lib/jabber.php:228 #, php-format msgid "[%s]" msgstr "" -#: lib/jabber.php:400 +#: lib/jabber.php:408 #, php-format msgid "Unknown inbox source %d." msgstr "" @@ -5758,7 +5770,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" -#: lib/mailbox.php:227 lib/noticelist.php:482 +#: lib/mailbox.php:227 lib/noticelist.php:485 msgid "from" msgstr "" @@ -5913,25 +5925,25 @@ msgstr "" msgid "at" msgstr "" -#: lib/noticelist.php:566 +#: lib/noticelist.php:569 #, fuzzy msgid "in context" msgstr "無內容" -#: lib/noticelist.php:601 +#: lib/noticelist.php:604 #, fuzzy msgid "Repeated by" msgstr "新增" -#: lib/noticelist.php:628 +#: lib/noticelist.php:631 msgid "Reply to this notice" msgstr "" -#: lib/noticelist.php:629 +#: lib/noticelist.php:632 msgid "Reply" msgstr "" -#: lib/noticelist.php:673 +#: lib/noticelist.php:676 #, fuzzy msgid "Notice repeated" msgstr "更新個人圖åƒ" @@ -6079,7 +6091,7 @@ msgstr "無此通知" msgid "Revoke the \"%s\" role from this user" msgstr "無此使用者" -#: lib/router.php:671 +#: lib/router.php:677 msgid "No single user defined for single-user mode." msgstr "" @@ -6210,92 +6222,96 @@ msgstr "" msgid "Unsubscribe" msgstr "" -#: lib/userprofile.php:116 +#: lib/userprofile.php:117 #, fuzzy msgid "Edit Avatar" msgstr "個人圖åƒ" -#: lib/userprofile.php:236 +#: lib/userprofile.php:234 lib/userprofile.php:248 msgid "User actions" msgstr "" -#: lib/userprofile.php:251 +#: lib/userprofile.php:237 +msgid "User deletion in progress..." +msgstr "" + +#: lib/userprofile.php:263 #, fuzzy msgid "Edit profile settings" msgstr "線上å³æ™‚通設定" -#: lib/userprofile.php:252 +#: lib/userprofile.php:264 msgid "Edit" msgstr "" -#: lib/userprofile.php:275 +#: lib/userprofile.php:287 msgid "Send a direct message to this user" msgstr "" -#: lib/userprofile.php:276 +#: lib/userprofile.php:288 msgid "Message" msgstr "" -#: lib/userprofile.php:314 +#: lib/userprofile.php:326 msgid "Moderate" msgstr "" -#: lib/userprofile.php:352 +#: lib/userprofile.php:364 #, fuzzy msgid "User role" msgstr "無此通知" -#: lib/userprofile.php:354 +#: lib/userprofile.php:366 msgctxt "role" msgid "Administrator" msgstr "" -#: lib/userprofile.php:355 +#: lib/userprofile.php:367 msgctxt "role" msgid "Moderator" msgstr "" -#: lib/util.php:1015 +#: lib/util.php:1046 msgid "a few seconds ago" msgstr "" -#: lib/util.php:1017 +#: lib/util.php:1048 msgid "about a minute ago" msgstr "" -#: lib/util.php:1019 +#: lib/util.php:1050 #, php-format msgid "about %d minutes ago" msgstr "" -#: lib/util.php:1021 +#: lib/util.php:1052 msgid "about an hour ago" msgstr "" -#: lib/util.php:1023 +#: lib/util.php:1054 #, php-format msgid "about %d hours ago" msgstr "" -#: lib/util.php:1025 +#: lib/util.php:1056 msgid "about a day ago" msgstr "" -#: lib/util.php:1027 +#: lib/util.php:1058 #, php-format msgid "about %d days ago" msgstr "" -#: lib/util.php:1029 +#: lib/util.php:1060 msgid "about a month ago" msgstr "" -#: lib/util.php:1031 +#: lib/util.php:1062 #, php-format msgid "about %d months ago" msgstr "" -#: lib/util.php:1033 +#: lib/util.php:1064 msgid "about a year ago" msgstr "" @@ -6309,7 +6325,7 @@ msgstr "個人首é ä½å€éŒ¯èª¤" msgid "%s is not a valid color! Use 3 or 6 hex chars." msgstr "" -#: lib/xmppmanager.php:402 +#: lib/xmppmanager.php:403 #, php-format msgid "Message too long - maximum is %1$d characters, you sent %2$d." msgstr "" diff --git a/plugins/AutoSandbox/AutoSandboxPlugin.php b/plugins/AutoSandbox/AutoSandboxPlugin.php new file mode 100644 index 0000000000..ffd8bf455e --- /dev/null +++ b/plugins/AutoSandbox/AutoSandboxPlugin.php @@ -0,0 +1,96 @@ +. + * + * @category Plugin + * @package StatusNet + * @author Sean Carmody + * @copyright 2010 + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +define('AUTOSANDBOX', '0.1'); + +//require_once(INSTALLDIR.'/plugins/AutoSandbox/autosandbox.php'); + +class AutoSandboxPlugin extends Plugin +{ + var $contact; + var $debug; + + function onInitializePlugin() + { + if(!isset($this->debug)) + { + $this->debug = 0; + } + + if(!isset($this->contact)) { + $default = common_config('newuser', 'default'); + if (!empty($default)) { + $this->contact = $default; + } + } + } + + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'AutoSandbox', + 'version' => STATUSNET_VERSION, + 'author' => 'Sean Carmody', + 'homepage' => 'http://status.net/wiki/Plugin:AutoSandbox', + 'rawdescription' => + _m('Automatically sandboxes newly registered members.')); + return true; + } + + function onStartRegistrationFormData($action) + { + + $instr = 'Note you will initially be "sandboxed" so your posts will not appear in the public timeline.'; + + if (isset($this->contact)) { + $contactuser = User::staticGet('nickname', $this->contact); + if (!empty($contactuser)) { + $contactlink = "@uri\">$contactuser->nickname"; + $instr = $instr . " Send a message to $contactlink to speed up the unsandboxing process."; + } + } + + $output = common_markup_to_html($instr); + $action->elementStart('div', 'instructions'); + $action->raw($output); + $action->elementEnd('div'); + } + + function onEndUserRegister(&$profile,&$user) + { + $profile->sandbox(); + if ($this->debug) { + common_log(LOG_WARNING, "AutoSandbox: sandboxed of $user->nickname"); + } + } +} diff --git a/plugins/AutoSandbox/LICENSE b/plugins/AutoSandbox/LICENSE new file mode 100644 index 0000000000..011faa4e78 --- /dev/null +++ b/plugins/AutoSandbox/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2010 Stubborn Mule - http://www.stubbornmule.net +AUTHORS: + Sean Carmody + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/plugins/AutoSandbox/README b/plugins/AutoSandbox/README new file mode 100644 index 0000000000..2f5d625f79 --- /dev/null +++ b/plugins/AutoSandbox/README @@ -0,0 +1,39 @@ +StatusNet AutoSandbox plugin 0.1 03/16/10 +========================================= +Automatically sandboxes newly registered users as a spam-management technique. +Only really suits small sites where all users can be hand-moderated. A moderator +will then have to unbox legimate users, using the following built-in script: + +./scripts/userrole.php -n username -r moderator + +(replace 'username' with the nickname of the user you wish to make a moderator). + +The following note will be added to the top of the Registration form: + +"Note you will initially be "sandboxed" so your posts will not appear in the +public timeline." + +This can be followed by the following extra information if a contact user (denoted +here by XXX) is specified: + +"Send a message to @XXX to speed up the unsandboxing process." + +If no contact user is specified, it will default to the "Default subscription" user +who automatically subscribes to new users (set in Admin -> User). + +Use: +1. Add plugin: + +Default usage: +addPlugin('AutoSandbox'); + +Specify a contact user (replace 'someuser' with appropriate username): +addPlugin('AutoSandbox', array('contact' => 'someuser')); + +Stop contact user from defaulting to the Defaul subscription: +addPlugin('AutoSandbox', array('contact' => '')); + +Changelog +========= +0.1 initial release + diff --git a/plugins/FirePHP/FirePHPPlugin.php b/plugins/FirePHP/FirePHPPlugin.php index 452f790242..9143ff69ca 100644 --- a/plugins/FirePHP/FirePHPPlugin.php +++ b/plugins/FirePHP/FirePHPPlugin.php @@ -52,8 +52,8 @@ class FirePHPPlugin extends Plugin { static $firephp_priorities = array(FirePHP::ERROR, FirePHP::ERROR, FirePHP::ERROR, FirePHP::ERROR, FirePHP::WARN, FirePHP::LOG, FirePHP::LOG, FirePHP::INFO); - $priority = $firephp_priorities[$priority]; - $this->firephp->fb($msg, $priority); + $fp_priority = $firephp_priorities[$priority]; + $this->firephp->fb($msg, $fp_priority); } function onPluginVersion(&$versions) diff --git a/plugins/LdapAuthentication/LdapAuthenticationPlugin.php b/plugins/LdapAuthentication/LdapAuthenticationPlugin.php index 4832096765..a55c45ff57 100644 --- a/plugins/LdapAuthentication/LdapAuthenticationPlugin.php +++ b/plugins/LdapAuthentication/LdapAuthenticationPlugin.php @@ -31,48 +31,25 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } -require_once 'Net/LDAP2.php'; - class LdapAuthenticationPlugin extends AuthenticationPlugin { - public $host=null; - public $port=null; - public $version=null; - public $starttls=null; - public $binddn=null; - public $bindpw=null; - public $basedn=null; - public $options=null; - public $filter=null; - public $scope=null; - public $password_encoding=null; - public $attributes=array(); - function onInitializePlugin(){ parent::onInitializePlugin(); - if(!isset($this->host)){ - throw new Exception("must specify a host"); - } - if(!isset($this->basedn)){ - throw new Exception("must specify a basedn"); - } if(!isset($this->attributes['nickname'])){ throw new Exception("must specify a nickname attribute"); } - if(!isset($this->attributes['username'])){ - throw new Exception("must specify a username attribute"); - } if($this->password_changeable && (! isset($this->attributes['password']) || !isset($this->password_encoding))){ throw new Exception("if password_changeable is set, the password attribute and password_encoding must also be specified"); } + $this->ldapCommon = new LdapCommon(get_object_vars($this)); } function onAutoload($cls) { switch ($cls) { - case 'MemcacheSchemaCache': - require_once(INSTALLDIR.'/plugins/LdapAuthentication/MemcacheSchemaCache.php'); + case 'LdapCommon': + require_once(INSTALLDIR.'/plugins/LdapCommon/LdapCommon.php'); return false; } } @@ -107,19 +84,7 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin function checkPassword($username, $password) { - $entry = $this->ldap_get_user($username); - if(!$entry){ - return false; - }else{ - $config = $this->ldap_get_config(); - $config['binddn']=$entry->dn(); - $config['bindpw']=$password; - if($this->ldap_get_connection($config)){ - return true; - }else{ - return false; - } - } + return $this->ldapCommon->checkPassword($username,$password); } function autoRegister($username, $nickname) @@ -127,7 +92,7 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin if(is_null($nickname)){ $nickname = $username; } - $entry = $this->ldap_get_user($username,$this->attributes); + $entry = $this->ldapCommon->get_user($username,$this->attributes); if($entry){ $registration_data = array(); foreach($this->attributes as $sn_attribute=>$ldap_attribute){ @@ -148,40 +113,7 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin function changePassword($username,$oldpassword,$newpassword) { - if(! isset($this->attributes['password']) || !isset($this->password_encoding)){ - //throw new Exception(_('Sorry, changing LDAP passwords is not supported at this time')); - return false; - } - $entry = $this->ldap_get_user($username); - if(!$entry){ - return false; - }else{ - $config = $this->ldap_get_config(); - $config['binddn']=$entry->dn(); - $config['bindpw']=$oldpassword; - if($ldap = $this->ldap_get_connection($config)){ - $entry = $this->ldap_get_user($username,array(),$ldap); - - $newCryptedPassword = $this->hashPassword($newpassword, $this->password_encoding); - if ($newCryptedPassword===false) { - return false; - } - if($this->password_encoding=='ad') { - //TODO I believe this code will work once this bug is fixed: http://pear.php.net/bugs/bug.php?id=16796 - $oldCryptedPassword = $this->hashPassword($oldpassword, $this->password_encoding); - $entry->delete( array($this->attributes['password'] => $oldCryptedPassword )); - } - $entry->replace( array($this->attributes['password'] => $newCryptedPassword ), true); - if( Net_LDAP2::isError($entry->upate()) ) { - return false; - } - return true; - }else{ - return false; - } - } - - return false; + return $this->ldapCommon->changePassword($username,$oldpassword,$newpassword); } function suggestNicknameForUsername($username) @@ -198,203 +130,6 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin } return common_nicknamize($nickname); } - - //---utility functions---// - function ldap_get_config(){ - $config = array(); - $keys = array('host','port','version','starttls','binddn','bindpw','basedn','options','filter','scope'); - foreach($keys as $key){ - $value = $this->$key; - if($value!==null){ - $config[$key]=$value; - } - } - return $config; - } - - function ldap_get_connection($config = null){ - if($config == null && isset($this->default_ldap)){ - return $this->default_ldap; - } - - //cannot use Net_LDAP2::connect() as StatusNet uses - //PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handleError'); - //PEAR handling can be overridden on instance objects, so we do that. - $ldap = new Net_LDAP2(isset($config)?$config:$this->ldap_get_config()); - $ldap->setErrorHandling(PEAR_ERROR_RETURN); - $err=$ldap->bind(); - if (Net_LDAP2::isError($err)) { - // if we were called with a config, assume caller will handle - // incorrect username/password (LDAP_INVALID_CREDENTIALS) - if (isset($config) && $err->getCode() == 0x31) { - return null; - } - throw new Exception('Could not connect to LDAP server: '.$err->getMessage()); - } - if($config == null) $this->default_ldap=$ldap; - - $c = common_memcache(); - if (!empty($c)) { - $cacheObj = new MemcacheSchemaCache( - array('c'=>$c, - 'cacheKey' => common_cache_key('ldap_schema:' . crc32(serialize($config))))); - $ldap->registerSchemaCache($cacheObj); - } - return $ldap; - } - - /** - * get an LDAP entry for a user with a given username - * - * @param string $username - * $param array $attributes LDAP attributes to retrieve - * @return string DN - */ - function ldap_get_user($username,$attributes=array(),$ldap=null){ - if($ldap==null) { - $ldap = $this->ldap_get_connection(); - } - $filter = Net_LDAP2_Filter::create($this->attributes['username'], 'equals', $username); - $options = array( - 'attributes' => $attributes - ); - $search = $ldap->search($this->basedn, $filter, $options); - - if (PEAR::isError($search)) { - common_log(LOG_WARNING, 'Error while getting DN for user: '.$search->getMessage()); - return false; - } - - $searchcount = $search->count(); - if($searchcount == 0) { - return false; - }else if($searchcount == 1) { - $entry = $search->shiftEntry(); - return $entry; - }else{ - common_log(LOG_WARNING, 'Found ' . $searchcount . ' ldap user with the username: ' . $username); - return false; - } - } - - /** - * Code originaly from the phpLDAPadmin development team - * http://phpldapadmin.sourceforge.net/ - * - * Hashes a password and returns the hash based on the specified enc_type. - * - * @param string $passwordClear The password to hash in clear text. - * @param string $encodageType Standard LDAP encryption type which must be one of - * crypt, ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, or clear. - * @return string The hashed password. - * - */ - - function hashPassword( $passwordClear, $encodageType ) - { - $encodageType = strtolower( $encodageType ); - switch( $encodageType ) { - case 'crypt': - $cryptedPassword = '{CRYPT}' . crypt($passwordClear,$this->randomSalt(2)); - break; - - case 'ext_des': - // extended des crypt. see OpenBSD crypt man page. - if ( ! defined( 'CRYPT_EXT_DES' ) || CRYPT_EXT_DES == 0 ) {return FALSE;} //Your system crypt library does not support extended DES encryption. - $cryptedPassword = '{CRYPT}' . crypt( $passwordClear, '_' . $this->randomSalt(8) ); - break; - - case 'md5crypt': - if( ! defined( 'CRYPT_MD5' ) || CRYPT_MD5 == 0 ) {return FALSE;} //Your system crypt library does not support md5crypt encryption. - $cryptedPassword = '{CRYPT}' . crypt( $passwordClear , '$1$' . $this->randomSalt(9) ); - break; - - case 'blowfish': - if( ! defined( 'CRYPT_BLOWFISH' ) || CRYPT_BLOWFISH == 0 ) {return FALSE;} //Your system crypt library does not support blowfish encryption. - $cryptedPassword = '{CRYPT}' . crypt( $passwordClear , '$2a$12$' . $this->randomSalt(13) ); // hardcoded to second blowfish version and set number of rounds - break; - - case 'md5': - $cryptedPassword = '{MD5}' . base64_encode( pack( 'H*' , md5( $passwordClear) ) ); - break; - - case 'sha': - if( function_exists('sha1') ) { - // use php 4.3.0+ sha1 function, if it is available. - $cryptedPassword = '{SHA}' . base64_encode( pack( 'H*' , sha1( $passwordClear) ) ); - } elseif( function_exists( 'mhash' ) ) { - $cryptedPassword = '{SHA}' . base64_encode( mhash( MHASH_SHA1, $passwordClear) ); - } else { - return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes. - } - break; - - case 'ssha': - if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) { - mt_srand( (double) microtime() * 1000000 ); - $salt = mhash_keygen_s2k( MHASH_SHA1, $passwordClear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 ); - $cryptedPassword = "{SSHA}".base64_encode( mhash( MHASH_SHA1, $passwordClear.$salt ).$salt ); - } else { - return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes. - } - break; - - case 'smd5': - if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) { - mt_srand( (double) microtime() * 1000000 ); - $salt = mhash_keygen_s2k( MHASH_MD5, $passwordClear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 ); - $cryptedPassword = "{SMD5}".base64_encode( mhash( MHASH_MD5, $passwordClear.$salt ).$salt ); - } else { - return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes. - } - break; - - case 'ad': - $cryptedPassword = ''; - $passwordClear = "\"" . $passwordClear . "\""; - $len = strlen($passwordClear); - for ($i = 0; $i < $len; $i++) { - $cryptedPassword .= "{$passwordClear{$i}}\000"; - } - - case 'clear': - default: - $cryptedPassword = $passwordClear; - } - - return $cryptedPassword; - } - - /** - * Code originaly from the phpLDAPadmin development team - * http://phpldapadmin.sourceforge.net/ - * - * Used to generate a random salt for crypt-style passwords. Salt strings are used - * to make pre-built hash cracking dictionaries difficult to use as the hash algorithm uses - * not only the user's password but also a randomly generated string. The string is - * stored as the first N characters of the hash for reference of hashing algorithms later. - * - * --- added 20021125 by bayu irawan --- - * --- ammended 20030625 by S C Rigler --- - * - * @param int $length The length of the salt string to generate. - * @return string The generated salt string. - */ - - function randomSalt( $length ) - { - $possible = '0123456789'. - 'abcdefghijklmnopqrstuvwxyz'. - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. - './'; - $str = ""; - mt_srand((double)microtime() * 1000000); - - while( strlen( $str ) < $length ) - $str .= substr( $possible, ( rand() % strlen( $possible ) ), 1 ); - - return $str; - } function onPluginVersion(&$versions) { diff --git a/plugins/LdapAuthorization/LdapAuthorizationPlugin.php b/plugins/LdapAuthorization/LdapAuthorizationPlugin.php index 2608025ddc..97103d158e 100644 --- a/plugins/LdapAuthorization/LdapAuthorizationPlugin.php +++ b/plugins/LdapAuthorization/LdapAuthorizationPlugin.php @@ -31,41 +31,28 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } -require_once 'Net/LDAP2.php'; - class LdapAuthorizationPlugin extends AuthorizationPlugin { - public $host=null; - public $port=null; - public $version=null; - public $starttls=null; - public $binddn=null; - public $bindpw=null; - public $basedn=null; - public $options=null; - public $filter=null; - public $scope=null; - public $provider_name = null; - public $uniqueMember_attribute = null; public $roles_to_groups = array(); public $login_group = null; - public $attributes = array(); function onInitializePlugin(){ - if(!isset($this->host)){ - throw new Exception("must specify a host"); - } - if(!isset($this->basedn)){ - throw new Exception("must specify a basedn"); - } if(!isset($this->provider_name)){ throw new Exception("provider_name must be set. Use the provider_name from the LDAP Authentication plugin."); } if(!isset($this->uniqueMember_attribute)){ throw new Exception("uniqueMember_attribute must be set."); } - if(!isset($this->attributes['username'])){ - throw new Exception("username attribute must be set."); + $this->ldapCommon = new LdapCommon(get_object_vars($this)); + } + + function onAutoload($cls) + { + switch ($cls) + { + case 'LdapCommon': + require_once(INSTALLDIR.'/plugins/LdapCommon/LdapCommon.php'); + return false; } } @@ -75,17 +62,17 @@ class LdapAuthorizationPlugin extends AuthorizationPlugin $user_username->user_id=$user->id; $user_username->provider_name=$this->provider_name; if($user_username->find() && $user_username->fetch()){ - $entry = $this->ldap_get_user($user_username->username); + $entry = $this->ldapCommon->get_user($user_username->username); if($entry){ if(isset($this->login_group)){ if(is_array($this->login_group)){ foreach($this->login_group as $group){ - if($this->ldap_is_dn_member_of_group($entry->dn(),$group)){ + if($this->ldapCommon->is_dn_member_of_group($entry->dn(),$group)){ return true; } } }else{ - if($this->ldap_is_dn_member_of_group($entry->dn(),$this->login_group)){ + if($this->ldapCommon->is_dn_member_of_group($entry->dn(),$this->login_group)){ return true; } } @@ -107,17 +94,17 @@ class LdapAuthorizationPlugin extends AuthorizationPlugin $user_username->user_id=$profile->id; $user_username->provider_name=$this->provider_name; if($user_username->find() && $user_username->fetch()){ - $entry = $this->ldap_get_user($user_username->username); + $entry = $this->ldapCommon->get_user($user_username->username); if($entry){ if(isset($this->roles_to_groups[$name])){ if(is_array($this->roles_to_groups[$name])){ foreach($this->roles_to_groups[$name] as $group){ - if($this->ldap_is_dn_member_of_group($entry->dn(),$group)){ + if($this->ldapCommon->is_dn_member_of_group($entry->dn(),$group)){ return true; } } }else{ - if($this->ldap_is_dn_member_of_group($entry->dn(),$this->roles_to_groups[$name])){ + if($this->ldapCommon->is_dn_member_of_group($entry->dn(),$this->roles_to_groups[$name])){ return true; } } @@ -127,94 +114,6 @@ class LdapAuthorizationPlugin extends AuthorizationPlugin return false; } - function ldap_is_dn_member_of_group($userDn, $groupDn) - { - $ldap = $this->ldap_get_connection(); - $link = $ldap->getLink(); - $r = ldap_compare($link, $groupDn, $this->uniqueMember_attribute, $userDn); - if ($r === true){ - return true; - }else if($r === false){ - return false; - }else{ - common_log(LOG_ERR, ldap_error($r)); - return false; - } - } - - function ldap_get_config(){ - $config = array(); - $keys = array('host','port','version','starttls','binddn','bindpw','basedn','options','filter','scope'); - foreach($keys as $key){ - $value = $this->$key; - if($value!==null){ - $config[$key]=$value; - } - } - return $config; - } - - //-----the below function were copied from LDAPAuthenticationPlugin. They will be moved to a utility class soon.----\\ - function ldap_get_connection($config = null){ - if($config == null && isset($this->default_ldap)){ - return $this->default_ldap; - } - - //cannot use Net_LDAP2::connect() as StatusNet uses - //PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handleError'); - //PEAR handling can be overridden on instance objects, so we do that. - $ldap = new Net_LDAP2(isset($config)?$config:$this->ldap_get_config()); - $ldap->setErrorHandling(PEAR_ERROR_RETURN); - $err=$ldap->bind(); - if (Net_LDAP2::isError($err)) { - // if we were called with a config, assume caller will handle - // incorrect username/password (LDAP_INVALID_CREDENTIALS) - if (isset($config) && $err->getCode() == 0x31) { - return null; - } - throw new Exception('Could not connect to LDAP server: '.$err->getMessage()); - return false; - } - if($config == null) $this->default_ldap=$ldap; - return $ldap; - } - - /** - * get an LDAP entry for a user with a given username - * - * @param string $username - * $param array $attributes LDAP attributes to retrieve - * @return string DN - */ - function ldap_get_user($username,$attributes=array(),$ldap=null){ - if($ldap==null) { - $ldap = $this->ldap_get_connection(); - } - if(! $ldap) { - throw new Exception("Could not connect to LDAP"); - } - $filter = Net_LDAP2_Filter::create($this->attributes['username'], 'equals', $username); - $options = array( - 'attributes' => $attributes - ); - $search = $ldap->search(null,$filter,$options); - - if (PEAR::isError($search)) { - common_log(LOG_WARNING, 'Error while getting DN for user: '.$search->getMessage()); - return false; - } - - if($search->count()==0){ - return false; - }else if($search->count()==1){ - $entry = $search->shiftEntry(); - return $entry; - }else{ - common_log(LOG_WARNING, 'Found ' . $search->count() . ' ldap user with the username: ' . $username); - return false; - } - } - function onPluginVersion(&$versions) { $versions[] = array('name' => 'LDAP Authorization', diff --git a/plugins/LdapCommon/LdapCommon.php b/plugins/LdapCommon/LdapCommon.php new file mode 100644 index 0000000000..39d872df53 --- /dev/null +++ b/plugins/LdapCommon/LdapCommon.php @@ -0,0 +1,356 @@ +. + * + * @category Plugin + * @package StatusNet + * @author Craig Andrews + * @copyright 2009 Craig Andrews http://candrews.integralblue.com + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +class LdapCommon +{ + protected static $ldap_connections = array(); + public $host=null; + public $port=null; + public $version=null; + public $starttls=null; + public $binddn=null; + public $bindpw=null; + public $basedn=null; + public $options=null; + public $filter=null; + public $scope=null; + public $uniqueMember_attribute = null; + public $attributes=array(); + public $password_encoding=null; + + public function __construct($config) + { + Event::addHandler('Autoload',array($this,'onAutoload')); + foreach($config as $key=>$value) { + $this->$key = $value; + } + $this->ldap_config = $this->get_ldap_config(); + + if(!isset($this->host)){ + throw new Exception("must specify a host"); + } + if(!isset($this->basedn)){ + throw new Exception("must specify a basedn"); + } + if(!isset($this->attributes['username'])){ + throw new Exception("username attribute must be set."); + } + } + + function onAutoload($cls) + { + switch ($cls) + { + case 'MemcacheSchemaCache': + require_once(INSTALLDIR.'/plugins/LdapCommon/MemcacheSchemaCache.php'); + return false; + case 'Net_LDAP2': + require_once 'Net/LDAP2.php'; + return false; + } + } + + function get_ldap_config(){ + $config = array(); + $keys = array('host','port','version','starttls','binddn','bindpw','basedn','options','filter','scope'); + foreach($keys as $key){ + $value = $this->$key; + if($value!==null){ + $config[$key]=$value; + } + } + return $config; + } + + function get_ldap_connection($config = null){ + if($config == null) { + $config = $this->ldap_config; + } + $config_id = crc32(serialize($config)); + $ldap = self::$ldap_connections[$config_id]; + if(! isset($ldap)) { + //cannot use Net_LDAP2::connect() as StatusNet uses + //PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handleError'); + //PEAR handling can be overridden on instance objects, so we do that. + $ldap = new Net_LDAP2($config); + $ldap->setErrorHandling(PEAR_ERROR_RETURN); + $err=$ldap->bind(); + if (Net_LDAP2::isError($err)) { + // if we were called with a config, assume caller will handle + // incorrect username/password (LDAP_INVALID_CREDENTIALS) + if (isset($config) && $err->getCode() == 0x31) { + throw new LdapInvalidCredentialsException('Could not connect to LDAP server: '.$err->getMessage()); + } + throw new Exception('Could not connect to LDAP server: '.$err->getMessage()); + } + $c = common_memcache(); + if (!empty($c)) { + $cacheObj = new MemcacheSchemaCache( + array('c'=>$c, + 'cacheKey' => common_cache_key('ldap_schema:' . $config_id))); + $ldap->registerSchemaCache($cacheObj); + } + self::$ldap_connections[$config_id] = $ldap; + } + return $ldap; + } + + function checkPassword($username, $password) + { + $entry = $this->get_user($username); + if(!$entry){ + return false; + }else{ + $config = $this->get_ldap_config(); + $config['binddn']=$entry->dn(); + $config['bindpw']=$password; + try { + $this->get_ldap_connection($config); + } catch (LdapInvalidCredentialsException $e) { + return false; + } + return true; + } + } + + function changePassword($username,$oldpassword,$newpassword) + { + if(! isset($this->attributes['password']) || !isset($this->password_encoding)){ + //throw new Exception(_('Sorry, changing LDAP passwords is not supported at this time')); + return false; + } + $entry = $this->get_user($username); + if(!$entry){ + return false; + }else{ + $config = $this->get_ldap_config(); + $config['binddn']=$entry->dn(); + $config['bindpw']=$oldpassword; + try { + $ldap = $this->get_ldap_connection($config); + + $entry = $this->get_user($username,array(),$ldap); + + $newCryptedPassword = $this->hashPassword($newpassword, $this->password_encoding); + if ($newCryptedPassword===false) { + return false; + } + if($this->password_encoding=='ad') { + //TODO I believe this code will work once this bug is fixed: http://pear.php.net/bugs/bug.php?id=16796 + $oldCryptedPassword = $this->hashPassword($oldpassword, $this->password_encoding); + $entry->delete( array($this->attributes['password'] => $oldCryptedPassword )); + } + $entry->replace( array($this->attributes['password'] => $newCryptedPassword ), true); + if( Net_LDAP2::isError($entry->upate()) ) { + return false; + } + return true; + } catch (LdapInvalidCredentialsException $e) { + return false; + } + } + + return false; + } + + function is_dn_member_of_group($userDn, $groupDn) + { + $ldap = $this->get_ldap_connection(); + $link = $ldap->getLink(); + $r = @ldap_compare($link, $groupDn, $this->uniqueMember_attribute, $userDn); + if ($r === true){ + return true; + }else if($r === false){ + return false; + }else{ + common_log(LOG_ERR, "LDAP error determining if userDn=$userDn is a member of groupDn=$groupDn using uniqueMember_attribute=$this->uniqueMember_attribute error: ".ldap_error($link)); + return false; + } + } + + /** + * get an LDAP entry for a user with a given username + * + * @param string $username + * $param array $attributes LDAP attributes to retrieve + * @return string DN + */ + function get_user($username,$attributes=array()){ + $ldap = $this->get_ldap_connection(); + $filter = Net_LDAP2_Filter::create($this->attributes['username'], 'equals', $username); + $options = array( + 'attributes' => $attributes + ); + $search = $ldap->search(null,$filter,$options); + + if (PEAR::isError($search)) { + common_log(LOG_WARNING, 'Error while getting DN for user: '.$search->getMessage()); + return false; + } + + if($search->count()==0){ + return false; + }else if($search->count()==1){ + $entry = $search->shiftEntry(); + return $entry; + }else{ + common_log(LOG_WARNING, 'Found ' . $search->count() . ' ldap user with the username: ' . $username); + return false; + } + } + + /** + * Code originaly from the phpLDAPadmin development team + * http://phpldapadmin.sourceforge.net/ + * + * Hashes a password and returns the hash based on the specified enc_type. + * + * @param string $passwordClear The password to hash in clear text. + * @param string $encodageType Standard LDAP encryption type which must be one of + * crypt, ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, or clear. + * @return string The hashed password. + * + */ + + function hashPassword( $passwordClear, $encodageType ) + { + $encodageType = strtolower( $encodageType ); + switch( $encodageType ) { + case 'crypt': + $cryptedPassword = '{CRYPT}' . crypt($passwordClear,$this->randomSalt(2)); + break; + + case 'ext_des': + // extended des crypt. see OpenBSD crypt man page. + if ( ! defined( 'CRYPT_EXT_DES' ) || CRYPT_EXT_DES == 0 ) {return FALSE;} //Your system crypt library does not support extended DES encryption. + $cryptedPassword = '{CRYPT}' . crypt( $passwordClear, '_' . $this->randomSalt(8) ); + break; + + case 'md5crypt': + if( ! defined( 'CRYPT_MD5' ) || CRYPT_MD5 == 0 ) {return FALSE;} //Your system crypt library does not support md5crypt encryption. + $cryptedPassword = '{CRYPT}' . crypt( $passwordClear , '$1$' . $this->randomSalt(9) ); + break; + + case 'blowfish': + if( ! defined( 'CRYPT_BLOWFISH' ) || CRYPT_BLOWFISH == 0 ) {return FALSE;} //Your system crypt library does not support blowfish encryption. + $cryptedPassword = '{CRYPT}' . crypt( $passwordClear , '$2a$12$' . $this->randomSalt(13) ); // hardcoded to second blowfish version and set number of rounds + break; + + case 'md5': + $cryptedPassword = '{MD5}' . base64_encode( pack( 'H*' , md5( $passwordClear) ) ); + break; + + case 'sha': + if( function_exists('sha1') ) { + // use php 4.3.0+ sha1 function, if it is available. + $cryptedPassword = '{SHA}' . base64_encode( pack( 'H*' , sha1( $passwordClear) ) ); + } elseif( function_exists( 'mhash' ) ) { + $cryptedPassword = '{SHA}' . base64_encode( mhash( MHASH_SHA1, $passwordClear) ); + } else { + return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes. + } + break; + + case 'ssha': + if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) { + mt_srand( (double) microtime() * 1000000 ); + $salt = mhash_keygen_s2k( MHASH_SHA1, $passwordClear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 ); + $cryptedPassword = "{SSHA}".base64_encode( mhash( MHASH_SHA1, $passwordClear.$salt ).$salt ); + } else { + return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes. + } + break; + + case 'smd5': + if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) { + mt_srand( (double) microtime() * 1000000 ); + $salt = mhash_keygen_s2k( MHASH_MD5, $passwordClear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 ); + $cryptedPassword = "{SMD5}".base64_encode( mhash( MHASH_MD5, $passwordClear.$salt ).$salt ); + } else { + return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes. + } + break; + + case 'ad': + $cryptedPassword = ''; + $passwordClear = "\"" . $passwordClear . "\""; + $len = strlen($passwordClear); + for ($i = 0; $i < $len; $i++) { + $cryptedPassword .= "{$passwordClear{$i}}\000"; + } + + case 'clear': + default: + $cryptedPassword = $passwordClear; + } + + return $cryptedPassword; + } + + /** + * Code originaly from the phpLDAPadmin development team + * http://phpldapadmin.sourceforge.net/ + * + * Used to generate a random salt for crypt-style passwords. Salt strings are used + * to make pre-built hash cracking dictionaries difficult to use as the hash algorithm uses + * not only the user's password but also a randomly generated string. The string is + * stored as the first N characters of the hash for reference of hashing algorithms later. + * + * --- added 20021125 by bayu irawan --- + * --- ammended 20030625 by S C Rigler --- + * + * @param int $length The length of the salt string to generate. + * @return string The generated salt string. + */ + + function randomSalt( $length ) + { + $possible = '0123456789'. + 'abcdefghijklmnopqrstuvwxyz'. + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. + './'; + $str = ""; + mt_srand((double)microtime() * 1000000); + + while( strlen( $str ) < $length ) + $str .= substr( $possible, ( rand() % strlen( $possible ) ), 1 ); + + return $str; + } + +} + +class LdapInvalidCredentialsException extends Exception +{ + +} diff --git a/plugins/LdapAuthentication/MemcacheSchemaCache.php b/plugins/LdapCommon/MemcacheSchemaCache.php similarity index 100% rename from plugins/LdapAuthentication/MemcacheSchemaCache.php rename to plugins/LdapCommon/MemcacheSchemaCache.php diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index efb630297a..c985fb4bc1 100644 --- a/plugins/OStatus/OStatusPlugin.php +++ b/plugins/OStatus/OStatusPlugin.php @@ -290,7 +290,7 @@ class OStatusPlugin extends Plugin $url = "$scheme://$target"; $this->log(LOG_INFO, "Checking profile address '$url'"); try { - $oprofile = Ostatus_profile::ensureProfile($url); + $oprofile = Ostatus_profile::ensureProfileURL($url); if ($oprofile && !$oprofile->isGroup()) { $profile = $oprofile->localProfile(); $matches[$pos] = array('mentioned' => array($profile), @@ -321,6 +321,86 @@ class OStatusPlugin extends Plugin return true; } + /** + * Allow remote profile references to be used in commands: + * sub update@status.net + * whois evan@identi.ca + * reply http://identi.ca/evan hey what's up + * + * @param Command $command + * @param string $arg + * @param Profile &$profile + * @return hook return code + */ + function onStartCommandGetProfile($command, $arg, &$profile) + { + $oprofile = $this->pullRemoteProfile($arg); + if ($oprofile && !$oprofile->isGroup()) { + $profile = $oprofile->localProfile(); + return false; + } else { + return true; + } + } + + /** + * Allow remote group references to be used in commands: + * join group+statusnet@identi.ca + * join http://identi.ca/group/statusnet + * drop identi.ca/group/statusnet + * + * @param Command $command + * @param string $arg + * @param User_group &$group + * @return hook return code + */ + function onStartCommandGetGroup($command, $arg, &$group) + { + $oprofile = $this->pullRemoteProfile($arg); + if ($oprofile && $oprofile->isGroup()) { + $group = $oprofile->localGroup(); + return false; + } else { + return true; + } + } + + protected function pullRemoteProfile($arg) + { + $oprofile = null; + if (preg_match('!^((?:\w+\.)*\w+@(?:\w+\.)*\w+(?:\w+\-\w+)*\.\w+)$!', $arg)) { + // webfinger lookup + try { + return Ostatus_profile::ensureWebfinger($arg); + } catch (Exception $e) { + common_log(LOG_ERR, 'Webfinger lookup failed for ' . + $arg . ': ' . $e->getMessage()); + } + } + + // Look for profile URLs, with or without scheme: + $urls = array(); + if (preg_match('!^https?://((?:\w+\.)*\w+(?:\w+\-\w+)*\.\w+(?:/\w+)+)$!', $arg)) { + $urls[] = $arg; + } + if (preg_match('!^((?:\w+\.)*\w+(?:\w+\-\w+)*\.\w+(?:/\w+)+)$!', $arg)) { + $schemes = array('http', 'https'); + foreach ($schemes as $scheme) { + $urls[] = "$scheme://$arg"; + } + } + + foreach ($urls as $url) { + try { + return Ostatus_profile::ensureProfileURL($url); + } catch (Exception $e) { + common_log(LOG_ERR, 'Profile lookup failed for ' . + $arg . ': ' . $e->getMessage()); + } + } + return null; + } + /** * Make sure necessary tables are filled out. */ @@ -849,4 +929,22 @@ class OStatusPlugin extends Plugin return true; } + + /** + * Utility function to check if the given URL is a canonical group profile + * page, and if so return the ID number. + * + * @param string $url + * @return mixed int or false + */ + public static function localGroupFromUrl($url) + { + $template = common_local_url('groupbyid', array('id' => '31337')); + $template = preg_quote($template, '/'); + $template = str_replace('31337', '(\d+)', $template); + if (preg_match("/$template/", $url, $matches)) { + return intval($matches[1]); + } + return false; + } } diff --git a/plugins/OStatus/actions/ostatussub.php b/plugins/OStatus/actions/ostatussub.php index 65dee2392f..994af6e95c 100644 --- a/plugins/OStatus/actions/ostatussub.php +++ b/plugins/OStatus/actions/ostatussub.php @@ -149,7 +149,7 @@ class OStatusSubAction extends Action $fullname = $entity->fullname; $homepage = $entity->homepage; $location = $entity->location; - + if (!$avatar) { $avatar = Avatar::defaultImage(AVATAR_PROFILE_SIZE); } @@ -242,7 +242,7 @@ class OStatusSubAction extends Action if (Validate::email($this->profile_uri)) { $this->oprofile = Ostatus_profile::ensureWebfinger($this->profile_uri); } else if (Validate::uri($this->profile_uri)) { - $this->oprofile = Ostatus_profile::ensureProfile($this->profile_uri); + $this->oprofile = Ostatus_profile::ensureProfileURL($this->profile_uri); } else { $this->error = _m("Sorry, we could not reach that address. Please make sure that the OStatus address is like nickname@example.com or http://example.net/nickname"); common_debug('Invalid address format.', __FILE__); @@ -299,7 +299,7 @@ class OStatusSubAction extends Action if ($user->isSubscribed($local)) { // TRANS: OStatus remote subscription dialog error. $this->showForm(_m('Already subscribed!')); - } elseif ($this->oprofile->subscribeLocalToRemote($user)) { + } elseif (Subscription::start($user, $local)) { $this->success(); } else { // TRANS: OStatus remote subscription dialog error. @@ -339,7 +339,6 @@ class OStatusSubAction extends Action } } - /** * Handle posts to this form * diff --git a/plugins/OStatus/actions/usersalmon.php b/plugins/OStatus/actions/usersalmon.php index c8a16e06fa..15e8c1869d 100644 --- a/plugins/OStatus/actions/usersalmon.php +++ b/plugins/OStatus/actions/usersalmon.php @@ -82,7 +82,8 @@ class UsersalmonAction extends SalmonAction throw new ClientException("In reply to a notice not by this user"); } } else if (!empty($context->attention)) { - if (!in_array($this->user->uri, $context->attention)) { + if (!in_array($this->user->uri, $context->attention) && + !in_array(common_profile_url($this->user->nickname), $context->attention)) { common_log(LOG_ERR, "{$this->user->uri} not in attention list (".implode(',', $context->attention).")"); throw new ClientException("To the attention of user(s) not including this one!"); } diff --git a/plugins/OStatus/actions/userxrd.php b/plugins/OStatus/actions/userxrd.php index 414de9364b..6a6886eb8c 100644 --- a/plugins/OStatus/actions/userxrd.php +++ b/plugins/OStatus/actions/userxrd.php @@ -32,12 +32,19 @@ class UserxrdAction extends XrdAction parent::prepare($args); $this->uri = $this->trimmed('uri'); - $acct = Discovery::normalize($this->uri); - - list($nick, $domain) = explode('@', substr(urldecode($acct), 5)); - $nick = common_canonical_nickname($nick); - - $this->user = User::staticGet('nickname', $nick); + $this->uri = Discovery::normalize($this->uri); + + if (Discovery::isWebfinger($this->uri)) { + $parts = explode('@', substr(urldecode($this->uri), 5)); + if (count($parts) == 2) { + list($nick, $domain) = $parts; + // @fixme confirm the domain too + $nick = common_canonical_nickname($nick); + $this->user = User::staticGet('nickname', $nick); + } + } else { + $this->user = User::staticGet('uri', $this->uri); + } if (!$this->user) { $this->clientError(_('No such user.'), 404); return false; diff --git a/plugins/OStatus/classes/FeedSub.php b/plugins/OStatus/classes/FeedSub.php index b848b6b1d3..b10509dae6 100644 --- a/plugins/OStatus/classes/FeedSub.php +++ b/plugins/OStatus/classes/FeedSub.php @@ -61,7 +61,7 @@ class FeedSub extends Memcached_DataObject public $__table = 'feedsub'; public $id; - public $feeduri; + public $uri; // PuSH subscription data public $huburi; @@ -110,7 +110,7 @@ class FeedSub extends Memcached_DataObject /*size*/ null, /*nullable*/ false, /*key*/ 'PRI', - /*default*/ '0', + /*default*/ null, /*extra*/ null, /*auto_increment*/ true), new ColumnDef('uri', 'varchar', @@ -238,7 +238,7 @@ class FeedSub extends Memcached_DataObject public function subscribe($mode='subscribe') { if ($this->sub_state && $this->sub_state != 'inactive') { - throw new ServerException("Attempting to start PuSH subscription to feed in state $this->sub_state"); + common_log(LOG_WARNING, "Attempting to (re)start PuSH subscription to $this->uri in unexpected state $this->sub_state"); } if (empty($this->huburi)) { if (common_config('feedsub', 'nohub')) { @@ -261,7 +261,7 @@ class FeedSub extends Memcached_DataObject */ public function unsubscribe() { if ($this->sub_state != 'active') { - throw new ServerException("Attempting to end PuSH subscription to feed in state $this->sub_state"); + common_log(LOG_WARNING, "Attempting to (re)end PuSH subscription to $this->uri in unexpected state $this->sub_state"); } if (empty($this->huburi)) { if (common_config('feedsub', 'nohub')) { @@ -450,3 +450,4 @@ class FeedSub extends Memcached_DataObject } } + diff --git a/plugins/OStatus/classes/HubSub.php b/plugins/OStatus/classes/HubSub.php index 3120a70f9f..cdace3c1fc 100644 --- a/plugins/OStatus/classes/HubSub.php +++ b/plugins/OStatus/classes/HubSub.php @@ -77,7 +77,7 @@ class HubSub extends Memcached_DataObject new ColumnDef('topic', 'varchar', /*size*/255, /*nullable*/false, - /*key*/'KEY'), + /*key*/'MUL'), new ColumnDef('callback', 'varchar', 255, false), new ColumnDef('secret', 'text', @@ -192,7 +192,7 @@ class HubSub extends Memcached_DataObject // Any existing query string parameters must be preserved $url = $this->callback; - if (strpos('?', $url) !== false) { + if (strpos($url, '?') !== false) { $url .= '&'; } else { $url .= '?'; diff --git a/plugins/OStatus/classes/Magicsig.php b/plugins/OStatus/classes/Magicsig.php index 5a46aeeb6e..87c684c93d 100644 --- a/plugins/OStatus/classes/Magicsig.php +++ b/plugins/OStatus/classes/Magicsig.php @@ -27,8 +27,6 @@ * @link http://status.net/ */ -require_once 'Crypt/RSA.php'; - class Magicsig extends Memcached_DataObject { @@ -40,8 +38,9 @@ class Magicsig extends Memcached_DataObject public $keypair; public $alg; - private $_rsa; - + public $publicKey; + public $privateKey; + public function __construct($alg = 'RSA-SHA256') { $this->alg = $alg; @@ -70,9 +69,9 @@ class Magicsig extends Memcached_DataObject static function schemaDef() { return array(new ColumnDef('user_id', 'integer', - null, true, 'PRI'), - new ColumnDef('keypair', 'varchar', - 255, false), + null, false, 'PRI'), + new ColumnDef('keypair', 'text', + false, false), new ColumnDef('alg', 'varchar', 64, false)); } @@ -99,17 +98,20 @@ class Magicsig extends Memcached_DataObject return parent::insert(); } - public function generate($user_id, $key_length = 512) + public function generate($user_id) { - PEAR::pushErrorHandling(PEAR_ERROR_RETURN); + $rsa = new SafeCrypt_RSA(); + + $keypair = $rsa->createKey(); - $keypair = new Crypt_RSA_KeyPair($key_length); - $params['public_key'] = $keypair->getPublicKey(); - $params['private_key'] = $keypair->getPrivateKey(); + $rsa->loadKey($keypair['privatekey']); - $this->_rsa = new Crypt_RSA($params); - PEAR::popErrorHandling(); + $this->privateKey = new SafeCrypt_RSA(); + $this->privateKey->loadKey($keypair['privatekey']); + $this->publicKey = new SafeCrypt_RSA(); + $this->publicKey->loadKey($keypair['publickey']); + $this->user_id = $user_id; $this->insert(); } @@ -117,14 +119,11 @@ class Magicsig extends Memcached_DataObject public function toString($full_pair = true) { - $public_key = $this->_rsa->_public_key; - $private_key = $this->_rsa->_private_key; - - $mod = base64_url_encode($public_key->getModulus()); - $exp = base64_url_encode($public_key->getExponent()); + $mod = base64_url_encode($this->publicKey->modulus->toBytes()); + $exp = base64_url_encode($this->publicKey->exponent->toBytes()); $private_exp = ''; - if ($full_pair && $private_key->getExponent()) { - $private_exp = '.' . base64_url_encode($private_key->getExponent()); + if ($full_pair && $this->privateKey->exponent->toBytes()) { + $private_exp = '.' . base64_url_encode($this->privateKey->exponent->toBytes()); } return 'RSA.' . $mod . '.' . $exp . $private_exp; @@ -132,8 +131,6 @@ class Magicsig extends Memcached_DataObject public static function fromString($text) { - PEAR::pushErrorHandling(PEAR_ERROR_RETURN); - $magic_sig = new Magicsig(); // remove whitespace @@ -144,35 +141,40 @@ class Magicsig extends Memcached_DataObject return false; } - $mod = base64_url_decode($matches[1]); - $exp = base64_url_decode($matches[2]); + $mod = $matches[1]; + $exp = $matches[2]; if (!empty($matches[4])) { - $private_exp = base64_url_decode($matches[4]); + $private_exp = $matches[4]; } else { $private_exp = false; } - $params['public_key'] = new Crypt_RSA_KEY($mod, $exp, 'public'); - if ($params['public_key']->isError()) { - $error = $params['public_key']->getLastError(); - common_log(LOG_DEBUG, 'RSA Error: '. $error->getMessage()); - return false; - } + $magic_sig->loadKey($mod, $exp, 'public'); if ($private_exp) { - $params['private_key'] = new Crypt_RSA_KEY($mod, $private_exp, 'private'); - if ($params['private_key']->isError()) { - $error = $params['private_key']->getLastError(); - common_log(LOG_DEBUG, 'RSA Error: '. $error->getMessage()); - return false; - } + $magic_sig->loadKey($mod, $private_exp, 'private'); } - $magic_sig->_rsa = new Crypt_RSA($params); - PEAR::popErrorHandling(); - return $magic_sig; } + public function loadKey($mod, $exp, $type = 'public') + { + common_log(LOG_DEBUG, "Adding ".$type." key: (".$mod .', '. $exp .")"); + + $rsa = new SafeCrypt_RSA(); + $rsa->signatureMode = CRYPT_RSA_SIGNATURE_PKCS1; + $rsa->setHash('sha256'); + $rsa->modulus = new Math_BigInteger(base64_url_decode($mod), 256); + $rsa->k = strlen($rsa->modulus->toBytes()); + $rsa->exponent = new Math_BigInteger(base64_url_decode($exp), 256); + + if ($type == 'private') { + $this->privateKey = $rsa; + } else { + $this->publicKey = $rsa; + } + } + public function getName() { return $this->alg; @@ -183,45 +185,25 @@ class Magicsig extends Memcached_DataObject switch ($this->alg) { case 'RSA-SHA256': - return 'magicsig_sha256'; + return 'sha256'; } } public function sign($bytes) { - $hash = $this->getHash(); - $sig = $this->_rsa->createSign($bytes, null, $hash); - if ($this->_rsa->isError()) { - $error = $this->_rsa->getLastError(); - common_log(LOG_DEBUG, 'RSA Error: '. $error->getMessage()); - return false; - } - - return $sig; + $sig = $this->privateKey->sign($bytes); + return base64_url_encode($sig); } public function verify($signed_bytes, $signature) { - $hash = $this->getHash(); - $result = $this->_rsa->validateSign($signed_bytes, $signature, null, $hash); - if ($this->_rsa->isError()) { - $error = $this->keypair->getLastError(); - common_log(LOG_DEBUG, 'RSA Error: '. $error->getMessage()); - return false; - } - return $result; + $signature = base64_url_decode($signature); + return $this->publicKey->verify($signed_bytes, $signature); } } -// Define a sha256 function for hashing -// (Crypt_RSA should really be updated to use hash() ) -function magicsig_sha256($bytes) -{ - return hash('sha256', $bytes); -} - function base64_url_encode($input) { return strtr(base64_encode($input), '+/', '-_'); @@ -230,4 +212,4 @@ function base64_url_encode($input) function base64_url_decode($input) { return base64_decode(strtr($input, '-_', '+/')); -} \ No newline at end of file +} diff --git a/plugins/OStatus/classes/Ostatus_profile.php b/plugins/OStatus/classes/Ostatus_profile.php index abc8100cee..15e149125a 100644 --- a/plugins/OStatus/classes/Ostatus_profile.php +++ b/plugins/OStatus/classes/Ostatus_profile.php @@ -194,52 +194,6 @@ class Ostatus_profile extends Memcached_DataObject } } - /** - * Subscribe a local user to this remote user. - * PuSH subscription will be started if necessary, and we'll - * send a Salmon notification to the remote server if available - * notifying them of the sub. - * - * @param User $user - * @return boolean success - * @throws FeedException - */ - public function subscribeLocalToRemote(User $user) - { - if ($this->isGroup()) { - throw new ServerException("Can't subscribe to a remote group"); - } - - if ($this->subscribe()) { - if ($user->subscribeTo($this->localProfile())) { - $this->notify($user->getProfile(), ActivityVerb::FOLLOW, $this); - return true; - } - } - return false; - } - - /** - * Mark this remote profile as subscribing to the given local user, - * and send appropriate notifications to the user. - * - * This will generally be in response to a subscription notification - * from a foreign site to our local Salmon response channel. - * - * @param User $user - * @return boolean success - */ - public function subscribeRemoteToLocal(User $user) - { - if ($this->isGroup()) { - throw new ServerException("Remote groups can't subscribe to local users"); - } - - Subscription::start($this->localProfile(), $user->getProfile()); - - return true; - } - /** * Send a subscription request to the hub for this feed. * The hub will later send us a confirmation POST to /main/push/callback. @@ -250,12 +204,13 @@ class Ostatus_profile extends Memcached_DataObject public function subscribe() { $feedsub = FeedSub::ensureFeed($this->feeduri); - if ($feedsub->sub_state == 'active' || $feedsub->sub_state == 'subscribe') { + if ($feedsub->sub_state == 'active') { + // Active subscription, we don't need to do anything. return true; - } else if ($feedsub->sub_state == '' || $feedsub->sub_state == 'inactive') { + } else { + // Inactive or we got left in an inconsistent state. + // Run a subscription request to make sure we're current! return $feedsub->subscribe(); - } else if ('unsubscribe') { - throw new FeedSubException("Unsub is pending, can't subscribe..."); } } @@ -268,15 +223,13 @@ class Ostatus_profile extends Memcached_DataObject */ public function unsubscribe() { $feedsub = FeedSub::staticGet('uri', $this->feeduri); - if (!$feedsub) { + if (!$feedsub || $feedsub->sub_state == '' || $feedsub->sub_state == 'inactive') { + // No active PuSH subscription, we can just leave it be. return true; - } - if ($feedsub->sub_state == 'active') { + } else { + // PuSH subscription is either active or in an indeterminate state. + // Send an unsubscribe. return $feedsub->unsubscribe(); - } else if ($feedsub->sub_state == '' || $feedsub->sub_state == 'inactive' || $feedsub->sub_state == 'unsubscribe') { - return true; - } else if ($feedsub->sub_state == 'subscribe') { - throw new FeedSubException("Feed is awaiting subscription, can't unsub..."); } } @@ -435,11 +388,17 @@ class Ostatus_profile extends Memcached_DataObject { $feed = $doc->documentElement; - if ($feed->localName != 'feed' || $feed->namespaceURI != Activity::ATOM) { - common_log(LOG_ERR, __METHOD__ . ": not an Atom feed, ignoring"); - return; + if ($feed->localName == 'feed' && $feed->namespaceURI == Activity::ATOM) { + $this->processAtomFeed($feed, $source); + } else if ($feed->localName == 'rss') { // @fixme check namespace + $this->processRssFeed($feed, $source); + } else { + throw new Exception("Unknown feed format."); } + } + public function processAtomFeed(DOMElement $feed, $source) + { $entries = $feed->getElementsByTagNameNS(Activity::ATOM, 'entry'); if ($entries->length == 0) { common_log(LOG_ERR, __METHOD__ . ": no entries in feed update, ignoring"); @@ -452,6 +411,26 @@ class Ostatus_profile extends Memcached_DataObject } } + public function processRssFeed(DOMElement $rss, $source) + { + $channels = $rss->getElementsByTagName('channel'); + + if ($channels->length == 0) { + throw new Exception("RSS feed without a channel."); + } else if ($channels->length > 1) { + common_log(LOG_WARNING, __METHOD__ . ": more than one channel in an RSS feed"); + } + + $channel = $channels->item(0); + + $items = $channel->getElementsByTagName('item'); + + for ($i = 0; $i < $items->length; $i++) { + $item = $items->item($i); + $this->processEntry($item, $channel, $source); + } + } + /** * Process a posted entry from this feed source. * @@ -463,6 +442,17 @@ class Ostatus_profile extends Memcached_DataObject { $activity = new Activity($entry, $feed); + switch ($activity->object->type) { + case ActivityObject::ARTICLE: + case ActivityObject::BLOGENTRY: + case ActivityObject::NOTE: + case ActivityObject::STATUS: + case ActivityObject::COMMENT: + break; + default: + throw new ClientException("Can't handle that kind of post."); + } + if ($activity->verb == ActivityVerb::POST) { $this->processPost($activity, $source); } else { @@ -489,24 +479,27 @@ class Ostatus_profile extends Memcached_DataObject return false; } } else { - // Individual user feeds may contain only posts from themselves. - // Authorship is validated against the profile URI on upper layers, - // through PuSH setup or Salmon signature checks. - $actorUri = self::getActorProfileURI($activity); - if ($actorUri == $this->uri) { - // Check if profile info has changed and update it - $this->updateFromActivityObject($activity->actor); + $actor = $activity->actor; + + if (empty($actor)) { + // OK here! assume the default + } else if ($actor->id == $this->uri || $actor->link == $this->uri) { + $this->updateFromActivityObject($actor); } else { - common_log(LOG_WARNING, "OStatus: skipping post with bad author: got $actorUri expected $this->uri"); - return false; + throw new Exception("Got an actor '{$actor->title}' ({$actor->id}) on single-user feed for {$this->uri}"); } + $oprofile = $this; } + // It's not always an ActivityObject::NOTE, but... let's just say it is. + + $note = $activity->object; + // The id URI will be used as a unique identifier for for the notice, // protecting against duplicate saves. It isn't required to be a URL; // tag: URIs for instance are found in Google Buzz feeds. - $sourceUri = $activity->object->id; + $sourceUri = $note->id; $dupe = Notice::staticGet('uri', $sourceUri); if ($dupe) { common_log(LOG_INFO, "OStatus: ignoring duplicate post: $sourceUri"); @@ -515,16 +508,30 @@ class Ostatus_profile extends Memcached_DataObject // We'll also want to save a web link to the original notice, if provided. $sourceUrl = null; - if ($activity->object->link) { - $sourceUrl = $activity->object->link; + if ($note->link) { + $sourceUrl = $note->link; } else if ($activity->link) { $sourceUrl = $activity->link; - } else if (preg_match('!^https?://!', $activity->object->id)) { - $sourceUrl = $activity->object->id; + } else if (preg_match('!^https?://!', $note->id)) { + $sourceUrl = $note->id; + } + + // Use summary as fallback for content + + if (!empty($note->content)) { + $sourceContent = $note->content; + } else if (!empty($note->summary)) { + $sourceContent = $note->summary; + } else if (!empty($note->title)) { + $sourceContent = $note->title; + } else { + // @fixme fetch from $sourceUrl? + throw new ClientException("No content for notice {$sourceUri}"); } // Get (safe!) HTML and text versions of the content - $rendered = $this->purify($activity->object->content); + + $rendered = $this->purify($sourceContent); $content = html_entity_decode(strip_tags($rendered)); $shortened = common_shorten_links($content); @@ -535,21 +542,29 @@ class Ostatus_profile extends Memcached_DataObject $attachment = null; if (Notice::contentTooLong($shortened)) { - $attachment = $this->saveHTMLFile($activity->object->title, $rendered); - $summary = $activity->object->summary; + $attachment = $this->saveHTMLFile($note->title, $rendered); + $summary = html_entity_decode(strip_tags($note->summary)); if (empty($summary)) { $summary = $content; } $shortSummary = common_shorten_links($summary); if (Notice::contentTooLong($shortSummary)) { - $url = common_shorten_url(common_local_url('attachment', - array('attachment' => $attachment->id))); + $url = common_shorten_url($sourceUrl); $shortSummary = substr($shortSummary, 0, Notice::maxContent() - (mb_strlen($url) + 2)); - $shortSummary .= '… ' . $url; - $content = $shortSummary; - $rendered = common_render_text($content); + $content = $shortSummary . ' ' . $url; + + // We mark up the attachment link specially for the HTML output + // so we can fold-out the full version inline. + $attachUrl = common_local_url('attachment', + array('attachment' => $attachment->id)); + $rendered = common_render_text($shortSummary) . + '' . + '…' . + ''; } } @@ -675,13 +690,10 @@ class Ostatus_profile extends Memcached_DataObject } // Is the recipient a local group? - // @fixme we need a uri on user_group + // @fixme uri on user_group isn't reliable yet // $group = User_group::staticGet('uri', $recipient); - $template = common_local_url('groupbyid', array('id' => '31337')); - $template = preg_quote($template, '/'); - $template = str_replace('31337', '(\d+)', $template); - if (preg_match("/$template/", $recipient, $matches)) { - $id = $matches[1]; + $id = OStatusPlugin::localGroupFromUrl($recipient); + if ($id) { $group = User_group::staticGet('id', $id); if ($group) { // Deliver to all members of this local group if allowed. @@ -707,22 +719,147 @@ class Ostatus_profile extends Memcached_DataObject } /** + * Look up and if necessary create an Ostatus_profile for the remote entity + * with the given profile page URL. This should never return null -- you + * will either get an object or an exception will be thrown. + * * @param string $profile_url * @return Ostatus_profile - * @throws FeedSubException + * @throws Exception */ - public static function ensureProfile($profile_uri, $hints=array()) + + public static function ensureProfileURL($profile_url, $hints=array()) { - // Get the canonical feed URI and check it - $discover = new FeedDiscovery(); - if (isset($hints['feedurl'])) { - $feeduri = $hints['feedurl']; - $feeduri = $discover->discoverFromFeedURL($feeduri); - } else { - $feeduri = $discover->discoverFromURL($profile_uri); - $hints['feedurl'] = $feeduri; + $oprofile = self::getFromProfileURL($profile_url); + + if (!empty($oprofile)) { + return $oprofile; } + $hints['profileurl'] = $profile_url; + + // Fetch the URL + // XXX: HTTP caching + + $client = new HTTPClient(); + $client->setHeader('Accept', 'text/html,application/xhtml+xml'); + $response = $client->get($profile_url); + + if (!$response->isOk()) { + throw new Exception("Could not reach profile page: " . $profile_url); + } + + // Check if we have a non-canonical URL + + $finalUrl = $response->getUrl(); + + if ($finalUrl != $profile_url) { + + $hints['profileurl'] = $finalUrl; + + $oprofile = self::getFromProfileURL($finalUrl); + + if (!empty($oprofile)) { + return $oprofile; + } + } + + // Try to get some hCard data + + $body = $response->getBody(); + + $hcardHints = DiscoveryHints::hcardHints($body, $finalUrl); + + if (!empty($hcardHints)) { + $hints = array_merge($hints, $hcardHints); + } + + // Check if they've got an LRDD header + + $lrdd = LinkHeader::getLink($response, 'lrdd', 'application/xrd+xml'); + + if (!empty($lrdd)) { + + $xrd = Discovery::fetchXrd($lrdd); + $xrdHints = DiscoveryHints::fromXRD($xrd); + + $hints = array_merge($hints, $xrdHints); + } + + // If discovery found a feedurl (probably from LRDD), use it. + + if (array_key_exists('feedurl', $hints)) { + return self::ensureFeedURL($hints['feedurl'], $hints); + } + + // Get the feed URL from HTML + + $discover = new FeedDiscovery(); + + $feedurl = $discover->discoverFromHTML($finalUrl, $body); + + if (!empty($feedurl)) { + $hints['feedurl'] = $feedurl; + return self::ensureFeedURL($feedurl, $hints); + } + + throw new Exception("Could not find a feed URL for profile page " . $finalUrl); + } + + /** + * Look up the Ostatus_profile, if present, for a remote entity with the + * given profile page URL. Will return null for both unknown and invalid + * remote profiles. + * + * @return mixed Ostatus_profile or null + * @throws Exception for local profiles + */ + static function getFromProfileURL($profile_url) + { + $profile = Profile::staticGet('profileurl', $profile_url); + + if (empty($profile)) { + return null; + } + + // Is it a known Ostatus profile? + + $oprofile = Ostatus_profile::staticGet('profile_id', $profile->id); + + if (!empty($oprofile)) { + return $oprofile; + } + + // Is it a local user? + + $user = User::staticGet('id', $profile->id); + + if (!empty($user)) { + throw new Exception("'$profile_url' is the profile for local user '{$user->nickname}'."); + } + + // Continue discovery; it's a remote profile + // for OMB or some other protocol, may also + // support OStatus + + return null; + } + + /** + * Look up and if necessary create an Ostatus_profile for remote entity + * with the given update feed. This should never return null -- you will + * either get an object or an exception will be thrown. + * + * @return Ostatus_profile + * @throws Exception + */ + public static function ensureFeedURL($feed_url, $hints=array()) + { + $discover = new FeedDiscovery(); + + $feeduri = $discover->discoverFromFeedURL($feed_url); + $hints['feedurl'] = $feeduri; + $huburi = $discover->getAtomLink('hub'); $hints['hub'] = $huburi; $salmonuri = $discover->getAtomLink(Salmon::NS_REPLIES); @@ -733,9 +870,32 @@ class Ostatus_profile extends Memcached_DataObject throw new FeedSubNoHubException(); } - // Try to get a profile from the feed activity:subject + $feedEl = $discover->root; - $feedEl = $discover->feed->documentElement; + if ($feedEl->tagName == 'feed') { + return self::ensureAtomFeed($feedEl, $hints); + } else if ($feedEl->tagName == 'channel') { + return self::ensureRssChannel($feedEl, $hints); + } else { + throw new FeedSubBadXmlException($feeduri); + } + } + + /** + * Look up and, if necessary, create an Ostatus_profile for the remote + * profile with the given Atom feed - actually loaded from the feed. + * This should never return null -- you will either get an object or + * an exception will be thrown. + * + * @param DOMElement $feedEl root element of a loaded Atom feed + * @param array $hints additional discovery information passed from higher levels + * @fixme should this be marked public? + * @return Ostatus_profile + * @throws Exception + */ + public static function ensureAtomFeed($feedEl, $hints) + { + // Try to get a profile from the feed activity:subject $subject = ActivityUtils::child($feedEl, Activity::SUBJECT, Activity::SPEC); @@ -756,7 +916,7 @@ class Ostatus_profile extends Memcached_DataObject // Sheesh. Not a very nice feed! Let's try fingerpoken in the // entries. - $entries = $discover->feed->getElementsByTagNameNS(Activity::ATOM, 'entry'); + $entries = $feedEl->getElementsByTagNameNS(Activity::ATOM, 'entry'); if (!empty($entries) && $entries->length > 0) { @@ -784,8 +944,51 @@ class Ostatus_profile extends Memcached_DataObject } /** + * Look up and, if necessary, create an Ostatus_profile for the remote + * profile with the given RSS feed - actually loaded from the feed. + * This should never return null -- you will either get an object or + * an exception will be thrown. * + * @param DOMElement $feedEl root element of a loaded RSS feed + * @param array $hints additional discovery information passed from higher levels + * @fixme should this be marked public? + * @return Ostatus_profile + * @throws Exception + */ + public static function ensureRssChannel($feedEl, $hints) + { + // Special-case for Posterous. They have some nice metadata in their + // posterous:author elements. We should use them instead of the channel. + + $items = $feedEl->getElementsByTagName('item'); + + if ($items->length > 0) { + $item = $items->item(0); + $authorEl = ActivityUtils::child($item, ActivityObject::AUTHOR, ActivityObject::POSTEROUS); + if (!empty($authorEl)) { + $obj = ActivityObject::fromPosterousAuthor($authorEl); + // Posterous has multiple authors per feed, and multiple feeds + // per author. We check if this is the "main" feed for this author. + if (array_key_exists('profileurl', $hints) && + !empty($obj->poco) && + common_url_to_nickname($hints['profileurl']) == $obj->poco->preferredUsername) { + return self::ensureActivityObjectProfile($obj, $hints); + } + } + } + + // @fixme we should check whether this feed has elements + // with different or elements, and... I dunno. + // Do something about that. + + $obj = ActivityObject::fromRssChannel($feedEl); + + return self::ensureActivityObjectProfile($obj, $hints); + } + + /** * Download and update given avatar image + * * @param string $url * @throws Exception in various failure cases */ @@ -795,6 +998,9 @@ class Ostatus_profile extends Memcached_DataObject // We've already got this one. return; } + if (!common_valid_http_url($url)) { + throw new ServerException(_m("Invalid avatar URL %s"), $url); + } if ($this->isGroup()) { $self = $this->localGroup(); @@ -912,11 +1118,14 @@ class Ostatus_profile extends Memcached_DataObject /** * Fetch, or build if necessary, an Ostatus_profile for the actor * in a given Activity Streams activity. + * This should never return null -- you will either get an object or + * an exception will be thrown. * * @param Activity $activity * @param string $feeduri if we already know the canonical feed URI! * @param string $salmonuri if we already know the salmon return channel URI * @return Ostatus_profile + * @throws Exception */ public static function ensureActorProfile($activity, $hints=array()) @@ -924,6 +1133,18 @@ class Ostatus_profile extends Memcached_DataObject return self::ensureActivityObjectProfile($activity->actor, $hints); } + /** + * Fetch, or build if necessary, an Ostatus_profile for the profile + * in a given Activity Streams object (can be subject, actor, or object). + * This should never return null -- you will either get an object or + * an exception will be thrown. + * + * @param ActivityObject $object + * @param array $hints additional discovery information passed from higher levels + * @return Ostatus_profile + * @throws Exception + */ + public static function ensureActivityObjectProfile($object, $hints=array()) { $profile = self::getActivityObjectProfile($object); @@ -938,35 +1159,45 @@ class Ostatus_profile extends Memcached_DataObject /** * @param Activity $activity * @return mixed matching Ostatus_profile or false if none known + * @throws ServerException if feed info invalid */ public static function getActorProfile($activity) { return self::getActivityObjectProfile($activity->actor); } + /** + * @param ActivityObject $activity + * @return mixed matching Ostatus_profile or false if none known + * @throws ServerException if feed info invalid + */ protected static function getActivityObjectProfile($object) { $uri = self::getActivityObjectProfileURI($object); return Ostatus_profile::staticGet('uri', $uri); } - protected static function getActorProfileURI($activity) - { - return self::getActivityObjectProfileURI($activity->actor); - } - /** - * @param Activity $activity + * Get the identifier URI for the remote entity described + * by this ActivityObject. This URI is *not* guaranteed to be + * a resolvable HTTP/HTTPS URL. + * + * @param ActivityObject $object * @return string - * @throws ServerException + * @throws ServerException if feed info invalid */ protected static function getActivityObjectProfileURI($object) { - $opts = array('allowed_schemes' => array('http', 'https')); - if ($object->id && Validate::uri($object->id, $opts)) { - return $object->id; + if ($object->id) { + if (ActivityUtils::validateUri($object->id)) { + return $object->id; + } } - if ($object->link && Validate::uri($object->link, $opts)) { + + // If the id is missing or invalid (we've seen feeds mistakenly listing + // things like local usernames in that field) then we'll use the profile + // page link, if valid. + if ($object->link && common_valid_http_url($object->link)) { return $object->link; } throw new ServerException("No author ID URI found"); @@ -979,6 +1210,8 @@ class Ostatus_profile extends Memcached_DataObject /** * Create local ostatus_profile and profile/user_group entries for * the provided remote user or group. + * This should never return null -- you will either get an object or + * an exception will be thrown. * * @param ActivityObject $object * @param array $hints @@ -992,7 +1225,16 @@ class Ostatus_profile extends Memcached_DataObject if (!$homeuri) { common_log(LOG_DEBUG, __METHOD__ . " empty actor profile URI: " . var_export($activity, true)); - throw new ServerException("No profile URI"); + throw new Exception("No profile URI"); + } + + $user = User::staticGet('uri', $homeuri); + if ($user) { + throw new Exception("Local user can't be referenced as remote."); + } + + if (OStatusPlugin::localGroupFromUrl($homeuri)) { + throw new Exception("Local group can't be referenced as remote."); } if (array_key_exists('feedurl', $hints)) { @@ -1234,9 +1476,19 @@ class Ostatus_profile extends Memcached_DataObject return $hints['nickname']; } - // Try the definitive ID + // Try the profile url (like foo.example.com or example.com/user/foo) - $nickname = self::nicknameFromURI($object->id); + $profileUrl = ($object->link) ? $object->link : $hints['profileurl']; + + if (!empty($profileUrl)) { + $nickname = self::nicknameFromURI($profileUrl); + } + + // Try the URI (may be a tag:, http:, acct:, ... + + if (empty($nickname)) { + $nickname = self::nicknameFromURI($object->id); + } // Try a Webfinger if one was passed (way) down @@ -1277,6 +1529,11 @@ class Ostatus_profile extends Memcached_DataObject } /** + * Look up, and if necessary create, an Ostatus_profile for the remote + * entity with the given webfinger address. + * This should never return null -- you will either get an object or + * an exception will be thrown. + * * @param string $addr webfinger address * @return Ostatus_profile * @throws Exception on error conditions @@ -1298,7 +1555,7 @@ class Ostatus_profile extends Memcached_DataObject } } - // First, look it up + // Try looking it up $oprofile = Ostatus_profile::staticGet('uri', 'acct:'.$addr); @@ -1312,7 +1569,7 @@ class Ostatus_profile extends Memcached_DataObject $disco = new Discovery(); try { - $result = $disco->lookup($addr); + $xrd = $disco->lookup($addr); } catch (Exception $e) { // Save negative cache entry so we don't waste time looking it up again. // @fixme distinguish temporary failures? @@ -1322,38 +1579,26 @@ class Ostatus_profile extends Memcached_DataObject $hints = array('webfinger' => $addr); - foreach ($result->links as $link) { - switch ($link['rel']) { - case Discovery::PROFILEPAGE: - $hints['profileurl'] = $profileUrl = $link['href']; - break; - case Salmon::NS_REPLIES: - $hints['salmon'] = $salmonEndpoint = $link['href']; - break; - case Discovery::UPDATESFROM: - $hints['feedurl'] = $feedUrl = $link['href']; - break; - case Discovery::HCARD: - $hcardUrl = $link['href']; - break; - default: - common_log(LOG_NOTICE, "Don't know what to do with rel = '{$link['rel']}'"); - break; - } - } + $dhints = DiscoveryHints::fromXRD($xrd); - if (isset($hcardUrl)) { - $hcardHints = self::slurpHcard($hcardUrl); - // Note: Webfinger > hcard - $hints = array_merge($hcardHints, $hints); + $hints = array_merge($hints, $dhints); + + // If there's an Hcard, let's grab its info + + if (array_key_exists('hcard', $hints)) { + if (!array_key_exists('profileurl', $hints) || + $hints['hcard'] != $hints['profileurl']) { + $hcardHints = DiscoveryHints::fromHcardUrl($hints['hcard']); + $hints = array_merge($hcardHints, $hints); + } } // If we got a feed URL, try that - if (isset($feedUrl)) { + if (array_key_exists('feedurl', $hints)) { try { - common_log(LOG_INFO, "Discovery on acct:$addr with feed URL $feedUrl"); - $oprofile = self::ensureProfile($feedUrl, $hints); + common_log(LOG_INFO, "Discovery on acct:$addr with feed URL " . $hints['feedurl']); + $oprofile = self::ensureFeedURL($hints['feedurl'], $hints); self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), $oprofile->uri); return $oprofile; } catch (Exception $e) { @@ -1364,10 +1609,10 @@ class Ostatus_profile extends Memcached_DataObject // If we got a profile page, try that! - if (isset($profileUrl)) { + if (array_key_exists('profileurl', $hints)) { try { common_log(LOG_INFO, "Discovery on acct:$addr with profile URL $profileUrl"); - $oprofile = self::ensureProfile($profileUrl, $hints); + $oprofile = self::ensureProfileURL($hints['profileurl'], $hints); self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), $oprofile->uri); return $oprofile; } catch (Exception $e) { @@ -1379,7 +1624,9 @@ class Ostatus_profile extends Memcached_DataObject // XXX: try hcard // XXX: try FOAF - if (isset($salmonEndpoint)) { + if (array_key_exists('salmon', $hints)) { + + $salmonEndpoint = $hints['salmon']; // An account URL, a salmon endpoint, and a dream? Not much to go // on, but let's give it a try @@ -1427,10 +1674,18 @@ class Ostatus_profile extends Memcached_DataObject throw new Exception("Couldn't find a valid profile for '$addr'"); } + /** + * Store the full-length scrubbed HTML of a remote notice to an attachment + * file on our server. We'll link to this at the end of the cropped version. + * + * @param string $title plaintext for HTML page's title + * @param string $rendered HTML fragment for HTML page's body + * @return File + */ function saveHTMLFile($title, $rendered) { $final = sprintf("\n%s". - '
    %s
    ', + '%s', htmlspecialchars($title), $rendered); @@ -1459,67 +1714,4 @@ class Ostatus_profile extends Memcached_DataObject return $file; } - - protected static function slurpHcard($url) - { - set_include_path(get_include_path() . PATH_SEPARATOR . INSTALLDIR . '/plugins/OStatus/extlib/hkit/'); - require_once('hkit.class.php'); - - $h = new hKit; - - // Google Buzz hcards need to be tidied. Probably others too. - - $h->tidy_mode = 'proxy'; // 'proxy', 'exec', 'php' or 'none' - - // Get by URL - $hcards = $h->getByURL('hcard', $url); - - if (empty($hcards)) { - return array(); - } - - // @fixme more intelligent guess on multi-hcard pages - $hcard = $hcards[0]; - - $hints = array(); - - $hints['profileurl'] = $url; - - if (array_key_exists('nickname', $hcard)) { - $hints['nickname'] = $hcard['nickname']; - } - - if (array_key_exists('fn', $hcard)) { - $hints['fullname'] = $hcard['fn']; - } else if (array_key_exists('n', $hcard)) { - $hints['fullname'] = implode(' ', $hcard['n']); - } - - if (array_key_exists('photo', $hcard)) { - $hints['avatar'] = $hcard['photo']; - } - - if (array_key_exists('note', $hcard)) { - $hints['bio'] = $hcard['note']; - } - - if (array_key_exists('adr', $hcard)) { - if (is_string($hcard['adr'])) { - $hints['location'] = $hcard['adr']; - } else if (is_array($hcard['adr'])) { - $hints['location'] = implode(' ', $hcard['adr']); - } - } - - if (array_key_exists('url', $hcard)) { - if (is_string($hcard['url'])) { - $hints['homepage'] = $hcard['url']; - } else if (is_array($hcard['url'])) { - // HACK get the last one; that's how our hcards look - $hints['homepage'] = $hcard['url'][count($hcard['url'])-1]; - } - } - - return $hints; - } } diff --git a/plugins/OStatus/extlib/Crypt/AES.php b/plugins/OStatus/extlib/Crypt/AES.php new file mode 100644 index 0000000000..68ab4db09f --- /dev/null +++ b/plugins/OStatus/extlib/Crypt/AES.php @@ -0,0 +1,479 @@ + + * setKey('abcdefghijklmnop'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $aes->decrypt($aes->encrypt($plaintext)); + * ?> + * + * + * LICENSE: This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * @category Crypt + * @package Crypt_AES + * @author Jim Wigginton + * @copyright MMVIII Jim Wigginton + * @license http://www.gnu.org/licenses/lgpl.txt + * @version $Id: AES.php,v 1.7 2010/02/09 06:10:25 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/** + * Include Crypt_Rijndael + */ +require_once 'Rijndael.php'; + +/**#@+ + * @access public + * @see Crypt_AES::encrypt() + * @see Crypt_AES::decrypt() + */ +/** + * Encrypt / decrypt using the Counter mode. + * + * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29 + */ +define('CRYPT_AES_MODE_CTR', -1); +/** + * Encrypt / decrypt using the Electronic Code Book mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29 + */ +define('CRYPT_AES_MODE_ECB', 1); +/** + * Encrypt / decrypt using the Code Book Chaining mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29 + */ +define('CRYPT_AES_MODE_CBC', 2); +/**#@-*/ + +/**#@+ + * @access private + * @see Crypt_AES::Crypt_AES() + */ +/** + * Toggles the internal implementation + */ +define('CRYPT_AES_MODE_INTERNAL', 1); +/** + * Toggles the mcrypt implementation + */ +define('CRYPT_AES_MODE_MCRYPT', 2); +/**#@-*/ + +/** + * Pure-PHP implementation of AES. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Crypt_AES + */ +class Crypt_AES extends Crypt_Rijndael { + /** + * mcrypt resource for encryption + * + * The mcrypt resource can be recreated every time something needs to be created or it can be created just once. + * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode. + * + * @see Crypt_AES::encrypt() + * @var String + * @access private + */ + var $enmcrypt; + + /** + * mcrypt resource for decryption + * + * The mcrypt resource can be recreated every time something needs to be created or it can be created just once. + * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode. + * + * @see Crypt_AES::decrypt() + * @var String + * @access private + */ + var $demcrypt; + + /** + * Default Constructor. + * + * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be + * CRYPT_AES_MODE_ECB or CRYPT_AES_MODE_CBC. If not explictly set, CRYPT_AES_MODE_CBC will be used. + * + * @param optional Integer $mode + * @return Crypt_AES + * @access public + */ + function Crypt_AES($mode = CRYPT_AES_MODE_CBC) + { + if ( !defined('CRYPT_AES_MODE') ) { + switch (true) { + case extension_loaded('mcrypt'): + // i'd check to see if aes was supported, by doing in_array('des', mcrypt_list_algorithms('')), + // but since that can be changed after the object has been created, there doesn't seem to be + // a lot of point... + define('CRYPT_AES_MODE', CRYPT_AES_MODE_MCRYPT); + break; + default: + define('CRYPT_AES_MODE', CRYPT_AES_MODE_INTERNAL); + } + } + + switch ( CRYPT_AES_MODE ) { + case CRYPT_AES_MODE_MCRYPT: + switch ($mode) { + case CRYPT_AES_MODE_ECB: + $this->mode = MCRYPT_MODE_ECB; + break; + case CRYPT_AES_MODE_CTR: + // ctr doesn't have a constant associated with it even though it appears to be fairly widely + // supported. in lieu of knowing just how widely supported it is, i've, for now, opted not to + // include a compatibility layer. the layer has been implemented but, for now, is commented out. + $this->mode = 'ctr'; + //$this->mode = in_array('ctr', mcrypt_list_modes()) ? 'ctr' : CRYPT_AES_MODE_CTR; + break; + case CRYPT_AES_MODE_CBC: + default: + $this->mode = MCRYPT_MODE_CBC; + } + + break; + default: + switch ($mode) { + case CRYPT_AES_MODE_ECB: + $this->mode = CRYPT_RIJNDAEL_MODE_ECB; + break; + case CRYPT_AES_MODE_CTR: + $this->mode = CRYPT_RIJNDAEL_MODE_CTR; + break; + case CRYPT_AES_MODE_CBC: + default: + $this->mode = CRYPT_RIJNDAEL_MODE_CBC; + } + } + + if (CRYPT_AES_MODE == CRYPT_AES_MODE_INTERNAL) { + parent::Crypt_Rijndael($this->mode); + } + } + + /** + * Dummy function + * + * Since Crypt_AES extends Crypt_Rijndael, this function is, technically, available, but it doesn't do anything. + * + * @access public + * @param Integer $length + */ + function setBlockLength($length) + { + return; + } + + /** + * Encrypts a message. + * + * $plaintext will be padded with up to 16 additional bytes. Other AES implementations may or may not pad in the + * same manner. Other common approaches to padding and the reasons why it's necessary are discussed in the following + * URL: + * + * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html} + * + * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does. + * strlen($plaintext) will still need to be a multiple of 16, however, arbitrary values can be added to make it that + * length. + * + * @see Crypt_AES::decrypt() + * @access public + * @param String $plaintext + */ + function encrypt($plaintext) + { + if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) { + $this->_mcryptSetup(); + /* + if ($this->mode == CRYPT_AES_MODE_CTR) { + $iv = $this->encryptIV; + $xor = mcrypt_generic($this->enmcrypt, $this->_generate_xor(strlen($plaintext), $iv)); + $ciphertext = $plaintext ^ $xor; + if ($this->continuousBuffer) { + $this->encryptIV = $iv; + } + return $ciphertext; + } + */ + + if ($this->mode != 'ctr') { + $plaintext = $this->_pad($plaintext); + } + + $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext); + + if (!$this->continuousBuffer) { + mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv); + } + + return $ciphertext; + } + + return parent::encrypt($plaintext); + } + + /** + * Decrypts a message. + * + * If strlen($ciphertext) is not a multiple of 16, null bytes will be added to the end of the string until it is. + * + * @see Crypt_AES::encrypt() + * @access public + * @param String $ciphertext + */ + function decrypt($ciphertext) + { + if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) { + $this->_mcryptSetup(); + /* + if ($this->mode == CRYPT_AES_MODE_CTR) { + $iv = $this->decryptIV; + $xor = mcrypt_generic($this->enmcrypt, $this->_generate_xor(strlen($ciphertext), $iv)); + $plaintext = $ciphertext ^ $xor; + if ($this->continuousBuffer) { + $this->decryptIV = $iv; + } + return $plaintext; + } + */ + + if ($this->mode != 'ctr') { + // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic : + // "The data is padded with "\0" to make sure the length of the data is n * blocksize." + $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 15) & 0xFFFFFFF0, chr(0)); + } + + $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext); + + if (!$this->continuousBuffer) { + mcrypt_generic_init($this->demcrypt, $this->key, $this->iv); + } + + return $this->mode != 'ctr' ? $this->_unpad($plaintext) : $plaintext; + } + + return parent::decrypt($ciphertext); + } + + /** + * Setup mcrypt + * + * Validates all the variables. + * + * @access private + */ + function _mcryptSetup() + { + if (!$this->changed) { + return; + } + + if (!$this->explicit_key_length) { + // this just copied from Crypt_Rijndael::_setup() + $length = strlen($this->key) >> 2; + if ($length > 8) { + $length = 8; + } else if ($length < 4) { + $length = 4; + } + $this->Nk = $length; + $this->key_size = $length << 2; + } + + switch ($this->Nk) { + case 4: // 128 + $this->key_size = 16; + break; + case 5: // 160 + case 6: // 192 + $this->key_size = 24; + break; + case 7: // 224 + case 8: // 256 + $this->key_size = 32; + } + + $this->key = substr($this->key, 0, $this->key_size); + $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($this->iv, 0, 16), 16, chr(0)); + + if (!isset($this->enmcrypt)) { + $mode = $this->mode; + //$mode = $this->mode == CRYPT_AES_MODE_CTR ? MCRYPT_MODE_ECB : $this->mode; + + $this->demcrypt = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', $mode, ''); + $this->enmcrypt = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', $mode, ''); + } // else should mcrypt_generic_deinit be called? + + mcrypt_generic_init($this->demcrypt, $this->key, $this->iv); + mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv); + + $this->changed = false; + } + + /** + * Encrypts a block + * + * Optimized over Crypt_Rijndael's implementation by means of loop unrolling. + * + * @see Crypt_Rijndael::_encryptBlock() + * @access private + * @param String $in + * @return String + */ + function _encryptBlock($in) + { + $state = unpack('N*word', $in); + + $Nr = $this->Nr; + $w = $this->w; + $t0 = $this->t0; + $t1 = $this->t1; + $t2 = $this->t2; + $t3 = $this->t3; + + // addRoundKey and reindex $state + $state = array( + $state['word1'] ^ $w[0][0], + $state['word2'] ^ $w[0][1], + $state['word3'] ^ $w[0][2], + $state['word4'] ^ $w[0][3] + ); + + // shiftRows + subWord + mixColumns + addRoundKey + // we could loop unroll this and use if statements to do more rounds as necessary, but, in my tests, that yields + // only a marginal improvement. since that also, imho, hinders the readability of the code, i've opted not to do it. + for ($round = 1; $round < $this->Nr; $round++) { + $state = array( + $t0[$state[0] & 0xFF000000] ^ $t1[$state[1] & 0x00FF0000] ^ $t2[$state[2] & 0x0000FF00] ^ $t3[$state[3] & 0x000000FF] ^ $w[$round][0], + $t0[$state[1] & 0xFF000000] ^ $t1[$state[2] & 0x00FF0000] ^ $t2[$state[3] & 0x0000FF00] ^ $t3[$state[0] & 0x000000FF] ^ $w[$round][1], + $t0[$state[2] & 0xFF000000] ^ $t1[$state[3] & 0x00FF0000] ^ $t2[$state[0] & 0x0000FF00] ^ $t3[$state[1] & 0x000000FF] ^ $w[$round][2], + $t0[$state[3] & 0xFF000000] ^ $t1[$state[0] & 0x00FF0000] ^ $t2[$state[1] & 0x0000FF00] ^ $t3[$state[2] & 0x000000FF] ^ $w[$round][3] + ); + + } + + // subWord + $state = array( + $this->_subWord($state[0]), + $this->_subWord($state[1]), + $this->_subWord($state[2]), + $this->_subWord($state[3]) + ); + + // shiftRows + addRoundKey + $state = array( + ($state[0] & 0xFF000000) ^ ($state[1] & 0x00FF0000) ^ ($state[2] & 0x0000FF00) ^ ($state[3] & 0x000000FF) ^ $this->w[$this->Nr][0], + ($state[1] & 0xFF000000) ^ ($state[2] & 0x00FF0000) ^ ($state[3] & 0x0000FF00) ^ ($state[0] & 0x000000FF) ^ $this->w[$this->Nr][1], + ($state[2] & 0xFF000000) ^ ($state[3] & 0x00FF0000) ^ ($state[0] & 0x0000FF00) ^ ($state[1] & 0x000000FF) ^ $this->w[$this->Nr][2], + ($state[3] & 0xFF000000) ^ ($state[0] & 0x00FF0000) ^ ($state[1] & 0x0000FF00) ^ ($state[2] & 0x000000FF) ^ $this->w[$this->Nr][3] + ); + + return pack('N*', $state[0], $state[1], $state[2], $state[3]); + } + + /** + * Decrypts a block + * + * Optimized over Crypt_Rijndael's implementation by means of loop unrolling. + * + * @see Crypt_Rijndael::_decryptBlock() + * @access private + * @param String $in + * @return String + */ + function _decryptBlock($in) + { + $state = unpack('N*word', $in); + + $Nr = $this->Nr; + $dw = $this->dw; + $dt0 = $this->dt0; + $dt1 = $this->dt1; + $dt2 = $this->dt2; + $dt3 = $this->dt3; + + // addRoundKey and reindex $state + $state = array( + $state['word1'] ^ $dw[$this->Nr][0], + $state['word2'] ^ $dw[$this->Nr][1], + $state['word3'] ^ $dw[$this->Nr][2], + $state['word4'] ^ $dw[$this->Nr][3] + ); + + + // invShiftRows + invSubBytes + invMixColumns + addRoundKey + for ($round = $this->Nr - 1; $round > 0; $round--) { + $state = array( + $dt0[$state[0] & 0xFF000000] ^ $dt1[$state[3] & 0x00FF0000] ^ $dt2[$state[2] & 0x0000FF00] ^ $dt3[$state[1] & 0x000000FF] ^ $dw[$round][0], + $dt0[$state[1] & 0xFF000000] ^ $dt1[$state[0] & 0x00FF0000] ^ $dt2[$state[3] & 0x0000FF00] ^ $dt3[$state[2] & 0x000000FF] ^ $dw[$round][1], + $dt0[$state[2] & 0xFF000000] ^ $dt1[$state[1] & 0x00FF0000] ^ $dt2[$state[0] & 0x0000FF00] ^ $dt3[$state[3] & 0x000000FF] ^ $dw[$round][2], + $dt0[$state[3] & 0xFF000000] ^ $dt1[$state[2] & 0x00FF0000] ^ $dt2[$state[1] & 0x0000FF00] ^ $dt3[$state[0] & 0x000000FF] ^ $dw[$round][3] + ); + } + + // invShiftRows + invSubWord + addRoundKey + $state = array( + $this->_invSubWord(($state[0] & 0xFF000000) ^ ($state[3] & 0x00FF0000) ^ ($state[2] & 0x0000FF00) ^ ($state[1] & 0x000000FF)) ^ $dw[0][0], + $this->_invSubWord(($state[1] & 0xFF000000) ^ ($state[0] & 0x00FF0000) ^ ($state[3] & 0x0000FF00) ^ ($state[2] & 0x000000FF)) ^ $dw[0][1], + $this->_invSubWord(($state[2] & 0xFF000000) ^ ($state[1] & 0x00FF0000) ^ ($state[0] & 0x0000FF00) ^ ($state[3] & 0x000000FF)) ^ $dw[0][2], + $this->_invSubWord(($state[3] & 0xFF000000) ^ ($state[2] & 0x00FF0000) ^ ($state[1] & 0x0000FF00) ^ ($state[0] & 0x000000FF)) ^ $dw[0][3] + ); + + return pack('N*', $state[0], $state[1], $state[2], $state[3]); + } +} + +// vim: ts=4:sw=4:et: +// vim6: fdl=1: \ No newline at end of file diff --git a/plugins/OStatus/extlib/Crypt/DES.php b/plugins/OStatus/extlib/Crypt/DES.php new file mode 100644 index 0000000000..985ed25b5e --- /dev/null +++ b/plugins/OStatus/extlib/Crypt/DES.php @@ -0,0 +1,945 @@ + + * setKey('abcdefgh'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $des->decrypt($des->encrypt($plaintext)); + * ?> + * + * + * LICENSE: This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * @category Crypt + * @package Crypt_DES + * @author Jim Wigginton + * @copyright MMVII Jim Wigginton + * @license http://www.gnu.org/licenses/lgpl.txt + * @version $Id: DES.php,v 1.12 2010/02/09 06:10:26 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/**#@+ + * @access private + * @see Crypt_DES::_prepareKey() + * @see Crypt_DES::_processBlock() + */ +/** + * Contains array_reverse($keys[CRYPT_DES_DECRYPT]) + */ +define('CRYPT_DES_ENCRYPT', 0); +/** + * Contains array_reverse($keys[CRYPT_DES_ENCRYPT]) + */ +define('CRYPT_DES_DECRYPT', 1); +/**#@-*/ + +/**#@+ + * @access public + * @see Crypt_DES::encrypt() + * @see Crypt_DES::decrypt() + */ +/** + * Encrypt / decrypt using the Counter mode. + * + * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29 + */ +define('CRYPT_DES_MODE_CTR', -1); +/** + * Encrypt / decrypt using the Electronic Code Book mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29 + */ +define('CRYPT_DES_MODE_ECB', 1); +/** + * Encrypt / decrypt using the Code Book Chaining mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29 + */ +define('CRYPT_DES_MODE_CBC', 2); +/**#@-*/ + +/**#@+ + * @access private + * @see Crypt_DES::Crypt_DES() + */ +/** + * Toggles the internal implementation + */ +define('CRYPT_DES_MODE_INTERNAL', 1); +/** + * Toggles the mcrypt implementation + */ +define('CRYPT_DES_MODE_MCRYPT', 2); +/**#@-*/ + +/** + * Pure-PHP implementation of DES. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Crypt_DES + */ +class Crypt_DES { + /** + * The Key Schedule + * + * @see Crypt_DES::setKey() + * @var Array + * @access private + */ + var $keys = "\0\0\0\0\0\0\0\0"; + + /** + * The Encryption Mode + * + * @see Crypt_DES::Crypt_DES() + * @var Integer + * @access private + */ + var $mode; + + /** + * Continuous Buffer status + * + * @see Crypt_DES::enableContinuousBuffer() + * @var Boolean + * @access private + */ + var $continuousBuffer = false; + + /** + * Padding status + * + * @see Crypt_DES::enablePadding() + * @var Boolean + * @access private + */ + var $padding = true; + + /** + * The Initialization Vector + * + * @see Crypt_DES::setIV() + * @var String + * @access private + */ + var $iv = "\0\0\0\0\0\0\0\0"; + + /** + * A "sliding" Initialization Vector + * + * @see Crypt_DES::enableContinuousBuffer() + * @var String + * @access private + */ + var $encryptIV = "\0\0\0\0\0\0\0\0"; + + /** + * A "sliding" Initialization Vector + * + * @see Crypt_DES::enableContinuousBuffer() + * @var String + * @access private + */ + var $decryptIV = "\0\0\0\0\0\0\0\0"; + + /** + * mcrypt resource for encryption + * + * The mcrypt resource can be recreated every time something needs to be created or it can be created just once. + * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode. + * + * @see Crypt_AES::encrypt() + * @var String + * @access private + */ + var $enmcrypt; + + /** + * mcrypt resource for decryption + * + * The mcrypt resource can be recreated every time something needs to be created or it can be created just once. + * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode. + * + * @see Crypt_AES::decrypt() + * @var String + * @access private + */ + var $demcrypt; + + /** + * Does the (en|de)mcrypt resource need to be (re)initialized? + * + * @see setKey() + * @see setIV() + * @var Boolean + * @access private + */ + var $changed = true; + + /** + * Default Constructor. + * + * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be + * CRYPT_DES_MODE_ECB or CRYPT_DES_MODE_CBC. If not explictly set, CRYPT_DES_MODE_CBC will be used. + * + * @param optional Integer $mode + * @return Crypt_DES + * @access public + */ + function Crypt_DES($mode = CRYPT_MODE_DES_CBC) + { + if ( !defined('CRYPT_DES_MODE') ) { + switch (true) { + case extension_loaded('mcrypt'): + // i'd check to see if des was supported, by doing in_array('des', mcrypt_list_algorithms('')), + // but since that can be changed after the object has been created, there doesn't seem to be + // a lot of point... + define('CRYPT_DES_MODE', CRYPT_DES_MODE_MCRYPT); + break; + default: + define('CRYPT_DES_MODE', CRYPT_DES_MODE_INTERNAL); + } + } + + switch ( CRYPT_DES_MODE ) { + case CRYPT_DES_MODE_MCRYPT: + switch ($mode) { + case CRYPT_DES_MODE_ECB: + $this->mode = MCRYPT_MODE_ECB; + break; + case CRYPT_DES_MODE_CTR: + $this->mode = 'ctr'; + //$this->mode = in_array('ctr', mcrypt_list_modes()) ? 'ctr' : CRYPT_DES_MODE_CTR; + break; + case CRYPT_DES_MODE_CBC: + default: + $this->mode = MCRYPT_MODE_CBC; + } + + break; + default: + switch ($mode) { + case CRYPT_DES_MODE_ECB: + case CRYPT_DES_MODE_CTR: + case CRYPT_DES_MODE_CBC: + $this->mode = $mode; + break; + default: + $this->mode = CRYPT_DES_MODE_CBC; + } + } + } + + /** + * Sets the key. + * + * Keys can be of any length. DES, itself, uses 64-bit keys (eg. strlen($key) == 8), however, we + * only use the first eight, if $key has more then eight characters in it, and pad $key with the + * null byte if it is less then eight characters long. + * + * DES also requires that every eighth bit be a parity bit, however, we'll ignore that. + * + * If the key is not explicitly set, it'll be assumed to be all zero's. + * + * @access public + * @param String $key + */ + function setKey($key) + { + $this->keys = ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) ? substr($key, 0, 8) : $this->_prepareKey($key); + $this->changed = true; + } + + /** + * Sets the initialization vector. (optional) + * + * SetIV is not required when CRYPT_DES_MODE_ECB is being used. If not explictly set, it'll be assumed + * to be all zero's. + * + * @access public + * @param String $iv + */ + function setIV($iv) + { + $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, 8), 8, chr(0)); + $this->changed = true; + } + + /** + * Generate CTR XOR encryption key + * + * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the + * plaintext / ciphertext in CTR mode. + * + * @see Crypt_DES::decrypt() + * @see Crypt_DES::encrypt() + * @access public + * @param Integer $length + * @param String $iv + */ + function _generate_xor($length, &$iv) + { + $xor = ''; + $num_blocks = ($length + 7) >> 3; + for ($i = 0; $i < $num_blocks; $i++) { + $xor.= $iv; + for ($j = 4; $j <= 8; $j+=4) { + $temp = substr($iv, -$j, 4); + switch ($temp) { + case "\xFF\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4); + break; + case "\x7F\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4); + break 2; + default: + extract(unpack('Ncount', $temp)); + $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4); + break 2; + } + } + } + + return $xor; + } + + /** + * Encrypts a message. + * + * $plaintext will be padded with up to 8 additional bytes. Other DES implementations may or may not pad in the + * same manner. Other common approaches to padding and the reasons why it's necessary are discussed in the following + * URL: + * + * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html} + * + * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does. + * strlen($plaintext) will still need to be a multiple of 8, however, arbitrary values can be added to make it that + * length. + * + * @see Crypt_DES::decrypt() + * @access public + * @param String $plaintext + */ + function encrypt($plaintext) + { + if ($this->mode != CRYPT_DES_MODE_CTR && $this->mode != 'ctr') { + $plaintext = $this->_pad($plaintext); + } + + if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) { + if ($this->changed) { + if (!isset($this->enmcrypt)) { + $this->enmcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, ''); + } + mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV); + $this->changed = false; + } + + $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext); + + if (!$this->continuousBuffer) { + mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV); + } + + return $ciphertext; + } + + if (!is_array($this->keys)) { + $this->keys = $this->_prepareKey("\0\0\0\0\0\0\0\0"); + } + + $ciphertext = ''; + switch ($this->mode) { + case CRYPT_DES_MODE_ECB: + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $ciphertext.= $this->_processBlock(substr($plaintext, $i, 8), CRYPT_DES_ENCRYPT); + } + break; + case CRYPT_DES_MODE_CBC: + $xor = $this->encryptIV; + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $block = substr($plaintext, $i, 8); + $block = $this->_processBlock($block ^ $xor, CRYPT_DES_ENCRYPT); + $xor = $block; + $ciphertext.= $block; + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + } + break; + case CRYPT_DES_MODE_CTR: + $xor = $this->encryptIV; + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $block = substr($plaintext, $i, 8); + $key = $this->_processBlock($this->_generate_xor(8, $xor), CRYPT_DES_ENCRYPT); + $ciphertext.= $block ^ $key; + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + } + } + + return $ciphertext; + } + + /** + * Decrypts a message. + * + * If strlen($ciphertext) is not a multiple of 8, null bytes will be added to the end of the string until it is. + * + * @see Crypt_DES::encrypt() + * @access public + * @param String $ciphertext + */ + function decrypt($ciphertext) + { + if ($this->mode != CRYPT_DES_MODE_CTR && $this->mode != 'ctr') { + // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic : + // "The data is padded with "\0" to make sure the length of the data is n * blocksize." + $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, chr(0)); + } + + if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) { + if ($this->changed) { + if (!isset($this->demcrypt)) { + $this->demcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, ''); + } + mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV); + $this->changed = false; + } + + $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext); + + if (!$this->continuousBuffer) { + mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV); + } + + return $this->mode != 'ctr' ? $this->_unpad($plaintext) : $plaintext; + } + + if (!is_array($this->keys)) { + $this->keys = $this->_prepareKey("\0\0\0\0\0\0\0\0"); + } + + $plaintext = ''; + switch ($this->mode) { + case CRYPT_DES_MODE_ECB: + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $plaintext.= $this->_processBlock(substr($ciphertext, $i, 8), CRYPT_DES_DECRYPT); + } + break; + case CRYPT_DES_MODE_CBC: + $xor = $this->decryptIV; + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $block = substr($ciphertext, $i, 8); + $plaintext.= $this->_processBlock($block, CRYPT_DES_DECRYPT) ^ $xor; + $xor = $block; + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + } + break; + case CRYPT_DES_MODE_CTR: + $xor = $this->decryptIV; + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $block = substr($ciphertext, $i, 8); + $key = $this->_processBlock($this->_generate_xor(8, $xor), CRYPT_DES_ENCRYPT); + $plaintext.= $block ^ $key; + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + } + } + + return $this->mode != CRYPT_DES_MODE_CTR ? $this->_unpad($plaintext) : $plaintext; + } + + /** + * Treat consecutive "packets" as if they are a continuous buffer. + * + * Say you have a 16-byte plaintext $plaintext. Using the default behavior, the two following code snippets + * will yield different outputs: + * + * + * echo $des->encrypt(substr($plaintext, 0, 8)); + * echo $des->encrypt(substr($plaintext, 8, 8)); + * + * + * echo $des->encrypt($plaintext); + * + * + * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates + * another, as demonstrated with the following: + * + * + * $des->encrypt(substr($plaintext, 0, 8)); + * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8))); + * + * + * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8))); + * + * + * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different + * outputs. The reason is due to the fact that the initialization vector's change after every encryption / + * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant. + * + * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each + * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that + * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them), + * however, they are also less intuitive and more likely to cause you problems. + * + * @see Crypt_DES::disableContinuousBuffer() + * @access public + */ + function enableContinuousBuffer() + { + $this->continuousBuffer = true; + } + + /** + * Treat consecutive packets as if they are a discontinuous buffer. + * + * The default behavior. + * + * @see Crypt_DES::enableContinuousBuffer() + * @access public + */ + function disableContinuousBuffer() + { + $this->continuousBuffer = false; + $this->encryptIV = $this->iv; + $this->decryptIV = $this->iv; + } + + /** + * Pad "packets". + * + * DES works by encrypting eight bytes at a time. If you ever need to encrypt or decrypt something that's not + * a multiple of eight, it becomes necessary to pad the input so that it's length is a multiple of eight. + * + * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH1, + * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping + * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is + * transmitted separately) + * + * @see Crypt_DES::disablePadding() + * @access public + */ + function enablePadding() + { + $this->padding = true; + } + + /** + * Do not pad packets. + * + * @see Crypt_DES::enablePadding() + * @access public + */ + function disablePadding() + { + $this->padding = false; + } + + /** + * Pads a string + * + * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize (8). + * 8 - (strlen($text) & 7) bytes are added, each of which is equal to chr(8 - (strlen($text) & 7) + * + * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless + * and padding will, hence forth, be enabled. + * + * @see Crypt_DES::_unpad() + * @access private + */ + function _pad($text) + { + $length = strlen($text); + + if (!$this->padding) { + if (($length & 7) == 0) { + return $text; + } else { + user_error("The plaintext's length ($length) is not a multiple of the block size (8)", E_USER_NOTICE); + $this->padding = true; + } + } + + $pad = 8 - ($length & 7); + return str_pad($text, $length + $pad, chr($pad)); + } + + /** + * Unpads a string + * + * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong + * and false will be returned. + * + * @see Crypt_DES::_pad() + * @access private + */ + function _unpad($text) + { + if (!$this->padding) { + return $text; + } + + $length = ord($text[strlen($text) - 1]); + + if (!$length || $length > 8) { + return false; + } + + return substr($text, 0, -$length); + } + + /** + * Encrypts or decrypts a 64-bit block + * + * $mode should be either CRYPT_DES_ENCRYPT or CRYPT_DES_DECRYPT. See + * {@link http://en.wikipedia.org/wiki/Image:Feistel.png Feistel.png} to get a general + * idea of what this function does. + * + * @access private + * @param String $block + * @param Integer $mode + * @return String + */ + function _processBlock($block, $mode) + { + // s-boxes. in the official DES docs, they're described as being matrices that + // one accesses by using the first and last bits to determine the row and the + // middle four bits to determine the column. in this implementation, they've + // been converted to vectors + static $sbox = array( + array( + 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, + 3, 10 ,10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, + 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, + 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13 + ), + array( + 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, + 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, + 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, + 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9 + ), + array( + 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, + 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, + 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, + 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12 + ), + array( + 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, + 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, + 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, + 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14 + ), + array( + 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, + 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, + 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, + 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3 + ), + array( + 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, + 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, + 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, + 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13 + ), + array( + 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, + 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, + 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, + 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12 + ), + array( + 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, + 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, + 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, + 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11 + ) + ); + + $keys = $this->keys; + + $temp = unpack('Na/Nb', $block); + $block = array($temp['a'], $temp['b']); + + // because php does arithmetic right shifts, if the most significant bits are set, right + // shifting those into the correct position will add 1's - not 0's. this will intefere + // with the | operation unless a second & is done. so we isolate these bits and left shift + // them into place. we then & each block with 0x7FFFFFFF to prevennt 1's from being added + // for any other shifts. + $msb = array( + ($block[0] >> 31) & 1, + ($block[1] >> 31) & 1 + ); + $block[0] &= 0x7FFFFFFF; + $block[1] &= 0x7FFFFFFF; + + // we isolate the appropriate bit in the appropriate integer and shift as appropriate. in + // some cases, there are going to be multiple bits in the same integer that need to be shifted + // in the same way. we combine those into one shift operation. + $block = array( + (($block[1] & 0x00000040) << 25) | (($block[1] & 0x00004000) << 16) | + (($block[1] & 0x00400001) << 7) | (($block[1] & 0x40000100) >> 2) | + (($block[0] & 0x00000040) << 21) | (($block[0] & 0x00004000) << 12) | + (($block[0] & 0x00400001) << 3) | (($block[0] & 0x40000100) >> 6) | + (($block[1] & 0x00000010) << 19) | (($block[1] & 0x00001000) << 10) | + (($block[1] & 0x00100000) << 1) | (($block[1] & 0x10000000) >> 8) | + (($block[0] & 0x00000010) << 15) | (($block[0] & 0x00001000) << 6) | + (($block[0] & 0x00100000) >> 3) | (($block[0] & 0x10000000) >> 12) | + (($block[1] & 0x00000004) << 13) | (($block[1] & 0x00000400) << 4) | + (($block[1] & 0x00040000) >> 5) | (($block[1] & 0x04000000) >> 14) | + (($block[0] & 0x00000004) << 9) | ( $block[0] & 0x00000400 ) | + (($block[0] & 0x00040000) >> 9) | (($block[0] & 0x04000000) >> 18) | + (($block[1] & 0x00010000) >> 11) | (($block[1] & 0x01000000) >> 20) | + (($block[0] & 0x00010000) >> 15) | (($block[0] & 0x01000000) >> 24) + , + (($block[1] & 0x00000080) << 24) | (($block[1] & 0x00008000) << 15) | + (($block[1] & 0x00800002) << 6) | (($block[0] & 0x00000080) << 20) | + (($block[0] & 0x00008000) << 11) | (($block[0] & 0x00800002) << 2) | + (($block[1] & 0x00000020) << 18) | (($block[1] & 0x00002000) << 9) | + ( $block[1] & 0x00200000 ) | (($block[1] & 0x20000000) >> 9) | + (($block[0] & 0x00000020) << 14) | (($block[0] & 0x00002000) << 5) | + (($block[0] & 0x00200000) >> 4) | (($block[0] & 0x20000000) >> 13) | + (($block[1] & 0x00000008) << 12) | (($block[1] & 0x00000800) << 3) | + (($block[1] & 0x00080000) >> 6) | (($block[1] & 0x08000000) >> 15) | + (($block[0] & 0x00000008) << 8) | (($block[0] & 0x00000800) >> 1) | + (($block[0] & 0x00080000) >> 10) | (($block[0] & 0x08000000) >> 19) | + (($block[1] & 0x00000200) >> 3) | (($block[0] & 0x00000200) >> 7) | + (($block[1] & 0x00020000) >> 12) | (($block[1] & 0x02000000) >> 21) | + (($block[0] & 0x00020000) >> 16) | (($block[0] & 0x02000000) >> 25) | + ($msb[1] << 28) | ($msb[0] << 24) + ); + + for ($i = 0; $i < 16; $i++) { + // start of "the Feistel (F) function" - see the following URL: + // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png + $temp = (($sbox[0][((($block[1] >> 27) & 0x1F) | (($block[1] & 1) << 5)) ^ $keys[$mode][$i][0]]) << 28) + | (($sbox[1][(($block[1] & 0x1F800000) >> 23) ^ $keys[$mode][$i][1]]) << 24) + | (($sbox[2][(($block[1] & 0x01F80000) >> 19) ^ $keys[$mode][$i][2]]) << 20) + | (($sbox[3][(($block[1] & 0x001F8000) >> 15) ^ $keys[$mode][$i][3]]) << 16) + | (($sbox[4][(($block[1] & 0x0001F800) >> 11) ^ $keys[$mode][$i][4]]) << 12) + | (($sbox[5][(($block[1] & 0x00001F80) >> 7) ^ $keys[$mode][$i][5]]) << 8) + | (($sbox[6][(($block[1] & 0x000001F8) >> 3) ^ $keys[$mode][$i][6]]) << 4) + | ( $sbox[7][((($block[1] & 0x1F) << 1) | (($block[1] >> 31) & 1)) ^ $keys[$mode][$i][7]]); + + $msb = ($temp >> 31) & 1; + $temp &= 0x7FFFFFFF; + $newBlock = (($temp & 0x00010000) << 15) | (($temp & 0x02020120) << 5) + | (($temp & 0x00001800) << 17) | (($temp & 0x01000000) >> 10) + | (($temp & 0x00000008) << 24) | (($temp & 0x00100000) << 6) + | (($temp & 0x00000010) << 21) | (($temp & 0x00008000) << 9) + | (($temp & 0x00000200) << 12) | (($temp & 0x10000000) >> 27) + | (($temp & 0x00000040) << 14) | (($temp & 0x08000000) >> 8) + | (($temp & 0x00004000) << 4) | (($temp & 0x00000002) << 16) + | (($temp & 0x00442000) >> 6) | (($temp & 0x40800000) >> 15) + | (($temp & 0x00000001) << 11) | (($temp & 0x20000000) >> 20) + | (($temp & 0x00080000) >> 13) | (($temp & 0x00000004) << 3) + | (($temp & 0x04000000) >> 22) | (($temp & 0x00000480) >> 7) + | (($temp & 0x00200000) >> 19) | ($msb << 23); + // end of "the Feistel (F) function" - $newBlock is F's output + + $temp = $block[1]; + $block[1] = $block[0] ^ $newBlock; + $block[0] = $temp; + } + + $msb = array( + ($block[0] >> 31) & 1, + ($block[1] >> 31) & 1 + ); + $block[0] &= 0x7FFFFFFF; + $block[1] &= 0x7FFFFFFF; + + $block = array( + (($block[0] & 0x01000004) << 7) | (($block[1] & 0x01000004) << 6) | + (($block[0] & 0x00010000) << 13) | (($block[1] & 0x00010000) << 12) | + (($block[0] & 0x00000100) << 19) | (($block[1] & 0x00000100) << 18) | + (($block[0] & 0x00000001) << 25) | (($block[1] & 0x00000001) << 24) | + (($block[0] & 0x02000008) >> 2) | (($block[1] & 0x02000008) >> 3) | + (($block[0] & 0x00020000) << 4) | (($block[1] & 0x00020000) << 3) | + (($block[0] & 0x00000200) << 10) | (($block[1] & 0x00000200) << 9) | + (($block[0] & 0x00000002) << 16) | (($block[1] & 0x00000002) << 15) | + (($block[0] & 0x04000000) >> 11) | (($block[1] & 0x04000000) >> 12) | + (($block[0] & 0x00040000) >> 5) | (($block[1] & 0x00040000) >> 6) | + (($block[0] & 0x00000400) << 1) | ( $block[1] & 0x00000400 ) | + (($block[0] & 0x08000000) >> 20) | (($block[1] & 0x08000000) >> 21) | + (($block[0] & 0x00080000) >> 14) | (($block[1] & 0x00080000) >> 15) | + (($block[0] & 0x00000800) >> 8) | (($block[1] & 0x00000800) >> 9) + , + (($block[0] & 0x10000040) << 3) | (($block[1] & 0x10000040) << 2) | + (($block[0] & 0x00100000) << 9) | (($block[1] & 0x00100000) << 8) | + (($block[0] & 0x00001000) << 15) | (($block[1] & 0x00001000) << 14) | + (($block[0] & 0x00000010) << 21) | (($block[1] & 0x00000010) << 20) | + (($block[0] & 0x20000080) >> 6) | (($block[1] & 0x20000080) >> 7) | + ( $block[0] & 0x00200000 ) | (($block[1] & 0x00200000) >> 1) | + (($block[0] & 0x00002000) << 6) | (($block[1] & 0x00002000) << 5) | + (($block[0] & 0x00000020) << 12) | (($block[1] & 0x00000020) << 11) | + (($block[0] & 0x40000000) >> 15) | (($block[1] & 0x40000000) >> 16) | + (($block[0] & 0x00400000) >> 9) | (($block[1] & 0x00400000) >> 10) | + (($block[0] & 0x00004000) >> 3) | (($block[1] & 0x00004000) >> 4) | + (($block[0] & 0x00800000) >> 18) | (($block[1] & 0x00800000) >> 19) | + (($block[0] & 0x00008000) >> 12) | (($block[1] & 0x00008000) >> 13) | + ($msb[0] << 7) | ($msb[1] << 6) + ); + + return pack('NN', $block[0], $block[1]); + } + + /** + * Creates the key schedule. + * + * @access private + * @param String $key + * @return Array + */ + function _prepareKey($key) + { + static $shifts = array( // number of key bits shifted per round + 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 + ); + + // pad the key and remove extra characters as appropriate. + $key = str_pad(substr($key, 0, 8), 8, chr(0)); + + $temp = unpack('Na/Nb', $key); + $key = array($temp['a'], $temp['b']); + $msb = array( + ($key[0] >> 31) & 1, + ($key[1] >> 31) & 1 + ); + $key[0] &= 0x7FFFFFFF; + $key[1] &= 0x7FFFFFFF; + + $key = array( + (($key[1] & 0x00000002) << 26) | (($key[1] & 0x00000204) << 17) | + (($key[1] & 0x00020408) << 8) | (($key[1] & 0x02040800) >> 1) | + (($key[0] & 0x00000002) << 22) | (($key[0] & 0x00000204) << 13) | + (($key[0] & 0x00020408) << 4) | (($key[0] & 0x02040800) >> 5) | + (($key[1] & 0x04080000) >> 10) | (($key[0] & 0x04080000) >> 14) | + (($key[1] & 0x08000000) >> 19) | (($key[0] & 0x08000000) >> 23) | + (($key[0] & 0x00000010) >> 1) | (($key[0] & 0x00001000) >> 10) | + (($key[0] & 0x00100000) >> 19) | (($key[0] & 0x10000000) >> 28) + , + (($key[1] & 0x00000080) << 20) | (($key[1] & 0x00008000) << 11) | + (($key[1] & 0x00800000) << 2) | (($key[0] & 0x00000080) << 16) | + (($key[0] & 0x00008000) << 7) | (($key[0] & 0x00800000) >> 2) | + (($key[1] & 0x00000040) << 13) | (($key[1] & 0x00004000) << 4) | + (($key[1] & 0x00400000) >> 5) | (($key[1] & 0x40000000) >> 14) | + (($key[0] & 0x00000040) << 9) | ( $key[0] & 0x00004000 ) | + (($key[0] & 0x00400000) >> 9) | (($key[0] & 0x40000000) >> 18) | + (($key[1] & 0x00000020) << 6) | (($key[1] & 0x00002000) >> 3) | + (($key[1] & 0x00200000) >> 12) | (($key[1] & 0x20000000) >> 21) | + (($key[0] & 0x00000020) << 2) | (($key[0] & 0x00002000) >> 7) | + (($key[0] & 0x00200000) >> 16) | (($key[0] & 0x20000000) >> 25) | + (($key[1] & 0x00000010) >> 1) | (($key[1] & 0x00001000) >> 10) | + (($key[1] & 0x00100000) >> 19) | (($key[1] & 0x10000000) >> 28) | + ($msb[1] << 24) | ($msb[0] << 20) + ); + + $keys = array(); + for ($i = 0; $i < 16; $i++) { + $key[0] <<= $shifts[$i]; + $temp = ($key[0] & 0xF0000000) >> 28; + $key[0] = ($key[0] | $temp) & 0x0FFFFFFF; + + $key[1] <<= $shifts[$i]; + $temp = ($key[1] & 0xF0000000) >> 28; + $key[1] = ($key[1] | $temp) & 0x0FFFFFFF; + + $temp = array( + (($key[1] & 0x00004000) >> 9) | (($key[1] & 0x00000800) >> 7) | + (($key[1] & 0x00020000) >> 14) | (($key[1] & 0x00000010) >> 2) | + (($key[1] & 0x08000000) >> 26) | (($key[1] & 0x00800000) >> 23) + , + (($key[1] & 0x02400000) >> 20) | (($key[1] & 0x00000001) << 4) | + (($key[1] & 0x00002000) >> 10) | (($key[1] & 0x00040000) >> 18) | + (($key[1] & 0x00000080) >> 6) + , + ( $key[1] & 0x00000020 ) | (($key[1] & 0x00000200) >> 5) | + (($key[1] & 0x00010000) >> 13) | (($key[1] & 0x01000000) >> 22) | + (($key[1] & 0x00000004) >> 1) | (($key[1] & 0x00100000) >> 20) + , + (($key[1] & 0x00001000) >> 7) | (($key[1] & 0x00200000) >> 17) | + (($key[1] & 0x00000002) << 2) | (($key[1] & 0x00000100) >> 6) | + (($key[1] & 0x00008000) >> 14) | (($key[1] & 0x04000000) >> 26) + , + (($key[0] & 0x00008000) >> 10) | ( $key[0] & 0x00000010 ) | + (($key[0] & 0x02000000) >> 22) | (($key[0] & 0x00080000) >> 17) | + (($key[0] & 0x00000200) >> 8) | (($key[0] & 0x00000002) >> 1) + , + (($key[0] & 0x04000000) >> 21) | (($key[0] & 0x00010000) >> 12) | + (($key[0] & 0x00000020) >> 2) | (($key[0] & 0x00000800) >> 9) | + (($key[0] & 0x00800000) >> 22) | (($key[0] & 0x00000100) >> 8) + , + (($key[0] & 0x00001000) >> 7) | (($key[0] & 0x00000088) >> 3) | + (($key[0] & 0x00020000) >> 14) | (($key[0] & 0x00000001) << 2) | + (($key[0] & 0x00400000) >> 21) + , + (($key[0] & 0x00000400) >> 5) | (($key[0] & 0x00004000) >> 10) | + (($key[0] & 0x00000040) >> 3) | (($key[0] & 0x00100000) >> 18) | + (($key[0] & 0x08000000) >> 26) | (($key[0] & 0x01000000) >> 24) + ); + + $keys[] = $temp; + } + + $temp = array( + CRYPT_DES_ENCRYPT => $keys, + CRYPT_DES_DECRYPT => array_reverse($keys) + ); + + return $temp; + } +} + +// vim: ts=4:sw=4:et: +// vim6: fdl=1: \ No newline at end of file diff --git a/plugins/OStatus/extlib/Crypt/Hash.php b/plugins/OStatus/extlib/Crypt/Hash.php new file mode 100644 index 0000000000..e4dfde331a --- /dev/null +++ b/plugins/OStatus/extlib/Crypt/Hash.php @@ -0,0 +1,816 @@ + + * setKey('abcdefg'); + * + * echo base64_encode($hash->hash('abcdefg')); + * ?> + * + * + * LICENSE: This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * @category Crypt + * @package Crypt_Hash + * @author Jim Wigginton + * @copyright MMVII Jim Wigginton + * @license http://www.gnu.org/licenses/lgpl.txt + * @version $Id: Hash.php,v 1.6 2009/11/23 23:37:07 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/**#@+ + * @access private + * @see Crypt_Hash::Crypt_Hash() + */ +/** + * Toggles the internal implementation + */ +define('CRYPT_HASH_MODE_INTERNAL', 1); +/** + * Toggles the mhash() implementation, which has been deprecated on PHP 5.3.0+. + */ +define('CRYPT_HASH_MODE_MHASH', 2); +/** + * Toggles the hash() implementation, which works on PHP 5.1.2+. + */ +define('CRYPT_HASH_MODE_HASH', 3); +/**#@-*/ + +/** + * Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic hashing functions. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Crypt_Hash + */ +class Crypt_Hash { + /** + * Byte-length of compression blocks / key (Internal HMAC) + * + * @see Crypt_Hash::setAlgorithm() + * @var Integer + * @access private + */ + var $b; + + /** + * Byte-length of hash output (Internal HMAC) + * + * @see Crypt_Hash::setHash() + * @var Integer + * @access private + */ + var $l = false; + + /** + * Hash Algorithm + * + * @see Crypt_Hash::setHash() + * @var String + * @access private + */ + var $hash; + + /** + * Key + * + * @see Crypt_Hash::setKey() + * @var String + * @access private + */ + var $key = ''; + + /** + * Outer XOR (Internal HMAC) + * + * @see Crypt_Hash::setKey() + * @var String + * @access private + */ + var $opad; + + /** + * Inner XOR (Internal HMAC) + * + * @see Crypt_Hash::setKey() + * @var String + * @access private + */ + var $ipad; + + /** + * Default Constructor. + * + * @param optional String $hash + * @return Crypt_Hash + * @access public + */ + function Crypt_Hash($hash = 'sha1') + { + if ( !defined('CRYPT_HASH_MODE') ) { + switch (true) { + case extension_loaded('hash'): + define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_HASH); + break; + case extension_loaded('mhash'): + define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_MHASH); + break; + default: + define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_INTERNAL); + } + } + + $this->setHash($hash); + } + + /** + * Sets the key for HMACs + * + * Keys can be of any length. + * + * @access public + * @param String $key + */ + function setKey($key) + { + $this->key = $key; + } + + /** + * Sets the hash function. + * + * @access public + * @param String $hash + */ + function setHash($hash) + { + switch ($hash) { + case 'md5-96': + case 'sha1-96': + $this->l = 12; // 96 / 8 = 12 + break; + case 'md2': + case 'md5': + $this->l = 16; + break; + case 'sha1': + $this->l = 20; + break; + case 'sha256': + $this->l = 32; + break; + case 'sha384': + $this->l = 48; + break; + case 'sha512': + $this->l = 64; + } + + switch ($hash) { + case 'md2': + $mode = CRYPT_HASH_MODE_INTERNAL; + break; + case 'sha384': + case 'sha512': + $mode = CRYPT_HASH_MODE == CRYPT_HASH_MODE_MHASH ? CRYPT_HASH_MODE_INTERNAL : CRYPT_HASH_MODE; + break; + default: + $mode = CRYPT_HASH_MODE; + } + + switch ( $mode ) { + case CRYPT_HASH_MODE_MHASH: + switch ($hash) { + case 'md5': + case 'md5-96': + $this->hash = MHASH_MD5; + break; + case 'sha256': + $this->hash = MHASH_SHA256; + break; + case 'sha1': + case 'sha1-96': + default: + $this->hash = MHASH_SHA1; + } + return; + case CRYPT_HASH_MODE_HASH: + switch ($hash) { + case 'md5': + case 'md5-96': + $this->hash = 'md5'; + return; + case 'sha256': + case 'sha384': + case 'sha512': + $this->hash = $hash; + return; + case 'sha1': + case 'sha1-96': + default: + $this->hash = 'sha1'; + } + return; + } + + switch ($hash) { + case 'md2': + $this->b = 16; + $this->hash = array($this, '_md2'); + break; + case 'md5': + case 'md5-96': + $this->b = 64; + $this->hash = array($this, '_md5'); + break; + case 'sha256': + $this->b = 64; + $this->hash = array($this, '_sha256'); + break; + case 'sha384': + case 'sha512': + $this->b = 128; + $this->hash = array($this, '_sha512'); + break; + case 'sha1': + case 'sha1-96': + default: + $this->b = 64; + $this->hash = array($this, '_sha1'); + } + + $this->ipad = str_repeat(chr(0x36), $this->b); + $this->opad = str_repeat(chr(0x5C), $this->b); + } + + /** + * Compute the HMAC. + * + * @access public + * @param String $text + * @return String + */ + function hash($text) + { + $mode = is_array($this->hash) ? CRYPT_HASH_MODE_INTERNAL : CRYPT_HASH_MODE; + + if (!empty($this->key)) { + switch ( $mode ) { + case CRYPT_HASH_MODE_MHASH: + $output = mhash($this->hash, $text, $this->key); + break; + case CRYPT_HASH_MODE_HASH: + $output = hash_hmac($this->hash, $text, $this->key, true); + break; + case CRYPT_HASH_MODE_INTERNAL: + /* "Applications that use keys longer than B bytes will first hash the key using H and then use the + resultant L byte string as the actual key to HMAC." + + -- http://tools.ietf.org/html/rfc2104#section-2 */ + $key = strlen($this->key) > $this->b ? call_user_func($this->$hash, $this->key) : $this->key; + + $key = str_pad($key, $this->b, chr(0)); // step 1 + $temp = $this->ipad ^ $key; // step 2 + $temp .= $text; // step 3 + $temp = call_user_func($this->hash, $temp); // step 4 + $output = $this->opad ^ $key; // step 5 + $output.= $temp; // step 6 + $output = call_user_func($this->hash, $output); // step 7 + } + } else { + switch ( $mode ) { + case CRYPT_HASH_MODE_MHASH: + $output = mhash($this->hash, $text); + break; + case CRYPT_HASH_MODE_HASH: + $output = hash($this->hash, $text, true); + break; + case CRYPT_HASH_MODE_INTERNAL: + $output = call_user_func($this->hash, $text); + } + } + + return substr($output, 0, $this->l); + } + + /** + * Returns the hash length (in bytes) + * + * @access private + * @return Integer + */ + function getLength() + { + return $this->l; + } + + /** + * Wrapper for MD5 + * + * @access private + * @param String $text + */ + function _md5($m) + { + return pack('H*', md5($m)); + } + + /** + * Wrapper for SHA1 + * + * @access private + * @param String $text + */ + function _sha1($m) + { + return pack('H*', sha1($m)); + } + + /** + * Pure-PHP implementation of MD2 + * + * See {@link http://tools.ietf.org/html/rfc1319 RFC1319}. + * + * @access private + * @param String $text + */ + function _md2($m) + { + static $s = array( + 41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6, + 19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188, + 76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24, + 138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251, + 245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63, + 148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50, + 39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165, + 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210, + 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157, + 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27, + 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15, + 85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197, + 234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65, + 129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123, + 8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233, + 203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228, + 166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237, + 31, 26, 219, 153, 141, 51, 159, 17, 131, 20 + ); + + // Step 1. Append Padding Bytes + $pad = 16 - (strlen($m) & 0xF); + $m.= str_repeat(chr($pad), $pad); + + $length = strlen($m); + + // Step 2. Append Checksum + $c = str_repeat(chr(0), 16); + $l = chr(0); + for ($i = 0; $i < $length; $i+= 16) { + for ($j = 0; $j < 16; $j++) { + $c[$j] = chr($s[ord($m[$i + $j] ^ $l)]); + $l = $c[$j]; + } + } + $m.= $c; + + $length+= 16; + + // Step 3. Initialize MD Buffer + $x = str_repeat(chr(0), 48); + + // Step 4. Process Message in 16-Byte Blocks + for ($i = 0; $i < $length; $i+= 16) { + for ($j = 0; $j < 16; $j++) { + $x[$j + 16] = $m[$i + $j]; + $x[$j + 32] = $x[$j + 16] ^ $x[$j]; + } + $t = chr(0); + for ($j = 0; $j < 18; $j++) { + for ($k = 0; $k < 48; $k++) { + $x[$k] = $t = $x[$k] ^ chr($s[ord($t)]); + //$t = $x[$k] = $x[$k] ^ chr($s[ord($t)]); + } + $t = chr(ord($t) + $j); + } + } + + // Step 5. Output + return substr($x, 0, 16); + } + + /** + * Pure-PHP implementation of SHA256 + * + * See {@link http://en.wikipedia.org/wiki/SHA_hash_functions#SHA-256_.28a_SHA-2_variant.29_pseudocode SHA-256 (a SHA-2 variant) pseudocode - Wikipedia}. + * + * @access private + * @param String $text + */ + function _sha256($m) + { + if (extension_loaded('suhosin')) { + return pack('H*', sha256($m)); + } + + // Initialize variables + $hash = array( + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + ); + // Initialize table of round constants + // (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311) + static $k = array( + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 + ); + + // Pre-processing + $length = strlen($m); + // to round to nearest 56 mod 64, we'll add 64 - (length + (64 - 56)) % 64 + $m.= str_repeat(chr(0), 64 - (($length + 8) & 0x3F)); + $m[$length] = chr(0x80); + // we don't support hashing strings 512MB long + $m.= pack('N2', 0, $length << 3); + + // Process the message in successive 512-bit chunks + $chunks = str_split($m, 64); + foreach ($chunks as $chunk) { + $w = array(); + for ($i = 0; $i < 16; $i++) { + extract(unpack('Ntemp', $this->_string_shift($chunk, 4))); + $w[] = $temp; + } + + // Extend the sixteen 32-bit words into sixty-four 32-bit words + for ($i = 16; $i < 64; $i++) { + $s0 = $this->_rightRotate($w[$i - 15], 7) ^ + $this->_rightRotate($w[$i - 15], 18) ^ + $this->_rightShift( $w[$i - 15], 3); + $s1 = $this->_rightRotate($w[$i - 2], 17) ^ + $this->_rightRotate($w[$i - 2], 19) ^ + $this->_rightShift( $w[$i - 2], 10); + $w[$i] = $this->_add($w[$i - 16], $s0, $w[$i - 7], $s1); + + } + + // Initialize hash value for this chunk + list($a, $b, $c, $d, $e, $f, $g, $h) = $hash; + + // Main loop + for ($i = 0; $i < 64; $i++) { + $s0 = $this->_rightRotate($a, 2) ^ + $this->_rightRotate($a, 13) ^ + $this->_rightRotate($a, 22); + $maj = ($a & $b) ^ + ($a & $c) ^ + ($b & $c); + $t2 = $this->_add($s0, $maj); + + $s1 = $this->_rightRotate($e, 6) ^ + $this->_rightRotate($e, 11) ^ + $this->_rightRotate($e, 25); + $ch = ($e & $f) ^ + ($this->_not($e) & $g); + $t1 = $this->_add($h, $s1, $ch, $k[$i], $w[$i]); + + $h = $g; + $g = $f; + $f = $e; + $e = $this->_add($d, $t1); + $d = $c; + $c = $b; + $b = $a; + $a = $this->_add($t1, $t2); + } + + // Add this chunk's hash to result so far + $hash = array( + $this->_add($hash[0], $a), + $this->_add($hash[1], $b), + $this->_add($hash[2], $c), + $this->_add($hash[3], $d), + $this->_add($hash[4], $e), + $this->_add($hash[5], $f), + $this->_add($hash[6], $g), + $this->_add($hash[7], $h) + ); + } + + // Produce the final hash value (big-endian) + return pack('N8', $hash[0], $hash[1], $hash[2], $hash[3], $hash[4], $hash[5], $hash[6], $hash[7]); + } + + /** + * Pure-PHP implementation of SHA384 and SHA512 + * + * @access private + * @param String $text + */ + function _sha512($m) + { + if (!class_exists('Math_BigInteger')) { + require_once('Math/BigInteger.php'); + } + + static $init384, $init512, $k; + + if (!isset($k)) { + // Initialize variables + $init384 = array( // initial values for SHA384 + 'cbbb9d5dc1059ed8', '629a292a367cd507', '9159015a3070dd17', '152fecd8f70e5939', + '67332667ffc00b31', '8eb44a8768581511', 'db0c2e0d64f98fa7', '47b5481dbefa4fa4' + ); + $init512 = array( // initial values for SHA512 + '6a09e667f3bcc908', 'bb67ae8584caa73b', '3c6ef372fe94f82b', 'a54ff53a5f1d36f1', + '510e527fade682d1', '9b05688c2b3e6c1f', '1f83d9abfb41bd6b', '5be0cd19137e2179' + ); + + for ($i = 0; $i < 8; $i++) { + $init384[$i] = new Math_BigInteger($init384[$i], 16); + $init384[$i]->setPrecision(64); + $init512[$i] = new Math_BigInteger($init512[$i], 16); + $init512[$i]->setPrecision(64); + } + + // Initialize table of round constants + // (first 64 bits of the fractional parts of the cube roots of the first 80 primes 2..409) + $k = array( + '428a2f98d728ae22', '7137449123ef65cd', 'b5c0fbcfec4d3b2f', 'e9b5dba58189dbbc', + '3956c25bf348b538', '59f111f1b605d019', '923f82a4af194f9b', 'ab1c5ed5da6d8118', + 'd807aa98a3030242', '12835b0145706fbe', '243185be4ee4b28c', '550c7dc3d5ffb4e2', + '72be5d74f27b896f', '80deb1fe3b1696b1', '9bdc06a725c71235', 'c19bf174cf692694', + 'e49b69c19ef14ad2', 'efbe4786384f25e3', '0fc19dc68b8cd5b5', '240ca1cc77ac9c65', + '2de92c6f592b0275', '4a7484aa6ea6e483', '5cb0a9dcbd41fbd4', '76f988da831153b5', + '983e5152ee66dfab', 'a831c66d2db43210', 'b00327c898fb213f', 'bf597fc7beef0ee4', + 'c6e00bf33da88fc2', 'd5a79147930aa725', '06ca6351e003826f', '142929670a0e6e70', + '27b70a8546d22ffc', '2e1b21385c26c926', '4d2c6dfc5ac42aed', '53380d139d95b3df', + '650a73548baf63de', '766a0abb3c77b2a8', '81c2c92e47edaee6', '92722c851482353b', + 'a2bfe8a14cf10364', 'a81a664bbc423001', 'c24b8b70d0f89791', 'c76c51a30654be30', + 'd192e819d6ef5218', 'd69906245565a910', 'f40e35855771202a', '106aa07032bbd1b8', + '19a4c116b8d2d0c8', '1e376c085141ab53', '2748774cdf8eeb99', '34b0bcb5e19b48a8', + '391c0cb3c5c95a63', '4ed8aa4ae3418acb', '5b9cca4f7763e373', '682e6ff3d6b2b8a3', + '748f82ee5defb2fc', '78a5636f43172f60', '84c87814a1f0ab72', '8cc702081a6439ec', + '90befffa23631e28', 'a4506cebde82bde9', 'bef9a3f7b2c67915', 'c67178f2e372532b', + 'ca273eceea26619c', 'd186b8c721c0c207', 'eada7dd6cde0eb1e', 'f57d4f7fee6ed178', + '06f067aa72176fba', '0a637dc5a2c898a6', '113f9804bef90dae', '1b710b35131c471b', + '28db77f523047d84', '32caab7b40c72493', '3c9ebe0a15c9bebc', '431d67c49c100d4c', + '4cc5d4becb3e42b6', '597f299cfc657e2a', '5fcb6fab3ad6faec', '6c44198c4a475817' + ); + + for ($i = 0; $i < 80; $i++) { + $k[$i] = new Math_BigInteger($k[$i], 16); + } + } + + $hash = $this->l == 48 ? $init384 : $init512; + + // Pre-processing + $length = strlen($m); + // to round to nearest 112 mod 128, we'll add 128 - (length + (128 - 112)) % 128 + $m.= str_repeat(chr(0), 128 - (($length + 16) & 0x7F)); + $m[$length] = chr(0x80); + // we don't support hashing strings 512MB long + $m.= pack('N4', 0, 0, 0, $length << 3); + + // Process the message in successive 1024-bit chunks + $chunks = str_split($m, 128); + foreach ($chunks as $chunk) { + $w = array(); + for ($i = 0; $i < 16; $i++) { + $temp = new Math_BigInteger($this->_string_shift($chunk, 8), 256); + $temp->setPrecision(64); + $w[] = $temp; + } + + // Extend the sixteen 32-bit words into eighty 32-bit words + for ($i = 16; $i < 80; $i++) { + $temp = array( + $w[$i - 15]->bitwise_rightRotate(1), + $w[$i - 15]->bitwise_rightRotate(8), + $w[$i - 15]->bitwise_rightShift(7) + ); + $s0 = $temp[0]->bitwise_xor($temp[1]); + $s0 = $s0->bitwise_xor($temp[2]); + $temp = array( + $w[$i - 2]->bitwise_rightRotate(19), + $w[$i - 2]->bitwise_rightRotate(61), + $w[$i - 2]->bitwise_rightShift(6) + ); + $s1 = $temp[0]->bitwise_xor($temp[1]); + $s1 = $s1->bitwise_xor($temp[2]); + $w[$i] = $w[$i - 16]->copy(); + $w[$i] = $w[$i]->add($s0); + $w[$i] = $w[$i]->add($w[$i - 7]); + $w[$i] = $w[$i]->add($s1); + } + + // Initialize hash value for this chunk + $a = $hash[0]->copy(); + $b = $hash[1]->copy(); + $c = $hash[2]->copy(); + $d = $hash[3]->copy(); + $e = $hash[4]->copy(); + $f = $hash[5]->copy(); + $g = $hash[6]->copy(); + $h = $hash[7]->copy(); + + // Main loop + for ($i = 0; $i < 80; $i++) { + $temp = array( + $a->bitwise_rightRotate(28), + $a->bitwise_rightRotate(34), + $a->bitwise_rightRotate(39) + ); + $s0 = $temp[0]->bitwise_xor($temp[1]); + $s0 = $s0->bitwise_xor($temp[2]); + $temp = array( + $a->bitwise_and($b), + $a->bitwise_and($c), + $b->bitwise_and($c) + ); + $maj = $temp[0]->bitwise_xor($temp[1]); + $maj = $maj->bitwise_xor($temp[2]); + $t2 = $s0->add($maj); + + $temp = array( + $e->bitwise_rightRotate(14), + $e->bitwise_rightRotate(18), + $e->bitwise_rightRotate(41) + ); + $s1 = $temp[0]->bitwise_xor($temp[1]); + $s1 = $s1->bitwise_xor($temp[2]); + $temp = array( + $e->bitwise_and($f), + $g->bitwise_and($e->bitwise_not()) + ); + $ch = $temp[0]->bitwise_xor($temp[1]); + $t1 = $h->add($s1); + $t1 = $t1->add($ch); + $t1 = $t1->add($k[$i]); + $t1 = $t1->add($w[$i]); + + $h = $g->copy(); + $g = $f->copy(); + $f = $e->copy(); + $e = $d->add($t1); + $d = $c->copy(); + $c = $b->copy(); + $b = $a->copy(); + $a = $t1->add($t2); + } + + // Add this chunk's hash to result so far + $hash = array( + $hash[0]->add($a), + $hash[1]->add($b), + $hash[2]->add($c), + $hash[3]->add($d), + $hash[4]->add($e), + $hash[5]->add($f), + $hash[6]->add($g), + $hash[7]->add($h) + ); + } + + // Produce the final hash value (big-endian) + // (Crypt_Hash::hash() trims the output for hashes but not for HMACs. as such, we trim the output here) + $temp = $hash[0]->toBytes() . $hash[1]->toBytes() . $hash[2]->toBytes() . $hash[3]->toBytes() . + $hash[4]->toBytes() . $hash[5]->toBytes(); + if ($this->l != 48) { + $temp.= $hash[6]->toBytes() . $hash[7]->toBytes(); + } + + return $temp; + } + + /** + * Right Rotate + * + * @access private + * @param Integer $int + * @param Integer $amt + * @see _sha256() + * @return Integer + */ + function _rightRotate($int, $amt) + { + $invamt = 32 - $amt; + $mask = (1 << $invamt) - 1; + return (($int << $invamt) & 0xFFFFFFFF) | (($int >> $amt) & $mask); + } + + /** + * Right Shift + * + * @access private + * @param Integer $int + * @param Integer $amt + * @see _sha256() + * @return Integer + */ + function _rightShift($int, $amt) + { + $mask = (1 << (32 - $amt)) - 1; + return ($int >> $amt) & $mask; + } + + /** + * Not + * + * @access private + * @param Integer $int + * @see _sha256() + * @return Integer + */ + function _not($int) + { + return ~$int & 0xFFFFFFFF; + } + + /** + * Add + * + * _sha256() adds multiple unsigned 32-bit integers. Since PHP doesn't support unsigned integers and since the + * possibility of overflow exists, care has to be taken. Math_BigInteger() could be used but this should be faster. + * + * @param String $string + * @param optional Integer $index + * @return String + * @see _sha256() + * @access private + */ + function _add() + { + static $mod; + if (!isset($mod)) { + $mod = pow(2, 32); + } + + $result = 0; + $arguments = func_get_args(); + foreach ($arguments as $argument) { + $result+= $argument < 0 ? ($argument & 0x7FFFFFFF) + 0x80000000 : $argument; + } + + return fmod($result, $mod); + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param String $string + * @param optional Integer $index + * @return String + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } +} \ No newline at end of file diff --git a/plugins/OStatus/extlib/Crypt/RC4.php b/plugins/OStatus/extlib/Crypt/RC4.php new file mode 100644 index 0000000000..1e4d8b489f --- /dev/null +++ b/plugins/OStatus/extlib/Crypt/RC4.php @@ -0,0 +1,493 @@ + + * setKey('abcdefgh'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $rc4->decrypt($rc4->encrypt($plaintext)); + * ?> + * + * + * LICENSE: This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * @category Crypt + * @package Crypt_RC4 + * @author Jim Wigginton + * @copyright MMVII Jim Wigginton + * @license http://www.gnu.org/licenses/lgpl.txt + * @version $Id: RC4.php,v 1.8 2009/06/09 04:00:38 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/**#@+ + * @access private + * @see Crypt_RC4::Crypt_RC4() + */ +/** + * Toggles the internal implementation + */ +define('CRYPT_RC4_MODE_INTERNAL', 1); +/** + * Toggles the mcrypt implementation + */ +define('CRYPT_RC4_MODE_MCRYPT', 2); +/**#@-*/ + +/**#@+ + * @access private + * @see Crypt_RC4::_crypt() + */ +define('CRYPT_RC4_ENCRYPT', 0); +define('CRYPT_RC4_DECRYPT', 1); +/**#@-*/ + +/** + * Pure-PHP implementation of RC4. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Crypt_RC4 + */ +class Crypt_RC4 { + /** + * The Key + * + * @see Crypt_RC4::setKey() + * @var String + * @access private + */ + var $key = "\0"; + + /** + * The Key Stream for encryption + * + * If CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT, this will be equal to the mcrypt object + * + * @see Crypt_RC4::setKey() + * @var Array + * @access private + */ + var $encryptStream = false; + + /** + * The Key Stream for decryption + * + * If CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT, this will be equal to the mcrypt object + * + * @see Crypt_RC4::setKey() + * @var Array + * @access private + */ + var $decryptStream = false; + + /** + * The $i and $j indexes for encryption + * + * @see Crypt_RC4::_crypt() + * @var Integer + * @access private + */ + var $encryptIndex = 0; + + /** + * The $i and $j indexes for decryption + * + * @see Crypt_RC4::_crypt() + * @var Integer + * @access private + */ + var $decryptIndex = 0; + + /** + * MCrypt parameters + * + * @see Crypt_RC4::setMCrypt() + * @var Array + * @access private + */ + var $mcrypt = array('', ''); + + /** + * The Encryption Algorithm + * + * Only used if CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT. Only possible values are MCRYPT_RC4 or MCRYPT_ARCFOUR. + * + * @see Crypt_RC4::Crypt_RC4() + * @var Integer + * @access private + */ + var $mode; + + /** + * Default Constructor. + * + * Determines whether or not the mcrypt extension should be used. + * + * @param optional Integer $mode + * @return Crypt_RC4 + * @access public + */ + function Crypt_RC4() + { + if ( !defined('CRYPT_RC4_MODE') ) { + switch (true) { + case extension_loaded('mcrypt') && (defined('MCRYPT_ARCFOUR') || defined('MCRYPT_RC4')): + // i'd check to see if rc4 was supported, by doing in_array('arcfour', mcrypt_list_algorithms('')), + // but since that can be changed after the object has been created, there doesn't seem to be + // a lot of point... + define('CRYPT_RC4_MODE', CRYPT_RC4_MODE_MCRYPT); + break; + default: + define('CRYPT_RC4_MODE', CRYPT_RC4_MODE_INTERNAL); + } + } + + switch ( CRYPT_RC4_MODE ) { + case CRYPT_RC4_MODE_MCRYPT: + switch (true) { + case defined('MCRYPT_ARCFOUR'): + $this->mode = MCRYPT_ARCFOUR; + break; + case defined('MCRYPT_RC4'); + $this->mode = MCRYPT_RC4; + } + } + } + + /** + * Sets the key. + * + * Keys can be between 1 and 256 bytes long. If they are longer then 256 bytes, the first 256 bytes will + * be used. If no key is explicitly set, it'll be assumed to be a single null byte. + * + * @access public + * @param String $key + */ + function setKey($key) + { + $this->key = $key; + + if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) { + return; + } + + $keyLength = strlen($key); + $keyStream = array(); + for ($i = 0; $i < 256; $i++) { + $keyStream[$i] = $i; + } + $j = 0; + for ($i = 0; $i < 256; $i++) { + $j = ($j + $keyStream[$i] + ord($key[$i % $keyLength])) & 255; + $temp = $keyStream[$i]; + $keyStream[$i] = $keyStream[$j]; + $keyStream[$j] = $temp; + } + + $this->encryptIndex = $this->decryptIndex = array(0, 0); + $this->encryptStream = $this->decryptStream = $keyStream; + } + + /** + * Dummy function. + * + * Some protocols, such as WEP, prepend an "initialization vector" to the key, effectively creating a new key [1]. + * If you need to use an initialization vector in this manner, feel free to prepend it to the key, yourself, before + * calling setKey(). + * + * [1] WEP's initialization vectors (IV's) are used in a somewhat insecure way. Since, in that protocol, + * the IV's are relatively easy to predict, an attack described by + * {@link http://www.drizzle.com/~aboba/IEEE/rc4_ksaproc.pdf Scott Fluhrer, Itsik Mantin, and Adi Shamir} + * can be used to quickly guess at the rest of the key. The following links elaborate: + * + * {@link http://www.rsa.com/rsalabs/node.asp?id=2009 http://www.rsa.com/rsalabs/node.asp?id=2009} + * {@link http://en.wikipedia.org/wiki/Related_key_attack http://en.wikipedia.org/wiki/Related_key_attack} + * + * @param String $iv + * @see Crypt_RC4::setKey() + * @access public + */ + function setIV($iv) + { + } + + /** + * Sets MCrypt parameters. (optional) + * + * If MCrypt is being used, empty strings will be used, unless otherwise specified. + * + * @link http://php.net/function.mcrypt-module-open#function.mcrypt-module-open + * @access public + * @param optional Integer $algorithm_directory + * @param optional Integer $mode_directory + */ + function setMCrypt($algorithm_directory = '', $mode_directory = '') + { + if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) { + $this->mcrypt = array($algorithm_directory, $mode_directory); + $this->_closeMCrypt(); + } + } + + /** + * Encrypts a message. + * + * @see Crypt_RC4::_crypt() + * @access public + * @param String $plaintext + */ + function encrypt($plaintext) + { + return $this->_crypt($plaintext, CRYPT_RC4_ENCRYPT); + } + + /** + * Decrypts a message. + * + * $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)). + * Atleast if the continuous buffer is disabled. + * + * @see Crypt_RC4::_crypt() + * @access public + * @param String $ciphertext + */ + function decrypt($ciphertext) + { + return $this->_crypt($ciphertext, CRYPT_RC4_DECRYPT); + } + + /** + * Encrypts or decrypts a message. + * + * @see Crypt_RC4::encrypt() + * @see Crypt_RC4::decrypt() + * @access private + * @param String $text + * @param Integer $mode + */ + function _crypt($text, $mode) + { + if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) { + $keyStream = $mode == CRYPT_RC4_ENCRYPT ? 'encryptStream' : 'decryptStream'; + + if ($this->$keyStream === false) { + $this->$keyStream = mcrypt_module_open($this->mode, $this->mcrypt[0], MCRYPT_MODE_STREAM, $this->mcrypt[1]); + mcrypt_generic_init($this->$keyStream, $this->key, ''); + } else if (!$this->continuousBuffer) { + mcrypt_generic_init($this->$keyStream, $this->key, ''); + } + $newText = mcrypt_generic($this->$keyStream, $text); + if (!$this->continuousBuffer) { + mcrypt_generic_deinit($this->$keyStream); + } + + return $newText; + } + + if ($this->encryptStream === false) { + $this->setKey($this->key); + } + + switch ($mode) { + case CRYPT_RC4_ENCRYPT: + $keyStream = $this->encryptStream; + list($i, $j) = $this->encryptIndex; + break; + case CRYPT_RC4_DECRYPT: + $keyStream = $this->decryptStream; + list($i, $j) = $this->decryptIndex; + } + + $newText = ''; + for ($k = 0; $k < strlen($text); $k++) { + $i = ($i + 1) & 255; + $j = ($j + $keyStream[$i]) & 255; + $temp = $keyStream[$i]; + $keyStream[$i] = $keyStream[$j]; + $keyStream[$j] = $temp; + $temp = $keyStream[($keyStream[$i] + $keyStream[$j]) & 255]; + $newText.= chr(ord($text[$k]) ^ $temp); + } + + if ($this->continuousBuffer) { + switch ($mode) { + case CRYPT_RC4_ENCRYPT: + $this->encryptStream = $keyStream; + $this->encryptIndex = array($i, $j); + break; + case CRYPT_RC4_DECRYPT: + $this->decryptStream = $keyStream; + $this->decryptIndex = array($i, $j); + } + } + + return $newText; + } + + /** + * Treat consecutive "packets" as if they are a continuous buffer. + * + * Say you have a 16-byte plaintext $plaintext. Using the default behavior, the two following code snippets + * will yield different outputs: + * + * + * echo $rc4->encrypt(substr($plaintext, 0, 8)); + * echo $rc4->encrypt(substr($plaintext, 8, 8)); + * + * + * echo $rc4->encrypt($plaintext); + * + * + * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates + * another, as demonstrated with the following: + * + * + * $rc4->encrypt(substr($plaintext, 0, 8)); + * echo $rc4->decrypt($des->encrypt(substr($plaintext, 8, 8))); + * + * + * echo $rc4->decrypt($des->encrypt(substr($plaintext, 8, 8))); + * + * + * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different + * outputs. The reason is due to the fact that the initialization vector's change after every encryption / + * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant. + * + * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each + * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that + * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them), + * however, they are also less intuitive and more likely to cause you problems. + * + * @see Crypt_RC4::disableContinuousBuffer() + * @access public + */ + function enableContinuousBuffer() + { + $this->continuousBuffer = true; + } + + /** + * Treat consecutive packets as if they are a discontinuous buffer. + * + * The default behavior. + * + * @see Crypt_RC4::enableContinuousBuffer() + * @access public + */ + function disableContinuousBuffer() + { + if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_INTERNAL ) { + $this->encryptIndex = $this->decryptIndex = array(0, 0); + $this->setKey($this->key); + } + + $this->continuousBuffer = false; + } + + /** + * Dummy function. + * + * Since RC4 is a stream cipher and not a block cipher, no padding is necessary. The only reason this function is + * included is so that you can switch between a block cipher and a stream cipher transparently. + * + * @see Crypt_RC4::disablePadding() + * @access public + */ + function enablePadding() + { + } + + /** + * Dummy function. + * + * @see Crypt_RC4::enablePadding() + * @access public + */ + function disablePadding() + { + } + + /** + * Class destructor. + * + * Will be called, automatically, if you're using PHP5. If you're using PHP4, call it yourself. Only really + * needs to be called if mcrypt is being used. + * + * @access public + */ + function __destruct() + { + if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) { + $this->_closeMCrypt(); + } + } + + /** + * Properly close the MCrypt objects. + * + * @access prviate + */ + function _closeMCrypt() + { + if ( $this->encryptStream !== false ) { + if ( $this->continuousBuffer ) { + mcrypt_generic_deinit($this->encryptStream); + } + + mcrypt_module_close($this->encryptStream); + + $this->encryptStream = false; + } + + if ( $this->decryptStream !== false ) { + if ( $this->continuousBuffer ) { + mcrypt_generic_deinit($this->decryptStream); + } + + mcrypt_module_close($this->decryptStream); + + $this->decryptStream = false; + } + } +} \ No newline at end of file diff --git a/plugins/OStatus/extlib/Crypt/RSA.php b/plugins/OStatus/extlib/Crypt/RSA.php index 16dfa54d48..f0a75962c8 100644 --- a/plugins/OStatus/extlib/Crypt/RSA.php +++ b/plugins/OStatus/extlib/Crypt/RSA.php @@ -1,524 +1,2108 @@ + * createKey()); + * + * $plaintext = 'terrafrost'; + * + * $rsa->loadKey($privatekey); + * $ciphertext = $rsa->encrypt($plaintext); + * + * $rsa->loadKey($publickey); + * echo $rsa->decrypt($ciphertext); + * ?> + * + * + * Here's an example of how to create signatures and verify signatures with this library: + * + * createKey()); + * + * $plaintext = 'terrafrost'; + * + * $rsa->loadKey($privatekey); + * $signature = $rsa->sign($plaintext); + * + * $rsa->loadKey($publickey); + * echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified'; + * ?> + * + * + * LICENSE: This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * @category Crypt * @package Crypt_RSA - * @author Alexander Valyalkin - * @copyright 2005, 2006 Alexander Valyalkin - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version 1.2.0b - * @link http://pear.php.net/package/Crypt_RSA + * @author Jim Wigginton + * @copyright MMIX Jim Wigginton + * @license http://www.gnu.org/licenses/lgpl.txt + * @version $Id: RSA.php,v 1.14 2010/03/01 17:28:19 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net */ /** - * RSA error handling facilities + * Include Math_BigInteger */ -require_once 'Crypt/RSA/ErrorHandler.php'; +require_once('Math/BigInteger.php'); /** - * loader for math wrappers + * Include Crypt_Random */ -require_once 'Crypt/RSA/MathLoader.php'; +require_once('Crypt/Random.php'); /** - * helper class for mange single key + * Include Crypt_Hash */ -require_once 'Crypt/RSA/Key.php'; +require_once('Crypt/Hash.php'); + +/**#@+ + * @access public + * @see Crypt_RSA::encrypt() + * @see Crypt_RSA::decrypt() + */ +/** + * Use {@link http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding Optimal Asymmetric Encryption Padding} + * (OAEP) for encryption / decryption. + * + * Uses sha1 by default. + * + * @see Crypt_RSA::setHash() + * @see Crypt_RSA::setMGFHash() + */ +define('CRYPT_RSA_ENCRYPTION_OAEP', 1); +/** + * Use PKCS#1 padding. + * + * Although CRYPT_RSA_ENCRYPTION_OAEP offers more security, including PKCS#1 padding is necessary for purposes of backwards + * compatability with protocols (like SSH-1) written before OAEP's introduction. + */ +define('CRYPT_RSA_ENCRYPTION_PKCS1', 2); +/**#@-*/ + +/**#@+ + * @access public + * @see Crypt_RSA::sign() + * @see Crypt_RSA::verify() + * @see Crypt_RSA::setHash() + */ +/** + * Use the Probabilistic Signature Scheme for signing + * + * Uses sha1 by default. + * + * @see Crypt_RSA::setSaltLength() + * @see Crypt_RSA::setMGFHash() + */ +define('CRYPT_RSA_SIGNATURE_PSS', 1); +/** + * Use the PKCS#1 scheme by default. + * + * Although CRYPT_RSA_SIGNATURE_PSS offers more security, including PKCS#1 signing is necessary for purposes of backwards + * compatability with protocols (like SSH-2) written before PSS's introduction. + */ +define('CRYPT_RSA_SIGNATURE_PKCS1', 2); +/**#@-*/ + +/**#@+ + * @access private + * @see Crypt_RSA::createKey() + */ +/** + * ASN1 Integer + */ +define('CRYPT_RSA_ASN1_INTEGER', 2); +/** + * ASN1 Sequence (with the constucted bit set) + */ +define('CRYPT_RSA_ASN1_SEQUENCE', 48); +/**#@-*/ + +/**#@+ + * @access private + * @see Crypt_RSA::Crypt_RSA() + */ +/** + * To use the pure-PHP implementation + */ +define('CRYPT_RSA_MODE_INTERNAL', 1); +/** + * To use the OpenSSL library + * + * (if enabled; otherwise, the internal implementation will be used) + */ +define('CRYPT_RSA_MODE_OPENSSL', 2); +/**#@-*/ + +/**#@+ + * @access public + * @see Crypt_RSA::createKey() + * @see Crypt_RSA::setPrivateKeyFormat() + */ +/** + * PKCS#1 formatted private key + * + * Used by OpenSSH + */ +define('CRYPT_RSA_PRIVATE_FORMAT_PKCS1', 0); +/**#@-*/ + +/**#@+ + * @access public + * @see Crypt_RSA::createKey() + * @see Crypt_RSA::setPublicKeyFormat() + */ +/** + * Raw public key + * + * An array containing two Math_BigInteger objects. + * + * The exponent can be indexed with any of the following: + * + * 0, e, exponent, publicExponent + * + * The modulus can be indexed with any of the following: + * + * 1, n, modulo, modulus + */ +define('CRYPT_RSA_PUBLIC_FORMAT_RAW', 1); +/** + * PKCS#1 formatted public key + */ +define('CRYPT_RSA_PUBLIC_FORMAT_PKCS1', 2); +/** + * OpenSSH formatted public key + * + * Place in $HOME/.ssh/authorized_keys + */ +define('CRYPT_RSA_PUBLIC_FORMAT_OPENSSH', 3); +/**#@-*/ /** - * helper class for manage key pair + * Pure-PHP PKCS#1 compliant implementation of RSA. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Crypt_RSA */ -require_once 'Crypt/RSA/KeyPair.php'; - -/** - * Crypt_RSA class, derived from Crypt_RSA_ErrorHandler - * - * Provides the following functions: - * - setParams($params) - sets parameters of current object - * - encrypt($plain_data, $key = null) - encrypts data - * - decrypt($enc_data, $key = null) - decrypts data - * - createSign($doc, $private_key = null) - signs document by private key - * - validateSign($doc, $signature, $public_key = null) - validates signature of document - * - * Example usage: - * // creating an error handler - * $error_handler = create_function('$obj', 'echo "error: ", $obj->getMessage(), "\n"'); - * - * // 1024-bit key pair generation - * $key_pair = new Crypt_RSA_KeyPair(1024); - * - * // check consistence of Crypt_RSA_KeyPair object - * $error_handler($key_pair); - * - * // creating Crypt_RSA object - * $rsa_obj = new Crypt_RSA; - * - * // check consistence of Crypt_RSA object - * $error_handler($rsa_obj); - * - * // set error handler on Crypt_RSA object ( see Crypt/RSA/ErrorHandler.php for details ) - * $rsa_obj->setErrorHandler($error_handler); - * - * // encryption (usually using public key) - * $enc_data = $rsa_obj->encrypt($plain_data, $key_pair->getPublicKey()); - * - * // decryption (usually using private key) - * $plain_data = $rsa_obj->decrypt($enc_data, $key_pair->getPrivateKey()); - * - * // signing - * $signature = $rsa_obj->createSign($document, $key_pair->getPrivateKey()); - * - * // signature checking - * $is_valid = $rsa_obj->validateSign($document, $signature, $key_pair->getPublicKey()); - * - * // signing many documents by one private key - * $rsa_obj = new Crypt_RSA(array('private_key' => $key_pair->getPrivateKey())); - * // check consistence of Crypt_RSA object - * $error_handler($rsa_obj); - * // set error handler ( see Crypt/RSA/ErrorHandler.php for details ) - * $rsa_obj->setErrorHandler($error_handler); - * // sign many documents - * $sign_1 = $rsa_obj->sign($doc_1); - * $sign_2 = $rsa_obj->sign($doc_2); - * //... - * $sign_n = $rsa_obj->sign($doc_n); - * - * // changing default hash function, which is used for sign - * // creating/validation - * $rsa_obj->setParams(array('hash_func' => 'md5')); - * - * // using factory() method instead of constructor (it returns PEAR_Error object on failure) - * $rsa_obj = &Crypt_RSA::factory(); - * if (PEAR::isError($rsa_obj)) { - * echo "error: ", $rsa_obj->getMessage(), "\n"; - * } - * - * @category Encryption - * @package Crypt_RSA - * @author Alexander Valyalkin - * @copyright 2005, 2006 Alexander Valyalkin - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @link http://pear.php.net/package/Crypt_RSA - * @version @package_version@ - * @access public - */ -class Crypt_RSA extends Crypt_RSA_ErrorHandler -{ +class Crypt_RSA { /** - * Reference to math wrapper, which is used to - * manipulate large integers in RSA algorithm. + * Precomputed Zero * - * @var object of Crypt_RSA_Math_* class + * @var Array * @access private */ - var $_math_obj; + var $zero; /** - * key for encryption, which is used by encrypt() method + * Precomputed One * - * @var object of Crypt_RSA_KEY class + * @var Array * @access private */ - var $_enc_key; + var $one; /** - * key for decryption, which is used by decrypt() method + * Private Key Format * - * @var object of Crypt_RSA_KEY class + * @var Integer * @access private */ - var $_dec_key; + var $privateKeyFormat = CRYPT_RSA_PRIVATE_FORMAT_PKCS1; /** - * public key, which is used by validateSign() method - * - * @var object of Crypt_RSA_KEY class - * @access private - */ - var $_public_key; - - /** - * private key, which is used by createSign() method - * - * @var object of Crypt_RSA_KEY class - * @access private - */ - var $_private_key; - - /** - * name of hash function, which is used by validateSign() - * and createSign() methods. Default hash function is SHA-1 - * - * @var string - * @access private - */ - var $_hash_func = 'sha1'; - - /** - * Crypt_RSA constructor. - * - * @param array $params - * Optional associative array of parameters, such as: - * enc_key, dec_key, private_key, public_key, hash_func. - * See setParams() method for more detailed description of - * these parameters. - * @param string $wrapper_name - * Name of math wrapper, which will be used to - * perform different operations with big integers. - * See contents of Crypt/RSA/Math folder for examples of wrappers. - * Read docs/Crypt_RSA/docs/math_wrappers.txt for details. - * @param string $error_handler name of error handler function + * Public Key Format * + * @var Integer * @access public */ - function Crypt_RSA($params = null, $wrapper_name = 'default', $error_handler = '') - { - // set error handler - $this->setErrorHandler($error_handler); - // try to load math wrapper - $obj = &Crypt_RSA_MathLoader::loadWrapper($wrapper_name); - if ($this->isError($obj)) { - // error during loading of math wrapper - // Crypt_RSA object is partially constructed. - $this->pushError($obj); - return; - } - $this->_math_obj = &$obj; + var $publicKeyFormat = CRYPT_RSA_PUBLIC_FORMAT_PKCS1; - if (!is_null($params)) { - if (!$this->setParams($params)) { - // error in Crypt_RSA::setParams() function - return; + /** + * Modulus (ie. n) + * + * @var Math_BigInteger + * @access private + */ + var $modulus; + + /** + * Modulus length + * + * @var Math_BigInteger + * @access private + */ + var $k; + + /** + * Exponent (ie. e or d) + * + * @var Math_BigInteger + * @access private + */ + var $exponent; + + /** + * Primes for Chinese Remainder Theorem (ie. p and q) + * + * @var Array + * @access private + */ + var $primes; + + /** + * Exponents for Chinese Remainder Theorem (ie. dP and dQ) + * + * @var Array + * @access private + */ + var $exponents; + + /** + * Coefficients for Chinese Remainder Theorem (ie. qInv) + * + * @var Array + * @access private + */ + var $coefficients; + + /** + * Hash name + * + * @var String + * @access private + */ + var $hashName; + + /** + * Hash function + * + * @var Crypt_Hash + * @access private + */ + var $hash; + + /** + * Length of hash function output + * + * @var Integer + * @access private + */ + var $hLen; + + /** + * Length of salt + * + * @var Integer + * @access private + */ + var $sLen; + + /** + * Hash function for the Mask Generation Function + * + * @var Crypt_Hash + * @access private + */ + var $mgfHash; + + /** + * Length of MGF hash function output + * + * @var Integer + * @access private + */ + var $mgfHLen; + + /** + * Encryption mode + * + * @var Integer + * @access private + */ + var $encryptionMode = CRYPT_RSA_ENCRYPTION_OAEP; + + /** + * Signature mode + * + * @var Integer + * @access private + */ + var $signatureMode = CRYPT_RSA_SIGNATURE_PSS; + + /** + * Public Exponent + * + * @var Mixed + * @access private + */ + var $publicExponent = false; + + /** + * Password + * + * @var String + * @access private + */ + var $password = ''; + + /** + * The constructor + * + * If you want to make use of the openssl extension, you'll need to set the mode manually, yourself. The reason + * Crypt_RSA doesn't do it is because OpenSSL doesn't fail gracefully. openssl_pkey_new(), in particular, requires + * openssl.cnf be present somewhere and, unfortunately, the only real way to find out is too late. + * + * @return Crypt_RSA + * @access public + */ + function Crypt_RSA() + { + if ( !defined('CRYPT_RSA_MODE') ) { + switch (true) { + //case extension_loaded('openssl') && version_compare(PHP_VERSION, '4.2.0', '>='): + // define('CRYPT_RSA_MODE', CRYPT_RSA_MODE_OPENSSL); + // break; + default: + define('CRYPT_RSA_MODE', CRYPT_RSA_MODE_INTERNAL); } } + + $this->zero = new Math_BigInteger(); + $this->one = new Math_BigInteger(1); + + $this->hash = new Crypt_Hash('sha1'); + $this->hLen = $this->hash->getLength(); + $this->hashName = 'sha1'; + $this->mgfHash = new Crypt_Hash('sha1'); + $this->mgfHLen = $this->mgfHash->getLength(); } /** - * Crypt_RSA factory. + * Create public / private key pair * - * @param array $params - * Optional associative array of parameters, such as: - * enc_key, dec_key, private_key, public_key, hash_func. - * See setParams() method for more detailed description of - * these parameters. - * @param string $wrapper_name - * Name of math wrapper, which will be used to - * perform different operations with big integers. - * See contents of Crypt/RSA/Math folder for examples of wrappers. - * Read docs/Crypt_RSA/docs/math_wrappers.txt for details. - * @param string $error_handler name of error handler function - * - * @return object new Crypt_RSA object on success or PEAR_Error object on failure - * @access public - */ - function &factory($params = null, $wrapper_name = 'default', $error_handler = '') - { - $obj = &new Crypt_RSA($params, $wrapper_name, $error_handler); - if ($obj->isError()) { - // error during creating a new object. Retrurn PEAR_Error object - return $obj->getLastError(); - } - // object created successfully. Return it - return $obj; - } - - /** - * Accepts any combination of available parameters as associative array: - * enc_key - encryption key for encrypt() method - * dec_key - decryption key for decrypt() method - * public_key - key for validateSign() method - * private_key - key for createSign() method - * hash_func - name of hash function, which will be used to create and validate sign - * - * @param array $params - * associative array of permitted parameters (see above) - * - * @return bool true on success or false on error - * @access public - */ - function setParams($params) - { - if (!is_array($params)) { - $this->pushError('parameters must be passed to function as associative array', CRYPT_RSA_ERROR_WRONG_PARAMS); - return false; - } - - if (isset($params['enc_key'])) { - if (Crypt_RSA_Key::isValid($params['enc_key'])) { - $this->_enc_key = $params['enc_key']; - } - else { - $this->pushError('wrong encryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY); - return false; - } - } - if (isset($params['dec_key'])) { - if (Crypt_RSA_Key::isValid($params['dec_key'])) { - $this->_dec_key = $params['dec_key']; - } - else { - $this->pushError('wrong decryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY); - return false; - } - } - if (isset($params['private_key'])) { - if (Crypt_RSA_Key::isValid($params['private_key'])) { - if ($params['private_key']->getKeyType() != 'private') { - $this->pushError('private key must have "private" attribute', CRYPT_RSA_ERROR_WRONG_KEY_TYPE); - return false; - } - $this->_private_key = $params['private_key']; - } - else { - $this->pushError('wrong private key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY); - return false; - } - } - if (isset($params['public_key'])) { - if (Crypt_RSA_Key::isValid($params['public_key'])) { - if ($params['public_key']->getKeyType() != 'public') { - $this->pushError('public key must have "public" attribute', CRYPT_RSA_ERROR_WRONG_KEY_TYPE); - return false; - } - $this->_public_key = $params['public_key']; - } - else { - $this->pushError('wrong public key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY); - return false; - } - } - if (isset($params['hash_func'])) { - if (!function_exists($params['hash_func'])) { - $this->pushError('cannot find hash function with name [' . $params['hash_func'] . ']', CRYPT_RSA_ERROR_WRONG_HASH_FUNC); - return false; - } - $this->_hash_func = $params['hash_func']; - } - return true; // all ok - } - - /** - * Ecnrypts $plain_data by the key $this->_enc_key or $key. - * - * @param string $plain_data data, which must be encrypted - * @param object $key encryption key (object of Crypt_RSA_Key class) - * @return mixed - * encrypted data as string on success or false on error + * Returns an array with the following three elements: + * - 'privatekey': The private key. + * - 'publickey': The public key. + * - 'partialkey': A partially computed key (if the execution time exceeded $timeout). + * Will need to be passed back to Crypt_RSA::createKey() as the third parameter for further processing. * * @access public + * @param optional Integer $bits + * @param optional Integer $timeout + * @param optional Math_BigInteger $p */ - function encrypt($plain_data, $key = null) + function createKey($bits = 1024, $timeout = false, $partial = array()) { - $enc_data = $this->encryptBinary($plain_data, $key); - if ($enc_data !== false) { - return base64_encode($enc_data); - } - // error during encripting data - return false; - } + if ( CRYPT_RSA_MODE == CRYPT_RSA_MODE_OPENSSL ) { + $rsa = openssl_pkey_new(array('private_key_bits' => $bits)); + openssl_pkey_export($rsa, $privatekey); + $publickey = openssl_pkey_get_details($rsa); + $publickey = $publickey['key']; - /** - * Ecnrypts $plain_data by the key $this->_enc_key or $key. - * - * @param string $plain_data data, which must be encrypted - * @param object $key encryption key (object of Crypt_RSA_Key class) - * @return mixed - * encrypted data as binary string on success or false on error - * - * @access public - */ - function encryptBinary($plain_data, $key = null) - { - if (is_null($key)) { - // use current encryption key - $key = $this->_enc_key; - } - else if (!Crypt_RSA_Key::isValid($key)) { - $this->pushError('invalid encryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY); - return false; - } + if ($this->privateKeyFormat != CRYPT_RSA_PRIVATE_FORMAT_PKCS1) { + $privatekey = call_user_func_array(array($this, '_convertPrivateKey'), array_values($this->_parseKey($privatekey, CRYPT_RSA_PRIVATE_FORMAT_PKCS1))); + $publickey = call_user_func_array(array($this, '_convertPublicKey'), array_values($this->_parseKey($publickey, CRYPT_RSA_PUBLIC_FORMAT_PKCS1))); + } - // append tail \x01 to plain data. It needs for correctly decrypting of data - $plain_data .= "\x01"; - - $plain_data = $this->_math_obj->bin2int($plain_data); - $exp = $this->_math_obj->bin2int($key->getExponent()); - $modulus = $this->_math_obj->bin2int($key->getModulus()); - - // divide plain data into chunks - $data_len = $this->_math_obj->bitLen($plain_data); - $chunk_len = $key->getKeyLength() - 1; - $block_len = (int) ceil($chunk_len / 8); - $curr_pos = 0; - $enc_data = ''; - while ($curr_pos < $data_len) { - $tmp = $this->_math_obj->subint($plain_data, $curr_pos, $chunk_len); - $enc_data .= str_pad( - $this->_math_obj->int2bin($this->_math_obj->powmod($tmp, $exp, $modulus)), - $block_len, - "\0" + return array( + 'privatekey' => $privatekey, + 'publickey' => $publickey, + 'partialkey' => false ); - $curr_pos += $chunk_len; } - return $enc_data; + + static $e; + if (!isset($e)) { + if (!defined('CRYPT_RSA_EXPONENT')) { + // http://en.wikipedia.org/wiki/65537_%28number%29 + define('CRYPT_RSA_EXPONENT', '65537'); + } + if (!defined('CRYPT_RSA_COMMENT')) { + define('CRYPT_RSA_COMMENT', 'phpseclib-generated-key'); + } + // per , this number ought not result in primes smaller + // than 256 bits. + if (!defined('CRYPT_RSA_SMALLEST_PRIME')) { + define('CRYPT_RSA_SMALLEST_PRIME', 4096); + } + + $e = new Math_BigInteger(CRYPT_RSA_EXPONENT); + } + + extract($this->_generateMinMax($bits)); + $absoluteMin = $min; + $temp = $bits >> 1; + if ($temp > CRYPT_RSA_SMALLEST_PRIME) { + $num_primes = floor($bits / CRYPT_RSA_SMALLEST_PRIME); + $temp = CRYPT_RSA_SMALLEST_PRIME; + } else { + $num_primes = 2; + } + extract($this->_generateMinMax($temp + $bits % $temp)); + $finalMax = $max; + extract($this->_generateMinMax($temp)); + + $generator = new Math_BigInteger(); + $generator->setRandomGenerator('crypt_random'); + + $n = $this->one->copy(); + if (!empty($partial)) { + extract(unserialize($partial)); + } else { + $exponents = $coefficients = $primes = array(); + $lcm = array( + 'top' => $this->one->copy(), + 'bottom' => false + ); + } + + $start = time(); + $i0 = count($primes) + 1; + + do { + for ($i = $i0; $i <= $num_primes; $i++) { + if ($timeout !== false) { + $timeout-= time() - $start; + $start = time(); + if ($timeout <= 0) { + return serialize(array( + 'privatekey' => '', + 'publickey' => '', + 'partialkey' => array( + 'primes' => $primes, + 'coefficients' => $coefficients, + 'lcm' => $lcm, + 'exponents' => $exponents + ) + )); + } + } + + if ($i == $num_primes) { + list($min, $temp) = $absoluteMin->divide($n); + if (!$temp->equals($this->zero)) { + $min = $min->add($this->one); // ie. ceil() + } + $primes[$i] = $generator->randomPrime($min, $finalMax, $timeout); + } else { + $primes[$i] = $generator->randomPrime($min, $max, $timeout); + } + + if ($primes[$i] === false) { // if we've reached the timeout + return array( + 'privatekey' => '', + 'publickey' => '', + 'partialkey' => empty($primes) ? '' : serialize(array( + 'primes' => array_slice($primes, 0, $i - 1), + 'coefficients' => $coefficients, + 'lcm' => $lcm, + 'exponents' => $exponents + )) + ); + } + + // the first coefficient is calculated differently from the rest + // ie. instead of being $primes[1]->modInverse($primes[2]), it's $primes[2]->modInverse($primes[1]) + if ($i > 2) { + $coefficients[$i] = $n->modInverse($primes[$i]); + } + + $n = $n->multiply($primes[$i]); + + $temp = $primes[$i]->subtract($this->one); + + // textbook RSA implementations use Euler's totient function instead of the least common multiple. + // see http://en.wikipedia.org/wiki/Euler%27s_totient_function + $lcm['top'] = $lcm['top']->multiply($temp); + $lcm['bottom'] = $lcm['bottom'] === false ? $temp : $lcm['bottom']->gcd($temp); + + $exponents[$i] = $e->modInverse($temp); + } + + list($lcm) = $lcm['top']->divide($lcm['bottom']); + $gcd = $lcm->gcd($e); + $i0 = 1; + } while (!$gcd->equals($this->one)); + + $d = $e->modInverse($lcm); + + $coefficients[2] = $primes[2]->modInverse($primes[1]); + + // from : + // RSAPrivateKey ::= SEQUENCE { + // version Version, + // modulus INTEGER, -- n + // publicExponent INTEGER, -- e + // privateExponent INTEGER, -- d + // prime1 INTEGER, -- p + // prime2 INTEGER, -- q + // exponent1 INTEGER, -- d mod (p-1) + // exponent2 INTEGER, -- d mod (q-1) + // coefficient INTEGER, -- (inverse of q) mod p + // otherPrimeInfos OtherPrimeInfos OPTIONAL + // } + + return array( + 'privatekey' => $this->_convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients), + 'publickey' => $this->_convertPublicKey($n, $e), + 'partialkey' => false + ); } /** - * Decrypts $enc_data by the key $this->_dec_key or $key. + * Convert a private key to the appropriate format. * - * @param string $enc_data encrypted data as string - * @param object $key decryption key (object of RSA_Crypt_Key class) - * @return mixed - * decrypted data as string on success or false on error - * - * @access public + * @access private + * @see setPrivateKeyFormat() + * @param String $RSAPrivateKey + * @return String */ - function decrypt($enc_data, $key = null) + function _convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients) { - $enc_data = base64_decode($enc_data); - return $this->decryptBinary($enc_data, $key); + $num_primes = count($primes); + $raw = array( + 'version' => $num_primes == 2 ? chr(0) : chr(1), // two-prime vs. multi + 'modulus' => $n->toBytes(true), + 'publicExponent' => $e->toBytes(true), + 'privateExponent' => $d->toBytes(true), + 'prime1' => $primes[1]->toBytes(true), + 'prime2' => $primes[2]->toBytes(true), + 'exponent1' => $exponents[1]->toBytes(true), + 'exponent2' => $exponents[2]->toBytes(true), + 'coefficient' => $coefficients[2]->toBytes(true) + ); + + // if the format in question does not support multi-prime rsa and multi-prime rsa was used, + // call _convertPublicKey() instead. + switch ($this->privateKeyFormat) { + default: // eg. CRYPT_RSA_PRIVATE_FORMAT_PKCS1 + $components = array(); + foreach ($raw as $name => $value) { + $components[$name] = pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($value)), $value); + } + + $RSAPrivateKey = implode('', $components); + + if ($num_primes > 2) { + $OtherPrimeInfos = ''; + for ($i = 3; $i <= $num_primes; $i++) { + // OtherPrimeInfos ::= SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo + // + // OtherPrimeInfo ::= SEQUENCE { + // prime INTEGER, -- ri + // exponent INTEGER, -- di + // coefficient INTEGER -- ti + // } + $OtherPrimeInfo = pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($primes[$i]->toBytes(true))), $primes[$i]->toBytes(true)); + $OtherPrimeInfo.= pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($exponents[$i]->toBytes(true))), $exponents[$i]->toBytes(true)); + $OtherPrimeInfo.= pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($coefficients[$i]->toBytes(true))), $coefficients[$i]->toBytes(true)); + $OtherPrimeInfos.= pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfo)), $OtherPrimeInfo); + } + $RSAPrivateKey.= pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfos)), $OtherPrimeInfos); + } + + $RSAPrivateKey = pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($RSAPrivateKey)), $RSAPrivateKey); + + if (!empty($this->password)) { + $iv = $this->_random(8); + $symkey = pack('H*', md5($this->password . $iv)); // symkey is short for symmetric key + $symkey.= substr(pack('H*', md5($symkey . $this->password . $iv)), 0, 8); + if (!class_exists('Crypt_TripleDES')) { + require_once('Crypt/TripleDES.php'); + } + $des = new Crypt_TripleDES(); + $des->setKey($symkey); + $des->setIV($iv); + $iv = strtoupper(bin2hex($iv)); + $RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" . + "Proc-Type: 4,ENCRYPTED\r\n" . + "DEK-Info: DES-EDE3-CBC,$iv\r\n" . + "\r\n" . + chunk_split(base64_encode($des->encrypt($RSAPrivateKey))) . + '-----END RSA PRIVATE KEY-----'; + } else { + $RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" . + chunk_split(base64_encode($RSAPrivateKey)) . + '-----END RSA PRIVATE KEY-----'; + } + + return $RSAPrivateKey; + } } /** - * Decrypts $enc_data by the key $this->_dec_key or $key. + * Convert a public key to the appropriate format * - * @param string $enc_data encrypted data as binary string - * @param object $key decryption key (object of RSA_Crypt_Key class) - * @return mixed - * decrypted data as string on success or false on error - * - * @access public + * @access private + * @see setPublicKeyFormat() + * @param String $RSAPrivateKey + * @return String */ - function decryptBinary($enc_data, $key = null) + function _convertPublicKey($n, $e) { - if (is_null($key)) { - // use current decryption key - $key = $this->_dec_key; - } - else if (!Crypt_RSA_Key::isValid($key)) { - $this->pushError('invalid decryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY); - return false; - } + $modulus = $n->toBytes(true); + $publicExponent = $e->toBytes(true); - $exp = $this->_math_obj->bin2int($key->getExponent()); - $modulus = $this->_math_obj->bin2int($key->getModulus()); + switch ($this->publicKeyFormat) { + case CRYPT_RSA_PUBLIC_FORMAT_RAW: + return array('e' => $e->copy(), 'n' => $n->copy()); + case CRYPT_RSA_PUBLIC_FORMAT_OPENSSH: + // from : + // string "ssh-rsa" + // mpint e + // mpint n + $RSAPublicKey = pack('Na*Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publicExponent), $publicExponent, strlen($modulus), $modulus); + $RSAPublicKey = 'ssh-rsa ' . base64_encode($RSAPublicKey) . ' ' . CRYPT_RSA_COMMENT; - $data_len = strlen($enc_data); - $chunk_len = $key->getKeyLength() - 1; - $block_len = (int) ceil($chunk_len / 8); - $curr_pos = 0; - $bit_pos = 0; - $plain_data = $this->_math_obj->bin2int("\0"); - while ($curr_pos < $data_len) { - $tmp = $this->_math_obj->bin2int(substr($enc_data, $curr_pos, $block_len)); - $tmp = $this->_math_obj->powmod($tmp, $exp, $modulus); - $plain_data = $this->_math_obj->bitOr($plain_data, $tmp, $bit_pos); - $bit_pos += $chunk_len; - $curr_pos += $block_len; - } - $result = $this->_math_obj->int2bin($plain_data); + return $RSAPublicKey; + default: // eg. CRYPT_RSA_PUBLIC_FORMAT_PKCS1 + // from : + // RSAPublicKey ::= SEQUENCE { + // modulus INTEGER, -- n + // publicExponent INTEGER -- e + // } + $components = array( + 'modulus' => pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($modulus)), $modulus), + 'publicExponent' => pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($publicExponent)), $publicExponent) + ); - // delete tail, containing of \x01 - $tail = ord($result{strlen($result) - 1}); - if ($tail != 1) { - $this->pushError("Error tail of decrypted text = {$tail}. Expected 1", CRYPT_RSA_ERROR_WRONG_TAIL); - return false; + $RSAPublicKey = pack('Ca*a*a*', + CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($components['modulus']) + strlen($components['publicExponent'])), + $components['modulus'], $components['publicExponent'] + ); + + $RSAPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" . + chunk_split(base64_encode($RSAPublicKey)) . + '-----END PUBLIC KEY-----'; + + return $RSAPublicKey; } - return substr($result, 0, -1); } /** - * Creates sign for document $document, using $this->_private_key or $private_key - * as private key and $this->_hash_func or $hash_func as hash function. + * Break a public or private key down into its constituant components * - * @param string $document document, which must be signed - * @param object $private_key private key (object of Crypt_RSA_Key type) - * @param string $hash_func name of hash function, which will be used during signing - * @return mixed - * signature of $document as string on success or false on error - * - * @access public + * @access private + * @see _convertPublicKey() + * @see _convertPrivateKey() + * @param String $key + * @param Integer $type + * @return Array */ - function createSign($document, $private_key = null, $hash_func = null) + function _parseKey($key, $type) { - // check private key - if (is_null($private_key)) { - $private_key = $this->_private_key; - } - else if (!Crypt_RSA_Key::isValid($private_key)) { - $this->pushError('invalid private key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY); - return false; - } - if ($private_key->getKeyType() != 'private') { - $this->pushError('signing key must be private', CRYPT_RSA_ERROR_NEED_PRV_KEY); - return false; - } + switch ($type) { + case CRYPT_RSA_PUBLIC_FORMAT_RAW: + if (!is_array($key)) { + return false; + } + $components = array(); + switch (true) { + case isset($key['e']): + $components['publicExponent'] = $key['e']->copy(); + break; + case isset($key['exponent']): + $components['publicExponent'] = $key['exponent']->copy(); + break; + case isset($key['publicExponent']): + $components['publicExponent'] = $key['publicExponent']->copy(); + break; + case isset($key[0]): + $components['publicExponent'] = $key[0]->copy(); + } + switch (true) { + case isset($key['n']): + $components['modulus'] = $key['n']->copy(); + break; + case isset($key['modulo']): + $components['modulus'] = $key['modulo']->copy(); + break; + case isset($key['modulus']): + $components['modulus'] = $key['modulus']->copy(); + break; + case isset($key[1]): + $components['modulus'] = $key[1]->copy(); + } + return $components; + case CRYPT_RSA_PRIVATE_FORMAT_PKCS1: + case CRYPT_RSA_PUBLIC_FORMAT_PKCS1: + /* Although PKCS#1 proposes a format that public and private keys can use, encrypting them is + "outside the scope" of PKCS#1. PKCS#1 then refers you to PKCS#12 and PKCS#15 if you're wanting to + protect private keys, however, that's not what OpenSSL* does. OpenSSL protects private keys by adding + two new "fields" to the key - DEK-Info and Proc-Type. These fields are discussed here: - // check hash_func - if (is_null($hash_func)) { - $hash_func = $this->_hash_func; - } - if (!function_exists($hash_func)) { - $this->pushError("cannot find hash function with name [$hash_func]", CRYPT_RSA_ERROR_WRONG_HASH_FUNC); - return false; - } + http://tools.ietf.org/html/rfc1421#section-4.6.1.1 + http://tools.ietf.org/html/rfc1421#section-4.6.1.3 - return $this->encrypt($hash_func($document), $private_key); + DES-EDE3-CBC as an algorithm, however, is not discussed anywhere, near as I can tell. + DES-CBC and DES-EDE are discussed in RFC1423, however, DES-EDE3-CBC isn't, nor is its key derivation + function. As is, the definitive authority on this encoding scheme isn't the IETF but rather OpenSSL's + own implementation. ie. the implementation *is* the standard and any bugs that may exist in that + implementation are part of the standard, as well. + + * OpenSSL is the de facto standard. It's utilized by OpenSSH and other projects */ + if (preg_match('#DEK-Info: (.+),(.+)#', $key, $matches)) { + $iv = pack('H*', trim($matches[2])); + $symkey = pack('H*', md5($this->password . $iv)); // symkey is short for symmetric key + $symkey.= substr(pack('H*', md5($symkey . $this->password . $iv)), 0, 8); + $ciphertext = preg_replace('#.+(\r|\n|\r\n)\1|[\r\n]|-.+-#s', '', $key); + $ciphertext = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $ciphertext) ? base64_decode($ciphertext) : false; + if ($ciphertext === false) { + $ciphertext = $key; + } + switch ($matches[1]) { + case 'DES-EDE3-CBC': + if (!class_exists('Crypt_TripleDES')) { + require_once('Crypt/TripleDES.php'); + } + $crypto = new Crypt_TripleDES(); + break; + case 'DES-CBC': + if (!class_exists('Crypt_DES')) { + require_once('Crypt/DES.php'); + } + $crypto = new Crypt_DES(); + break; + default: + return false; + } + $crypto->setKey($symkey); + $crypto->setIV($iv); + $decoded = $crypto->decrypt($ciphertext); + } else { + $decoded = preg_replace('#-.+-|[\r\n]#', '', $key); + $decoded = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $decoded) ? base64_decode($decoded) : false; + } + + if ($decoded !== false) { + $key = $decoded; + } + + $components = array(); + + if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) { + return false; + } + if ($this->_decodeLength($key) != strlen($key)) { + return false; + } + + $tag = ord($this->_string_shift($key)); + if ($tag == CRYPT_RSA_ASN1_SEQUENCE) { + /* intended for keys for which OpenSSL's asn1parse returns the following: + + 0:d=0 hl=4 l= 290 cons: SEQUENCE + 4:d=1 hl=2 l= 13 cons: SEQUENCE + 6:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 17:d=2 hl=2 l= 0 prim: NULL + 19:d=1 hl=4 l= 271 prim: BIT STRING */ + $this->_string_shift($key, $this->_decodeLength($key)); + $this->_string_shift($key); // skip over the BIT STRING tag + $this->_decodeLength($key); // skip over the BIT STRING length + // "The initial octet shall encode, as an unsigned binary integer wtih bit 1 as the least significant bit, the number of + // unused bits in teh final subsequent octet. The number shall be in the range zero to seven." + // -- http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf (section 8.6.2.2) + $this->_string_shift($key); + if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) { + return false; + } + if ($this->_decodeLength($key) != strlen($key)) { + return false; + } + $tag = ord($this->_string_shift($key)); + } + if ($tag != CRYPT_RSA_ASN1_INTEGER) { + return false; + } + + $length = $this->_decodeLength($key); + $temp = $this->_string_shift($key, $length); + if (strlen($temp) != 1 || ord($temp) > 2) { + $components['modulus'] = new Math_BigInteger($temp, -256); + $this->_string_shift($key); // skip over CRYPT_RSA_ASN1_INTEGER + $length = $this->_decodeLength($key); + $components[$type == CRYPT_RSA_PUBLIC_FORMAT_PKCS1 ? 'publicExponent' : 'privateExponent'] = new Math_BigInteger($this->_string_shift($key, $length), -256); + + return $components; + } + if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_INTEGER) { + return false; + } + $length = $this->_decodeLength($key); + $components['modulus'] = new Math_BigInteger($this->_string_shift($key, $length), -256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['publicExponent'] = new Math_BigInteger($this->_string_shift($key, $length), -256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['privateExponent'] = new Math_BigInteger($this->_string_shift($key, $length), -256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['primes'] = array(1 => new Math_BigInteger($this->_string_shift($key, $length), -256)); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['primes'][] = new Math_BigInteger($this->_string_shift($key, $length), -256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['exponents'] = array(1 => new Math_BigInteger($this->_string_shift($key, $length), -256)); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['exponents'][] = new Math_BigInteger($this->_string_shift($key, $length), -256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['coefficients'] = array(2 => new Math_BigInteger($this->_string_shift($key, $length), -256)); + + if (!empty($key)) { + if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) { + return false; + } + $this->_decodeLength($key); + while (!empty($key)) { + if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) { + return false; + } + $this->_decodeLength($key); + $key = substr($key, 1); + $length = $this->_decodeLength($key); + $components['primes'][] = new Math_BigInteger($this->_string_shift($key, $length), -256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['exponents'][] = new Math_BigInteger($this->_string_shift($key, $length), -256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['coefficients'][] = new Math_BigInteger($this->_string_shift($key, $length), -256); + } + } + + return $components; + case CRYPT_RSA_PUBLIC_FORMAT_OPENSSH: + $key = base64_decode(preg_replace('#^ssh-rsa | .+$#', '', $key)); + if ($key === false) { + return false; + } + + $cleanup = substr($key, 0, 11) == "\0\0\0\7ssh-rsa"; + + extract(unpack('Nlength', $this->_string_shift($key, 4))); + $publicExponent = new Math_BigInteger($this->_string_shift($key, $length), -256); + extract(unpack('Nlength', $this->_string_shift($key, 4))); + $modulus = new Math_BigInteger($this->_string_shift($key, $length), -256); + + if ($cleanup && strlen($key)) { + extract(unpack('Nlength', $this->_string_shift($key, 4))); + return array( + 'modulus' => new Math_BigInteger($this->_string_shift($key, $length), -256), + 'publicExponent' => $modulus + ); + } else { + return array( + 'modulus' => $modulus, + 'publicExponent' => $publicExponent + ); + } + } } /** - * Validates $signature for document $document with public key $this->_public_key - * or $public_key and hash function $this->_hash_func or $hash_func. + * Loads a public or private key * - * @param string $document document, signature of which must be validated - * @param string $signature signature, which must be validated - * @param object $public_key public key (object of Crypt_RSA_Key class) - * @param string $hash_func hash function, which will be used during validating signature - * @return mixed - * true, if signature of document is valid - * false, if signature of document is invalid - * null on error + * Returns true on success and false on failure (ie. an incorrect password was provided or the key was malformed) * * @access public + * @param String $key + * @param Integer $type optional */ - function validateSign($document, $signature, $public_key = null, $hash_func = null) + function loadKey($key, $type = CRYPT_RSA_PRIVATE_FORMAT_PKCS1) { - // check public key - if (is_null($public_key)) { - $public_key = $this->_public_key; - } - else if (!Crypt_RSA_Key::isValid($public_key)) { - $this->pushError('invalid public key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY); - return null; - } - if ($public_key->getKeyType() != 'public') { - $this->pushError('validating key must be public', CRYPT_RSA_ERROR_NEED_PUB_KEY); - return null; + $components = $this->_parseKey($key, $type); + if ($components === false) { + return false; } - // check hash_func - if (is_null($hash_func)) { - $hash_func = $this->_hash_func; - } - if (!function_exists($hash_func)) { - $this->pushError("cannot find hash function with name [$hash_func]", CRYPT_RSA_ERROR_WRONG_HASH_FUNC); - return null; + $this->modulus = $components['modulus']; + $this->k = strlen($this->modulus->toBytes()); + $this->exponent = isset($components['privateExponent']) ? $components['privateExponent'] : $components['publicExponent']; + if (isset($components['primes'])) { + $this->primes = $components['primes']; + $this->exponents = $components['exponents']; + $this->coefficients = $components['coefficients']; + $this->publicExponent = $components['publicExponent']; + } else { + $this->primes = array(); + $this->exponents = array(); + $this->coefficients = array(); + $this->publicExponent = false; } - return $hash_func($document) == $this->decrypt($signature, $public_key); + return true; } -} -?> \ No newline at end of file + /** + * Sets the password + * + * Private keys can be encrypted with a password. To unset the password, pass in the empty string or false. + * Or rather, pass in $password such that empty($password) is true. + * + * @see createKey() + * @see loadKey() + * @access public + * @param String $password + */ + function setPassword($password) + { + $this->password = $password; + } + + /** + * Defines the public key + * + * Some private key formats define the public exponent and some don't. Those that don't define it are problematic when + * used in certain contexts. For example, in SSH-2, RSA authentication works by sending the public key along with a + * message signed by the private key to the server. The SSH-2 server looks the public key up in an index of public keys + * and if it's present then proceeds to verify the signature. Problem is, if your private key doesn't include the public + * exponent this won't work unless you manually add the public exponent. + * + * Do note that when a new key is loaded the index will be cleared. + * + * Returns true on success, false on failure + * + * @see getPublicKey() + * @access public + * @param String $key + * @param Integer $type optional + * @return Boolean + */ + function setPublicKey($key, $type = CRYPT_RSA_PUBLIC_FORMAT_PKCS1) + { + $components = $this->_parseKey($key, $type); + if (empty($this->modulus) || !$this->modulus->equals($components['modulus'])) { + return false; + } + $this->publicExponent = $components['publicExponent']; + } + + /** + * Returns the public key + * + * The public key is only returned under two circumstances - if the private key had the public key embedded within it + * or if the public key was set via setPublicKey(). If the currently loaded key is supposed to be the public key this + * function won't return it since this library, for the most part, doesn't distinguish between public and private keys. + * + * @see getPublicKey() + * @access public + * @param String $key + * @param Integer $type optional + */ + function getPublicKey($type = CRYPT_RSA_PUBLIC_FORMAT_PKCS1) + { + if (empty($this->modulus) || empty($this->publicExponent)) { + return false; + } + + $oldFormat = $this->publicKeyFormat; + $this->publicKeyFormat = $type; + $temp = $this->_convertPublicKey($this->modulus, $this->publicExponent); + $this->publicKeyFormat = $oldFormat; + return $temp; + } + + /** + * Generates the smallest and largest numbers requiring $bits bits + * + * @access private + * @param Integer $bits + * @return Array + */ + function _generateMinMax($bits) + { + $bytes = $bits >> 3; + $min = str_repeat(chr(0), $bytes); + $max = str_repeat(chr(0xFF), $bytes); + $msb = $bits & 7; + if ($msb) { + $min = chr(1 << ($msb - 1)) . $min; + $max = chr((1 << $msb) - 1) . $max; + } else { + $min[0] = chr(0x80); + } + + return array( + 'min' => new Math_BigInteger($min, 256), + 'max' => new Math_BigInteger($max, 256) + ); + } + + /** + * DER-decode the length + * + * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See + * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 § 8.1.3} for more information. + * + * @access private + * @param String $string + * @return Integer + */ + function _decodeLength(&$string) + { + $length = ord($this->_string_shift($string)); + if ( $length & 0x80 ) { // definite length, long form + $length&= 0x7F; + $temp = $this->_string_shift($string, $length); + list(, $length) = unpack('N', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4)); + } + return $length; + } + + /** + * DER-encode the length + * + * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See + * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 § 8.1.3} for more information. + * + * @access private + * @param Integer $length + * @return String + */ + function _encodeLength($length) + { + if ($length <= 0x7F) { + return chr($length); + } + + $temp = ltrim(pack('N', $length), chr(0)); + return pack('Ca*', 0x80 | strlen($temp), $temp); + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param String $string + * @param optional Integer $index + * @return String + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } + + /** + * Determines the private key format + * + * @see createKey() + * @access public + * @param Integer $format + */ + function setPrivateKeyFormat($format) + { + $this->privateKeyFormat = $format; + } + + /** + * Determines the public key format + * + * @see createKey() + * @access public + * @param Integer $format + */ + function setPublicKeyFormat($format) + { + $this->publicKeyFormat = $format; + } + + /** + * Determines which hashing function should be used + * + * Used with signature production / verification and (if the encryption mode is CRYPT_RSA_ENCRYPTION_OAEP) encryption and + * decryption. If $hash isn't supported, sha1 is used. + * + * @access public + * @param String $hash + */ + function setHash($hash) + { + // Crypt_Hash supports algorithms that PKCS#1 doesn't support. md5-96 and sha1-96, for example. + switch ($hash) { + case 'md2': + case 'md5': + case 'sha1': + case 'sha256': + case 'sha384': + case 'sha512': + $this->hash = new Crypt_Hash($hash); + $this->hashName = $hash; + break; + default: + $this->hash = new Crypt_Hash('sha1'); + $this->hashName = 'sha1'; + } + $this->hLen = $this->hash->getLength(); + } + + /** + * Determines which hashing function should be used for the mask generation function + * + * The mask generation function is used by CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_SIGNATURE_PSS and although it's + * best if Hash and MGFHash are set to the same thing this is not a requirement. + * + * @access public + * @param String $hash + */ + function setMGFHash($hash) + { + // Crypt_Hash supports algorithms that PKCS#1 doesn't support. md5-96 and sha1-96, for example. + switch ($hash) { + case 'md2': + case 'md5': + case 'sha1': + case 'sha256': + case 'sha384': + case 'sha512': + $this->mgfHash = new Crypt_Hash($hash); + break; + default: + $this->mgfHash = new Crypt_Hash('sha1'); + } + $this->mgfHLen = $this->mgfHash->getLength(); + } + + /** + * Determines the salt length + * + * To quote from {@link http://tools.ietf.org/html/rfc3447#page-38 RFC3447#page-38}: + * + * Typical salt lengths in octets are hLen (the length of the output + * of the hash function Hash) and 0. + * + * @access public + * @param Integer $format + */ + function setSaltLength($sLen) + { + $this->sLen = $sLen; + } + + /** + * Generates a random string x bytes long + * + * @access public + * @param Integer $bytes + * @param optional Integer $nonzero + * @return String + */ + function _random($bytes, $nonzero = false) + { + $temp = ''; + if ($nonzero) { + for ($i = 0; $i < $bytes; $i++) { + $temp.= chr(crypt_random(1, 255)); + } + } else { + $ints = ($bytes + 1) >> 2; + for ($i = 0; $i < $ints; $i++) { + $temp.= pack('N', crypt_random()); + } + $temp = substr($temp, 0, $bytes); + } + return $temp; + } + + /** + * Integer-to-Octet-String primitive + * + * See {@link http://tools.ietf.org/html/rfc3447#section-4.1 RFC3447#section-4.1}. + * + * @access private + * @param Math_BigInteger $x + * @param Integer $xLen + * @return String + */ + function _i2osp($x, $xLen) + { + $x = $x->toBytes(); + if (strlen($x) > $xLen) { + user_error('Integer too large', E_USER_NOTICE); + return false; + } + return str_pad($x, $xLen, chr(0), STR_PAD_LEFT); + } + + /** + * Octet-String-to-Integer primitive + * + * See {@link http://tools.ietf.org/html/rfc3447#section-4.2 RFC3447#section-4.2}. + * + * @access private + * @param String $x + * @return Math_BigInteger + */ + function _os2ip($x) + { + return new Math_BigInteger($x, 256); + } + + /** + * Exponentiate with or without Chinese Remainder Theorem + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.2}. + * + * @access private + * @param Math_BigInteger $x + * @return Math_BigInteger + */ + function _exponentiate($x) + { + if (empty($this->primes) || empty($this->coefficients) || empty($this->exponents)) { + return $x->modPow($this->exponent, $this->modulus); + } + + $num_primes = count($this->primes); + + if (defined('CRYPT_RSA_DISABLE_BLINDING')) { + $m_i = array( + 1 => $x->modPow($this->exponents[1], $this->primes[1]), + 2 => $x->modPow($this->exponents[2], $this->primes[2]) + ); + $h = $m_i[1]->subtract($m_i[2]); + $h = $h->multiply($this->coefficients[2]); + list(, $h) = $h->divide($this->primes[1]); + $m = $m_i[2]->add($h->multiply($this->primes[2])); + + $r = $this->primes[1]; + for ($i = 3; $i <= $num_primes; $i++) { + $m_i = $x->modPow($this->exponents[$i], $this->primes[$i]); + + $r = $r->multiply($this->primes[$i - 1]); + + $h = $m_i->subtract($m); + $h = $h->multiply($this->coefficients[$i]); + list(, $h) = $h->divide($this->primes[$i]); + + $m = $m->add($r->multiply($h)); + } + } else { + $smallest = $this->primes[1]; + for ($i = 2; $i <= $num_primes; $i++) { + if ($smallest->compare($this->primes[$i]) > 0) { + $smallest = $this->primes[$i]; + } + } + + $one = new Math_BigInteger(1); + $one->setRandomGenerator('crypt_random'); + + $r = $one->random($one, $smallest->subtract($one)); + + $m_i = array( + 1 => $this->_blind($x, $r, 1), + 2 => $this->_blind($x, $r, 2) + ); + $h = $m_i[1]->subtract($m_i[2]); + $h = $h->multiply($this->coefficients[2]); + list(, $h) = $h->divide($this->primes[1]); + $m = $m_i[2]->add($h->multiply($this->primes[2])); + + $r = $this->primes[1]; + for ($i = 3; $i <= $num_primes; $i++) { + $m_i = $this->_blind($x, $r, $i); + + $r = $r->multiply($this->primes[$i - 1]); + + $h = $m_i->subtract($m); + $h = $h->multiply($this->coefficients[$i]); + list(, $h) = $h->divide($this->primes[$i]); + + $m = $m->add($r->multiply($h)); + } + } + + return $m; + } + + /** + * Performs RSA Blinding + * + * Protects against timing attacks by employing RSA Blinding. + * Returns $x->modPow($this->exponents[$i], $this->primes[$i]) + * + * @access private + * @param Math_BigInteger $x + * @param Math_BigInteger $r + * @param Integer $i + * @return Math_BigInteger + */ + function _blind($x, $r, $i) + { + $x = $x->multiply($r->modPow($this->publicExponent, $this->primes[$i])); + + $x = $x->modPow($this->exponents[$i], $this->primes[$i]); + + $r = $r->modInverse($this->primes[$i]); + $x = $x->multiply($r); + list(, $x) = $x->divide($this->primes[$i]); + + return $x; + } + + /** + * RSAEP + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.1}. + * + * @access private + * @param Math_BigInteger $m + * @return Math_BigInteger + */ + function _rsaep($m) + { + if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) { + user_error('Message representative out of range', E_USER_NOTICE); + return false; + } + return $this->_exponentiate($m); + } + + /** + * RSADP + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.2 RFC3447#section-5.1.2}. + * + * @access private + * @param Math_BigInteger $c + * @return Math_BigInteger + */ + function _rsadp($c) + { + if ($c->compare($this->zero) < 0 || $c->compare($this->modulus) > 0) { + user_error('Ciphertext representative out of range', E_USER_NOTICE); + return false; + } + return $this->_exponentiate($c); + } + + /** + * RSASP1 + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.1 RFC3447#section-5.2.1}. + * + * @access private + * @param Math_BigInteger $m + * @return Math_BigInteger + */ + function _rsasp1($m) + { + if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) { + user_error('Message representative out of range', E_USER_NOTICE); + return false; + } + return $this->_exponentiate($m); + } + + /** + * RSAVP1 + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.2 RFC3447#section-5.2.2}. + * + * @access private + * @param Math_BigInteger $s + * @return Math_BigInteger + */ + function _rsavp1($s) + { + if ($s->compare($this->zero) < 0 || $s->compare($this->modulus) > 0) { + user_error('Signature representative out of range', E_USER_NOTICE); + return false; + } + return $this->_exponentiate($s); + } + + /** + * MGF1 + * + * See {@link http://tools.ietf.org/html/rfc3447#appendix-B.2.1 RFC3447#appendix-B.2.1}. + * + * @access private + * @param String $mgfSeed + * @param Integer $mgfLen + * @return String + */ + function _mgf1($mgfSeed, $maskLen) + { + // if $maskLen would yield strings larger than 4GB, PKCS#1 suggests a "Mask too long" error be output. + + $t = ''; + $count = ceil($maskLen / $this->mgfHLen); + for ($i = 0; $i < $count; $i++) { + $c = pack('N', $i); + $t.= $this->mgfHash->hash($mgfSeed . $c); + } + + return substr($t, 0, $maskLen); + } + + /** + * RSAES-OAEP-ENCRYPT + * + * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.1 RFC3447#section-7.1.1} and + * {http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding OAES}. + * + * @access private + * @param String $m + * @param String $l + * @return String + */ + function _rsaes_oaep_encrypt($m, $l = '') + { + $mLen = strlen($m); + + // Length checking + + // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error + // be output. + + if ($mLen > $this->k - 2 * $this->hLen - 2) { + user_error('Message too long', E_USER_NOTICE); + return false; + } + + // EME-OAEP encoding + + $lHash = $this->hash->hash($l); + $ps = str_repeat(chr(0), $this->k - $mLen - 2 * $this->hLen - 2); + $db = $lHash . $ps . chr(1) . $m; + $seed = $this->_random($this->hLen); + $dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1); + $maskedDB = $db ^ $dbMask; + $seedMask = $this->_mgf1($maskedDB, $this->hLen); + $maskedSeed = $seed ^ $seedMask; + $em = chr(0) . $maskedSeed . $maskedDB; + + // RSA encryption + + $m = $this->_os2ip($em); + $c = $this->_rsaep($m); + $c = $this->_i2osp($c, $this->k); + + // Output the ciphertext C + + return $c; + } + + /** + * RSAES-OAEP-DECRYPT + * + * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.2 RFC3447#section-7.1.2}. The fact that the error + * messages aren't distinguishable from one another hinders debugging, but, to quote from RFC3447#section-7.1.2: + * + * Note. Care must be taken to ensure that an opponent cannot + * distinguish the different error conditions in Step 3.g, whether by + * error message or timing, or, more generally, learn partial + * information about the encoded message EM. Otherwise an opponent may + * be able to obtain useful information about the decryption of the + * ciphertext C, leading to a chosen-ciphertext attack such as the one + * observed by Manger [36]. + * + * As for $l... to quote from {@link http://tools.ietf.org/html/rfc3447#page-17 RFC3447#page-17}: + * + * Both the encryption and the decryption operations of RSAES-OAEP take + * the value of a label L as input. In this version of PKCS #1, L is + * the empty string; other uses of the label are outside the scope of + * this document. + * + * @access private + * @param String $c + * @param String $l + * @return String + */ + function _rsaes_oaep_decrypt($c, $l = '') + { + // Length checking + + // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error + // be output. + + if (strlen($c) != $this->k || $this->k < 2 * $this->hLen + 2) { + user_error('Decryption error', E_USER_NOTICE); + return false; + } + + // RSA decryption + + $c = $this->_os2ip($c); + $m = $this->_rsadp($c); + if ($m === false) { + user_error('Decryption error', E_USER_NOTICE); + return false; + } + $em = $this->_i2osp($m, $this->k); + + // EME-OAEP decoding + + $lHash = $this->hash->hash($l); + $y = ord($em[0]); + $maskedSeed = substr($em, 1, $this->hLen); + $maskedDB = substr($em, $this->hLen + 1); + $seedMask = $this->_mgf1($maskedDB, $this->hLen); + $seed = $maskedSeed ^ $seedMask; + $dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1); + $db = $maskedDB ^ $dbMask; + $lHash2 = substr($db, 0, $this->hLen); + $m = substr($db, $this->hLen); + if ($lHash != $lHash2) { + user_error('Decryption error', E_USER_NOTICE); + return false; + } + $m = ltrim($m, chr(0)); + if (ord($m[0]) != 1) { + user_error('Decryption error', E_USER_NOTICE); + return false; + } + + // Output the message M + + return substr($m, 1); + } + + /** + * RSAES-PKCS1-V1_5-ENCRYPT + * + * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.1 RFC3447#section-7.2.1}. + * + * @access private + * @param String $m + * @return String + */ + function _rsaes_pkcs1_v1_5_encrypt($m) + { + $mLen = strlen($m); + + // Length checking + + if ($mLen > $this->k - 11) { + user_error('Message too long', E_USER_NOTICE); + return false; + } + + // EME-PKCS1-v1_5 encoding + + $ps = $this->_random($this->k - $mLen - 3, true); + $em = chr(0) . chr(2) . $ps . chr(0) . $m; + + // RSA encryption + $m = $this->_os2ip($em); + $c = $this->_rsaep($m); + $c = $this->_i2osp($c, $this->k); + + // Output the ciphertext C + + return $c; + } + + /** + * RSAES-PKCS1-V1_5-DECRYPT + * + * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.2 RFC3447#section-7.2.2}. + * + * @access private + * @param String $c + * @return String + */ + function _rsaes_pkcs1_v1_5_decrypt($c) + { + // Length checking + + if (strlen($c) != $this->k) { // or if k < 11 + user_error('Decryption error', E_USER_NOTICE); + return false; + } + + // RSA decryption + + $c = $this->_os2ip($c); + $m = $this->_rsadp($c); + if ($m === false) { + user_error('Decryption error', E_USER_NOTICE); + return false; + } + $em = $this->_i2osp($m, $this->k); + + // EME-PKCS1-v1_5 decoding + + if (ord($em[0]) != 0 || ord($em[1]) != 2) { + user_error('Decryption error', E_USER_NOTICE); + return false; + } + + $ps = substr($em, 2, strpos($em, chr(0), 2) - 2); + $m = substr($em, strlen($ps) + 3); + + if (strlen($ps) < 8) { + user_error('Decryption error', E_USER_NOTICE); + return false; + } + + // Output M + + return $m; + } + + /** + * EMSA-PSS-ENCODE + * + * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.1 RFC3447#section-9.1.1}. + * + * @access private + * @param String $m + * @param Integer $emBits + */ + function _emsa_pss_encode($m, $emBits) + { + // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error + // be output. + + $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8) + $sLen = $this->sLen == false ? $this->hLen : $this->sLen; + + $mHash = $this->hash->hash($m); + if ($emLen < $this->hLen + $sLen + 2) { + user_error('Encoding error', E_USER_NOTICE); + return false; + } + + $salt = $this->_random($sLen); + $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt; + $h = $this->hash->hash($m2); + $ps = str_repeat(chr(0), $emLen - $sLen - $this->hLen - 2); + $db = $ps . chr(1) . $salt; + $dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1); + $maskedDB = $db ^ $dbMask; + $maskedDB[0] = ~chr(0xFF << ($emBits & 7)) & $maskedDB[0]; + $em = $maskedDB . $h . chr(0xBC); + + return $em; + } + + /** + * EMSA-PSS-VERIFY + * + * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.2 RFC3447#section-9.1.2}. + * + * @access private + * @param String $m + * @param String $em + * @param Integer $emBits + * @return String + */ + function _emsa_pss_verify($m, $em, $emBits) + { + // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error + // be output. + + $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8); + $sLen = $this->sLen == false ? $this->hLen : $this->sLen; + + $mHash = $this->hash->hash($m); + if ($emLen < $this->hLen + $sLen + 2) { + return false; + } + + if ($em[strlen($em) - 1] != chr(0xBC)) { + return false; + } + + $maskedDB = substr($em, 0, $em - $this->hLen - 1); + $h = substr($em, $em - $this->hLen - 1, $this->hLen); + $temp = chr(0xFF << ($emBits & 7)); + if ((~$maskedDB[0] & $temp) != $temp) { + return false; + } + $dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1); + $db = $maskedDB ^ $dbMask; + $db[0] = ~chr(0xFF << ($emBits & 7)) & $db[0]; + $temp = $emLen - $this->hLen - $sLen - 2; + if (substr($db, 0, $temp) != str_repeat(chr(0), $temp) || ord($db[$temp]) != 1) { + return false; + } + $salt = substr($db, $temp + 1); // should be $sLen long + $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt; + $h2 = $this->hash->hash($m2); + return $h == $h2; + } + + /** + * RSASSA-PSS-SIGN + * + * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.1 RFC3447#section-8.1.1}. + * + * @access private + * @param String $m + * @return String + */ + function _rsassa_pss_sign($m) + { + // EMSA-PSS encoding + + $em = $this->_emsa_pss_encode($m, 8 * $this->k - 1); + + // RSA signature + + $m = $this->_os2ip($em); + $s = $this->_rsasp1($m); + $s = $this->_i2osp($s, $this->k); + + // Output the signature S + + return $s; + } + + /** + * RSASSA-PSS-VERIFY + * + * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.2 RFC3447#section-8.1.2}. + * + * @access private + * @param String $m + * @param String $s + * @return String + */ + function _rsassa_pss_verify($m, $s) + { + // Length checking + + if (strlen($s) != $this->k) { + user_error('Invalid signature', E_USER_NOTICE); + return false; + } + + // RSA verification + + $modBits = 8 * $this->k; + + $s2 = $this->_os2ip($s); + $m2 = $this->_rsavp1($s2); + if ($m2 === false) { + user_error('Invalid signature', E_USER_NOTICE); + return false; + } + $em = $this->_i2osp($m2, $modBits >> 3); + if ($em === false) { + user_error('Invalid signature', E_USER_NOTICE); + return false; + } + + // EMSA-PSS verification + + return $this->_emsa_pss_verify($m, $em, $modBits - 1); + } + + /** + * EMSA-PKCS1-V1_5-ENCODE + * + * See {@link http://tools.ietf.org/html/rfc3447#section-9.2 RFC3447#section-9.2}. + * + * @access private + * @param String $m + * @param Integer $emLen + * @return String + */ + function _emsa_pkcs1_v1_5_encode($m, $emLen) + { + $h = $this->hash->hash($m); + if ($h === false) { + return false; + } + + // see http://tools.ietf.org/html/rfc3447#page-43 + switch ($this->hashName) { + case 'md2': + $t = pack('H*', '3020300c06082a864886f70d020205000410'); + break; + case 'md5': + $t = pack('H*', '3020300c06082a864886f70d020505000410'); + break; + case 'sha1': + $t = pack('H*', '3021300906052b0e03021a05000414'); + break; + case 'sha256': + $t = pack('H*', '3031300d060960864801650304020105000420'); + break; + case 'sha384': + $t = pack('H*', '3041300d060960864801650304020205000430'); + break; + case 'sha512': + $t = pack('H*', '3051300d060960864801650304020305000440'); + } + $t.= $h; + $tLen = strlen($t); + + if ($emLen < $tLen + 11) { + user_error('Intended encoded message length too short', E_USER_NOTICE); + return false; + } + + $ps = str_repeat(chr(0xFF), $emLen - $tLen - 3); + + $em = "\0\1$ps\0$t"; + + return $em; + } + + /** + * RSASSA-PKCS1-V1_5-SIGN + * + * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.1 RFC3447#section-8.2.1}. + * + * @access private + * @param String $m + * @return String + */ + function _rsassa_pkcs1_v1_5_sign($m) + { + // EMSA-PKCS1-v1_5 encoding + + $em = $this->_emsa_pkcs1_v1_5_encode($m, $this->k); + if ($em === false) { + user_error('RSA modulus too short', E_USER_NOTICE); + return false; + } + + // RSA signature + + $m = $this->_os2ip($em); + $s = $this->_rsasp1($m); + $s = $this->_i2osp($s, $this->k); + + // Output the signature S + + return $s; + } + + /** + * RSASSA-PKCS1-V1_5-VERIFY + * + * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.2 RFC3447#section-8.2.2}. + * + * @access private + * @param String $m + * @return String + */ + function _rsassa_pkcs1_v1_5_verify($m, $s) + { + // Length checking + + if (strlen($s) != $this->k) { + user_error('Invalid signature', E_USER_NOTICE); + return false; + } + + // RSA verification + + $s = $this->_os2ip($s); + $m2 = $this->_rsavp1($s); + if ($m2 === false) { + user_error('Invalid signature', E_USER_NOTICE); + return false; + } + $em = $this->_i2osp($m2, $this->k); + if ($em === false) { + user_error('Invalid signature', E_USER_NOTICE); + return false; + } + + // EMSA-PKCS1-v1_5 encoding + + $em2 = $this->_emsa_pkcs1_v1_5_encode($m, $this->k); + if ($em2 === false) { + user_error('RSA modulus too short', E_USER_NOTICE); + return false; + } + + // Compare + + return $em === $em2; + } + + /** + * Set Encryption Mode + * + * Valid values include CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_ENCRYPTION_PKCS1. + * + * @access public + * @param Integer $mode + */ + function setEncryptionMode($mode) + { + $this->encryptionMode = $mode; + } + + /** + * Set Signature Mode + * + * Valid values include CRYPT_RSA_SIGNATURE_PSS and CRYPT_RSA_SIGNATURE_PKCS1 + * + * @access public + * @param Integer $mode + */ + function setSignatureMode($mode) + { + $this->signatureMode = $mode; + } + + /** + * Encryption + * + * Both CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_ENCRYPTION_PKCS1 both place limits on how long $plaintext can be. + * If $plaintext exceeds those limits it will be broken up so that it does and the resultant ciphertext's will + * be concatenated together. + * + * @see decrypt() + * @access public + * @param String $plaintext + * @return String + */ + function encrypt($plaintext) + { + switch ($this->encryptionMode) { + case CRYPT_RSA_ENCRYPTION_PKCS1: + $length = $this->k - 11; + if ($length <= 0) { + return false; + } + + $plaintext = str_split($plaintext, $length); + $ciphertext = ''; + foreach ($plaintext as $m) { + $ciphertext.= $this->_rsaes_pkcs1_v1_5_encrypt($m); + } + return $ciphertext; + //case CRYPT_RSA_ENCRYPTION_OAEP: + default: + $length = $this->k - 2 * $this->hLen - 2; + if ($length <= 0) { + return false; + } + + $plaintext = str_split($plaintext, $length); + $ciphertext = ''; + foreach ($plaintext as $m) { + $ciphertext.= $this->_rsaes_oaep_encrypt($m); + } + return $ciphertext; + } + } + + /** + * Decryption + * + * @see encrypt() + * @access public + * @param String $plaintext + * @return String + */ + function decrypt($ciphertext) + { + if ($this->k <= 0) { + return false; + } + + $ciphertext = str_split($ciphertext, $this->k); + $plaintext = ''; + + switch ($this->encryptionMode) { + case CRYPT_RSA_ENCRYPTION_PKCS1: + $decrypt = '_rsaes_pkcs1_v1_5_decrypt'; + break; + //case CRYPT_RSA_ENCRYPTION_OAEP: + default: + $decrypt = '_rsaes_oaep_decrypt'; + } + + foreach ($ciphertext as $c) { + $temp = $this->$decrypt($c); + if ($temp === false) { + return false; + } + $plaintext.= $temp; + } + + return $plaintext; + } + + /** + * Create a signature + * + * @see verify() + * @access public + * @param String $message + * @return String + */ + function sign($message) + { + if (empty($this->modulus) || empty($this->exponent)) { + return false; + } + + switch ($this->signatureMode) { + case CRYPT_RSA_SIGNATURE_PKCS1: + return $this->_rsassa_pkcs1_v1_5_sign($message); + //case CRYPT_RSA_SIGNATURE_PSS: + default: + return $this->_rsassa_pss_sign($message); + } + } + + /** + * Verifies a signature + * + * @see sign() + * @access public + * @param String $message + * @param String $signature + * @return Boolean + */ + function verify($message, $signature) + { + if (empty($this->modulus) || empty($this->exponent)) { + return false; + } + + switch ($this->signatureMode) { + case CRYPT_RSA_SIGNATURE_PKCS1: + return $this->_rsassa_pkcs1_v1_5_verify($message, $signature); + //case CRYPT_RSA_SIGNATURE_PSS: + default: + return $this->_rsassa_pss_verify($message, $signature); + } + } +} \ No newline at end of file diff --git a/plugins/OStatus/extlib/Crypt/RSA/ErrorHandler.php b/plugins/OStatus/extlib/Crypt/RSA/ErrorHandler.php deleted file mode 100644 index 8f39741e02..0000000000 --- a/plugins/OStatus/extlib/Crypt/RSA/ErrorHandler.php +++ /dev/null @@ -1,234 +0,0 @@ - - * @copyright 2005 Alexander Valyalkin - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version CVS: $Id: ErrorHandler.php,v 1.4 2009/01/05 08:30:29 clockwerx Exp $ - * @link http://pear.php.net/package/Crypt_RSA - */ - -/** - * uses PEAR's error handling - */ -require_once 'PEAR.php'; - -/** - * cannot load required extension for math wrapper - */ -define('CRYPT_RSA_ERROR_NO_EXT', 1); - -/** - * cannot load any math wrappers. - * Possible reasons: - * - there is no any wrappers (they must exist in Crypt/RSA/Math folder ) - * - all available wrappers are incorrect (read docs/Crypt_RSA/docs/math_wrappers.txt ) - * - cannot load any extension, required by available wrappers - */ -define('CRYPT_RSA_ERROR_NO_WRAPPERS', 2); - -/** - * cannot find file, containing requested math wrapper - */ -define('CRYPT_RSA_ERROR_NO_FILE', 3); - -/** - * cannot find math wrapper class in the math wrapper file - */ -define('CRYPT_RSA_ERROR_NO_CLASS', 4); - -/** - * invalid key type passed to function (it must be 'public' or 'private') - */ -define('CRYPT_RSA_ERROR_WRONG_KEY_TYPE', 5); - -/** - * key modulus must be greater than key exponent - */ -define('CRYPT_RSA_ERROR_EXP_GE_MOD', 6); - -/** - * missing $key_len parameter in Crypt_RSA_KeyPair::generate($key_len) function - */ -define('CRYPT_RSA_ERROR_MISSING_KEY_LEN', 7); - -/** - * wrong key object passed to function (it must be an object of Crypt_RSA_Key class) - */ -define('CRYPT_RSA_ERROR_WRONG_KEY', 8); - -/** - * wrong name of hash function passed to Crypt_RSA::setParams() function - */ -define('CRYPT_RSA_ERROR_WRONG_HASH_FUNC', 9); - -/** - * key, used for signing, must be private - */ -define('CRYPT_RSA_ERROR_NEED_PRV_KEY', 10); - -/** - * key, used for sign validating, must be public - */ -define('CRYPT_RSA_ERROR_NEED_PUB_KEY', 11); - -/** - * parameters must be passed to function as associative array - */ -define('CRYPT_RSA_ERROR_WRONG_PARAMS', 12); - -/** - * error tail of decrypted text. Maybe, wrong decryption key? - */ -define('CRYPT_RSA_ERROR_WRONG_TAIL', 13); - -/** - * Crypt_RSA_ErrorHandler class. - * - * This class is used as base for Crypt_RSA, Crypt_RSA_Key - * and Crypt_RSA_KeyPair classes. - * - * It provides following functions: - * - isError() - returns true, if list contains errors, else returns false - * - getErrorList() - returns error list - * - getLastError() - returns last error from error list or false, if list is empty - * - pushError($errstr) - pushes $errstr into the error list - * - setErrorHandler($new_error_handler) - sets error handler function - * - getErrorHandler() - returns name of error handler function - * - * @category Encryption - * @package Crypt_RSA - * @author Alexander Valyalkin - * @copyright 2005 Alexander Valyalkin - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: @package_version@ - * @link http://pear.php.net/package/Crypt_RSA - * @access public - */ -class Crypt_RSA_ErrorHandler -{ - /** - * array of error objects, pushed by $this->pushError() - * - * @var array - * @access private - */ - var $_errors = array(); - - /** - * name of error handler - function, which calls on $this->pushError() call - * - * @var string - * @access private - */ - var $_error_handler = ''; - - /** - * Returns true if list of errors is not empty, else returns false - * - * @param mixed $err Check if the object is an error - * - * @return bool true, if list of errors is not empty or $err is PEAR_Error object, else false - * @access public - */ - function isError($err = null) - { - return is_null($err) ? (sizeof($this->_errors) > 0) : PEAR::isError($err); - } - - /** - * Returns list of all errors, pushed to error list by $this->pushError() - * - * @return array list of errors (usually it contains objects of PEAR_Error class) - * @access public - */ - function getErrorList() - { - return $this->_errors; - } - - /** - * Returns last error from errors list or false, if list is empty - * - * @return mixed - * last error from errors list (usually it is PEAR_Error object) - * or false, if list is empty. - * - * @access public - */ - function getLastError() - { - $len = sizeof($this->_errors); - return $len ? $this->_errors[$len - 1] : false; - } - - /** - * pushes error object $error to the error list - * - * @param string $errstr error string - * @param int $errno error number - * - * @return bool true on success, false on error - * @access public - */ - function pushError($errstr, $errno = 0) - { - $this->_errors[] = PEAR::raiseError($errstr, $errno); - - if ($this->_error_handler != '') { - // call user defined error handler - $func = $this->_error_handler; - $func($this); - } - return true; - } - - /** - * sets error handler to function with name $func_name. - * Function $func_name must accept one parameter - current - * object, which triggered error. - * - * @param string $func_name name of error handler function - * - * @return bool true on success, false on error - * @access public - */ - function setErrorHandler($func_name = '') - { - if ($func_name == '') { - $this->_error_handler = ''; - } - if (!function_exists($func_name)) { - return false; - } - $this->_error_handler = $func_name; - return true; - } - - /** - * returns name of current error handler, or null if there is no error handler - * - * @return mixed error handler name as string or null, if there is no error handler - * @access public - */ - function getErrorHandler() - { - return $this->_error_handler; - } -} - -?> diff --git a/plugins/OStatus/extlib/Crypt/RSA/Key.php b/plugins/OStatus/extlib/Crypt/RSA/Key.php deleted file mode 100644 index 6595302291..0000000000 --- a/plugins/OStatus/extlib/Crypt/RSA/Key.php +++ /dev/null @@ -1,315 +0,0 @@ - - * @copyright 2005 Alexander Valyalkin - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version CVS: $Id: Key.php,v 1.6 2009/01/05 08:30:29 clockwerx Exp $ - * @link http://pear.php.net/package/Crypt_RSA - */ - -/** - * RSA error handling facilities - */ -require_once 'Crypt/RSA/ErrorHandler.php'; - -/** - * loader for RSA math wrappers - */ -require_once 'Crypt/RSA/MathLoader.php'; - -/** - * Crypt_RSA_Key class, derived from Crypt_RSA_ErrorHandler - * - * Provides the following functions: - * - getKeyLength() - returns bit key length - * - getExponent() - returns key exponent as binary string - * - getModulus() - returns key modulus as binary string - * - getKeyType() - returns type of the key (public or private) - * - toString() - returns serialized key as string - * - fromString($key_str) - static function; returns key, unserialized from string - * - isValid($key) - static function for validating of $key - * - * Example usage: - * // create new 1024-bit key pair - * $key_pair = new Crypt_RSA_KeyPair(1024); - * - * // get public key (its class is Crypt_RSA_Key) - * $key = $key_pair->getPublicKey(); - * - * // get key length - * $len = $key->getKeyLength(); - * - * // get modulus as string - * $modulus = $key->getModulus(); - * - * // get exponent as string - * $exponent = $key->getExponent(); - * - * // get string represenation of key (use it instead of serialization of Crypt_RSA_Key object) - * $key_in_str = $key->toString(); - * - * // restore key object from string using 'BigInt' math wrapper - * $key = Crypt_RSA_Key::fromString($key_in_str, 'BigInt'); - * - * // error check - * if ($key->isError()) { - * echo "error while unserializing key object:\n"; - * $erorr = $key->getLastError(); - * echo $error->getMessage(), "\n"; - * } - * - * // validate key - * if (Crypt_RSA_Key::isValid($key)) echo 'valid key'; - * else echo 'invalid key'; - * - * // using factory() method instead of constructor (it returns PEAR_Error object on failure) - * $rsa_obj = &Crypt_RSA_Key::factory($modulus, $exp, $key_type); - * if (PEAR::isError($rsa_obj)) { - * echo "error: ", $rsa_obj->getMessage(), "\n"; - * } - * - * @category Encryption - * @package Crypt_RSA - * @author Alexander Valyalkin - * @copyright 2005 Alexander Valyalkin - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: @package_version@ - * @link http://pear.php.net/package/Crypt_RSA - * @access public - */ -class Crypt_RSA_Key extends Crypt_RSA_ErrorHandler -{ - /** - * Reference to math wrapper object, which is used to - * manipulate large integers in RSA algorithm. - * - * @var object of Crypt_RSA_Math_* class - * @access private - */ - var $_math_obj; - - /** - * shared modulus - * - * @var string - * @access private - */ - var $_modulus; - - /** - * exponent - * - * @var string - * @access private - */ - var $_exp; - - /** - * key type (private or public) - * - * @var string - * @access private - */ - var $_key_type; - - /** - * key length in bits - * - * @var int - * @access private - */ - var $_key_len; - - /** - * Crypt_RSA_Key constructor. - * - * You should pass in the name of math wrapper, which will be used to - * perform different operations with big integers. - * See contents of Crypt/RSA/Math folder for examples of wrappers. - * Read docs/Crypt_RSA/docs/math_wrappers.txt for details. - * - * @param string $modulus key modulus - * @param string $exp key exponent - * @param string $key_type type of the key (public or private) - * @param string $wrapper_name wrapper to use - * @param string $error_handler name of error handler function - * - * @access public - */ - function Crypt_RSA_Key($modulus, $exp, $key_type, $wrapper_name = 'default', $error_handler = '') - { - // set error handler - $this->setErrorHandler($error_handler); - // try to load math wrapper $wrapper_name - $obj = &Crypt_RSA_MathLoader::loadWrapper($wrapper_name); - if ($this->isError($obj)) { - // error during loading of math wrapper - $this->pushError($obj); // push error object into error list - return; - } - $this->_math_obj = &$obj; - - $this->_modulus = $modulus; - $this->_exp = $exp; - - if (!in_array($key_type, array('private', 'public'))) { - $this->pushError('invalid key type. It must be private or public', CRYPT_RSA_ERROR_WRONG_KEY_TYPE); - return; - } - $this->_key_type = $key_type; - - /* check length of modulus & exponent ( abs(modulus) > abs(exp) ) */ - $mod_num = $this->_math_obj->bin2int($this->_modulus); - $exp_num = $this->_math_obj->bin2int($this->_exp); - - if ($this->_math_obj->cmpAbs($mod_num, $exp_num) <= 0) { - $this->pushError('modulus must be greater than exponent', CRYPT_RSA_ERROR_EXP_GE_MOD); - return; - } - - // determine key length - $this->_key_len = $this->_math_obj->bitLen($mod_num); - } - - /** - * Crypt_RSA_Key factory. - * - * @param string $modulus key modulus - * @param string $exp key exponent - * @param string $key_type type of the key (public or private) - * @param string $wrapper_name wrapper to use - * @param string $error_handler name of error handler function - * - * @return object new Crypt_RSA_Key object on success or PEAR_Error object on failure - * @access public - */ - function factory($modulus, $exp, $key_type, $wrapper_name = 'default', $error_handler = '') - { - $obj = new Crypt_RSA_Key($modulus, $exp, $key_type, $wrapper_name, $error_handler); - if ($obj->isError()) { - // error during creating a new object. Retrurn PEAR_Error object - return $obj->getLastError(); - } - // object created successfully. Return it - return $obj; - } - - /** - * Calculates bit length of the key - * - * @return int bit length of key - * @access public - */ - function getKeyLength() - { - return $this->_key_len; - } - - /** - * Returns modulus part of the key as binary string, - * which can be used to construct new Crypt_RSA_Key object. - * - * @return string modulus as binary string - * @access public - */ - function getModulus() - { - return $this->_modulus; - } - - /** - * Returns exponent part of the key as binary string, - * which can be used to construct new Crypt_RSA_Key object. - * - * @return string exponent as binary string - * @access public - */ - function getExponent() - { - return $this->_exp; - } - - /** - * Returns key type (public, private) - * - * @return string key type (public, private) - * @access public - */ - function getKeyType() - { - return $this->_key_type; - } - - /** - * Returns string representation of key - * - * @return string key, serialized to string - * @access public - */ - function toString() - { - return base64_encode( - serialize( - array($this->_modulus, $this->_exp, $this->_key_type) - ) - ); - } - - /** - * Returns Crypt_RSA_Key object, unserialized from - * string representation of key. - * - * optional parameter $wrapper_name - is the name of math wrapper, - * which will be used during unserialization of this object. - * - * This function can be called statically: - * $key = Crypt_RSA_Key::fromString($key_in_string, 'BigInt'); - * - * @param string $key_str RSA key, serialized into string - * @param string $wrapper_name optional math wrapper name - * - * @return object key as Crypt_RSA_Key object - * @access public - * @static - */ - function fromString($key_str, $wrapper_name = 'default') - { - list($modulus, $exponent, $key_type) = unserialize(base64_decode($key_str)); - $obj = new Crypt_RSA_Key($modulus, $exponent, $key_type, $wrapper_name); - return $obj; - } - - /** - * Validates key - * This function can be called statically: - * $is_valid = Crypt_RSA_Key::isValid($key) - * - * Returns true, if $key is valid Crypt_RSA key, else returns false - * - * @param object $key Crypt_RSA_Key object for validating - * - * @return bool true if $key is valid, else false - * @access public - */ - function isValid($key) - { - return (is_object($key) && strtolower(get_class($key)) === strtolower(__CLASS__)); - } -} - -?> diff --git a/plugins/OStatus/extlib/Crypt/RSA/KeyPair.php b/plugins/OStatus/extlib/Crypt/RSA/KeyPair.php deleted file mode 100644 index ecc0b7dc7e..0000000000 --- a/plugins/OStatus/extlib/Crypt/RSA/KeyPair.php +++ /dev/null @@ -1,804 +0,0 @@ - - * @copyright 2005 Alexander Valyalkin - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version CVS: $Id: KeyPair.php,v 1.7 2009/01/05 08:30:29 clockwerx Exp $ - * @link http://pear.php.net/package/Crypt_RSA - */ - -/** - * RSA error handling facilities - */ -require_once 'Crypt/RSA/ErrorHandler.php'; - -/** - * loader for RSA math wrappers - */ -require_once 'Crypt/RSA/MathLoader.php'; - -/** - * helper class for single key managing - */ -require_once 'Crypt/RSA/Key.php'; - -/** - * Crypt_RSA_KeyPair class, derived from Crypt_RSA_ErrorHandler - * - * Provides the following functions: - * - generate($key) - generates new key pair - * - getPublicKey() - returns public key - * - getPrivateKey() - returns private key - * - getKeyLength() - returns bit key length - * - setRandomGenerator($func_name) - sets random generator to $func_name - * - fromPEMString($str) - retrieves keypair from PEM-encoded string - * - toPEMString() - stores keypair to PEM-encoded string - * - isEqual($keypair2) - compares current keypair to $keypair2 - * - * Example usage: - * // create new 1024-bit key pair - * $key_pair = new Crypt_RSA_KeyPair(1024); - * - * // error check - * if ($key_pair->isError()) { - * echo "error while initializing Crypt_RSA_KeyPair object:\n"; - * $erorr = $key_pair->getLastError(); - * echo $error->getMessage(), "\n"; - * } - * - * // get public key - * $public_key = $key_pair->getPublicKey(); - * - * // get private key - * $private_key = $key_pair->getPrivateKey(); - * - * // generate new 512-bit key pair - * $key_pair->generate(512); - * - * // error check - * if ($key_pair->isError()) { - * echo "error while generating key pair:\n"; - * $erorr = $key_pair->getLastError(); - * echo $error->getMessage(), "\n"; - * } - * - * // get key pair length - * $length = $key_pair->getKeyLength(); - * - * // set random generator to $func_name, where $func_name - * // consists name of random generator function. See comments - * // before setRandomGenerator() method for details - * $key_pair->setRandomGenerator($func_name); - * - * // error check - * if ($key_pair->isError()) { - * echo "error while changing random generator:\n"; - * $erorr = $key_pair->getLastError(); - * echo $error->getMessage(), "\n"; - * } - * - * // using factory() method instead of constructor (it returns PEAR_Error object on failure) - * $rsa_obj = &Crypt_RSA_KeyPair::factory($key_len); - * if (PEAR::isError($rsa_obj)) { - * echo "error: ", $rsa_obj->getMessage(), "\n"; - * } - * - * // read key pair from PEM-encoded string: - * $str = "-----BEGIN RSA PRIVATE KEY-----" - * . "MCsCAQACBHr5LDkCAwEAAQIEBc6jbQIDAOCfAgMAjCcCAk3pAgJMawIDAL41" - * . "-----END RSA PRIVATE KEY-----"; - * $keypair = Crypt_RSA_KeyPair::fromPEMString($str); - * - * // read key pair from .pem file 'private.pem': - * $str = file_get_contents('private.pem'); - * $keypair = Crypt_RSA_KeyPair::fromPEMString($str); - * - * // generate and write 1024-bit key pair to .pem file 'private_new.pem' - * $keypair = new Crypt_RSA_KeyPair(1024); - * $str = $keypair->toPEMString(); - * file_put_contents('private_new.pem', $str); - * - * // compare $keypair1 to $keypair2 - * if ($keypair1->isEqual($keypair2)) { - * echo "keypair1 = keypair2\n"; - * } - * else { - * echo "keypair1 != keypair2\n"; - * } - * - * @category Encryption - * @package Crypt_RSA - * @author Alexander Valyalkin - * @copyright 2005 Alexander Valyalkin - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: @package_version@ - * @link http://pear.php.net/package/Crypt_RSA - * @access public - */ -class Crypt_RSA_KeyPair extends Crypt_RSA_ErrorHandler -{ - /** - * Reference to math wrapper object, which is used to - * manipulate large integers in RSA algorithm. - * - * @var object of Crypt_RSA_Math_* class - * @access private - */ - var $_math_obj; - - /** - * length of each key in the key pair - * - * @var int - * @access private - */ - var $_key_len; - - /** - * public key - * - * @var object of Crypt_RSA_KEY class - * @access private - */ - var $_public_key; - - /** - * private key - * - * @var object of Crypt_RSA_KEY class - * @access private - */ - var $_private_key; - - /** - * name of function, which is used as random generator - * - * @var string - * @access private - */ - var $_random_generator; - - /** - * RSA keypair attributes [version, n, e, d, p, q, dmp1, dmq1, iqmp] as associative array - * - * @var array - * @access private - */ - var $_attrs; - - /** - * Returns names of keypair attributes from $this->_attrs array - * - * @return array Array of keypair attributes names - * @access private - */ - function _get_attr_names() - { - return array('version', 'n', 'e', 'd', 'p', 'q', 'dmp1', 'dmq1', 'iqmp'); - } - - /** - * Parses ASN.1 string [$str] starting form position [$pos]. - * Returns tag and string value of parsed object. - * - * @param string $str - * @param int &$pos - * @param Crypt_RSA_ErrorHandler &$err_handler - * - * @return mixed Array('tag' => ..., 'str' => ...) on success, false on error - * @access private - */ - function _ASN1Parse($str, &$pos, &$err_handler) - { - $max_pos = strlen($str); - if ($max_pos < 2) { - $err_handler->pushError("ASN.1 string too short"); - return false; - } - - // get ASN.1 tag value - $tag = ord($str[$pos++]) & 0x1f; - if ($tag == 0x1f) { - $tag = 0; - do { - $n = ord($str[$pos++]); - $tag <<= 7; - $tag |= $n & 0x7f; - } while (($n & 0x80) && $pos < $max_pos); - } - if ($pos >= $max_pos) { - $err_handler->pushError("ASN.1 string too short"); - return false; - } - - // get ASN.1 object length - $len = ord($str[$pos++]); - if ($len & 0x80) { - $n = $len & 0x1f; - $len = 0; - while ($n-- && $pos < $max_pos) { - $len <<= 8; - $len |= ord($str[$pos++]); - } - } - if ($pos >= $max_pos || $len > $max_pos - $pos) { - $err_handler->pushError("ASN.1 string too short"); - return false; - } - - // get string value of ASN.1 object - $str = substr($str, $pos, $len); - - return array( - 'tag' => $tag, - 'str' => $str, - ); - } - - /** - * Parses ASN.1 sting [$str] starting from position [$pos]. - * Returns string representation of number, which can be passed - * in bin2int() function of math wrapper. - * - * @param string $str - * @param int &$pos - * @param Crypt_RSA_ErrorHandler &$err_handler - * - * @return mixed string representation of parsed number on success, false on error - * @access private - */ - function _ASN1ParseInt($str, &$pos, &$err_handler) - { - $tmp = Crypt_RSA_KeyPair::_ASN1Parse($str, $pos, $err_handler); - if ($err_handler->isError()) { - return false; - } - if ($tmp['tag'] != 0x02) { - $errstr = sprintf("wrong ASN tag value: 0x%02x. Expected 0x02 (INTEGER)", $tmp['tag']); - $err_handler->pushError($errstr); - return false; - } - $pos += strlen($tmp['str']); - - return strrev($tmp['str']); - } - - /** - * Constructs ASN.1 string from tag $tag and object $str - * - * @param string $str ASN.1 object string - * @param int $tag ASN.1 tag value - * @param bool $is_constructed - * @param bool $is_private - * - * @return ASN.1-encoded string - * @access private - */ - function _ASN1Store($str, $tag, $is_constructed = false, $is_private = false) - { - $out = ''; - - // encode ASN.1 tag value - $tag_ext = ($is_constructed ? 0x20 : 0) | ($is_private ? 0xc0 : 0); - if ($tag < 0x1f) { - $out .= chr($tag | $tag_ext); - } else { - $out .= chr($tag_ext | 0x1f); - $tmp = chr($tag & 0x7f); - $tag >>= 7; - while ($tag) { - $tmp .= chr(($tag & 0x7f) | 0x80); - $tag >>= 7; - } - $out .= strrev($tmp); - } - - // encode ASN.1 object length - $len = strlen($str); - if ($len < 0x7f) { - $out .= chr($len); - } else { - $tmp = ''; - $n = 0; - while ($len) { - $tmp .= chr($len & 0xff); - $len >>= 8; - $n++; - } - $out .= chr($n | 0x80); - $out .= strrev($tmp); - } - - return $out . $str; - } - - /** - * Constructs ASN.1 string from binary representation of big integer - * - * @param string $str binary representation of big integer - * - * @return ASN.1-encoded string - * @access private - */ - function _ASN1StoreInt($str) - { - $str = strrev($str); - return Crypt_RSA_KeyPair::_ASN1Store($str, 0x02); - } - - /** - * Crypt_RSA_KeyPair constructor. - * - * Wrapper: name of math wrapper, which will be used to - * perform different operations with big integers. - * See contents of Crypt/RSA/Math folder for examples of wrappers. - * Read docs/Crypt_RSA/docs/math_wrappers.txt for details. - * - * @param int $key_len bit length of key pair, which will be generated in constructor - * @param string $wrapper_name wrapper name - * @param string $error_handler name of error handler function - * @param callback $random_generator function which will be used as random generator - * - * @access public - */ - function Crypt_RSA_KeyPair($key_len, $wrapper_name = 'default', $error_handler = '', $random_generator = null) - { - // set error handler - $this->setErrorHandler($error_handler); - // try to load math wrapper - $obj = &Crypt_RSA_MathLoader::loadWrapper($wrapper_name); - if ($this->isError($obj)) { - // error during loading of math wrapper - $this->pushError($obj); - return; - } - $this->_math_obj = &$obj; - - // set random generator - if (!$this->setRandomGenerator($random_generator)) { - // error in setRandomGenerator() function - return; - } - - if (is_array($key_len)) { - // ugly BC hack - it is possible to pass RSA private key attributes [version, n, e, d, p, q, dmp1, dmq1, iqmp] - // as associative array instead of key length to Crypt_RSA_KeyPair constructor - $rsa_attrs = $key_len; - - // convert attributes to big integers - $attr_names = $this->_get_attr_names(); - foreach ($attr_names as $attr) { - if (!isset($rsa_attrs[$attr])) { - $this->pushError("missing required RSA attribute [$attr]"); - return; - } - ${$attr} = $this->_math_obj->bin2int($rsa_attrs[$attr]); - } - - // check primality of p and q - if (!$this->_math_obj->isPrime($p)) { - $this->pushError("[p] must be prime"); - return; - } - if (!$this->_math_obj->isPrime($q)) { - $this->pushError("[q] must be prime"); - return; - } - - // check n = p * q - $n1 = $this->_math_obj->mul($p, $q); - if ($this->_math_obj->cmpAbs($n, $n1)) { - $this->pushError("n != p * q"); - return; - } - - // check e * d = 1 mod (p-1) * (q-1) - $p1 = $this->_math_obj->dec($p); - $q1 = $this->_math_obj->dec($q); - $p1q1 = $this->_math_obj->mul($p1, $q1); - $ed = $this->_math_obj->mul($e, $d); - $one = $this->_math_obj->mod($ed, $p1q1); - if (!$this->_math_obj->isOne($one)) { - $this->pushError("e * d != 1 mod (p-1)*(q-1)"); - return; - } - - // check dmp1 = d mod (p-1) - $dmp = $this->_math_obj->mod($d, $p1); - if ($this->_math_obj->cmpAbs($dmp, $dmp1)) { - $this->pushError("dmp1 != d mod (p-1)"); - return; - } - - // check dmq1 = d mod (q-1) - $dmq = $this->_math_obj->mod($d, $q1); - if ($this->_math_obj->cmpAbs($dmq, $dmq1)) { - $this->pushError("dmq1 != d mod (q-1)"); - return; - } - - // check iqmp = 1/q mod p - $q1 = $this->_math_obj->invmod($iqmp, $p); - if ($this->_math_obj->cmpAbs($q, $q1)) { - $this->pushError("iqmp != 1/q mod p"); - return; - } - - // try to create public key object - $public_key = &new Crypt_RSA_Key($rsa_attrs['n'], $rsa_attrs['e'], 'public', $wrapper_name, $error_handler); - if ($public_key->isError()) { - // error during creating public object - $this->pushError($public_key->getLastError()); - return; - } - - // try to create private key object - $private_key = &new Crypt_RSA_Key($rsa_attrs['n'], $rsa_attrs['d'], 'private', $wrapper_name, $error_handler); - if ($private_key->isError()) { - // error during creating private key object - $this->pushError($private_key->getLastError()); - return; - } - - $this->_public_key = $public_key; - $this->_private_key = $private_key; - $this->_key_len = $public_key->getKeyLength(); - $this->_attrs = $rsa_attrs; - } else { - // generate key pair - if (!$this->generate($key_len)) { - // error during generating key pair - return; - } - } - } - - /** - * Crypt_RSA_KeyPair factory. - * - * Wrapper - Name of math wrapper, which will be used to - * perform different operations with big integers. - * See contents of Crypt/RSA/Math folder for examples of wrappers. - * Read docs/Crypt_RSA/docs/math_wrappers.txt for details. - * - * @param int $key_len bit length of key pair, which will be generated in constructor - * @param string $wrapper_name wrapper name - * @param string $error_handler name of error handler function - * @param callback $random_generator function which will be used as random generator - * - * @return object new Crypt_RSA_KeyPair object on success or PEAR_Error object on failure - * @access public - */ - function &factory($key_len, $wrapper_name = 'default', $error_handler = '', $random_generator = null) - { - $obj = &new Crypt_RSA_KeyPair($key_len, $wrapper_name, $error_handler, $random_generator); - if ($obj->isError()) { - // error during creating a new object. Return PEAR_Error object - return $obj->getLastError(); - } - // object created successfully. Return it - return $obj; - } - - /** - * Generates new Crypt_RSA key pair with length $key_len. - * If $key_len is missed, use an old key length from $this->_key_len - * - * @param int $key_len bit length of key pair, which will be generated - * - * @return bool true on success or false on error - * @access public - */ - function generate($key_len = null) - { - if (is_null($key_len)) { - // use an old key length - $key_len = $this->_key_len; - if (is_null($key_len)) { - $this->pushError('missing key_len parameter', CRYPT_RSA_ERROR_MISSING_KEY_LEN); - return false; - } - } - - // minimal key length is 8 bit ;) - if ($key_len < 8) { - $key_len = 8; - } - // store key length in the _key_len property - $this->_key_len = $key_len; - - // set [e] to 0x10001 (65537) - $e = $this->_math_obj->bin2int("\x01\x00\x01"); - - // generate [p], [q] and [n] - $p_len = intval(($key_len + 1) / 2); - $q_len = $key_len - $p_len; - $p1 = $q1 = 0; - do { - // generate prime number [$p] with length [$p_len] with the following condition: - // GCD($e, $p - 1) = 1 - do { - $p = $this->_math_obj->getPrime($p_len, $this->_random_generator); - $p1 = $this->_math_obj->dec($p); - $tmp = $this->_math_obj->GCD($e, $p1); - } while (!$this->_math_obj->isOne($tmp)); - // generate prime number [$q] with length [$q_len] with the following conditions: - // GCD($e, $q - 1) = 1 - // $q != $p - do { - $q = $this->_math_obj->getPrime($q_len, $this->_random_generator); - $q1 = $this->_math_obj->dec($q); - $tmp = $this->_math_obj->GCD($e, $q1); - } while (!$this->_math_obj->isOne($tmp) && !$this->_math_obj->cmpAbs($q, $p)); - // if (p < q), then exchange them - if ($this->_math_obj->cmpAbs($p, $q) < 0) { - $tmp = $p; - $p = $q; - $q = $tmp; - $tmp = $p1; - $p1 = $q1; - $q1 = $tmp; - } - // calculate n = p * q - $n = $this->_math_obj->mul($p, $q); - } while ($this->_math_obj->bitLen($n) != $key_len); - - // calculate d = 1/e mod (p - 1) * (q - 1) - $pq = $this->_math_obj->mul($p1, $q1); - $d = $this->_math_obj->invmod($e, $pq); - - // calculate dmp1 = d mod (p - 1) - $dmp1 = $this->_math_obj->mod($d, $p1); - - // calculate dmq1 = d mod (q - 1) - $dmq1 = $this->_math_obj->mod($d, $q1); - - // calculate iqmp = 1/q mod p - $iqmp = $this->_math_obj->invmod($q, $p); - - // store RSA keypair attributes - $this->_attrs = array( - 'version' => "\x00", - 'n' => $this->_math_obj->int2bin($n), - 'e' => $this->_math_obj->int2bin($e), - 'd' => $this->_math_obj->int2bin($d), - 'p' => $this->_math_obj->int2bin($p), - 'q' => $this->_math_obj->int2bin($q), - 'dmp1' => $this->_math_obj->int2bin($dmp1), - 'dmq1' => $this->_math_obj->int2bin($dmq1), - 'iqmp' => $this->_math_obj->int2bin($iqmp), - ); - - $n = $this->_attrs['n']; - $e = $this->_attrs['e']; - $d = $this->_attrs['d']; - - // try to create public key object - $obj = &new Crypt_RSA_Key($n, $e, 'public', $this->_math_obj->getWrapperName(), $this->_error_handler); - if ($obj->isError()) { - // error during creating public object - $this->pushError($obj->getLastError()); - return false; - } - $this->_public_key = &$obj; - - // try to create private key object - $obj = &new Crypt_RSA_Key($n, $d, 'private', $this->_math_obj->getWrapperName(), $this->_error_handler); - if ($obj->isError()) { - // error during creating private key object - $this->pushError($obj->getLastError()); - return false; - } - $this->_private_key = &$obj; - - return true; // key pair successfully generated - } - - /** - * Returns public key from the pair - * - * @return object public key object of class Crypt_RSA_Key - * @access public - */ - function getPublicKey() - { - return $this->_public_key; - } - - /** - * Returns private key from the pair - * - * @return object private key object of class Crypt_RSA_Key - * @access public - */ - function getPrivateKey() - { - return $this->_private_key; - } - - /** - * Sets name of random generator function for key generation. - * If parameter is skipped, then sets to default random generator. - * - * Random generator function must return integer with at least 8 lower - * significant bits, which will be used as random values. - * - * @param string $random_generator name of random generator function - * - * @return bool true on success or false on error - * @access public - */ - function setRandomGenerator($random_generator = null) - { - static $default_random_generator = null; - - if (is_string($random_generator)) { - // set user's random generator - if (!function_exists($random_generator)) { - $this->pushError("can't find random generator function with name [{$random_generator}]"); - return false; - } - $this->_random_generator = $random_generator; - } else { - // set default random generator - $this->_random_generator = is_null($default_random_generator) ? - ($default_random_generator = create_function('', '$a=explode(" ",microtime());return(int)($a[0]*1000000);')) : - $default_random_generator; - } - return true; - } - - /** - * Returns length of each key in the key pair - * - * @return int bit length of each key in key pair - * @access public - */ - function getKeyLength() - { - return $this->_key_len; - } - - /** - * Retrieves RSA keypair from PEM-encoded string, containing RSA private key. - * Example of such string: - * -----BEGIN RSA PRIVATE KEY----- - * MCsCAQACBHtvbSECAwEAAQIEeYrk3QIDAOF3AgMAjCcCAmdnAgJMawIDALEk - * -----END RSA PRIVATE KEY----- - * - * Wrapper: Name of math wrapper, which will be used to - * perform different operations with big integers. - * See contents of Crypt/RSA/Math folder for examples of wrappers. - * Read docs/Crypt_RSA/docs/math_wrappers.txt for details. - * - * @param string $str PEM-encoded string - * @param string $wrapper_name Wrapper name - * @param string $error_handler name of error handler function - * - * @return Crypt_RSA_KeyPair object on success, PEAR_Error object on error - * @access public - * @static - */ - function &fromPEMString($str, $wrapper_name = 'default', $error_handler = '') - { - if (isset($this)) { - if ($wrapper_name == 'default') { - $wrapper_name = $this->_math_obj->getWrapperName(); - } - if ($error_handler == '') { - $error_handler = $this->_error_handler; - } - } - $err_handler = &new Crypt_RSA_ErrorHandler; - $err_handler->setErrorHandler($error_handler); - - // search for base64-encoded private key - if (!preg_match('/-----BEGIN RSA PRIVATE KEY-----([^-]+)-----END RSA PRIVATE KEY-----/', $str, $matches)) { - $err_handler->pushError("can't find RSA private key in the string [{$str}]"); - return $err_handler->getLastError(); - } - - // parse private key. It is ASN.1-encoded - $str = base64_decode($matches[1]); - $pos = 0; - $tmp = Crypt_RSA_KeyPair::_ASN1Parse($str, $pos, $err_handler); - if ($err_handler->isError()) { - return $err_handler->getLastError(); - } - if ($tmp['tag'] != 0x10) { - $errstr = sprintf("wrong ASN tag value: 0x%02x. Expected 0x10 (SEQUENCE)", $tmp['tag']); - $err_handler->pushError($errstr); - return $err_handler->getLastError(); - } - - // parse ASN.1 SEQUENCE for RSA private key - $attr_names = Crypt_RSA_KeyPair::_get_attr_names(); - $n = sizeof($attr_names); - $rsa_attrs = array(); - for ($i = 0; $i < $n; $i++) { - $tmp = Crypt_RSA_KeyPair::_ASN1ParseInt($str, $pos, $err_handler); - if ($err_handler->isError()) { - return $err_handler->getLastError(); - } - $attr = $attr_names[$i]; - $rsa_attrs[$attr] = $tmp; - } - - // create Crypt_RSA_KeyPair object. - $keypair = &new Crypt_RSA_KeyPair($rsa_attrs, $wrapper_name, $error_handler); - if ($keypair->isError()) { - return $keypair->getLastError(); - } - - return $keypair; - } - - /** - * converts keypair to PEM-encoded string, which can be stroed in - * .pem compatible files, contianing RSA private key. - * - * @return string PEM-encoded keypair on success, false on error - * @access public - */ - function toPEMString() - { - // store RSA private key attributes into ASN.1 string - $str = ''; - $attr_names = $this->_get_attr_names(); - $n = sizeof($attr_names); - $rsa_attrs = $this->_attrs; - for ($i = 0; $i < $n; $i++) { - $attr = $attr_names[$i]; - if (!isset($rsa_attrs[$attr])) { - $this->pushError("Cannot find value for ASN.1 attribute [$attr]"); - return false; - } - $tmp = $rsa_attrs[$attr]; - $str .= Crypt_RSA_KeyPair::_ASN1StoreInt($tmp); - } - - // prepend $str by ASN.1 SEQUENCE (0x10) header - $str = Crypt_RSA_KeyPair::_ASN1Store($str, 0x10, true); - - // encode and format PEM string - $str = base64_encode($str); - $str = chunk_split($str, 64, "\n"); - return "-----BEGIN RSA PRIVATE KEY-----\n$str-----END RSA PRIVATE KEY-----\n"; - } - - /** - * Compares keypairs in Crypt_RSA_KeyPair objects $this and $key_pair - * - * @param Crypt_RSA_KeyPair $key_pair keypair to compare - * - * @return bool true, if keypair stored in $this equal to keypair stored in $key_pair - * @access public - */ - function isEqual($key_pair) - { - $attr_names = $this->_get_attr_names(); - foreach ($attr_names as $attr) { - if ($this->_attrs[$attr] != $key_pair->_attrs[$attr]) { - return false; - } - } - return true; - } -} - -?> diff --git a/plugins/OStatus/extlib/Crypt/RSA/Math/BCMath.php b/plugins/OStatus/extlib/Crypt/RSA/Math/BCMath.php deleted file mode 100644 index 646ff67103..0000000000 --- a/plugins/OStatus/extlib/Crypt/RSA/Math/BCMath.php +++ /dev/null @@ -1,482 +0,0 @@ - - * @copyright 2006 Alexander Valyalkin - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version 1.2.0b - * @link http://pear.php.net/package/Crypt_RSA - */ - -/** - * Crypt_RSA_Math_BCMath class. - * - * Provides set of math functions, which are used by Crypt_RSA package - * This class is a wrapper for PHP BCMath extension. - * See http://php.net/manual/en/ref.bc.php for details. - * - * @category Encryption - * @package Crypt_RSA - * @author Alexander Valyalkin - * @copyright 2005, 2006 Alexander Valyalkin - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @link http://pear.php.net/package/Crypt_RSA - * @version @package_version@ - * @access public - */ -class Crypt_RSA_Math_BCMath -{ - /** - * error description - * - * @var string - * @access public - */ - var $errstr = ''; - - /** - * Performs Miller-Rabin primality test for number $num - * with base $base. Returns true, if $num is strong pseudoprime - * by base $base. Else returns false. - * - * @param string $num - * @param string $base - * @return bool - * @access private - */ - function _millerTest($num, $base) - { - if (!bccomp($num, '1')) { - // 1 is not prime ;) - return false; - } - $tmp = bcsub($num, '1'); - - $zero_bits = 0; - while (!bccomp(bcmod($tmp, '2'), '0')) { - $zero_bits++; - $tmp = bcdiv($tmp, '2'); - } - - $tmp = $this->powmod($base, $tmp, $num); - if (!bccomp($tmp, '1')) { - // $num is probably prime - return true; - } - - while ($zero_bits--) { - if (!bccomp(bcadd($tmp, '1'), $num)) { - // $num is probably prime - return true; - } - $tmp = $this->powmod($tmp, '2', $num); - } - // $num is composite - return false; - } - - /** - * Crypt_RSA_Math_BCMath constructor. - * Checks an existance of PHP BCMath extension. - * On failure saves error description in $this->errstr - * - * @access public - */ - function Crypt_RSA_Math_BCMath() - { - if (!extension_loaded('bcmath')) { - if (!@dl('bcmath.' . PHP_SHLIB_SUFFIX) && !@dl('php_bcmath.' . PHP_SHLIB_SUFFIX)) { - // cannot load BCMath extension. Set error string - $this->errstr = 'Crypt_RSA package requires the BCMath extension. See http://php.net/manual/en/ref.bc.php for details'; - return; - } - } - } - - /** - * Transforms binary representation of large integer into its native form. - * - * Example of transformation: - * $str = "\x12\x34\x56\x78\x90"; - * $num = 0x9078563412; - * - * @param string $str - * @return string - * @access public - */ - function bin2int($str) - { - $result = '0'; - $n = strlen($str); - do { - $result = bcadd(bcmul($result, '256'), ord($str{--$n})); - } while ($n > 0); - return $result; - } - - /** - * Transforms large integer into binary representation. - * - * Example of transformation: - * $num = 0x9078563412; - * $str = "\x12\x34\x56\x78\x90"; - * - * @param string $num - * @return string - * @access public - */ - function int2bin($num) - { - $result = ''; - do { - $result .= chr(bcmod($num, '256')); - $num = bcdiv($num, '256'); - } while (bccomp($num, '0')); - return $result; - } - - /** - * Calculates pow($num, $pow) (mod $mod) - * - * @param string $num - * @param string $pow - * @param string $mod - * @return string - * @access public - */ - function powmod($num, $pow, $mod) - { - if (function_exists('bcpowmod')) { - // bcpowmod is only available under PHP5 - return bcpowmod($num, $pow, $mod); - } - - // emulate bcpowmod - $result = '1'; - do { - if (!bccomp(bcmod($pow, '2'), '1')) { - $result = bcmod(bcmul($result, $num), $mod); - } - $num = bcmod(bcpow($num, '2'), $mod); - $pow = bcdiv($pow, '2'); - } while (bccomp($pow, '0')); - return $result; - } - - /** - * Calculates $num1 * $num2 - * - * @param string $num1 - * @param string $num2 - * @return string - * @access public - */ - function mul($num1, $num2) - { - return bcmul($num1, $num2); - } - - /** - * Calculates $num1 % $num2 - * - * @param string $num1 - * @param string $num2 - * @return string - * @access public - */ - function mod($num1, $num2) - { - return bcmod($num1, $num2); - } - - /** - * Compares abs($num1) to abs($num2). - * Returns: - * -1, if abs($num1) < abs($num2) - * 0, if abs($num1) == abs($num2) - * 1, if abs($num1) > abs($num2) - * - * @param string $num1 - * @param string $num2 - * @return int - * @access public - */ - function cmpAbs($num1, $num2) - { - return bccomp($num1, $num2); - } - - /** - * Tests $num on primality. Returns true, if $num is strong pseudoprime. - * Else returns false. - * - * @param string $num - * @return bool - * @access private - */ - function isPrime($num) - { - static $primes = null; - static $primes_cnt = 0; - if (is_null($primes)) { - // generate all primes up to 10000 - $primes = array(); - for ($i = 0; $i < 10000; $i++) { - $primes[] = $i; - } - $primes[0] = $primes[1] = 0; - for ($i = 2; $i < 100; $i++) { - while (!$primes[$i]) { - $i++; - } - $j = $i; - for ($j += $i; $j < 10000; $j += $i) { - $primes[$j] = 0; - } - } - $j = 0; - for ($i = 0; $i < 10000; $i++) { - if ($primes[$i]) { - $primes[$j++] = $primes[$i]; - } - } - $primes_cnt = $j; - } - - // try to divide number by small primes - for ($i = 0; $i < $primes_cnt; $i++) { - if (bccomp($num, $primes[$i]) <= 0) { - // number is prime - return true; - } - if (!bccomp(bcmod($num, $primes[$i]), '0')) { - // number divides by $primes[$i] - return false; - } - } - - /* - try Miller-Rabin's probable-primality test for first - 7 primes as bases - */ - for ($i = 0; $i < 7; $i++) { - if (!$this->_millerTest($num, $primes[$i])) { - // $num is composite - return false; - } - } - // $num is strong pseudoprime - return true; - } - - /** - * Generates prime number with length $bits_cnt - * using $random_generator as random generator function. - * - * @param int $bits_cnt - * @param string $rnd_generator - * @access public - */ - function getPrime($bits_cnt, $random_generator) - { - $bytes_n = intval($bits_cnt / 8); - $bits_n = $bits_cnt % 8; - do { - $str = ''; - for ($i = 0; $i < $bytes_n; $i++) { - $str .= chr(call_user_func($random_generator) & 0xff); - } - $n = call_user_func($random_generator) & 0xff; - $n |= 0x80; - $n >>= 8 - $bits_n; - $str .= chr($n); - $num = $this->bin2int($str); - - // search for the next closest prime number after [$num] - if (!bccomp(bcmod($num, '2'), '0')) { - $num = bcadd($num, '1'); - } - while (!$this->isPrime($num)) { - $num = bcadd($num, '2'); - } - } while ($this->bitLen($num) != $bits_cnt); - return $num; - } - - /** - * Calculates $num - 1 - * - * @param string $num - * @return string - * @access public - */ - function dec($num) - { - return bcsub($num, '1'); - } - - /** - * Returns true, if $num is equal to one. Else returns false - * - * @param string $num - * @return bool - * @access public - */ - function isOne($num) - { - return !bccomp($num, '1'); - } - - /** - * Finds greatest common divider (GCD) of $num1 and $num2 - * - * @param string $num1 - * @param string $num2 - * @return string - * @access public - */ - function GCD($num1, $num2) - { - do { - $tmp = bcmod($num1, $num2); - $num1 = $num2; - $num2 = $tmp; - } while (bccomp($num2, '0')); - return $num1; - } - - /** - * Finds inverse number $inv for $num by modulus $mod, such as: - * $inv * $num = 1 (mod $mod) - * - * @param string $num - * @param string $mod - * @return string - * @access public - */ - function invmod($num, $mod) - { - $x = '1'; - $y = '0'; - $num1 = $mod; - do { - $tmp = bcmod($num, $num1); - $q = bcdiv($num, $num1); - $num = $num1; - $num1 = $tmp; - - $tmp = bcsub($x, bcmul($y, $q)); - $x = $y; - $y = $tmp; - } while (bccomp($num1, '0')); - if (bccomp($x, '0') < 0) { - $x = bcadd($x, $mod); - } - return $x; - } - - /** - * Returns bit length of number $num - * - * @param string $num - * @return int - * @access public - */ - function bitLen($num) - { - $tmp = $this->int2bin($num); - $bit_len = strlen($tmp) * 8; - $tmp = ord($tmp{strlen($tmp) - 1}); - if (!$tmp) { - $bit_len -= 8; - } - else { - while (!($tmp & 0x80)) { - $bit_len--; - $tmp <<= 1; - } - } - return $bit_len; - } - - /** - * Calculates bitwise or of $num1 and $num2, - * starting from bit $start_pos for number $num1 - * - * @param string $num1 - * @param string $num2 - * @param int $start_pos - * @return string - * @access public - */ - function bitOr($num1, $num2, $start_pos) - { - $start_byte = intval($start_pos / 8); - $start_bit = $start_pos % 8; - $tmp1 = $this->int2bin($num1); - - $num2 = bcmul($num2, 1 << $start_bit); - $tmp2 = $this->int2bin($num2); - if ($start_byte < strlen($tmp1)) { - $tmp2 |= substr($tmp1, $start_byte); - $tmp1 = substr($tmp1, 0, $start_byte) . $tmp2; - } - else { - $tmp1 = str_pad($tmp1, $start_byte, "\0") . $tmp2; - } - return $this->bin2int($tmp1); - } - - /** - * Returns part of number $num, starting at bit - * position $start with length $length - * - * @param string $num - * @param int start - * @param int length - * @return string - * @access public - */ - function subint($num, $start, $length) - { - $start_byte = intval($start / 8); - $start_bit = $start % 8; - $byte_length = intval($length / 8); - $bit_length = $length % 8; - if ($bit_length) { - $byte_length++; - } - $num = bcdiv($num, 1 << $start_bit); - $tmp = substr($this->int2bin($num), $start_byte, $byte_length); - $tmp = str_pad($tmp, $byte_length, "\0"); - $tmp = substr_replace($tmp, $tmp{$byte_length - 1} & chr(0xff >> (8 - $bit_length)), $byte_length - 1, 1); - return $this->bin2int($tmp); - } - - /** - * Returns name of current wrapper - * - * @return string name of current wrapper - * @access public - */ - function getWrapperName() - { - return 'BCMath'; - } -} - -?> \ No newline at end of file diff --git a/plugins/OStatus/extlib/Crypt/RSA/Math/BigInt.php b/plugins/OStatus/extlib/Crypt/RSA/Math/BigInt.php deleted file mode 100644 index b7ac24cb66..0000000000 --- a/plugins/OStatus/extlib/Crypt/RSA/Math/BigInt.php +++ /dev/null @@ -1,313 +0,0 @@ - - * @copyright 2005, 2006 Alexander Valyalkin - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version 1.2.0b - * @link http://pear.php.net/package/Crypt_RSA - */ - -/** - * Crypt_RSA_Math_BigInt class. - * - * Provides set of math functions, which are used by Crypt_RSA package - * This class is a wrapper for big_int PECL extension, - * which could be loaded from http://pecl.php.net/packages/big_int - * - * @category Encryption - * @package Crypt_RSA - * @author Alexander Valyalkin - * @copyright 2005, 2006 Alexander Valyalkin - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @link http://pear.php.net/package/Crypt_RSA - * @version @package_version@ - * @access public - */ -class Crypt_RSA_Math_BigInt -{ - /** - * error description - * - * @var string - * @access public - */ - var $errstr = ''; - - /** - * Crypt_RSA_Math_BigInt constructor. - * Checks an existance of big_int PECL math package. - * This package is available at http://pecl.php.net/packages/big_int - * On failure saves error description in $this->errstr - * - * @access public - */ - function Crypt_RSA_Math_BigInt() - { - if (!extension_loaded('big_int')) { - if (!@dl('big_int.' . PHP_SHLIB_SUFFIX) && !@dl('php_big_int.' . PHP_SHLIB_SUFFIX)) { - // cannot load big_int extension - $this->errstr = 'Crypt_RSA package requires big_int PECL package. ' . - 'It is available at http://pecl.php.net/packages/big_int'; - return; - } - } - - // check version of big_int extension ( Crypt_RSA requires version 1.0.2 and higher ) - if (!in_array('bi_info', get_extension_funcs('big_int'))) { - // there is no bi_info() function in versions, older than 1.0.2 - $this->errstr = 'Crypt_RSA package requires big_int package version 1.0.2 and higher'; - } - } - - /** - * Transforms binary representation of large integer into its native form. - * - * Example of transformation: - * $str = "\x12\x34\x56\x78\x90"; - * $num = 0x9078563412; - * - * @param string $str - * @return big_int resource - * @access public - */ - function bin2int($str) - { - return bi_unserialize($str); - } - - /** - * Transforms large integer into binary representation. - * - * Example of transformation: - * $num = 0x9078563412; - * $str = "\x12\x34\x56\x78\x90"; - * - * @param big_int resource $num - * @return string - * @access public - */ - function int2bin($num) - { - return bi_serialize($num); - } - - /** - * Calculates pow($num, $pow) (mod $mod) - * - * @param big_int resource $num - * @param big_int resource $pow - * @param big_int resource $mod - * @return big_int resource - * @access public - */ - function powmod($num, $pow, $mod) - { - return bi_powmod($num, $pow, $mod); - } - - /** - * Calculates $num1 * $num2 - * - * @param big_int resource $num1 - * @param big_int resource $num2 - * @return big_int resource - * @access public - */ - function mul($num1, $num2) - { - return bi_mul($num1, $num2); - } - - /** - * Calculates $num1 % $num2 - * - * @param string $num1 - * @param string $num2 - * @return string - * @access public - */ - function mod($num1, $num2) - { - return bi_mod($num1, $num2); - } - - /** - * Compares abs($num1) to abs($num2). - * Returns: - * -1, if abs($num1) < abs($num2) - * 0, if abs($num1) == abs($num2) - * 1, if abs($num1) > abs($num2) - * - * @param big_int resource $num1 - * @param big_int resource $num2 - * @return int - * @access public - */ - function cmpAbs($num1, $num2) - { - return bi_cmp_abs($num1, $num2); - } - - /** - * Tests $num on primality. Returns true, if $num is strong pseudoprime. - * Else returns false. - * - * @param string $num - * @return bool - * @access private - */ - function isPrime($num) - { - return bi_is_prime($num) ? true : false; - } - - /** - * Generates prime number with length $bits_cnt - * using $random_generator as random generator function. - * - * @param int $bits_cnt - * @param string $rnd_generator - * @access public - */ - function getPrime($bits_cnt, $random_generator) - { - $bytes_n = intval($bits_cnt / 8); - $bits_n = $bits_cnt % 8; - do { - $str = ''; - for ($i = 0; $i < $bytes_n; $i++) { - $str .= chr(call_user_func($random_generator) & 0xff); - } - $n = call_user_func($random_generator) & 0xff; - $n |= 0x80; - $n >>= 8 - $bits_n; - $str .= chr($n); - $num = $this->bin2int($str); - - // search for the next closest prime number after [$num] - $num = bi_next_prime($num); - } while ($this->bitLen($num) != $bits_cnt); - return $num; - } - - /** - * Calculates $num - 1 - * - * @param big_int resource $num - * @return big_int resource - * @access public - */ - function dec($num) - { - return bi_dec($num); - } - - /** - * Returns true, if $num is equal to 1. Else returns false - * - * @param big_int resource $num - * @return bool - * @access public - */ - function isOne($num) - { - return bi_is_one($num); - } - - /** - * Finds greatest common divider (GCD) of $num1 and $num2 - * - * @param big_int resource $num1 - * @param big_int resource $num2 - * @return big_int resource - * @access public - */ - function GCD($num1, $num2) - { - return bi_gcd($num1, $num2); - } - - /** - * Finds inverse number $inv for $num by modulus $mod, such as: - * $inv * $num = 1 (mod $mod) - * - * @param big_int resource $num - * @param big_int resource $mod - * @return big_int resource - * @access public - */ - function invmod($num, $mod) - { - return bi_invmod($num, $mod); - } - - /** - * Returns bit length of number $num - * - * @param big_int resource $num - * @return int - * @access public - */ - function bitLen($num) - { - return bi_bit_len($num); - } - - /** - * Calculates bitwise or of $num1 and $num2, - * starting from bit $start_pos for number $num1 - * - * @param big_int resource $num1 - * @param big_int resource $num2 - * @param int $start_pos - * @return big_int resource - * @access public - */ - function bitOr($num1, $num2, $start_pos) - { - return bi_or($num1, $num2, $start_pos); - } - - /** - * Returns part of number $num, starting at bit - * position $start with length $length - * - * @param big_int resource $num - * @param int start - * @param int length - * @return big_int resource - * @access public - */ - function subint($num, $start, $length) - { - return bi_subint($num, $start, $length); - } - - /** - * Returns name of current wrapper - * - * @return string name of current wrapper - * @access public - */ - function getWrapperName() - { - return 'BigInt'; - } -} - -?> \ No newline at end of file diff --git a/plugins/OStatus/extlib/Crypt/RSA/Math/GMP.php b/plugins/OStatus/extlib/Crypt/RSA/Math/GMP.php deleted file mode 100644 index 54e4c34fce..0000000000 --- a/plugins/OStatus/extlib/Crypt/RSA/Math/GMP.php +++ /dev/null @@ -1,361 +0,0 @@ - - * @copyright 2005, 2006 Alexander Valyalkin - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version 1.2.0b - * @link http://pear.php.net/package/Crypt_RSA - */ - -/** - * Crypt_RSA_Math_GMP class. - * - * Provides set of math functions, which are used by Crypt_RSA package - * This class is a wrapper for PHP GMP extension. - * See http://php.net/gmp for details. - * - * @category Encryption - * @package Crypt_RSA - * @author Alexander Valyalkin - * @copyright 2005, 2006 Alexander Valyalkin - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @link http://pear.php.net/package/Crypt_RSA - * @version @package_version@ - * @access public - */ -class Crypt_RSA_Math_GMP -{ - /** - * error description - * - * @var string - * @access public - */ - var $errstr = ''; - - /** - * Crypt_RSA_Math_GMP constructor. - * Checks an existance of PHP GMP package. - * See http://php.net/gmp for details. - * - * On failure saves error description in $this->errstr - * - * @access public - */ - function Crypt_RSA_Math_GMP() - { - if (!extension_loaded('gmp')) { - if (!@dl('gmp.' . PHP_SHLIB_SUFFIX) && !@dl('php_gmp.' . PHP_SHLIB_SUFFIX)) { - // cannot load GMP extension - $this->errstr = 'Crypt_RSA package requires PHP GMP package. ' . - 'See http://php.net/gmp for details'; - return; - } - } - } - - /** - * Transforms binary representation of large integer into its native form. - * - * Example of transformation: - * $str = "\x12\x34\x56\x78\x90"; - * $num = 0x9078563412; - * - * @param string $str - * @return gmp resource - * @access public - */ - function bin2int($str) - { - $result = 0; - $n = strlen($str); - do { - // dirty hack: GMP returns FALSE, when second argument equals to int(0). - // so, it must be converted to string '0' - $result = gmp_add(gmp_mul($result, 256), strval(ord($str{--$n}))); - } while ($n > 0); - return $result; - } - - /** - * Transforms large integer into binary representation. - * - * Example of transformation: - * $num = 0x9078563412; - * $str = "\x12\x34\x56\x78\x90"; - * - * @param gmp resource $num - * @return string - * @access public - */ - function int2bin($num) - { - $result = ''; - do { - $result .= chr(gmp_intval(gmp_mod($num, 256))); - $num = gmp_div($num, 256); - } while (gmp_cmp($num, 0)); - return $result; - } - - /** - * Calculates pow($num, $pow) (mod $mod) - * - * @param gmp resource $num - * @param gmp resource $pow - * @param gmp resource $mod - * @return gmp resource - * @access public - */ - function powmod($num, $pow, $mod) - { - return gmp_powm($num, $pow, $mod); - } - - /** - * Calculates $num1 * $num2 - * - * @param gmp resource $num1 - * @param gmp resource $num2 - * @return gmp resource - * @access public - */ - function mul($num1, $num2) - { - return gmp_mul($num1, $num2); - } - - /** - * Calculates $num1 % $num2 - * - * @param string $num1 - * @param string $num2 - * @return string - * @access public - */ - function mod($num1, $num2) - { - return gmp_mod($num1, $num2); - } - - /** - * Compares abs($num1) to abs($num2). - * Returns: - * -1, if abs($num1) < abs($num2) - * 0, if abs($num1) == abs($num2) - * 1, if abs($num1) > abs($num2) - * - * @param gmp resource $num1 - * @param gmp resource $num2 - * @return int - * @access public - */ - function cmpAbs($num1, $num2) - { - return gmp_cmp($num1, $num2); - } - - /** - * Tests $num on primality. Returns true, if $num is strong pseudoprime. - * Else returns false. - * - * @param string $num - * @return bool - * @access private - */ - function isPrime($num) - { - return gmp_prob_prime($num) ? true : false; - } - - /** - * Generates prime number with length $bits_cnt - * using $random_generator as random generator function. - * - * @param int $bits_cnt - * @param string $rnd_generator - * @access public - */ - function getPrime($bits_cnt, $random_generator) - { - $bytes_n = intval($bits_cnt / 8); - $bits_n = $bits_cnt % 8; - do { - $str = ''; - for ($i = 0; $i < $bytes_n; $i++) { - $str .= chr(call_user_func($random_generator) & 0xff); - } - $n = call_user_func($random_generator) & 0xff; - $n |= 0x80; - $n >>= 8 - $bits_n; - $str .= chr($n); - $num = $this->bin2int($str); - - // search for the next closest prime number after [$num] - if (!gmp_cmp(gmp_mod($num, '2'), '0')) { - $num = gmp_add($num, '1'); - } - while (!gmp_prob_prime($num)) { - $num = gmp_add($num, '2'); - } - } while ($this->bitLen($num) != $bits_cnt); - return $num; - } - - /** - * Calculates $num - 1 - * - * @param gmp resource $num - * @return gmp resource - * @access public - */ - function dec($num) - { - return gmp_sub($num, 1); - } - - /** - * Returns true, if $num is equal to one. Else returns false - * - * @param gmp resource $num - * @return bool - * @access public - */ - function isOne($num) - { - return !gmp_cmp($num, 1); - } - - /** - * Finds greatest common divider (GCD) of $num1 and $num2 - * - * @param gmp resource $num1 - * @param gmp resource $num2 - * @return gmp resource - * @access public - */ - function GCD($num1, $num2) - { - return gmp_gcd($num1, $num2); - } - - /** - * Finds inverse number $inv for $num by modulus $mod, such as: - * $inv * $num = 1 (mod $mod) - * - * @param gmp resource $num - * @param gmp resource $mod - * @return gmp resource - * @access public - */ - function invmod($num, $mod) - { - return gmp_invert($num, $mod); - } - - /** - * Returns bit length of number $num - * - * @param gmp resource $num - * @return int - * @access public - */ - function bitLen($num) - { - $tmp = $this->int2bin($num); - $bit_len = strlen($tmp) * 8; - $tmp = ord($tmp{strlen($tmp) - 1}); - if (!$tmp) { - $bit_len -= 8; - } - else { - while (!($tmp & 0x80)) { - $bit_len--; - $tmp <<= 1; - } - } - return $bit_len; - } - - /** - * Calculates bitwise or of $num1 and $num2, - * starting from bit $start_pos for number $num1 - * - * @param gmp resource $num1 - * @param gmp resource $num2 - * @param int $start_pos - * @return gmp resource - * @access public - */ - function bitOr($num1, $num2, $start_pos) - { - $start_byte = intval($start_pos / 8); - $start_bit = $start_pos % 8; - $tmp1 = $this->int2bin($num1); - - $num2 = gmp_mul($num2, 1 << $start_bit); - $tmp2 = $this->int2bin($num2); - if ($start_byte < strlen($tmp1)) { - $tmp2 |= substr($tmp1, $start_byte); - $tmp1 = substr($tmp1, 0, $start_byte) . $tmp2; - } - else { - $tmp1 = str_pad($tmp1, $start_byte, "\0") . $tmp2; - } - return $this->bin2int($tmp1); - } - - /** - * Returns part of number $num, starting at bit - * position $start with length $length - * - * @param gmp resource $num - * @param int start - * @param int length - * @return gmp resource - * @access public - */ - function subint($num, $start, $length) - { - $start_byte = intval($start / 8); - $start_bit = $start % 8; - $byte_length = intval($length / 8); - $bit_length = $length % 8; - if ($bit_length) { - $byte_length++; - } - $num = gmp_div($num, 1 << $start_bit); - $tmp = substr($this->int2bin($num), $start_byte, $byte_length); - $tmp = str_pad($tmp, $byte_length, "\0"); - $tmp = substr_replace($tmp, $tmp{$byte_length - 1} & chr(0xff >> (8 - $bit_length)), $byte_length - 1, 1); - return $this->bin2int($tmp); - } - - /** - * Returns name of current wrapper - * - * @return string name of current wrapper - * @access public - */ - function getWrapperName() - { - return 'GMP'; - } -} - -?> \ No newline at end of file diff --git a/plugins/OStatus/extlib/Crypt/RSA/MathLoader.php b/plugins/OStatus/extlib/Crypt/RSA/MathLoader.php deleted file mode 100644 index de6c94642f..0000000000 --- a/plugins/OStatus/extlib/Crypt/RSA/MathLoader.php +++ /dev/null @@ -1,135 +0,0 @@ - - * @copyright Alexander Valyalkin 2005 - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version CVS: $Id: MathLoader.php,v 1.5 2009/01/05 08:30:29 clockwerx Exp $ - * @link http://pear.php.net/package/Crypt_RSA - */ - -/** - * RSA error handling facilities - */ -require_once 'Crypt/RSA/ErrorHandler.php'; - -/** - * Crypt_RSA_MathLoader class. - * - * Provides static function: - * - loadWrapper($wrapper_name) - loads RSA math wrapper with name $wrapper_name - * or most suitable wrapper if $wrapper_name == 'default' - * - * Example usage: - * // load BigInt wrapper - * $big_int_wrapper = Crypt_RSA_MathLoader::loadWrapper('BigInt'); - * - * // load BCMath wrapper - * $bcmath_wrapper = Crypt_RSA_MathLoader::loadWrapper('BCMath'); - * - * // load the most suitable wrapper - * $bcmath_wrapper = Crypt_RSA_MathLoader::loadWrapper(); - * - * @category Encryption - * @package Crypt_RSA - * @author Alexander Valyalkin - * @copyright Alexander Valyalkin 2005 - * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: @package_version@ - * @link http://pear.php.net/package/Crypt_RSA - * @access public - */ -class Crypt_RSA_MathLoader -{ - /** - * Loads RSA math wrapper with name $wrapper_name. - * Implemented wrappers can be found at Crypt/RSA/Math folder. - * Read docs/Crypt_RSA/docs/math_wrappers.txt for details - * - * This is a static function: - * // load BigInt wrapper - * $big_int_wrapper = &Crypt_RSA_MathLoader::loadWrapper('BigInt'); - * - * // load BCMath wrapper - * $bcmath_wrapper = &Crypt_RSA_MathLoader::loadWrapper('BCMath'); - * - * @param string $wrapper_name Name of wrapper - * - * @return object - * Reference to object of wrapper with name $wrapper_name on success - * or PEAR_Error object on error - * - * @access public - */ - function loadWrapper($wrapper_name = 'default') - { - static $math_objects = array(); - // ordered by performance. GMP is the fastest math library, BCMath - the slowest. - static $math_wrappers = array('GMP', 'BigInt', 'BCMath',); - - if (isset($math_objects[$wrapper_name])) { - /* - wrapper with name $wrapper_name is already loaded and created. - Return reference to existing copy of wrapper - */ - return $math_objects[$wrapper_name]; - } - - $err_handler = new Crypt_RSA_ErrorHandler(); - - if ($wrapper_name === 'default') { - // try to load the most suitable wrapper - $n = sizeof($math_wrappers); - for ($i = 0; $i < $n; $i++) { - $obj = Crypt_RSA_MathLoader::loadWrapper($math_wrappers[$i]); - if (!$err_handler->isError($obj)) { - // wrapper for $math_wrappers[$i] successfully loaded - // register it as default wrapper and return reference to it - return $math_objects['default'] = $obj; - } - } - // can't load any wrapper - $err_handler->pushError("can't load any wrapper for existing math libraries", CRYPT_RSA_ERROR_NO_WRAPPERS); - return $err_handler->getLastError(); - } - - $class_name = 'Crypt_RSA_Math_' . $wrapper_name; - $class_filename = dirname(__FILE__) . '/Math/' . $wrapper_name . '.php'; - - if (!is_file($class_filename)) { - $err_handler->pushError("can't find file [{$class_filename}] for RSA math wrapper [{$wrapper_name}]", CRYPT_RSA_ERROR_NO_FILE); - return $err_handler->getLastError(); - } - - include_once $class_filename; - if (!class_exists($class_name)) { - $err_handler->pushError("can't find class [{$class_name}] in file [{$class_filename}]", CRYPT_RSA_ERROR_NO_CLASS); - return $err_handler->getLastError(); - } - - // create and return wrapper object on success or PEAR_Error object on error - $obj = new $class_name; - if ($obj->errstr) { - // cannot load required extension for math wrapper - $err_handler->pushError($obj->errstr, CRYPT_RSA_ERROR_NO_EXT); - return $err_handler->getLastError(); - } - return $math_objects[$wrapper_name] = $obj; - } -} - -?> diff --git a/plugins/OStatus/extlib/Crypt/Random.php b/plugins/OStatus/extlib/Crypt/Random.php new file mode 100644 index 0000000000..bfc24ca625 --- /dev/null +++ b/plugins/OStatus/extlib/Crypt/Random.php @@ -0,0 +1,125 @@ + + * + * + * + * LICENSE: This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * @category Crypt + * @package Crypt_Random + * @author Jim Wigginton + * @copyright MMVII Jim Wigginton + * @license http://www.gnu.org/licenses/lgpl.txt + * @version $Id: Random.php,v 1.6 2010/02/28 05:28:38 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/** + * Generate a random value. + * + * On 32-bit machines, the largest distance that can exist between $min and $max is 2**31. + * If $min and $max are farther apart than that then the last ($max - range) numbers. + * + * Depending on how this is being used, it may be worth while to write a replacement. For example, + * a PHP-based web app that stores its data in an SQL database can collect more entropy than this function + * can. + * + * @param optional Integer $min + * @param optional Integer $max + * @return Integer + * @access public + */ +function crypt_random($min = 0, $max = 0x7FFFFFFF) +{ + if ($min == $max) { + return $min; + } + + // see http://en.wikipedia.org/wiki//dev/random + if (file_exists('/dev/urandom')) { + $fp = fopen('/dev/urandom', 'rb'); + extract(unpack('Nrandom', fread($fp, 4))); + fclose($fp); + + // say $min = 0 and $max = 3. if we didn't do abs() then we could have stuff like this: + // -4 % 3 + 0 = -1, even though -1 < $min + return abs($random) % ($max - $min) + $min; + } + + /* Prior to PHP 4.2.0, mt_srand() had to be called before mt_rand() could be called. + Prior to PHP 5.2.6, mt_rand()'s automatic seeding was subpar, as elaborated here: + + http://www.suspekt.org/2008/08/17/mt_srand-and-not-so-random-numbers/ + + The seeding routine is pretty much ripped from PHP's own internal GENERATE_SEED() macro: + + http://svn.php.net/viewvc/php/php-src/branches/PHP_5_3_2/ext/standard/php_rand.h?view=markup */ + if (version_compare(PHP_VERSION, '5.2.5', '<=')) { + static $seeded; + if (!isset($seeded)) { + $seeded = true; + mt_srand(fmod(time() * getmypid(), 0x7FFFFFFF) ^ fmod(1000000 * lcg_value(), 0x7FFFFFFF)); + } + } + + static $crypto; + + // The CSPRNG's Yarrow and Fortuna periodically reseed. This function can be reseeded by hitting F5 + // in the browser and reloading the page. + + if (!isset($crypto)) { + $key = $iv = ''; + for ($i = 0; $i < 8; $i++) { + $key.= pack('n', mt_rand(0, 0xFFFF)); + $iv .= pack('n', mt_rand(0, 0xFFFF)); + } + switch (true) { + case class_exists('Crypt_AES'): + $crypto = new Crypt_AES(CRYPT_AES_MODE_CTR); + break; + case class_exists('Crypt_TripleDES'): + $crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CTR); + break; + case class_exists('Crypt_DES'): + $crypto = new Crypt_DES(CRYPT_DES_MODE_CTR); + break; + case class_exists('Crypt_RC4'): + $crypto = new Crypt_RC4(); + break; + default: + extract(unpack('Nrandom', pack('H*', sha1(mt_rand(0, 0x7FFFFFFF))))); + return abs($random) % ($max - $min) + $min; + } + $crypto->setKey($key); + $crypto->setIV($iv); + } + + extract(unpack('Nrandom', $crypto->encrypt("\0\0\0\0"))); + return abs($random) % ($max - $min) + $min; +} +?> \ No newline at end of file diff --git a/plugins/OStatus/extlib/Crypt/Rijndael.php b/plugins/OStatus/extlib/Crypt/Rijndael.php new file mode 100644 index 0000000000..3b5fd6a7d5 --- /dev/null +++ b/plugins/OStatus/extlib/Crypt/Rijndael.php @@ -0,0 +1,1242 @@ + + * setKey('abcdefghijklmnop'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $rijndael->decrypt($rijndael->encrypt($plaintext)); + * ?> + * + * + * LICENSE: This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * @category Crypt + * @package Crypt_Rijndael + * @author Jim Wigginton + * @copyright MMVIII Jim Wigginton + * @license http://www.gnu.org/licenses/lgpl.txt + * @version $Id: Rijndael.php,v 1.12 2010/02/09 06:10:26 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/**#@+ + * @access public + * @see Crypt_Rijndael::encrypt() + * @see Crypt_Rijndael::decrypt() + */ +/** + * Encrypt / decrypt using the Counter mode. + * + * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29 + */ +define('CRYPT_RIJNDAEL_MODE_CTR', -1); +/** + * Encrypt / decrypt using the Electronic Code Book mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29 + */ +define('CRYPT_RIJNDAEL_MODE_ECB', 1); +/** + * Encrypt / decrypt using the Code Book Chaining mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29 + */ +define('CRYPT_RIJNDAEL_MODE_CBC', 2); +/**#@-*/ + +/**#@+ + * @access private + * @see Crypt_Rijndael::Crypt_Rijndael() + */ +/** + * Toggles the internal implementation + */ +define('CRYPT_RIJNDAEL_MODE_INTERNAL', 1); +/** + * Toggles the mcrypt implementation + */ +define('CRYPT_RIJNDAEL_MODE_MCRYPT', 2); +/**#@-*/ + +/** + * Pure-PHP implementation of Rijndael. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Crypt_Rijndael + */ +class Crypt_Rijndael { + /** + * The Encryption Mode + * + * @see Crypt_Rijndael::Crypt_Rijndael() + * @var Integer + * @access private + */ + var $mode; + + /** + * The Key + * + * @see Crypt_Rijndael::setKey() + * @var String + * @access private + */ + var $key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; + + /** + * The Initialization Vector + * + * @see Crypt_Rijndael::setIV() + * @var String + * @access private + */ + var $iv = ''; + + /** + * A "sliding" Initialization Vector + * + * @see Crypt_Rijndael::enableContinuousBuffer() + * @var String + * @access private + */ + var $encryptIV = ''; + + /** + * A "sliding" Initialization Vector + * + * @see Crypt_Rijndael::enableContinuousBuffer() + * @var String + * @access private + */ + var $decryptIV = ''; + + /** + * Continuous Buffer status + * + * @see Crypt_Rijndael::enableContinuousBuffer() + * @var Boolean + * @access private + */ + var $continuousBuffer = false; + + /** + * Padding status + * + * @see Crypt_Rijndael::enablePadding() + * @var Boolean + * @access private + */ + var $padding = true; + + /** + * Does the key schedule need to be (re)calculated? + * + * @see setKey() + * @see setBlockLength() + * @see setKeyLength() + * @var Boolean + * @access private + */ + var $changed = true; + + /** + * Has the key length explicitly been set or should it be derived from the key, itself? + * + * @see setKeyLength() + * @var Boolean + * @access private + */ + var $explicit_key_length = false; + + /** + * The Key Schedule + * + * @see _setup() + * @var Array + * @access private + */ + var $w; + + /** + * The Inverse Key Schedule + * + * @see _setup() + * @var Array + * @access private + */ + var $dw; + + /** + * The Block Length + * + * @see setBlockLength() + * @var Integer + * @access private + * @internal The max value is 32, the min value is 16. All valid values are multiples of 4. Exists in conjunction with + * $Nb because we need this value and not $Nb to pad strings appropriately. + */ + var $block_size = 16; + + /** + * The Block Length divided by 32 + * + * @see setBlockLength() + * @var Integer + * @access private + * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4. Exists in conjunction with $block_size + * because the encryption / decryption / key schedule creation requires this number and not $block_size. We could + * derive this from $block_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu + * of that, we'll just precompute it once. + * + */ + var $Nb = 4; + + /** + * The Key Length + * + * @see setKeyLength() + * @var Integer + * @access private + * @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16. Exists in conjunction with $key_size + * because the encryption / decryption / key schedule creation requires this number and not $key_size. We could + * derive this from $key_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu + * of that, we'll just precompute it once. + */ + var $key_size = 16; + + /** + * The Key Length divided by 32 + * + * @see setKeyLength() + * @var Integer + * @access private + * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4 + */ + var $Nk = 4; + + /** + * The Number of Rounds + * + * @var Integer + * @access private + * @internal The max value is 14, the min value is 10. + */ + var $Nr; + + /** + * Shift offsets + * + * @var Array + * @access private + */ + var $c; + + /** + * Precomputed mixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $t0; + + /** + * Precomputed mixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $t1; + + /** + * Precomputed mixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $t2; + + /** + * Precomputed mixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $t3; + + /** + * Precomputed invMixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $dt0; + + /** + * Precomputed invMixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $dt1; + + /** + * Precomputed invMixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $dt2; + + /** + * Precomputed invMixColumns table + * + * @see Crypt_Rijndael() + * @var Array + * @access private + */ + var $dt3; + + /** + * Default Constructor. + * + * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be + * CRYPT_RIJNDAEL_MODE_ECB or CRYPT_RIJNDAEL_MODE_CBC. If not explictly set, CRYPT_RIJNDAEL_MODE_CBC will be used. + * + * @param optional Integer $mode + * @return Crypt_Rijndael + * @access public + */ + function Crypt_Rijndael($mode = CRYPT_RIJNDAEL_MODE_CBC) + { + switch ($mode) { + case CRYPT_RIJNDAEL_MODE_ECB: + case CRYPT_RIJNDAEL_MODE_CBC: + case CRYPT_RIJNDAEL_MODE_CTR: + $this->mode = $mode; + break; + default: + $this->mode = CRYPT_RIJNDAEL_MODE_CBC; + } + + $t3 = &$this->t3; + $t2 = &$this->t2; + $t1 = &$this->t1; + $t0 = &$this->t0; + + $dt3 = &$this->dt3; + $dt2 = &$this->dt2; + $dt1 = &$this->dt1; + $dt0 = &$this->dt0; + + // according to (section 5.2.1), + // precomputed tables can be used in the mixColumns phase. in that example, they're assigned t0...t3, so + // those are the names we'll use. + $t3 = array( + 0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491, + 0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC, + 0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB, + 0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B, + 0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83, + 0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A, + 0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F, + 0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA, + 0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B, + 0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713, + 0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6, + 0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85, + 0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411, + 0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B, + 0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1, + 0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF, + 0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E, + 0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6, + 0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B, + 0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD, + 0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8, + 0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2, + 0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049, + 0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810, + 0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197, + 0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F, + 0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C, + 0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927, + 0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733, + 0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5, + 0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0, + 0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C + ); + + $dt3 = array( + 0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B, + 0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5, + 0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B, + 0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E, + 0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D, + 0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9, + 0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66, + 0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED, + 0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4, + 0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD, + 0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60, + 0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79, + 0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C, + 0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24, + 0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C, + 0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814, + 0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B, + 0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084, + 0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077, + 0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22, + 0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F, + 0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582, + 0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB, + 0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF, + 0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035, + 0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17, + 0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46, + 0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D, + 0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A, + 0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678, + 0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF, + 0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0 + ); + + for ($i = 0; $i < 256; $i++) { + $t2[$i << 8] = (($t3[$i] << 8) & 0xFFFFFF00) | (($t3[$i] >> 24) & 0x000000FF); + $t1[$i << 16] = (($t3[$i] << 16) & 0xFFFF0000) | (($t3[$i] >> 16) & 0x0000FFFF); + $t0[$i << 24] = (($t3[$i] << 24) & 0xFF000000) | (($t3[$i] >> 8) & 0x00FFFFFF); + + $dt2[$i << 8] = (($this->dt3[$i] << 8) & 0xFFFFFF00) | (($dt3[$i] >> 24) & 0x000000FF); + $dt1[$i << 16] = (($this->dt3[$i] << 16) & 0xFFFF0000) | (($dt3[$i] >> 16) & 0x0000FFFF); + $dt0[$i << 24] = (($this->dt3[$i] << 24) & 0xFF000000) | (($dt3[$i] >> 8) & 0x00FFFFFF); + } + } + + /** + * Sets the key. + * + * Keys can be of any length. Rijndael, itself, requires the use of a key that's between 128-bits and 256-bits long and + * whose length is a multiple of 32. If the key is less than 256-bits and the key length isn't set, we round the length + * up to the closest valid key length, padding $key with null bytes. If the key is more than 256-bits, we trim the + * excess bits. + * + * If the key is not explicitly set, it'll be assumed to be all null bytes. + * + * @access public + * @param String $key + */ + function setKey($key) + { + $this->key = $key; + $this->changed = true; + } + + /** + * Sets the initialization vector. (optional) + * + * SetIV is not required when CRYPT_RIJNDAEL_MODE_ECB is being used. If not explictly set, it'll be assumed + * to be all zero's. + * + * @access public + * @param String $iv + */ + function setIV($iv) + { + $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, $this->block_size), $this->block_size, chr(0));; + } + + /** + * Sets the key length + * + * Valid key lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to + * 128. If the length is greater then 128 and invalid, it will be rounded down to the closest valid amount. + * + * @access public + * @param Integer $length + */ + function setKeyLength($length) + { + $length >>= 5; + if ($length > 8) { + $length = 8; + } else if ($length < 4) { + $length = 4; + } + $this->Nk = $length; + $this->key_size = $length << 2; + + $this->explicit_key_length = true; + $this->changed = true; + } + + /** + * Sets the block length + * + * Valid block lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to + * 128. If the length is greater then 128 and invalid, it will be rounded down to the closest valid amount. + * + * @access public + * @param Integer $length + */ + function setBlockLength($length) + { + $length >>= 5; + if ($length > 8) { + $length = 8; + } else if ($length < 4) { + $length = 4; + } + $this->Nb = $length; + $this->block_size = $length << 2; + $this->changed = true; + } + + /** + * Generate CTR XOR encryption key + * + * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the + * plaintext / ciphertext in CTR mode. + * + * @see Crypt_Rijndael::decrypt() + * @see Crypt_Rijndael::encrypt() + * @access public + * @param Integer $length + * @param String $iv + */ + function _generate_xor($length, &$iv) + { + $xor = ''; + $block_size = $this->block_size; + $num_blocks = floor(($length + ($block_size - 1)) / $block_size); + for ($i = 0; $i < $num_blocks; $i++) { + $xor.= $iv; + for ($j = 4; $j <= $block_size; $j+=4) { + $temp = substr($iv, -$j, 4); + switch ($temp) { + case "\xFF\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4); + break; + case "\x7F\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4); + break 2; + default: + extract(unpack('Ncount', $temp)); + $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4); + break 2; + } + } + } + + return $xor; + } + + /** + * Encrypts a message. + * + * $plaintext will be padded with additional bytes such that it's length is a multiple of the block size. Other Rjindael + * implementations may or may not pad in the same manner. Other common approaches to padding and the reasons why it's + * necessary are discussed in the following + * URL: + * + * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html} + * + * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does. + * strlen($plaintext) will still need to be a multiple of 8, however, arbitrary values can be added to make it that + * length. + * + * @see Crypt_Rijndael::decrypt() + * @access public + * @param String $plaintext + */ + function encrypt($plaintext) + { + $this->_setup(); + if ($this->mode != CRYPT_RIJNDAEL_MODE_CTR) { + $plaintext = $this->_pad($plaintext); + } + + $block_size = $this->block_size; + $ciphertext = ''; + switch ($this->mode) { + case CRYPT_RIJNDAEL_MODE_ECB: + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $ciphertext.= $this->_encryptBlock(substr($plaintext, $i, $block_size)); + } + break; + case CRYPT_RIJNDAEL_MODE_CBC: + $xor = $this->encryptIV; + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $block = substr($plaintext, $i, $block_size); + $block = $this->_encryptBlock($block ^ $xor); + $xor = $block; + $ciphertext.= $block; + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + } + break; + case CRYPT_RIJNDAEL_MODE_CTR: + $xor = $this->encryptIV; + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $block = substr($plaintext, $i, $block_size); + $key = $this->_encryptBlock($this->_generate_xor($block_size, $xor)); + $ciphertext.= $block ^ $key; + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + } + } + + return $ciphertext; + } + + /** + * Decrypts a message. + * + * If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until + * it is. + * + * @see Crypt_Rijndael::encrypt() + * @access public + * @param String $ciphertext + */ + function decrypt($ciphertext) + { + $this->_setup(); + + if ($this->mode != CRYPT_RIJNDAEL_MODE_CTR) { + // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic : + // "The data is padded with "\0" to make sure the length of the data is n * blocksize." + $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + $this->block_size - 1) % $this->block_size, chr(0)); + } + + $block_size = $this->block_size; + $plaintext = ''; + switch ($this->mode) { + case CRYPT_RIJNDAEL_MODE_ECB: + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $plaintext.= $this->_decryptBlock(substr($ciphertext, $i, $block_size)); + } + break; + case CRYPT_RIJNDAEL_MODE_CBC: + $xor = $this->decryptIV; + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $block = substr($ciphertext, $i, $block_size); + $plaintext.= $this->_decryptBlock($block) ^ $xor; + $xor = $block; + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + } + break; + case CRYPT_RIJNDAEL_MODE_CTR: + $xor = $this->decryptIV; + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $block = substr($ciphertext, $i, $block_size); + $key = $this->_encryptBlock($this->_generate_xor($block_size, $xor)); + $plaintext.= $block ^ $key; + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + } + } + + return $this->mode != CRYPT_RIJNDAEL_MODE_CTR ? $this->_unpad($plaintext) : $plaintext; + } + + /** + * Encrypts a block + * + * @access private + * @param String $in + * @return String + */ + function _encryptBlock($in) + { + $state = array(); + $words = unpack('N*word', $in); + + $w = $this->w; + $t0 = $this->t0; + $t1 = $this->t1; + $t2 = $this->t2; + $t3 = $this->t3; + $Nb = $this->Nb; + $Nr = $this->Nr; + $c = $this->c; + + // addRoundKey + $i = 0; + foreach ($words as $word) { + $state[] = $word ^ $w[0][$i++]; + } + + // fips-197.pdf#page=19, "Figure 5. Pseudo Code for the Cipher", states that this loop has four components - + // subBytes, shiftRows, mixColumns, and addRoundKey. fips-197.pdf#page=30, "Implementation Suggestions Regarding + // Various Platforms" suggests that performs enhanced implementations are described in Rijndael-ammended.pdf. + // Rijndael-ammended.pdf#page=20, "Implementation aspects / 32-bit processor", discusses such an optimization. + // Unfortunately, the description given there is not quite correct. Per aes.spec.v316.pdf#page=19 [1], + // equation (7.4.7) is supposed to use addition instead of subtraction, so we'll do that here, as well. + + // [1] http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.v316.pdf + $temp = array(); + for ($round = 1; $round < $Nr; $round++) { + $i = 0; // $c[0] == 0 + $j = $c[1]; + $k = $c[2]; + $l = $c[3]; + + while ($i < $this->Nb) { + $temp[$i] = $t0[$state[$i] & 0xFF000000] ^ + $t1[$state[$j] & 0x00FF0000] ^ + $t2[$state[$k] & 0x0000FF00] ^ + $t3[$state[$l] & 0x000000FF] ^ + $w[$round][$i]; + $i++; + $j = ($j + 1) % $Nb; + $k = ($k + 1) % $Nb; + $l = ($l + 1) % $Nb; + } + + for ($i = 0; $i < $Nb; $i++) { + $state[$i] = $temp[$i]; + } + } + + // subWord + for ($i = 0; $i < $Nb; $i++) { + $state[$i] = $this->_subWord($state[$i]); + } + + // shiftRows + addRoundKey + $i = 0; // $c[0] == 0 + $j = $c[1]; + $k = $c[2]; + $l = $c[3]; + while ($i < $this->Nb) { + $temp[$i] = ($state[$i] & 0xFF000000) ^ + ($state[$j] & 0x00FF0000) ^ + ($state[$k] & 0x0000FF00) ^ + ($state[$l] & 0x000000FF) ^ + $w[$Nr][$i]; + $i++; + $j = ($j + 1) % $Nb; + $k = ($k + 1) % $Nb; + $l = ($l + 1) % $Nb; + } + $state = $temp; + + array_unshift($state, 'N*'); + + return call_user_func_array('pack', $state); + } + + /** + * Decrypts a block + * + * @access private + * @param String $in + * @return String + */ + function _decryptBlock($in) + { + $state = array(); + $words = unpack('N*word', $in); + + $num_states = count($state); + $dw = $this->dw; + $dt0 = $this->dt0; + $dt1 = $this->dt1; + $dt2 = $this->dt2; + $dt3 = $this->dt3; + $Nb = $this->Nb; + $Nr = $this->Nr; + $c = $this->c; + + // addRoundKey + $i = 0; + foreach ($words as $word) { + $state[] = $word ^ $dw[$Nr][$i++]; + } + + $temp = array(); + for ($round = $Nr - 1; $round > 0; $round--) { + $i = 0; // $c[0] == 0 + $j = $Nb - $c[1]; + $k = $Nb - $c[2]; + $l = $Nb - $c[3]; + + while ($i < $Nb) { + $temp[$i] = $dt0[$state[$i] & 0xFF000000] ^ + $dt1[$state[$j] & 0x00FF0000] ^ + $dt2[$state[$k] & 0x0000FF00] ^ + $dt3[$state[$l] & 0x000000FF] ^ + $dw[$round][$i]; + $i++; + $j = ($j + 1) % $Nb; + $k = ($k + 1) % $Nb; + $l = ($l + 1) % $Nb; + } + + for ($i = 0; $i < $Nb; $i++) { + $state[$i] = $temp[$i]; + } + } + + // invShiftRows + invSubWord + addRoundKey + $i = 0; // $c[0] == 0 + $j = $Nb - $c[1]; + $k = $Nb - $c[2]; + $l = $Nb - $c[3]; + + while ($i < $Nb) { + $temp[$i] = $dw[0][$i] ^ + $this->_invSubWord(($state[$i] & 0xFF000000) | + ($state[$j] & 0x00FF0000) | + ($state[$k] & 0x0000FF00) | + ($state[$l] & 0x000000FF)); + $i++; + $j = ($j + 1) % $Nb; + $k = ($k + 1) % $Nb; + $l = ($l + 1) % $Nb; + } + + $state = $temp; + + array_unshift($state, 'N*'); + + return call_user_func_array('pack', $state); + } + + /** + * Setup Rijndael + * + * Validates all the variables and calculates $Nr - the number of rounds that need to be performed - and $w - the key + * key schedule. + * + * @access private + */ + function _setup() + { + // Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field. + // See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse + static $rcon = array(0, + 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, + 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000, + 0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000, + 0x2F000000, 0x5E000000, 0xBC000000, 0x63000000, 0xC6000000, + 0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000, + 0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000 + ); + + if (!$this->changed) { + return; + } + + if (!$this->explicit_key_length) { + // we do >> 2, here, and not >> 5, as we do above, since strlen($this->key) tells us the number of bytes - not bits + $length = strlen($this->key) >> 2; + if ($length > 8) { + $length = 8; + } else if ($length < 4) { + $length = 4; + } + $this->Nk = $length; + $this->key_size = $length << 2; + } + + $this->key = str_pad(substr($this->key, 0, $this->key_size), $this->key_size, chr(0)); + $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($this->iv, 0, $this->block_size), $this->block_size, chr(0)); + + // see Rijndael-ammended.pdf#page=44 + $this->Nr = max($this->Nk, $this->Nb) + 6; + + // shift offsets for Nb = 5, 7 are defined in Rijndael-ammended.pdf#page=44, + // "Table 8: Shift offsets in Shiftrow for the alternative block lengths" + // shift offsets for Nb = 4, 6, 8 are defined in Rijndael-ammended.pdf#page=14, + // "Table 2: Shift offsets for different block lengths" + switch ($this->Nb) { + case 4: + case 5: + case 6: + $this->c = array(0, 1, 2, 3); + break; + case 7: + $this->c = array(0, 1, 2, 4); + break; + case 8: + $this->c = array(0, 1, 3, 4); + } + + $key = $this->key; + + $w = array_values(unpack('N*words', $key)); + + $length = $this->Nb * ($this->Nr + 1); + for ($i = $this->Nk; $i < $length; $i++) { + $temp = $w[$i - 1]; + if ($i % $this->Nk == 0) { + // according to , "the size of an integer is platform-dependent". + // on a 32-bit machine, it's 32-bits, and on a 64-bit machine, it's 64-bits. on a 32-bit machine, + // 0xFFFFFFFF << 8 == 0xFFFFFF00, but on a 64-bit machine, it equals 0xFFFFFFFF00. as such, doing 'and' + // with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is. + $temp = (($temp << 8) & 0xFFFFFF00) | (($temp >> 24) & 0x000000FF); // rotWord + $temp = $this->_subWord($temp) ^ $rcon[$i / $this->Nk]; + } else if ($this->Nk > 6 && $i % $this->Nk == 4) { + $temp = $this->_subWord($temp); + } + $w[$i] = $w[$i - $this->Nk] ^ $temp; + } + + // convert the key schedule from a vector of $Nb * ($Nr + 1) length to a matrix with $Nr + 1 rows and $Nb columns + // and generate the inverse key schedule. more specifically, + // according to (section 5.3.3), + // "The key expansion for the Inverse Cipher is defined as follows: + // 1. Apply the Key Expansion. + // 2. Apply InvMixColumn to all Round Keys except the first and the last one." + // also, see fips-197.pdf#page=27, "5.3.5 Equivalent Inverse Cipher" + $temp = array(); + for ($i = $row = $col = 0; $i < $length; $i++, $col++) { + if ($col == $this->Nb) { + if ($row == 0) { + $this->dw[0] = $this->w[0]; + } else { + // subWord + invMixColumn + invSubWord = invMixColumn + $j = 0; + while ($j < $this->Nb) { + $dw = $this->_subWord($this->w[$row][$j]); + $temp[$j] = $this->dt0[$dw & 0xFF000000] ^ + $this->dt1[$dw & 0x00FF0000] ^ + $this->dt2[$dw & 0x0000FF00] ^ + $this->dt3[$dw & 0x000000FF]; + $j++; + } + $this->dw[$row] = $temp; + } + + $col = 0; + $row++; + } + $this->w[$row][$col] = $w[$i]; + } + + $this->dw[$row] = $this->w[$row]; + + $this->changed = false; + } + + /** + * Performs S-Box substitutions + * + * @access private + */ + function _subWord($word) + { + static $sbox0, $sbox1, $sbox2, $sbox3; + + if (empty($sbox0)) { + $sbox0 = array( + 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, + 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, + 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, + 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, + 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, + 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, + 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, + 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, + 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, + 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, + 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, + 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, + 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, + 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, + 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, + 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 + ); + + $sbox1 = array(); + $sbox2 = array(); + $sbox3 = array(); + + for ($i = 0; $i < 256; $i++) { + $sbox1[$i << 8] = $sbox0[$i] << 8; + $sbox2[$i << 16] = $sbox0[$i] << 16; + $sbox3[$i << 24] = $sbox0[$i] << 24; + } + } + + return $sbox0[$word & 0x000000FF] | + $sbox1[$word & 0x0000FF00] | + $sbox2[$word & 0x00FF0000] | + $sbox3[$word & 0xFF000000]; + } + + /** + * Performs inverse S-Box substitutions + * + * @access private + */ + function _invSubWord($word) + { + static $sbox0, $sbox1, $sbox2, $sbox3; + + if (empty($sbox0)) { + $sbox0 = array( + 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, + 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, + 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, + 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, + 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, + 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, + 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, + 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, + 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, + 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, + 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, + 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, + 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, + 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, + 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D + ); + + $sbox1 = array(); + $sbox2 = array(); + $sbox3 = array(); + + for ($i = 0; $i < 256; $i++) { + $sbox1[$i << 8] = $sbox0[$i] << 8; + $sbox2[$i << 16] = $sbox0[$i] << 16; + $sbox3[$i << 24] = $sbox0[$i] << 24; + } + } + + return $sbox0[$word & 0x000000FF] | + $sbox1[$word & 0x0000FF00] | + $sbox2[$word & 0x00FF0000] | + $sbox3[$word & 0xFF000000]; + } + + /** + * Pad "packets". + * + * Rijndael works by encrypting between sixteen and thirty-two bytes at a time, provided that number is also a multiple + * of four. If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to + * pad the input so that it is of the proper length. + * + * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH, + * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping + * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is + * transmitted separately) + * + * @see Crypt_Rijndael::disablePadding() + * @access public + */ + function enablePadding() + { + $this->padding = true; + } + + /** + * Do not pad packets. + * + * @see Crypt_Rijndael::enablePadding() + * @access public + */ + function disablePadding() + { + $this->padding = false; + } + + /** + * Pads a string + * + * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize. + * $block_size - (strlen($text) % $block_size) bytes are added, each of which is equal to + * chr($block_size - (strlen($text) % $block_size) + * + * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless + * and padding will, hence forth, be enabled. + * + * @see Crypt_Rijndael::_unpad() + * @access private + */ + function _pad($text) + { + $length = strlen($text); + + if (!$this->padding) { + if ($length % $this->block_size == 0) { + return $text; + } else { + user_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})", E_USER_NOTICE); + $this->padding = true; + } + } + + $pad = $this->block_size - ($length % $this->block_size); + + return str_pad($text, $length + $pad, chr($pad)); + } + + /** + * Unpads a string. + * + * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong + * and false will be returned. + * + * @see Crypt_Rijndael::_pad() + * @access private + */ + function _unpad($text) + { + if (!$this->padding) { + return $text; + } + + $length = ord($text[strlen($text) - 1]); + + if (!$length || $length > $this->block_size) { + return false; + } + + return substr($text, 0, -$length); + } + + /** + * Treat consecutive "packets" as if they are a continuous buffer. + * + * Say you have a 32-byte plaintext $plaintext. Using the default behavior, the two following code snippets + * will yield different outputs: + * + * + * echo $rijndael->encrypt(substr($plaintext, 0, 16)); + * echo $rijndael->encrypt(substr($plaintext, 16, 16)); + * + * + * echo $rijndael->encrypt($plaintext); + * + * + * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates + * another, as demonstrated with the following: + * + * + * $rijndael->encrypt(substr($plaintext, 0, 16)); + * echo $rijndael->decrypt($des->encrypt(substr($plaintext, 16, 16))); + * + * + * echo $rijndael->decrypt($des->encrypt(substr($plaintext, 16, 16))); + * + * + * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different + * outputs. The reason is due to the fact that the initialization vector's change after every encryption / + * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant. + * + * Put another way, when the continuous buffer is enabled, the state of the Crypt_Rijndael() object changes after each + * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that + * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them), + * however, they are also less intuitive and more likely to cause you problems. + * + * @see Crypt_Rijndael::disableContinuousBuffer() + * @access public + */ + function enableContinuousBuffer() + { + $this->continuousBuffer = true; + } + + /** + * Treat consecutive packets as if they are a discontinuous buffer. + * + * The default behavior. + * + * @see Crypt_Rijndael::enableContinuousBuffer() + * @access public + */ + function disableContinuousBuffer() + { + $this->continuousBuffer = false; + $this->encryptIV = $this->iv; + $this->decryptIV = $this->iv; + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param String $string + * @param optional Integer $index + * @return String + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } +} + +// vim: ts=4:sw=4:et: +// vim6: fdl=1: \ No newline at end of file diff --git a/plugins/OStatus/extlib/Crypt/TripleDES.php b/plugins/OStatus/extlib/Crypt/TripleDES.php new file mode 100644 index 0000000000..9d054086a4 --- /dev/null +++ b/plugins/OStatus/extlib/Crypt/TripleDES.php @@ -0,0 +1,690 @@ + + * setKey('abcdefghijklmnopqrstuvwx'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $des->decrypt($des->encrypt($plaintext)); + * ?> + * + * + * LICENSE: This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * @category Crypt + * @package Crypt_TripleDES + * @author Jim Wigginton + * @copyright MMVII Jim Wigginton + * @license http://www.gnu.org/licenses/lgpl.txt + * @version $Id: TripleDES.php,v 1.13 2010/02/26 03:40:25 terrafrost Exp $ + * @link http://phpseclib.sourceforge.net + */ + +/** + * Include Crypt_DES + */ +require_once 'DES.php'; + +/** + * Encrypt / decrypt using inner chaining + * + * Inner chaining is used by SSH-1 and is generally considered to be less secure then outer chaining (CRYPT_DES_MODE_CBC3). + */ +define('CRYPT_DES_MODE_3CBC', 3); + +/** + * Encrypt / decrypt using outer chaining + * + * Outer chaining is used by SSH-2 and when the mode is set to CRYPT_DES_MODE_CBC. + */ +define('CRYPT_DES_MODE_CBC3', CRYPT_DES_MODE_CBC); + +/** + * Pure-PHP implementation of Triple DES. + * + * @author Jim Wigginton + * @version 0.1.0 + * @access public + * @package Crypt_TerraDES + */ +class Crypt_TripleDES { + /** + * The Three Keys + * + * @see Crypt_TripleDES::setKey() + * @var String + * @access private + */ + var $key = "\0\0\0\0\0\0\0\0"; + + /** + * The Encryption Mode + * + * @see Crypt_TripleDES::Crypt_TripleDES() + * @var Integer + * @access private + */ + var $mode = CRYPT_DES_MODE_CBC; + + /** + * Continuous Buffer status + * + * @see Crypt_TripleDES::enableContinuousBuffer() + * @var Boolean + * @access private + */ + var $continuousBuffer = false; + + /** + * Padding status + * + * @see Crypt_TripleDES::enablePadding() + * @var Boolean + * @access private + */ + var $padding = true; + + /** + * The Initialization Vector + * + * @see Crypt_TripleDES::setIV() + * @var String + * @access private + */ + var $iv = "\0\0\0\0\0\0\0\0"; + + /** + * A "sliding" Initialization Vector + * + * @see Crypt_TripleDES::enableContinuousBuffer() + * @var String + * @access private + */ + var $encryptIV = "\0\0\0\0\0\0\0\0"; + + /** + * A "sliding" Initialization Vector + * + * @see Crypt_TripleDES::enableContinuousBuffer() + * @var String + * @access private + */ + var $decryptIV = "\0\0\0\0\0\0\0\0"; + + /** + * The Crypt_DES objects + * + * @var Array + * @access private + */ + var $des; + + /** + * mcrypt resource for encryption + * + * The mcrypt resource can be recreated every time something needs to be created or it can be created just once. + * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode. + * + * @see Crypt_AES::encrypt() + * @var String + * @access private + */ + var $enmcrypt; + + /** + * mcrypt resource for decryption + * + * The mcrypt resource can be recreated every time something needs to be created or it can be created just once. + * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode. + * + * @see Crypt_AES::decrypt() + * @var String + * @access private + */ + var $demcrypt; + + /** + * Does the (en|de)mcrypt resource need to be (re)initialized? + * + * @see setKey() + * @see setIV() + * @var Boolean + * @access private + */ + var $changed = true; + + /** + * Default Constructor. + * + * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be + * CRYPT_DES_MODE_ECB or CRYPT_DES_MODE_CBC. If not explictly set, CRYPT_DES_MODE_CBC will be used. + * + * @param optional Integer $mode + * @return Crypt_TripleDES + * @access public + */ + function Crypt_TripleDES($mode = CRYPT_DES_MODE_CBC) + { + if ( !defined('CRYPT_DES_MODE') ) { + switch (true) { + case extension_loaded('mcrypt'): + // i'd check to see if des was supported, by doing in_array('des', mcrypt_list_algorithms('')), + // but since that can be changed after the object has been created, there doesn't seem to be + // a lot of point... + define('CRYPT_DES_MODE', CRYPT_DES_MODE_MCRYPT); + break; + default: + define('CRYPT_DES_MODE', CRYPT_DES_MODE_INTERNAL); + } + } + + if ( $mode == CRYPT_DES_MODE_3CBC ) { + $this->mode = CRYPT_DES_MODE_3CBC; + $this->des = array( + new Crypt_DES(CRYPT_DES_MODE_CBC), + new Crypt_DES(CRYPT_DES_MODE_CBC), + new Crypt_DES(CRYPT_DES_MODE_CBC) + ); + + // we're going to be doing the padding, ourselves, so disable it in the Crypt_DES objects + $this->des[0]->disablePadding(); + $this->des[1]->disablePadding(); + $this->des[2]->disablePadding(); + + return; + } + + switch ( CRYPT_DES_MODE ) { + case CRYPT_DES_MODE_MCRYPT: + switch ($mode) { + case CRYPT_DES_MODE_ECB: + $this->mode = MCRYPT_MODE_ECB; + break; + case CRYPT_DES_MODE_CTR: + $this->mode = 'ctr'; + break; + case CRYPT_DES_MODE_CBC: + default: + $this->mode = MCRYPT_MODE_CBC; + } + + break; + default: + $this->des = array( + new Crypt_DES(CRYPT_DES_MODE_ECB), + new Crypt_DES(CRYPT_DES_MODE_ECB), + new Crypt_DES(CRYPT_DES_MODE_ECB) + ); + + // we're going to be doing the padding, ourselves, so disable it in the Crypt_DES objects + $this->des[0]->disablePadding(); + $this->des[1]->disablePadding(); + $this->des[2]->disablePadding(); + + switch ($mode) { + case CRYPT_DES_MODE_ECB: + case CRYPT_DES_MODE_CTR: + case CRYPT_DES_MODE_CBC: + $this->mode = $mode; + break; + default: + $this->mode = CRYPT_DES_MODE_CBC; + } + } + } + + /** + * Sets the key. + * + * Keys can be of any length. Triple DES, itself, can use 128-bit (eg. strlen($key) == 16) or + * 192-bit (eg. strlen($key) == 24) keys. This function pads and truncates $key as appropriate. + * + * DES also requires that every eighth bit be a parity bit, however, we'll ignore that. + * + * If the key is not explicitly set, it'll be assumed to be all zero's. + * + * @access public + * @param String $key + */ + function setKey($key) + { + $length = strlen($key); + if ($length > 8) { + $key = str_pad($key, 24, chr(0)); + // if $key is between 64 and 128-bits, use the first 64-bits as the last, per this: + // http://php.net/function.mcrypt-encrypt#47973 + //$key = $length <= 16 ? substr_replace($key, substr($key, 0, 8), 16) : substr($key, 0, 24); + } + $this->key = $key; + switch (true) { + case CRYPT_DES_MODE == CRYPT_DES_MODE_INTERNAL: + case $this->mode == CRYPT_DES_MODE_3CBC: + $this->des[0]->setKey(substr($key, 0, 8)); + $this->des[1]->setKey(substr($key, 8, 8)); + $this->des[2]->setKey(substr($key, 16, 8)); + } + $this->changed = true; + } + + /** + * Sets the initialization vector. (optional) + * + * SetIV is not required when CRYPT_DES_MODE_ECB is being used. If not explictly set, it'll be assumed + * to be all zero's. + * + * @access public + * @param String $iv + */ + function setIV($iv) + { + $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, 8), 8, chr(0)); + if ($this->mode == CRYPT_DES_MODE_3CBC) { + $this->des[0]->setIV($iv); + $this->des[1]->setIV($iv); + $this->des[2]->setIV($iv); + } + $this->changed = true; + } + + /** + * Generate CTR XOR encryption key + * + * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the + * plaintext / ciphertext in CTR mode. + * + * @see Crypt_DES::decrypt() + * @see Crypt_DES::encrypt() + * @access public + * @param Integer $length + * @param String $iv + */ + function _generate_xor($length, &$iv) + { + $xor = ''; + $num_blocks = ($length + 7) >> 3; + for ($i = 0; $i < $num_blocks; $i++) { + $xor.= $iv; + for ($j = 4; $j <= 8; $j+=4) { + $temp = substr($iv, -$j, 4); + switch ($temp) { + case "\xFF\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4); + break; + case "\x7F\xFF\xFF\xFF": + $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4); + break 2; + default: + extract(unpack('Ncount', $temp)); + $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4); + break 2; + } + } + } + + return $xor; + } + + /** + * Encrypts a message. + * + * @access public + * @param String $plaintext + */ + function encrypt($plaintext) + { + if ($this->mode != CRYPT_DES_MODE_CTR && $this->mode != 'ctr') { + $plaintext = $this->_pad($plaintext); + } + + // if the key is smaller then 8, do what we'd normally do + if ($this->mode == CRYPT_DES_MODE_3CBC && strlen($this->key) > 8) { + $ciphertext = $this->des[2]->encrypt($this->des[1]->decrypt($this->des[0]->encrypt($plaintext))); + + return $ciphertext; + } + + if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) { + if ($this->changed) { + if (!isset($this->enmcrypt)) { + $this->enmcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, ''); + } + mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); + $this->changed = false; + } + + $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext); + + if (!$this->continuousBuffer) { + mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); + } + + return $ciphertext; + } + + if (strlen($this->key) <= 8) { + $this->des[0]->mode = $this->mode; + + return $this->des[0]->encrypt($plaintext); + } + + // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic : + // "The data is padded with "\0" to make sure the length of the data is n * blocksize." + $plaintext = str_pad($plaintext, ceil(strlen($plaintext) / 8) * 8, chr(0)); + + $des = $this->des; + + $ciphertext = ''; + switch ($this->mode) { + case CRYPT_DES_MODE_ECB: + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $block = substr($plaintext, $i, 8); + $block = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT); + $block = $des[1]->_processBlock($block, CRYPT_DES_DECRYPT); + $block = $des[2]->_processBlock($block, CRYPT_DES_ENCRYPT); + $ciphertext.= $block; + } + break; + case CRYPT_DES_MODE_CBC: + $xor = $this->encryptIV; + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $block = substr($plaintext, $i, 8) ^ $xor; + $block = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT); + $block = $des[1]->_processBlock($block, CRYPT_DES_DECRYPT); + $block = $des[2]->_processBlock($block, CRYPT_DES_ENCRYPT); + $xor = $block; + $ciphertext.= $block; + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + } + break; + case CRYPT_DES_MODE_CTR: + $xor = $this->encryptIV; + for ($i = 0; $i < strlen($plaintext); $i+=8) { + $key = $this->_generate_xor(8, $xor); + $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT); + $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT); + $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT); + $block = substr($plaintext, $i, 8); + $ciphertext.= $block ^ $key; + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + } + } + + return $ciphertext; + } + + /** + * Decrypts a message. + * + * @access public + * @param String $ciphertext + */ + function decrypt($ciphertext) + { + if ($this->mode == CRYPT_DES_MODE_3CBC && strlen($this->key) > 8) { + $plaintext = $this->des[0]->decrypt($this->des[1]->encrypt($this->des[2]->decrypt($ciphertext))); + + return $this->_unpad($plaintext); + } + + // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic : + // "The data is padded with "\0" to make sure the length of the data is n * blocksize." + $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, chr(0)); + + if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) { + if ($this->changed) { + if (!isset($this->demcrypt)) { + $this->demcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, ''); + } + mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); + $this->changed = false; + } + + $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext); + + if (!$this->continuousBuffer) { + mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); + } + + return $this->mode != 'ctr' ? $this->_unpad($plaintext) : $plaintext; + } + + if (strlen($this->key) <= 8) { + $this->des[0]->mode = $this->mode; + + return $this->_unpad($this->des[0]->decrypt($plaintext)); + } + + $des = $this->des; + + $plaintext = ''; + switch ($this->mode) { + case CRYPT_DES_MODE_ECB: + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $block = substr($ciphertext, $i, 8); + $block = $des[2]->_processBlock($block, CRYPT_DES_DECRYPT); + $block = $des[1]->_processBlock($block, CRYPT_DES_ENCRYPT); + $block = $des[0]->_processBlock($block, CRYPT_DES_DECRYPT); + $plaintext.= $block; + } + break; + case CRYPT_DES_MODE_CBC: + $xor = $this->decryptIV; + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $orig = $block = substr($ciphertext, $i, 8); + $block = $des[2]->_processBlock($block, CRYPT_DES_DECRYPT); + $block = $des[1]->_processBlock($block, CRYPT_DES_ENCRYPT); + $block = $des[0]->_processBlock($block, CRYPT_DES_DECRYPT); + $plaintext.= $block ^ $xor; + $xor = $orig; + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + } + break; + case CRYPT_DES_MODE_CTR: + $xor = $this->decryptIV; + for ($i = 0; $i < strlen($ciphertext); $i+=8) { + $key = $this->_generate_xor(8, $xor); + $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT); + $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT); + $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT); + $block = substr($ciphertext, $i, 8); + $plaintext.= $block ^ $key; + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + } + } + + return $this->mode != CRYPT_DES_MODE_CTR ? $this->_unpad($plaintext) : $plaintext; + } + + /** + * Treat consecutive "packets" as if they are a continuous buffer. + * + * Say you have a 16-byte plaintext $plaintext. Using the default behavior, the two following code snippets + * will yield different outputs: + * + * + * echo $des->encrypt(substr($plaintext, 0, 8)); + * echo $des->encrypt(substr($plaintext, 8, 8)); + * + * + * echo $des->encrypt($plaintext); + * + * + * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates + * another, as demonstrated with the following: + * + * + * $des->encrypt(substr($plaintext, 0, 8)); + * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8))); + * + * + * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8))); + * + * + * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different + * outputs. The reason is due to the fact that the initialization vector's change after every encryption / + * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant. + * + * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each + * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that + * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them), + * however, they are also less intuitive and more likely to cause you problems. + * + * @see Crypt_TripleDES::disableContinuousBuffer() + * @access public + */ + function enableContinuousBuffer() + { + $this->continuousBuffer = true; + if ($this->mode == CRYPT_DES_MODE_3CBC) { + $this->des[0]->enableContinuousBuffer(); + $this->des[1]->enableContinuousBuffer(); + $this->des[2]->enableContinuousBuffer(); + } + } + + /** + * Treat consecutive packets as if they are a discontinuous buffer. + * + * The default behavior. + * + * @see Crypt_TripleDES::enableContinuousBuffer() + * @access public + */ + function disableContinuousBuffer() + { + $this->continuousBuffer = false; + $this->encryptIV = $this->iv; + $this->decryptIV = $this->iv; + + if ($this->mode == CRYPT_DES_MODE_3CBC) { + $this->des[0]->disableContinuousBuffer(); + $this->des[1]->disableContinuousBuffer(); + $this->des[2]->disableContinuousBuffer(); + } + } + + /** + * Pad "packets". + * + * DES works by encrypting eight bytes at a time. If you ever need to encrypt or decrypt something that's not + * a multiple of eight, it becomes necessary to pad the input so that it's length is a multiple of eight. + * + * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH1, + * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping + * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is + * transmitted separately) + * + * @see Crypt_TripleDES::disablePadding() + * @access public + */ + function enablePadding() + { + $this->padding = true; + } + + /** + * Do not pad packets. + * + * @see Crypt_TripleDES::enablePadding() + * @access public + */ + function disablePadding() + { + $this->padding = false; + } + + /** + * Pads a string + * + * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize (8). + * 8 - (strlen($text) & 7) bytes are added, each of which is equal to chr(8 - (strlen($text) & 7) + * + * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless + * and padding will, hence forth, be enabled. + * + * @see Crypt_TripleDES::_unpad() + * @access private + */ + function _pad($text) + { + $length = strlen($text); + + if (!$this->padding) { + if (($length & 7) == 0) { + return $text; + } else { + user_error("The plaintext's length ($length) is not a multiple of the block size (8)", E_USER_NOTICE); + $this->padding = true; + } + } + + $pad = 8 - ($length & 7); + return str_pad($text, $length + $pad, chr($pad)); + } + + /** + * Unpads a string + * + * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong + * and false will be returned. + * + * @see Crypt_TripleDES::_pad() + * @access private + */ + function _unpad($text) + { + if (!$this->padding) { + return $text; + } + + $length = ord($text[strlen($text) - 1]); + + if (!$length || $length > 8) { + return false; + } + + return substr($text, 0, -$length); + } +} + +// vim: ts=4:sw=4:et: +// vim6: fdl=1: \ No newline at end of file diff --git a/plugins/OStatus/extlib/Math/BigInteger.php b/plugins/OStatus/extlib/Math/BigInteger.php new file mode 100644 index 0000000000..9733351d42 --- /dev/null +++ b/plugins/OStatus/extlib/Math/BigInteger.php @@ -0,0 +1,3545 @@ +> and << cannot be used, nor can the modulo operator %, + * which only supports integers. Although this fact will slow this library down, the fact that such a high + * base is being used should more than compensate. + * + * When PHP version 6 is officially released, we'll be able to use 64-bit integers. This should, once again, + * allow bitwise operators, and will increase the maximum possible base to 2**31 (or 2**62 for addition / + * subtraction). + * + * Numbers are stored in {@link http://en.wikipedia.org/wiki/Endianness little endian} format. ie. + * (new Math_BigInteger(pow(2, 26)))->value = array(0, 1) + * + * Useful resources are as follows: + * + * - {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf Handbook of Applied Cryptography (HAC)} + * - {@link http://math.libtomcrypt.com/files/tommath.pdf Multi-Precision Math (MPM)} + * - Java's BigInteger classes. See /j2se/src/share/classes/java/math in jdk-1_5_0-src-jrl.zip + * + * Here's an example of how to use this library: + * + * add($b); + * + * echo $c->toString(); // outputs 5 + * ?> + * + * + * LICENSE: This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * @category Math + * @package Math_BigInteger + * @author Jim Wigginton + * @copyright MMVI Jim Wigginton + * @license http://www.gnu.org/licenses/lgpl.txt + * @version $Id: BigInteger.php,v 1.31 2010/03/01 17:28:19 terrafrost Exp $ + * @link http://pear.php.net/package/Math_BigInteger + */ + +/**#@+ + * Reduction constants + * + * @access private + * @see Math_BigInteger::_reduce() + */ +/** + * @see Math_BigInteger::_montgomery() + * @see Math_BigInteger::_prepMontgomery() + */ +define('MATH_BIGINTEGER_MONTGOMERY', 0); +/** + * @see Math_BigInteger::_barrett() + */ +define('MATH_BIGINTEGER_BARRETT', 1); +/** + * @see Math_BigInteger::_mod2() + */ +define('MATH_BIGINTEGER_POWEROF2', 2); +/** + * @see Math_BigInteger::_remainder() + */ +define('MATH_BIGINTEGER_CLASSIC', 3); +/** + * @see Math_BigInteger::__clone() + */ +define('MATH_BIGINTEGER_NONE', 4); +/**#@-*/ + +/**#@+ + * Array constants + * + * Rather than create a thousands and thousands of new Math_BigInteger objects in repeated function calls to add() and + * multiply() or whatever, we'll just work directly on arrays, taking them in as parameters and returning them. + * + * @access private + */ +/** + * $result[MATH_BIGINTEGER_VALUE] contains the value. + */ +define('MATH_BIGINTEGER_VALUE', 0); +/** + * $result[MATH_BIGINTEGER_SIGN] contains the sign. + */ +define('MATH_BIGINTEGER_SIGN', 1); +/**#@-*/ + +/**#@+ + * @access private + * @see Math_BigInteger::_montgomery() + * @see Math_BigInteger::_barrett() + */ +/** + * Cache constants + * + * $cache[MATH_BIGINTEGER_VARIABLE] tells us whether or not the cached data is still valid. + */ +define('MATH_BIGINTEGER_VARIABLE', 0); +/** + * $cache[MATH_BIGINTEGER_DATA] contains the cached data. + */ +define('MATH_BIGINTEGER_DATA', 1); +/**#@-*/ + +/**#@+ + * Mode constants. + * + * @access private + * @see Math_BigInteger::Math_BigInteger() + */ +/** + * To use the pure-PHP implementation + */ +define('MATH_BIGINTEGER_MODE_INTERNAL', 1); +/** + * To use the BCMath library + * + * (if enabled; otherwise, the internal implementation will be used) + */ +define('MATH_BIGINTEGER_MODE_BCMATH', 2); +/** + * To use the GMP library + * + * (if present; otherwise, either the BCMath or the internal implementation will be used) + */ +define('MATH_BIGINTEGER_MODE_GMP', 3); +/**#@-*/ + +/** + * The largest digit that may be used in addition / subtraction + * + * (we do pow(2, 52) instead of using 4503599627370496, directly, because some PHP installations + * will truncate 4503599627370496) + * + * @access private + */ +define('MATH_BIGINTEGER_MAX_DIGIT52', pow(2, 52)); + +/** + * Karatsuba Cutoff + * + * At what point do we switch between Karatsuba multiplication and schoolbook long multiplication? + * + * @access private + */ +define('MATH_BIGINTEGER_KARATSUBA_CUTOFF', 25); + +/** + * Pure-PHP arbitrary precision integer arithmetic library. Supports base-2, base-10, base-16, and base-256 + * numbers. + * + * @author Jim Wigginton + * @version 1.0.0RC4 + * @access public + * @package Math_BigInteger + */ +class Math_BigInteger { + /** + * Holds the BigInteger's value. + * + * @var Array + * @access private + */ + var $value; + + /** + * Holds the BigInteger's magnitude. + * + * @var Boolean + * @access private + */ + var $is_negative = false; + + /** + * Random number generator function + * + * @see setRandomGenerator() + * @access private + */ + var $generator = 'mt_rand'; + + /** + * Precision + * + * @see setPrecision() + * @access private + */ + var $precision = -1; + + /** + * Precision Bitmask + * + * @see setPrecision() + * @access private + */ + var $bitmask = false; + + /** + * Mode independant value used for serialization. + * + * If the bcmath or gmp extensions are installed $this->value will be a non-serializable resource, hence the need for + * a variable that'll be serializable regardless of whether or not extensions are being used. Unlike $this->value, + * however, $this->hex is only calculated when $this->__sleep() is called. + * + * @see __sleep() + * @see __wakeup() + * @var String + * @access private + */ + var $hex; + + /** + * Converts base-2, base-10, base-16, and binary strings (eg. base-256) to BigIntegers. + * + * If the second parameter - $base - is negative, then it will be assumed that the number's are encoded using + * two's compliment. The sole exception to this is -10, which is treated the same as 10 is. + * + * Here's an example: + * + * toString(); // outputs 50 + * ?> + * + * + * @param optional $x base-10 number or base-$base number if $base set. + * @param optional integer $base + * @return Math_BigInteger + * @access public + */ + function Math_BigInteger($x = 0, $base = 10) + { + if ( !defined('MATH_BIGINTEGER_MODE') ) { + switch (true) { + case extension_loaded('gmp'): + define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_GMP); + break; + case extension_loaded('bcmath'): + define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_BCMATH); + break; + default: + define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_INTERNAL); + } + } + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + if (is_resource($x) && get_resource_type($x) == 'GMP integer') { + $this->value = $x; + return; + } + $this->value = gmp_init(0); + break; + case MATH_BIGINTEGER_MODE_BCMATH: + $this->value = '0'; + break; + default: + $this->value = array(); + } + + if ($x === 0) { + return; + } + + switch ($base) { + case -256: + if (ord($x[0]) & 0x80) { + $x = ~$x; + $this->is_negative = true; + } + case 256: + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $sign = $this->is_negative ? '-' : ''; + $this->value = gmp_init($sign . '0x' . bin2hex($x)); + break; + case MATH_BIGINTEGER_MODE_BCMATH: + // round $len to the nearest 4 (thanks, DavidMJ!) + $len = (strlen($x) + 3) & 0xFFFFFFFC; + + $x = str_pad($x, $len, chr(0), STR_PAD_LEFT); + + for ($i = 0; $i < $len; $i+= 4) { + $this->value = bcmul($this->value, '4294967296', 0); // 4294967296 == 2**32 + $this->value = bcadd($this->value, 0x1000000 * ord($x[$i]) + ((ord($x[$i + 1]) << 16) | (ord($x[$i + 2]) << 8) | ord($x[$i + 3])), 0); + } + + if ($this->is_negative) { + $this->value = '-' . $this->value; + } + + break; + // converts a base-2**8 (big endian / msb) number to base-2**26 (little endian / lsb) + default: + while (strlen($x)) { + $this->value[] = $this->_bytes2int($this->_base256_rshift($x, 26)); + } + } + + if ($this->is_negative) { + if (MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL) { + $this->is_negative = false; + } + $temp = $this->add(new Math_BigInteger('-1')); + $this->value = $temp->value; + } + break; + case 16: + case -16: + if ($base > 0 && $x[0] == '-') { + $this->is_negative = true; + $x = substr($x, 1); + } + + $x = preg_replace('#^(?:0x)?([A-Fa-f0-9]*).*#', '$1', $x); + + $is_negative = false; + if ($base < 0 && hexdec($x[0]) >= 8) { + $this->is_negative = $is_negative = true; + $x = bin2hex(~pack('H*', $x)); + } + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = $this->is_negative ? '-0x' . $x : '0x' . $x; + $this->value = gmp_init($temp); + $this->is_negative = false; + break; + case MATH_BIGINTEGER_MODE_BCMATH: + $x = ( strlen($x) & 1 ) ? '0' . $x : $x; + $temp = new Math_BigInteger(pack('H*', $x), 256); + $this->value = $this->is_negative ? '-' . $temp->value : $temp->value; + $this->is_negative = false; + break; + default: + $x = ( strlen($x) & 1 ) ? '0' . $x : $x; + $temp = new Math_BigInteger(pack('H*', $x), 256); + $this->value = $temp->value; + } + + if ($is_negative) { + $temp = $this->add(new Math_BigInteger('-1')); + $this->value = $temp->value; + } + break; + case 10: + case -10: + $x = preg_replace('#^(-?[0-9]*).*#', '$1', $x); + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $this->value = gmp_init($x); + break; + case MATH_BIGINTEGER_MODE_BCMATH: + // explicitly casting $x to a string is necessary, here, since doing $x[0] on -1 yields different + // results then doing it on '-1' does (modInverse does $x[0]) + $this->value = (string) $x; + break; + default: + $temp = new Math_BigInteger(); + + // array(10000000) is 10**7 in base-2**26. 10**7 is the closest to 2**26 we can get without passing it. + $multiplier = new Math_BigInteger(); + $multiplier->value = array(10000000); + + if ($x[0] == '-') { + $this->is_negative = true; + $x = substr($x, 1); + } + + $x = str_pad($x, strlen($x) + (6 * strlen($x)) % 7, 0, STR_PAD_LEFT); + + while (strlen($x)) { + $temp = $temp->multiply($multiplier); + $temp = $temp->add(new Math_BigInteger($this->_int2bytes(substr($x, 0, 7)), 256)); + $x = substr($x, 7); + } + + $this->value = $temp->value; + } + break; + case 2: // base-2 support originally implemented by Lluis Pamies - thanks! + case -2: + if ($base > 0 && $x[0] == '-') { + $this->is_negative = true; + $x = substr($x, 1); + } + + $x = preg_replace('#^([01]*).*#', '$1', $x); + $x = str_pad($x, strlen($x) + (3 * strlen($x)) % 4, 0, STR_PAD_LEFT); + + $str = '0x'; + while (strlen($x)) { + $part = substr($x, 0, 4); + $str.= dechex(bindec($part)); + $x = substr($x, 4); + } + + if ($this->is_negative) { + $str = '-' . $str; + } + + $temp = new Math_BigInteger($str, 8 * $base); // ie. either -16 or +16 + $this->value = $temp->value; + $this->is_negative = $temp->is_negative; + + break; + default: + // base not supported, so we'll let $this == 0 + } + } + + /** + * Converts a BigInteger to a byte string (eg. base-256). + * + * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're + * saved as two's compliment. + * + * Here's an example: + * + * toBytes(); // outputs chr(65) + * ?> + * + * + * @param Boolean $twos_compliment + * @return String + * @access public + * @internal Converts a base-2**26 number to base-2**8 + */ + function toBytes($twos_compliment = false) + { + if ($twos_compliment) { + $comparison = $this->compare(new Math_BigInteger()); + if ($comparison == 0) { + return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : ''; + } + + $temp = $comparison < 0 ? $this->add(new Math_BigInteger(1)) : $this->copy(); + $bytes = $temp->toBytes(); + + if (empty($bytes)) { // eg. if the number we're trying to convert is -1 + $bytes = chr(0); + } + + if (ord($bytes[0]) & 0x80) { + $bytes = chr(0) . $bytes; + } + + return $comparison < 0 ? ~$bytes : $bytes; + } + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + if (gmp_cmp($this->value, gmp_init(0)) == 0) { + return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : ''; + } + + $temp = gmp_strval(gmp_abs($this->value), 16); + $temp = ( strlen($temp) & 1 ) ? '0' . $temp : $temp; + $temp = pack('H*', $temp); + + return $this->precision > 0 ? + substr(str_pad($temp, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) : + ltrim($temp, chr(0)); + case MATH_BIGINTEGER_MODE_BCMATH: + if ($this->value === '0') { + return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : ''; + } + + $value = ''; + $current = $this->value; + + if ($current[0] == '-') { + $current = substr($current, 1); + } + + while (bccomp($current, '0', 0) > 0) { + $temp = bcmod($current, '16777216'); + $value = chr($temp >> 16) . chr($temp >> 8) . chr($temp) . $value; + $current = bcdiv($current, '16777216', 0); + } + + return $this->precision > 0 ? + substr(str_pad($value, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) : + ltrim($value, chr(0)); + } + + if (!count($this->value)) { + return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : ''; + } + $result = $this->_int2bytes($this->value[count($this->value) - 1]); + + $temp = $this->copy(); + + for ($i = count($temp->value) - 2; $i >= 0; --$i) { + $temp->_base256_lshift($result, 26); + $result = $result | str_pad($temp->_int2bytes($temp->value[$i]), strlen($result), chr(0), STR_PAD_LEFT); + } + + return $this->precision > 0 ? + str_pad(substr($result, -(($this->precision + 7) >> 3)), ($this->precision + 7) >> 3, chr(0), STR_PAD_LEFT) : + $result; + } + + /** + * Converts a BigInteger to a hex string (eg. base-16)). + * + * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're + * saved as two's compliment. + * + * Here's an example: + * + * toHex(); // outputs '41' + * ?> + * + * + * @param Boolean $twos_compliment + * @return String + * @access public + * @internal Converts a base-2**26 number to base-2**8 + */ + function toHex($twos_compliment = false) + { + return bin2hex($this->toBytes($twos_compliment)); + } + + /** + * Converts a BigInteger to a bit string (eg. base-2). + * + * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're + * saved as two's compliment. + * + * Here's an example: + * + * toBits(); // outputs '1000001' + * ?> + * + * + * @param Boolean $twos_compliment + * @return String + * @access public + * @internal Converts a base-2**26 number to base-2**2 + */ + function toBits($twos_compliment = false) + { + $hex = $this->toHex($twos_compliment); + $bits = ''; + for ($i = 0; $i < strlen($hex); $i+=8) { + $bits.= str_pad(decbin(hexdec(substr($hex, $i, 8))), 32, '0', STR_PAD_LEFT); + } + return $this->precision > 0 ? substr($bits, -$this->precision) : ltrim($bits, '0'); + } + + /** + * Converts a BigInteger to a base-10 number. + * + * Here's an example: + * + * toString(); // outputs 50 + * ?> + * + * + * @return String + * @access public + * @internal Converts a base-2**26 number to base-10**7 (which is pretty much base-10) + */ + function toString() + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + return gmp_strval($this->value); + case MATH_BIGINTEGER_MODE_BCMATH: + if ($this->value === '0') { + return '0'; + } + + return ltrim($this->value, '0'); + } + + if (!count($this->value)) { + return '0'; + } + + $temp = $this->copy(); + $temp->is_negative = false; + + $divisor = new Math_BigInteger(); + $divisor->value = array(10000000); // eg. 10**7 + $result = ''; + while (count($temp->value)) { + list($temp, $mod) = $temp->divide($divisor); + $result = str_pad(isset($mod->value[0]) ? $mod->value[0] : '', 7, '0', STR_PAD_LEFT) . $result; + } + $result = ltrim($result, '0'); + if (empty($result)) { + $result = '0'; + } + + if ($this->is_negative) { + $result = '-' . $result; + } + + return $result; + } + + /** + * Copy an object + * + * PHP5 passes objects by reference while PHP4 passes by value. As such, we need a function to guarantee + * that all objects are passed by value, when appropriate. More information can be found here: + * + * {@link http://php.net/language.oop5.basic#51624} + * + * @access public + * @see __clone() + * @return Math_BigInteger + */ + function copy() + { + $temp = new Math_BigInteger(); + $temp->value = $this->value; + $temp->is_negative = $this->is_negative; + $temp->generator = $this->generator; + $temp->precision = $this->precision; + $temp->bitmask = $this->bitmask; + return $temp; + } + + /** + * __toString() magic method + * + * Will be called, automatically, if you're supporting just PHP5. If you're supporting PHP4, you'll need to call + * toString(). + * + * @access public + * @internal Implemented per a suggestion by Techie-Michael - thanks! + */ + function __toString() + { + return $this->toString(); + } + + /** + * __clone() magic method + * + * Although you can call Math_BigInteger::__toString() directly in PHP5, you cannot call Math_BigInteger::__clone() + * directly in PHP5. You can in PHP4 since it's not a magic method, but in PHP5, you have to call it by using the PHP5 + * only syntax of $y = clone $x. As such, if you're trying to write an application that works on both PHP4 and PHP5, + * call Math_BigInteger::copy(), instead. + * + * @access public + * @see copy() + * @return Math_BigInteger + */ + function __clone() + { + return $this->copy(); + } + + /** + * __sleep() magic method + * + * Will be called, automatically, when serialize() is called on a Math_BigInteger object. + * + * @see __wakeup + * @access public + */ + function __sleep() + { + $this->hex = $this->toHex(true); + $vars = array('hex'); + if ($this->generator != 'mt_rand') { + $vars[] = 'generator'; + } + if ($this->precision > 0) { + $vars[] = 'precision'; + } + return $vars; + + } + + /** + * __wakeup() magic method + * + * Will be called, automatically, when unserialize() is called on a Math_BigInteger object. + * + * @see __sleep + * @access public + */ + function __wakeup() + { + $temp = new Math_BigInteger($this->hex, -16); + $this->value = $temp->value; + $this->is_negative = $temp->is_negative; + $this->setRandomGenerator($this->generator); + if ($this->precision > 0) { + // recalculate $this->bitmask + $this->setPrecision($this->precision); + } + } + + /** + * Adds two BigIntegers. + * + * Here's an example: + * + * add($b); + * + * echo $c->toString(); // outputs 30 + * ?> + * + * + * @param Math_BigInteger $y + * @return Math_BigInteger + * @access public + * @internal Performs base-2**52 addition + */ + function add($y) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_add($this->value, $y->value); + + return $this->_normalize($temp); + case MATH_BIGINTEGER_MODE_BCMATH: + $temp = new Math_BigInteger(); + $temp->value = bcadd($this->value, $y->value, 0); + + return $this->_normalize($temp); + } + + $temp = $this->_add($this->value, $this->is_negative, $y->value, $y->is_negative); + + $result = new Math_BigInteger(); + $result->value = $temp[MATH_BIGINTEGER_VALUE]; + $result->is_negative = $temp[MATH_BIGINTEGER_SIGN]; + + return $this->_normalize($result); + } + + /** + * Performs addition. + * + * @param Array $x_value + * @param Boolean $x_negative + * @param Array $y_value + * @param Boolean $y_negative + * @return Array + * @access private + */ + function _add($x_value, $x_negative, $y_value, $y_negative) + { + $x_size = count($x_value); + $y_size = count($y_value); + + if ($x_size == 0) { + return array( + MATH_BIGINTEGER_VALUE => $y_value, + MATH_BIGINTEGER_SIGN => $y_negative + ); + } else if ($y_size == 0) { + return array( + MATH_BIGINTEGER_VALUE => $x_value, + MATH_BIGINTEGER_SIGN => $x_negative + ); + } + + // subtract, if appropriate + if ( $x_negative != $y_negative ) { + if ( $x_value == $y_value ) { + return array( + MATH_BIGINTEGER_VALUE => array(), + MATH_BIGINTEGER_SIGN => false + ); + } + + $temp = $this->_subtract($x_value, false, $y_value, false); + $temp[MATH_BIGINTEGER_SIGN] = $this->_compare($x_value, false, $y_value, false) > 0 ? + $x_negative : $y_negative; + + return $temp; + } + + if ($x_size < $y_size) { + $size = $x_size; + $value = $y_value; + } else { + $size = $y_size; + $value = $x_value; + } + + $value[] = 0; // just in case the carry adds an extra digit + + $carry = 0; + for ($i = 0, $j = 1; $j < $size; $i+=2, $j+=2) { + $sum = $x_value[$j] * 0x4000000 + $x_value[$i] + $y_value[$j] * 0x4000000 + $y_value[$i] + $carry; + $carry = $sum >= MATH_BIGINTEGER_MAX_DIGIT52; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1 + $sum = $carry ? $sum - MATH_BIGINTEGER_MAX_DIGIT52 : $sum; + + $temp = (int) ($sum / 0x4000000); + + $value[$i] = (int) ($sum - 0x4000000 * $temp); // eg. a faster alternative to fmod($sum, 0x4000000) + $value[$j] = $temp; + } + + if ($j == $size) { // ie. if $y_size is odd + $sum = $x_value[$i] + $y_value[$i] + $carry; + $carry = $sum >= 0x4000000; + $value[$i] = $carry ? $sum - 0x4000000 : $sum; + ++$i; // ie. let $i = $j since we've just done $value[$i] + } + + if ($carry) { + for (; $value[$i] == 0x3FFFFFF; ++$i) { + $value[$i] = 0; + } + ++$value[$i]; + } + + return array( + MATH_BIGINTEGER_VALUE => $this->_trim($value), + MATH_BIGINTEGER_SIGN => $x_negative + ); + } + + /** + * Subtracts two BigIntegers. + * + * Here's an example: + * + * subtract($b); + * + * echo $c->toString(); // outputs -10 + * ?> + * + * + * @param Math_BigInteger $y + * @return Math_BigInteger + * @access public + * @internal Performs base-2**52 subtraction + */ + function subtract($y) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_sub($this->value, $y->value); + + return $this->_normalize($temp); + case MATH_BIGINTEGER_MODE_BCMATH: + $temp = new Math_BigInteger(); + $temp->value = bcsub($this->value, $y->value, 0); + + return $this->_normalize($temp); + } + + $temp = $this->_subtract($this->value, $this->is_negative, $y->value, $y->is_negative); + + $result = new Math_BigInteger(); + $result->value = $temp[MATH_BIGINTEGER_VALUE]; + $result->is_negative = $temp[MATH_BIGINTEGER_SIGN]; + + return $this->_normalize($result); + } + + /** + * Performs subtraction. + * + * @param Array $x_value + * @param Boolean $x_negative + * @param Array $y_value + * @param Boolean $y_negative + * @return Array + * @access private + */ + function _subtract($x_value, $x_negative, $y_value, $y_negative) + { + $x_size = count($x_value); + $y_size = count($y_value); + + if ($x_size == 0) { + return array( + MATH_BIGINTEGER_VALUE => $y_value, + MATH_BIGINTEGER_SIGN => !$y_negative + ); + } else if ($y_size == 0) { + return array( + MATH_BIGINTEGER_VALUE => $x_value, + MATH_BIGINTEGER_SIGN => $x_negative + ); + } + + // add, if appropriate (ie. -$x - +$y or +$x - -$y) + if ( $x_negative != $y_negative ) { + $temp = $this->_add($x_value, false, $y_value, false); + $temp[MATH_BIGINTEGER_SIGN] = $x_negative; + + return $temp; + } + + $diff = $this->_compare($x_value, $x_negative, $y_value, $y_negative); + + if ( !$diff ) { + return array( + MATH_BIGINTEGER_VALUE => array(), + MATH_BIGINTEGER_SIGN => false + ); + } + + // switch $x and $y around, if appropriate. + if ( (!$x_negative && $diff < 0) || ($x_negative && $diff > 0) ) { + $temp = $x_value; + $x_value = $y_value; + $y_value = $temp; + + $x_negative = !$x_negative; + + $x_size = count($x_value); + $y_size = count($y_value); + } + + // at this point, $x_value should be at least as big as - if not bigger than - $y_value + + $carry = 0; + for ($i = 0, $j = 1; $j < $y_size; $i+=2, $j+=2) { + $sum = $x_value[$j] * 0x4000000 + $x_value[$i] - $y_value[$j] * 0x4000000 - $y_value[$i] - $carry; + $carry = $sum < 0; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1 + $sum = $carry ? $sum + MATH_BIGINTEGER_MAX_DIGIT52 : $sum; + + $temp = (int) ($sum / 0x4000000); + + $x_value[$i] = (int) ($sum - 0x4000000 * $temp); + $x_value[$j] = $temp; + } + + if ($j == $y_size) { // ie. if $y_size is odd + $sum = $x_value[$i] - $y_value[$i] - $carry; + $carry = $sum < 0; + $x_value[$i] = $carry ? $sum + 0x4000000 : $sum; + ++$i; + } + + if ($carry) { + for (; !$x_value[$i]; ++$i) { + $x_value[$i] = 0x3FFFFFF; + } + --$x_value[$i]; + } + + return array( + MATH_BIGINTEGER_VALUE => $this->_trim($x_value), + MATH_BIGINTEGER_SIGN => $x_negative + ); + } + + /** + * Multiplies two BigIntegers + * + * Here's an example: + * + * multiply($b); + * + * echo $c->toString(); // outputs 200 + * ?> + * + * + * @param Math_BigInteger $x + * @return Math_BigInteger + * @access public + */ + function multiply($x) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_mul($this->value, $x->value); + + return $this->_normalize($temp); + case MATH_BIGINTEGER_MODE_BCMATH: + $temp = new Math_BigInteger(); + $temp->value = bcmul($this->value, $x->value, 0); + + return $this->_normalize($temp); + } + + $temp = $this->_multiply($this->value, $this->is_negative, $x->value, $x->is_negative); + + $product = new Math_BigInteger(); + $product->value = $temp[MATH_BIGINTEGER_VALUE]; + $product->is_negative = $temp[MATH_BIGINTEGER_SIGN]; + + return $this->_normalize($product); + } + + /** + * Performs multiplication. + * + * @param Array $x_value + * @param Boolean $x_negative + * @param Array $y_value + * @param Boolean $y_negative + * @return Array + * @access private + */ + function _multiply($x_value, $x_negative, $y_value, $y_negative) + { + //if ( $x_value == $y_value ) { + // return array( + // MATH_BIGINTEGER_VALUE => $this->_square($x_value), + // MATH_BIGINTEGER_SIGN => $x_sign != $y_value + // ); + //} + + $x_length = count($x_value); + $y_length = count($y_value); + + if ( !$x_length || !$y_length ) { // a 0 is being multiplied + return array( + MATH_BIGINTEGER_VALUE => array(), + MATH_BIGINTEGER_SIGN => false + ); + } + + return array( + MATH_BIGINTEGER_VALUE => min($x_length, $y_length) < 2 * MATH_BIGINTEGER_KARATSUBA_CUTOFF ? + $this->_trim($this->_regularMultiply($x_value, $y_value)) : + $this->_trim($this->_karatsuba($x_value, $y_value)), + MATH_BIGINTEGER_SIGN => $x_negative != $y_negative + ); + } + + /** + * Performs long multiplication on two BigIntegers + * + * Modeled after 'multiply' in MutableBigInteger.java. + * + * @param Array $x_value + * @param Array $y_value + * @return Array + * @access private + */ + function _regularMultiply($x_value, $y_value) + { + $x_length = count($x_value); + $y_length = count($y_value); + + if ( !$x_length || !$y_length ) { // a 0 is being multiplied + return array(); + } + + if ( $x_length < $y_length ) { + $temp = $x_value; + $x_value = $y_value; + $y_value = $temp; + + $x_length = count($x_value); + $y_length = count($y_value); + } + + $product_value = $this->_array_repeat(0, $x_length + $y_length); + + // the following for loop could be removed if the for loop following it + // (the one with nested for loops) initially set $i to 0, but + // doing so would also make the result in one set of unnecessary adds, + // since on the outermost loops first pass, $product->value[$k] is going + // to always be 0 + + $carry = 0; + + for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0 + $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0 + $carry = (int) ($temp / 0x4000000); + $product_value[$j] = (int) ($temp - 0x4000000 * $carry); + } + + $product_value[$j] = $carry; + + // the above for loop is what the previous comment was talking about. the + // following for loop is the "one with nested for loops" + for ($i = 1; $i < $y_length; ++$i) { + $carry = 0; + + for ($j = 0, $k = $i; $j < $x_length; ++$j, ++$k) { + $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry; + $carry = (int) ($temp / 0x4000000); + $product_value[$k] = (int) ($temp - 0x4000000 * $carry); + } + + $product_value[$k] = $carry; + } + + return $product_value; + } + + /** + * Performs Karatsuba multiplication on two BigIntegers + * + * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=120 MPM 5.2.3}. + * + * @param Array $x_value + * @param Array $y_value + * @return Array + * @access private + */ + function _karatsuba($x_value, $y_value) + { + $m = min(count($x_value) >> 1, count($y_value) >> 1); + + if ($m < MATH_BIGINTEGER_KARATSUBA_CUTOFF) { + return $this->_regularMultiply($x_value, $y_value); + } + + $x1 = array_slice($x_value, $m); + $x0 = array_slice($x_value, 0, $m); + $y1 = array_slice($y_value, $m); + $y0 = array_slice($y_value, 0, $m); + + $z2 = $this->_karatsuba($x1, $y1); + $z0 = $this->_karatsuba($x0, $y0); + + $z1 = $this->_add($x1, false, $x0, false); + $temp = $this->_add($y1, false, $y0, false); + $z1 = $this->_karatsuba($z1[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_VALUE]); + $temp = $this->_add($z2, false, $z0, false); + $z1 = $this->_subtract($z1, false, $temp[MATH_BIGINTEGER_VALUE], false); + + $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2); + $z1[MATH_BIGINTEGER_VALUE] = array_merge(array_fill(0, $m, 0), $z1[MATH_BIGINTEGER_VALUE]); + + $xy = $this->_add($z2, false, $z1[MATH_BIGINTEGER_VALUE], $z1[MATH_BIGINTEGER_SIGN]); + $xy = $this->_add($xy[MATH_BIGINTEGER_VALUE], $xy[MATH_BIGINTEGER_SIGN], $z0, false); + + return $xy[MATH_BIGINTEGER_VALUE]; + } + + /** + * Performs squaring + * + * @param Array $x + * @return Array + * @access private + */ + function _square($x = false) + { + return count($x) < 2 * MATH_BIGINTEGER_KARATSUBA_CUTOFF ? + $this->_trim($this->_baseSquare($x)) : + $this->_trim($this->_karatsubaSquare($x)); + } + + /** + * Performs traditional squaring on two BigIntegers + * + * Squaring can be done faster than multiplying a number by itself can be. See + * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=7 HAC 14.2.4} / + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=141 MPM 5.3} for more information. + * + * @param Array $value + * @return Array + * @access private + */ + function _baseSquare($value) + { + if ( empty($value) ) { + return array(); + } + $square_value = $this->_array_repeat(0, 2 * count($value)); + + for ($i = 0, $max_index = count($value) - 1; $i <= $max_index; ++$i) { + $i2 = $i << 1; + + $temp = $square_value[$i2] + $value[$i] * $value[$i]; + $carry = (int) ($temp / 0x4000000); + $square_value[$i2] = (int) ($temp - 0x4000000 * $carry); + + // note how we start from $i+1 instead of 0 as we do in multiplication. + for ($j = $i + 1, $k = $i2 + 1; $j <= $max_index; ++$j, ++$k) { + $temp = $square_value[$k] + 2 * $value[$j] * $value[$i] + $carry; + $carry = (int) ($temp / 0x4000000); + $square_value[$k] = (int) ($temp - 0x4000000 * $carry); + } + + // the following line can yield values larger 2**15. at this point, PHP should switch + // over to floats. + $square_value[$i + $max_index + 1] = $carry; + } + + return $square_value; + } + + /** + * Performs Karatsuba "squaring" on two BigIntegers + * + * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=151 MPM 5.3.4}. + * + * @param Array $value + * @return Array + * @access private + */ + function _karatsubaSquare($value) + { + $m = count($value) >> 1; + + if ($m < MATH_BIGINTEGER_KARATSUBA_CUTOFF) { + return $this->_baseSquare($value); + } + + $x1 = array_slice($value, $m); + $x0 = array_slice($value, 0, $m); + + $z2 = $this->_karatsubaSquare($x1); + $z0 = $this->_karatsubaSquare($x0); + + $z1 = $this->_add($x1, false, $x0, false); + $z1 = $this->_karatsubaSquare($z1[MATH_BIGINTEGER_VALUE]); + $temp = $this->_add($z2, false, $z0, false); + $z1 = $this->_subtract($z1, false, $temp[MATH_BIGINTEGER_VALUE], false); + + $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2); + $z1[MATH_BIGINTEGER_VALUE] = array_merge(array_fill(0, $m, 0), $z1[MATH_BIGINTEGER_VALUE]); + + $xx = $this->_add($z2, false, $z1[MATH_BIGINTEGER_VALUE], $z1[MATH_BIGINTEGER_SIGN]); + $xx = $this->_add($xx[MATH_BIGINTEGER_VALUE], $xx[MATH_BIGINTEGER_SIGN], $z0, false); + + return $xx[MATH_BIGINTEGER_VALUE]; + } + + /** + * Divides two BigIntegers. + * + * Returns an array whose first element contains the quotient and whose second element contains the + * "common residue". If the remainder would be positive, the "common residue" and the remainder are the + * same. If the remainder would be negative, the "common residue" is equal to the sum of the remainder + * and the divisor (basically, the "common residue" is the first positive modulo). + * + * Here's an example: + * + * divide($b); + * + * echo $quotient->toString(); // outputs 0 + * echo "\r\n"; + * echo $remainder->toString(); // outputs 10 + * ?> + * + * + * @param Math_BigInteger $y + * @return Array + * @access public + * @internal This function is based off of {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=9 HAC 14.20}. + */ + function divide($y) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $quotient = new Math_BigInteger(); + $remainder = new Math_BigInteger(); + + list($quotient->value, $remainder->value) = gmp_div_qr($this->value, $y->value); + + if (gmp_sign($remainder->value) < 0) { + $remainder->value = gmp_add($remainder->value, gmp_abs($y->value)); + } + + return array($this->_normalize($quotient), $this->_normalize($remainder)); + case MATH_BIGINTEGER_MODE_BCMATH: + $quotient = new Math_BigInteger(); + $remainder = new Math_BigInteger(); + + $quotient->value = bcdiv($this->value, $y->value, 0); + $remainder->value = bcmod($this->value, $y->value); + + if ($remainder->value[0] == '-') { + $remainder->value = bcadd($remainder->value, $y->value[0] == '-' ? substr($y->value, 1) : $y->value, 0); + } + + return array($this->_normalize($quotient), $this->_normalize($remainder)); + } + + if (count($y->value) == 1) { + list($q, $r) = $this->_divide_digit($this->value, $y->value[0]); + $quotient = new Math_BigInteger(); + $remainder = new Math_BigInteger(); + $quotient->value = $q; + $remainder->value = array($r); + $quotient->is_negative = $this->is_negative != $y->is_negative; + return array($this->_normalize($quotient), $this->_normalize($remainder)); + } + + static $zero; + if ( !isset($zero) ) { + $zero = new Math_BigInteger(); + } + + $x = $this->copy(); + $y = $y->copy(); + + $x_sign = $x->is_negative; + $y_sign = $y->is_negative; + + $x->is_negative = $y->is_negative = false; + + $diff = $x->compare($y); + + if ( !$diff ) { + $temp = new Math_BigInteger(); + $temp->value = array(1); + $temp->is_negative = $x_sign != $y_sign; + return array($this->_normalize($temp), $this->_normalize(new Math_BigInteger())); + } + + if ( $diff < 0 ) { + // if $x is negative, "add" $y. + if ( $x_sign ) { + $x = $y->subtract($x); + } + return array($this->_normalize(new Math_BigInteger()), $this->_normalize($x)); + } + + // normalize $x and $y as described in HAC 14.23 / 14.24 + $msb = $y->value[count($y->value) - 1]; + for ($shift = 0; !($msb & 0x2000000); ++$shift) { + $msb <<= 1; + } + $x->_lshift($shift); + $y->_lshift($shift); + $y_value = &$y->value; + + $x_max = count($x->value) - 1; + $y_max = count($y->value) - 1; + + $quotient = new Math_BigInteger(); + $quotient_value = &$quotient->value; + $quotient_value = $this->_array_repeat(0, $x_max - $y_max + 1); + + static $temp, $lhs, $rhs; + if (!isset($temp)) { + $temp = new Math_BigInteger(); + $lhs = new Math_BigInteger(); + $rhs = new Math_BigInteger(); + } + $temp_value = &$temp->value; + $rhs_value = &$rhs->value; + + // $temp = $y << ($x_max - $y_max-1) in base 2**26 + $temp_value = array_merge($this->_array_repeat(0, $x_max - $y_max), $y_value); + + while ( $x->compare($temp) >= 0 ) { + // calculate the "common residue" + ++$quotient_value[$x_max - $y_max]; + $x = $x->subtract($temp); + $x_max = count($x->value) - 1; + } + + for ($i = $x_max; $i >= $y_max + 1; --$i) { + $x_value = &$x->value; + $x_window = array( + isset($x_value[$i]) ? $x_value[$i] : 0, + isset($x_value[$i - 1]) ? $x_value[$i - 1] : 0, + isset($x_value[$i - 2]) ? $x_value[$i - 2] : 0 + ); + $y_window = array( + $y_value[$y_max], + ( $y_max > 0 ) ? $y_value[$y_max - 1] : 0 + ); + + $q_index = $i - $y_max - 1; + if ($x_window[0] == $y_window[0]) { + $quotient_value[$q_index] = 0x3FFFFFF; + } else { + $quotient_value[$q_index] = (int) ( + ($x_window[0] * 0x4000000 + $x_window[1]) + / + $y_window[0] + ); + } + + $temp_value = array($y_window[1], $y_window[0]); + + $lhs->value = array($quotient_value[$q_index]); + $lhs = $lhs->multiply($temp); + + $rhs_value = array($x_window[2], $x_window[1], $x_window[0]); + + while ( $lhs->compare($rhs) > 0 ) { + --$quotient_value[$q_index]; + + $lhs->value = array($quotient_value[$q_index]); + $lhs = $lhs->multiply($temp); + } + + $adjust = $this->_array_repeat(0, $q_index); + $temp_value = array($quotient_value[$q_index]); + $temp = $temp->multiply($y); + $temp_value = &$temp->value; + $temp_value = array_merge($adjust, $temp_value); + + $x = $x->subtract($temp); + + if ($x->compare($zero) < 0) { + $temp_value = array_merge($adjust, $y_value); + $x = $x->add($temp); + + --$quotient_value[$q_index]; + } + + $x_max = count($x_value) - 1; + } + + // unnormalize the remainder + $x->_rshift($shift); + + $quotient->is_negative = $x_sign != $y_sign; + + // calculate the "common residue", if appropriate + if ( $x_sign ) { + $y->_rshift($shift); + $x = $y->subtract($x); + } + + return array($this->_normalize($quotient), $this->_normalize($x)); + } + + /** + * Divides a BigInteger by a regular integer + * + * abc / x = a00 / x + b0 / x + c / x + * + * @param Array $dividend + * @param Array $divisor + * @return Array + * @access private + */ + function _divide_digit($dividend, $divisor) + { + $carry = 0; + $result = array(); + + for ($i = count($dividend) - 1; $i >= 0; --$i) { + $temp = 0x4000000 * $carry + $dividend[$i]; + $result[$i] = (int) ($temp / $divisor); + $carry = (int) ($temp - $divisor * $result[$i]); + } + + return array($result, $carry); + } + + /** + * Performs modular exponentiation. + * + * Here's an example: + * + * modPow($b, $c); + * + * echo $c->toString(); // outputs 10 + * ?> + * + * + * @param Math_BigInteger $e + * @param Math_BigInteger $n + * @return Math_BigInteger + * @access public + * @internal The most naive approach to modular exponentiation has very unreasonable requirements, and + * and although the approach involving repeated squaring does vastly better, it, too, is impractical + * for our purposes. The reason being that division - by far the most complicated and time-consuming + * of the basic operations (eg. +,-,*,/) - occurs multiple times within it. + * + * Modular reductions resolve this issue. Although an individual modular reduction takes more time + * then an individual division, when performed in succession (with the same modulo), they're a lot faster. + * + * The two most commonly used modular reductions are Barrett and Montgomery reduction. Montgomery reduction, + * although faster, only works when the gcd of the modulo and of the base being used is 1. In RSA, when the + * base is a power of two, the modulo - a product of two primes - is always going to have a gcd of 1 (because + * the product of two odd numbers is odd), but what about when RSA isn't used? + * + * In contrast, Barrett reduction has no such constraint. As such, some bigint implementations perform a + * Barrett reduction after every operation in the modpow function. Others perform Barrett reductions when the + * modulo is even and Montgomery reductions when the modulo is odd. BigInteger.java's modPow method, however, + * uses a trick involving the Chinese Remainder Theorem to factor the even modulo into two numbers - one odd and + * the other, a power of two - and recombine them, later. This is the method that this modPow function uses. + * {@link http://islab.oregonstate.edu/papers/j34monex.pdf Montgomery Reduction with Even Modulus} elaborates. + */ + function modPow($e, $n) + { + $n = $this->bitmask !== false && $this->bitmask->compare($n) < 0 ? $this->bitmask : $n->abs(); + + if ($e->compare(new Math_BigInteger()) < 0) { + $e = $e->abs(); + + $temp = $this->modInverse($n); + if ($temp === false) { + return false; + } + + return $this->_normalize($temp->modPow($e, $n)); + } + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_powm($this->value, $e->value, $n->value); + + return $this->_normalize($temp); + case MATH_BIGINTEGER_MODE_BCMATH: + $temp = new Math_BigInteger(); + $temp->value = bcpowmod($this->value, $e->value, $n->value, 0); + + return $this->_normalize($temp); + } + + if ( empty($e->value) ) { + $temp = new Math_BigInteger(); + $temp->value = array(1); + return $this->_normalize($temp); + } + + if ( $e->value == array(1) ) { + list(, $temp) = $this->divide($n); + return $this->_normalize($temp); + } + + if ( $e->value == array(2) ) { + $temp = new Math_BigInteger(); + $temp->value = $this->_square($this->value); + list(, $temp) = $temp->divide($n); + return $this->_normalize($temp); + } + + return $this->_normalize($this->_slidingWindow($e, $n, MATH_BIGINTEGER_BARRETT)); + + // is the modulo odd? + if ( $n->value[0] & 1 ) { + return $this->_normalize($this->_slidingWindow($e, $n, MATH_BIGINTEGER_MONTGOMERY)); + } + // if it's not, it's even + + // find the lowest set bit (eg. the max pow of 2 that divides $n) + for ($i = 0; $i < count($n->value); ++$i) { + if ( $n->value[$i] ) { + $temp = decbin($n->value[$i]); + $j = strlen($temp) - strrpos($temp, '1') - 1; + $j+= 26 * $i; + break; + } + } + // at this point, 2^$j * $n/(2^$j) == $n + + $mod1 = $n->copy(); + $mod1->_rshift($j); + $mod2 = new Math_BigInteger(); + $mod2->value = array(1); + $mod2->_lshift($j); + + $part1 = ( $mod1->value != array(1) ) ? $this->_slidingWindow($e, $mod1, MATH_BIGINTEGER_MONTGOMERY) : new Math_BigInteger(); + $part2 = $this->_slidingWindow($e, $mod2, MATH_BIGINTEGER_POWEROF2); + + $y1 = $mod2->modInverse($mod1); + $y2 = $mod1->modInverse($mod2); + + $result = $part1->multiply($mod2); + $result = $result->multiply($y1); + + $temp = $part2->multiply($mod1); + $temp = $temp->multiply($y2); + + $result = $result->add($temp); + list(, $result) = $result->divide($n); + + return $this->_normalize($result); + } + + /** + * Performs modular exponentiation. + * + * Alias for Math_BigInteger::modPow() + * + * @param Math_BigInteger $e + * @param Math_BigInteger $n + * @return Math_BigInteger + * @access public + */ + function powMod($e, $n) + { + return $this->modPow($e, $n); + } + + /** + * Sliding Window k-ary Modular Exponentiation + * + * Based on {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=27 HAC 14.85} / + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=210 MPM 7.7}. In a departure from those algorithims, + * however, this function performs a modular reduction after every multiplication and squaring operation. + * As such, this function has the same preconditions that the reductions being used do. + * + * @param Math_BigInteger $e + * @param Math_BigInteger $n + * @param Integer $mode + * @return Math_BigInteger + * @access private + */ + function _slidingWindow($e, $n, $mode) + { + static $window_ranges = array(7, 25, 81, 241, 673, 1793); // from BigInteger.java's oddModPow function + //static $window_ranges = array(0, 7, 36, 140, 450, 1303, 3529); // from MPM 7.3.1 + + $e_value = $e->value; + $e_length = count($e_value) - 1; + $e_bits = decbin($e_value[$e_length]); + for ($i = $e_length - 1; $i >= 0; --$i) { + $e_bits.= str_pad(decbin($e_value[$i]), 26, '0', STR_PAD_LEFT); + } + + $e_length = strlen($e_bits); + + // calculate the appropriate window size. + // $window_size == 3 if $window_ranges is between 25 and 81, for example. + for ($i = 0, $window_size = 1; $e_length > $window_ranges[$i] && $i < count($window_ranges); ++$window_size, ++$i); + + $n_value = $n->value; + + // precompute $this^0 through $this^$window_size + $powers = array(); + $powers[1] = $this->_prepareReduce($this->value, $n_value, $mode); + $powers[2] = $this->_squareReduce($powers[1], $n_value, $mode); + + // we do every other number since substr($e_bits, $i, $j+1) (see below) is supposed to end + // in a 1. ie. it's supposed to be odd. + $temp = 1 << ($window_size - 1); + for ($i = 1; $i < $temp; ++$i) { + $i2 = $i << 1; + $powers[$i2 + 1] = $this->_multiplyReduce($powers[$i2 - 1], $powers[2], $n_value, $mode); + } + + $result = array(1); + $result = $this->_prepareReduce($result, $n_value, $mode); + + for ($i = 0; $i < $e_length; ) { + if ( !$e_bits[$i] ) { + $result = $this->_squareReduce($result, $n_value, $mode); + ++$i; + } else { + for ($j = $window_size - 1; $j > 0; --$j) { + if ( !empty($e_bits[$i + $j]) ) { + break; + } + } + + for ($k = 0; $k <= $j; ++$k) {// eg. the length of substr($e_bits, $i, $j+1) + $result = $this->_squareReduce($result, $n_value, $mode); + } + + $result = $this->_multiplyReduce($result, $powers[bindec(substr($e_bits, $i, $j + 1))], $n_value, $mode); + + $i+=$j + 1; + } + } + + $temp = new Math_BigInteger(); + $temp->value = $this->_reduce($result, $n_value, $mode); + + return $temp; + } + + /** + * Modular reduction + * + * For most $modes this will return the remainder. + * + * @see _slidingWindow() + * @access private + * @param Array $x + * @param Array $n + * @param Integer $mode + * @return Array + */ + function _reduce($x, $n, $mode) + { + switch ($mode) { + case MATH_BIGINTEGER_MONTGOMERY: + return $this->_montgomery($x, $n); + case MATH_BIGINTEGER_BARRETT: + return $this->_barrett($x, $n); + case MATH_BIGINTEGER_POWEROF2: + $lhs = new Math_BigInteger(); + $lhs->value = $x; + $rhs = new Math_BigInteger(); + $rhs->value = $n; + return $x->_mod2($n); + case MATH_BIGINTEGER_CLASSIC: + $lhs = new Math_BigInteger(); + $lhs->value = $x; + $rhs = new Math_BigInteger(); + $rhs->value = $n; + list(, $temp) = $lhs->divide($rhs); + return $temp->value; + case MATH_BIGINTEGER_NONE: + return $x; + default: + // an invalid $mode was provided + } + } + + /** + * Modular reduction preperation + * + * @see _slidingWindow() + * @access private + * @param Array $x + * @param Array $n + * @param Integer $mode + * @return Array + */ + function _prepareReduce($x, $n, $mode) + { + if ($mode == MATH_BIGINTEGER_MONTGOMERY) { + return $this->_prepMontgomery($x, $n); + } + return $this->_reduce($x, $n, $mode); + } + + /** + * Modular multiply + * + * @see _slidingWindow() + * @access private + * @param Array $x + * @param Array $y + * @param Array $n + * @param Integer $mode + * @return Array + */ + function _multiplyReduce($x, $y, $n, $mode) + { + if ($mode == MATH_BIGINTEGER_MONTGOMERY) { + return $this->_montgomeryMultiply($x, $y, $n); + } + $temp = $this->_multiply($x, false, $y, false); + return $this->_reduce($temp[MATH_BIGINTEGER_VALUE], $n, $mode); + } + + /** + * Modular square + * + * @see _slidingWindow() + * @access private + * @param Array $x + * @param Array $n + * @param Integer $mode + * @return Array + */ + function _squareReduce($x, $n, $mode) + { + if ($mode == MATH_BIGINTEGER_MONTGOMERY) { + return $this->_montgomeryMultiply($x, $x, $n); + } + return $this->_reduce($this->_square($x), $n, $mode); + } + + /** + * Modulos for Powers of Two + * + * Calculates $x%$n, where $n = 2**$e, for some $e. Since this is basically the same as doing $x & ($n-1), + * we'll just use this function as a wrapper for doing that. + * + * @see _slidingWindow() + * @access private + * @param Math_BigInteger + * @return Math_BigInteger + */ + function _mod2($n) + { + $temp = new Math_BigInteger(); + $temp->value = array(1); + return $this->bitwise_and($n->subtract($temp)); + } + + /** + * Barrett Modular Reduction + * + * See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=14 HAC 14.3.3} / + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=165 MPM 6.2.5} for more information. Modified slightly, + * so as not to require negative numbers (initially, this script didn't support negative numbers). + * + * Employs "folding", as described at + * {@link http://www.cosic.esat.kuleuven.be/publications/thesis-149.pdf#page=66 thesis-149.pdf#page=66}. To quote from + * it, "the idea [behind folding] is to find a value x' such that x (mod m) = x' (mod m), with x' being smaller than x." + * + * Unfortunately, the "Barrett Reduction with Folding" algorithm described in thesis-149.pdf is not, as written, all that + * usable on account of (1) its not using reasonable radix points as discussed in + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=162 MPM 6.2.2} and (2) the fact that, even with reasonable + * radix points, it only works when there are an even number of digits in the denominator. The reason for (2) is that + * (x >> 1) + (x >> 1) != x / 2 + x / 2. If x is even, they're the same, but if x is odd, they're not. See the in-line + * comments for details. + * + * @see _slidingWindow() + * @access private + * @param Array $n + * @param Array $m + * @return Array + */ + function _barrett($n, $m) + { + static $cache = array( + MATH_BIGINTEGER_VARIABLE => array(), + MATH_BIGINTEGER_DATA => array() + ); + + $m_length = count($m); + + // if ($this->_compare($n, $this->_square($m)) >= 0) { + if (count($n) > 2 * $m_length) { + $lhs = new Math_BigInteger(); + $rhs = new Math_BigInteger(); + $lhs->value = $n; + $rhs->value = $m; + list(, $temp) = $lhs->divide($rhs); + return $temp->value; + } + + // if (m.length >> 1) + 2 <= m.length then m is too small and n can't be reduced + if ($m_length < 5) { + return $this->_regularBarrett($n, $m); + } + + // n = 2 * m.length + + if ( ($key = array_search($m, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) { + $key = count($cache[MATH_BIGINTEGER_VARIABLE]); + $cache[MATH_BIGINTEGER_VARIABLE][] = $m; + + $lhs = new Math_BigInteger(); + $lhs_value = &$lhs->value; + $lhs_value = $this->_array_repeat(0, $m_length + ($m_length >> 1)); + $lhs_value[] = 1; + $rhs = new Math_BigInteger(); + $rhs->value = $m; + + list($u, $m1) = $lhs->divide($rhs); + $u = $u->value; + $m1 = $m1->value; + + $cache[MATH_BIGINTEGER_DATA][] = array( + 'u' => $u, // m.length >> 1 (technically (m.length >> 1) + 1) + 'm1'=> $m1 // m.length + ); + } else { + extract($cache[MATH_BIGINTEGER_DATA][$key]); + } + + $cutoff = $m_length + ($m_length >> 1); + $lsd = array_slice($n, 0, $cutoff); // m.length + (m.length >> 1) + $msd = array_slice($n, $cutoff); // m.length >> 1 + $lsd = $this->_trim($lsd); + $temp = $this->_multiply($msd, false, $m1, false); + $n = $this->_add($lsd, false, $temp[MATH_BIGINTEGER_VALUE], false); // m.length + (m.length >> 1) + 1 + + if ($m_length & 1) { + return $this->_regularBarrett($n[MATH_BIGINTEGER_VALUE], $m); + } + + // (m.length + (m.length >> 1) + 1) - (m.length - 1) == (m.length >> 1) + 2 + $temp = array_slice($n[MATH_BIGINTEGER_VALUE], $m_length - 1); + // if even: ((m.length >> 1) + 2) + (m.length >> 1) == m.length + 2 + // if odd: ((m.length >> 1) + 2) + (m.length >> 1) == (m.length - 1) + 2 == m.length + 1 + $temp = $this->_multiply($temp, false, $u, false); + // if even: (m.length + 2) - ((m.length >> 1) + 1) = m.length - (m.length >> 1) + 1 + // if odd: (m.length + 1) - ((m.length >> 1) + 1) = m.length - (m.length >> 1) + $temp = array_slice($temp[MATH_BIGINTEGER_VALUE], ($m_length >> 1) + 1); + // if even: (m.length - (m.length >> 1) + 1) + m.length = 2 * m.length - (m.length >> 1) + 1 + // if odd: (m.length - (m.length >> 1)) + m.length = 2 * m.length - (m.length >> 1) + $temp = $this->_multiply($temp, false, $m, false); + + // at this point, if m had an odd number of digits, we'd be subtracting a 2 * m.length - (m.length >> 1) digit + // number from a m.length + (m.length >> 1) + 1 digit number. ie. there'd be an extra digit and the while loop + // following this comment would loop a lot (hence our calling _regularBarrett() in that situation). + + $result = $this->_subtract($n[MATH_BIGINTEGER_VALUE], false, $temp[MATH_BIGINTEGER_VALUE], false); + + while ($this->_compare($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $m, false) >= 0) { + $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $m, false); + } + + return $result[MATH_BIGINTEGER_VALUE]; + } + + /** + * (Regular) Barrett Modular Reduction + * + * For numbers with more than four digits Math_BigInteger::_barrett() is faster. The difference between that and this + * is that this function does not fold the denominator into a smaller form. + * + * @see _slidingWindow() + * @access private + * @param Array $x + * @param Array $n + * @return Array + */ + function _regularBarrett($x, $n) + { + static $cache = array( + MATH_BIGINTEGER_VARIABLE => array(), + MATH_BIGINTEGER_DATA => array() + ); + + $n_length = count($n); + + if (count($x) > 2 * $n_length) { + $lhs = new Math_BigInteger(); + $rhs = new Math_BigInteger(); + $lhs->value = $x; + $rhs->value = $n; + list(, $temp) = $lhs->divide($rhs); + return $temp->value; + } + + if ( ($key = array_search($n, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) { + $key = count($cache[MATH_BIGINTEGER_VARIABLE]); + $cache[MATH_BIGINTEGER_VARIABLE][] = $n; + $lhs = new Math_BigInteger(); + $lhs_value = &$lhs->value; + $lhs_value = $this->_array_repeat(0, 2 * $n_length); + $lhs_value[] = 1; + $rhs = new Math_BigInteger(); + $rhs->value = $n; + list($temp, ) = $lhs->divide($rhs); // m.length + $cache[MATH_BIGINTEGER_DATA][] = $temp->value; + } + + // 2 * m.length - (m.length - 1) = m.length + 1 + $temp = array_slice($x, $n_length - 1); + // (m.length + 1) + m.length = 2 * m.length + 1 + $temp = $this->_multiply($temp, false, $cache[MATH_BIGINTEGER_DATA][$key], false); + // (2 * m.length + 1) - (m.length - 1) = m.length + 2 + $temp = array_slice($temp[MATH_BIGINTEGER_VALUE], $n_length + 1); + + // m.length + 1 + $result = array_slice($x, 0, $n_length + 1); + // m.length + 1 + $temp = $this->_multiplyLower($temp, false, $n, false, $n_length + 1); + // $temp == array_slice($temp->_multiply($temp, false, $n, false)->value, 0, $n_length + 1) + + if ($this->_compare($result, false, $temp[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_SIGN]) < 0) { + $corrector_value = $this->_array_repeat(0, $n_length + 1); + $corrector_value[] = 1; + $result = $this->_add($result, false, $corrector, false); + $result = $result[MATH_BIGINTEGER_VALUE]; + } + + // at this point, we're subtracting a number with m.length + 1 digits from another number with m.length + 1 digits + $result = $this->_subtract($result, false, $temp[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_SIGN]); + while ($this->_compare($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $n, false) > 0) { + $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $n, false); + } + + return $result[MATH_BIGINTEGER_VALUE]; + } + + /** + * Performs long multiplication up to $stop digits + * + * If you're going to be doing array_slice($product->value, 0, $stop), some cycles can be saved. + * + * @see _regularBarrett() + * @param Array $x_value + * @param Boolean $x_negative + * @param Array $y_value + * @param Boolean $y_negative + * @return Array + * @access private + */ + function _multiplyLower($x_value, $x_negative, $y_value, $y_negative, $stop) + { + $x_length = count($x_value); + $y_length = count($y_value); + + if ( !$x_length || !$y_length ) { // a 0 is being multiplied + return array( + MATH_BIGINTEGER_VALUE => array(), + MATH_BIGINTEGER_SIGN => false + ); + } + + if ( $x_length < $y_length ) { + $temp = $x_value; + $x_value = $y_value; + $y_value = $temp; + + $x_length = count($x_value); + $y_length = count($y_value); + } + + $product_value = $this->_array_repeat(0, $x_length + $y_length); + + // the following for loop could be removed if the for loop following it + // (the one with nested for loops) initially set $i to 0, but + // doing so would also make the result in one set of unnecessary adds, + // since on the outermost loops first pass, $product->value[$k] is going + // to always be 0 + + $carry = 0; + + for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0, $k = $i + $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0 + $carry = (int) ($temp / 0x4000000); + $product_value[$j] = (int) ($temp - 0x4000000 * $carry); + } + + if ($j < $stop) { + $product_value[$j] = $carry; + } + + // the above for loop is what the previous comment was talking about. the + // following for loop is the "one with nested for loops" + + for ($i = 1; $i < $y_length; ++$i) { + $carry = 0; + + for ($j = 0, $k = $i; $j < $x_length && $k < $stop; ++$j, ++$k) { + $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry; + $carry = (int) ($temp / 0x4000000); + $product_value[$k] = (int) ($temp - 0x4000000 * $carry); + } + + if ($k < $stop) { + $product_value[$k] = $carry; + } + } + + return array( + MATH_BIGINTEGER_VALUE => $this->_trim($product_value), + MATH_BIGINTEGER_SIGN => $x_negative != $y_negative + ); + } + + /** + * Montgomery Modular Reduction + * + * ($x->_prepMontgomery($n))->_montgomery($n) yields $x % $n. + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=170 MPM 6.3} provides insights on how this can be + * improved upon (basically, by using the comba method). gcd($n, 2) must be equal to one for this function + * to work correctly. + * + * @see _prepMontgomery() + * @see _slidingWindow() + * @access private + * @param Array $x + * @param Array $n + * @return Array + */ + function _montgomery($x, $n) + { + static $cache = array( + MATH_BIGINTEGER_VARIABLE => array(), + MATH_BIGINTEGER_DATA => array() + ); + + if ( ($key = array_search($n, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) { + $key = count($cache[MATH_BIGINTEGER_VARIABLE]); + $cache[MATH_BIGINTEGER_VARIABLE][] = $x; + $cache[MATH_BIGINTEGER_DATA][] = $this->_modInverse67108864($n); + } + + $k = count($n); + + $result = array(MATH_BIGINTEGER_VALUE => $x); + + for ($i = 0; $i < $k; ++$i) { + $temp = $result[MATH_BIGINTEGER_VALUE][$i] * $cache[MATH_BIGINTEGER_DATA][$key]; + $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000))); + $temp = $this->_regularMultiply(array($temp), $n); + $temp = array_merge($this->_array_repeat(0, $i), $temp); + $result = $this->_add($result[MATH_BIGINTEGER_VALUE], false, $temp, false); + } + + $result[MATH_BIGINTEGER_VALUE] = array_slice($result[MATH_BIGINTEGER_VALUE], $k); + + if ($this->_compare($result, false, $n, false) >= 0) { + $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], false, $n, false); + } + + return $result[MATH_BIGINTEGER_VALUE]; + } + + /** + * Montgomery Multiply + * + * Interleaves the montgomery reduction and long multiplication algorithms together as described in + * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=13 HAC 14.36} + * + * @see _prepMontgomery() + * @see _montgomery() + * @access private + * @param Array $x + * @param Array $y + * @param Array $m + * @return Array + */ + function _montgomeryMultiply($x, $y, $m) + { + $temp = $this->_multiply($x, false, $y, false); + return $this->_montgomery($temp[MATH_BIGINTEGER_VALUE], $m); + + static $cache = array( + MATH_BIGINTEGER_VARIABLE => array(), + MATH_BIGINTEGER_DATA => array() + ); + + if ( ($key = array_search($m, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) { + $key = count($cache[MATH_BIGINTEGER_VARIABLE]); + $cache[MATH_BIGINTEGER_VARIABLE][] = $m; + $cache[MATH_BIGINTEGER_DATA][] = $this->_modInverse67108864($m); + } + + $n = max(count($x), count($y), count($m)); + $x = array_pad($x, $n, 0); + $y = array_pad($y, $n, 0); + $m = array_pad($m, $n, 0); + $a = array(MATH_BIGINTEGER_VALUE => $this->_array_repeat(0, $n + 1)); + for ($i = 0; $i < $n; ++$i) { + $temp = $a[MATH_BIGINTEGER_VALUE][0] + $x[$i] * $y[0]; + $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000))); + $temp = $temp * $cache[MATH_BIGINTEGER_DATA][$key]; + $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000))); + $temp = $this->_add($this->_regularMultiply(array($x[$i]), $y), false, $this->_regularMultiply(array($temp), $m), false); + $a = $this->_add($a[MATH_BIGINTEGER_VALUE], false, $temp[MATH_BIGINTEGER_VALUE], false); + $a[MATH_BIGINTEGER_VALUE] = array_slice($a[MATH_BIGINTEGER_VALUE], 1); + } + if ($this->_compare($a[MATH_BIGINTEGER_VALUE], false, $m, false) >= 0) { + $a = $this->_subtract($a[MATH_BIGINTEGER_VALUE], false, $m, false); + } + return $a[MATH_BIGINTEGER_VALUE]; + } + + /** + * Prepare a number for use in Montgomery Modular Reductions + * + * @see _montgomery() + * @see _slidingWindow() + * @access private + * @param Array $x + * @param Array $n + * @return Array + */ + function _prepMontgomery($x, $n) + { + $lhs = new Math_BigInteger(); + $lhs->value = array_merge($this->_array_repeat(0, count($n)), $x); + $rhs = new Math_BigInteger(); + $rhs->value = $n; + + list(, $temp) = $lhs->divide($rhs); + return $temp->value; + } + + /** + * Modular Inverse of a number mod 2**26 (eg. 67108864) + * + * Based off of the bnpInvDigit function implemented and justified in the following URL: + * + * {@link http://www-cs-students.stanford.edu/~tjw/jsbn/jsbn.js} + * + * The following URL provides more info: + * + * {@link http://groups.google.com/group/sci.crypt/msg/7a137205c1be7d85} + * + * As for why we do all the bitmasking... strange things can happen when converting from floats to ints. For + * instance, on some computers, var_dump((int) -4294967297) yields int(-1) and on others, it yields + * int(-2147483648). To avoid problems stemming from this, we use bitmasks to guarantee that ints aren't + * auto-converted to floats. The outermost bitmask is present because without it, there's no guarantee that + * the "residue" returned would be the so-called "common residue". We use fmod, in the last step, because the + * maximum possible $x is 26 bits and the maximum $result is 16 bits. Thus, we have to be able to handle up to + * 40 bits, which only 64-bit floating points will support. + * + * Thanks to Pedro Gimeno Fortea for input! + * + * @see _montgomery() + * @access private + * @param Array $x + * @return Integer + */ + function _modInverse67108864($x) // 2**26 == 67108864 + { + $x = -$x[0]; + $result = $x & 0x3; // x**-1 mod 2**2 + $result = ($result * (2 - $x * $result)) & 0xF; // x**-1 mod 2**4 + $result = ($result * (2 - ($x & 0xFF) * $result)) & 0xFF; // x**-1 mod 2**8 + $result = ($result * ((2 - ($x & 0xFFFF) * $result) & 0xFFFF)) & 0xFFFF; // x**-1 mod 2**16 + $result = fmod($result * (2 - fmod($x * $result, 0x4000000)), 0x4000000); // x**-1 mod 2**26 + return $result & 0x3FFFFFF; + } + + /** + * Calculates modular inverses. + * + * Say you have (30 mod 17 * x mod 17) mod 17 == 1. x can be found using modular inverses. + * + * Here's an example: + * + * modInverse($b); + * echo $c->toString(); // outputs 4 + * + * echo "\r\n"; + * + * $d = $a->multiply($c); + * list(, $d) = $d->divide($b); + * echo $d; // outputs 1 (as per the definition of modular inverse) + * ?> + * + * + * @param Math_BigInteger $n + * @return mixed false, if no modular inverse exists, Math_BigInteger, otherwise. + * @access public + * @internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=21 HAC 14.64} for more information. + */ + function modInverse($n) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_invert($this->value, $n->value); + + return ( $temp->value === false ) ? false : $this->_normalize($temp); + } + + static $zero, $one; + if (!isset($zero)) { + $zero = new Math_BigInteger(); + $one = new Math_BigInteger(1); + } + + // $x mod $n == $x mod -$n. + $n = $n->abs(); + + if ($this->compare($zero) < 0) { + $temp = $this->abs(); + $temp = $temp->modInverse($n); + return $negated === false ? false : $this->_normalize($n->subtract($temp)); + } + + extract($this->extendedGCD($n)); + + if (!$gcd->equals($one)) { + return false; + } + + $x = $x->compare($zero) < 0 ? $x->add($n) : $x; + + return $this->compare($zero) < 0 ? $this->_normalize($n->subtract($x)) : $this->_normalize($x); + } + + /** + * Calculates the greatest common divisor and Bézout's identity. + * + * Say you have 693 and 609. The GCD is 21. Bézout's identity states that there exist integers x and y such that + * 693*x + 609*y == 21. In point of fact, there are actually an infinite number of x and y combinations and which + * combination is returned is dependant upon which mode is in use. See + * {@link http://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity Bézout's identity - Wikipedia} for more information. + * + * Here's an example: + * + * extendedGCD($b)); + * + * echo $gcd->toString() . "\r\n"; // outputs 21 + * echo $a->toString() * $x->toString() + $b->toString() * $y->toString(); // outputs 21 + * ?> + * + * + * @param Math_BigInteger $n + * @return Math_BigInteger + * @access public + * @internal Calculates the GCD using the binary xGCD algorithim described in + * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=19 HAC 14.61}. As the text above 14.61 notes, + * the more traditional algorithim requires "relatively costly multiple-precision divisions". + */ + function extendedGCD($n) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + extract(gmp_gcdext($this->value, $n->value)); + + return array( + 'gcd' => $this->_normalize(new Math_BigInteger($g)), + 'x' => $this->_normalize(new Math_BigInteger($s)), + 'y' => $this->_normalize(new Math_BigInteger($t)) + ); + case MATH_BIGINTEGER_MODE_BCMATH: + // it might be faster to use the binary xGCD algorithim here, as well, but (1) that algorithim works + // best when the base is a power of 2 and (2) i don't think it'd make much difference, anyway. as is, + // the basic extended euclidean algorithim is what we're using. + + $u = $this->value; + $v = $n->value; + + $a = '1'; + $b = '0'; + $c = '0'; + $d = '1'; + + while (bccomp($v, '0', 0) != 0) { + $q = bcdiv($u, $v, 0); + + $temp = $u; + $u = $v; + $v = bcsub($temp, bcmul($v, $q, 0), 0); + + $temp = $a; + $a = $c; + $c = bcsub($temp, bcmul($a, $q, 0), 0); + + $temp = $b; + $b = $d; + $d = bcsub($temp, bcmul($b, $q, 0), 0); + } + + return array( + 'gcd' => $this->_normalize(new Math_BigInteger($u)), + 'x' => $this->_normalize(new Math_BigInteger($a)), + 'y' => $this->_normalize(new Math_BigInteger($b)) + ); + } + + $y = $n->copy(); + $x = $this->copy(); + $g = new Math_BigInteger(); + $g->value = array(1); + + while ( !(($x->value[0] & 1)|| ($y->value[0] & 1)) ) { + $x->_rshift(1); + $y->_rshift(1); + $g->_lshift(1); + } + + $u = $x->copy(); + $v = $y->copy(); + + $a = new Math_BigInteger(); + $b = new Math_BigInteger(); + $c = new Math_BigInteger(); + $d = new Math_BigInteger(); + + $a->value = $d->value = $g->value = array(1); + $b->value = $c->value = array(); + + while ( !empty($u->value) ) { + while ( !($u->value[0] & 1) ) { + $u->_rshift(1); + if ( (!empty($a->value) && ($a->value[0] & 1)) || (!empty($b->value) && ($b->value[0] & 1)) ) { + $a = $a->add($y); + $b = $b->subtract($x); + } + $a->_rshift(1); + $b->_rshift(1); + } + + while ( !($v->value[0] & 1) ) { + $v->_rshift(1); + if ( (!empty($d->value) && ($d->value[0] & 1)) || (!empty($c->value) && ($c->value[0] & 1)) ) { + $c = $c->add($y); + $d = $d->subtract($x); + } + $c->_rshift(1); + $d->_rshift(1); + } + + if ($u->compare($v) >= 0) { + $u = $u->subtract($v); + $a = $a->subtract($c); + $b = $b->subtract($d); + } else { + $v = $v->subtract($u); + $c = $c->subtract($a); + $d = $d->subtract($b); + } + } + + return array( + 'gcd' => $this->_normalize($g->multiply($v)), + 'x' => $this->_normalize($c), + 'y' => $this->_normalize($d) + ); + } + + /** + * Calculates the greatest common divisor + * + * Say you have 693 and 609. The GCD is 21. + * + * Here's an example: + * + * extendedGCD($b); + * + * echo $gcd->toString() . "\r\n"; // outputs 21 + * ?> + * + * + * @param Math_BigInteger $n + * @return Math_BigInteger + * @access public + */ + function gcd($n) + { + extract($this->extendedGCD($n)); + return $gcd; + } + + /** + * Absolute value. + * + * @return Math_BigInteger + * @access public + */ + function abs() + { + $temp = new Math_BigInteger(); + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp->value = gmp_abs($this->value); + break; + case MATH_BIGINTEGER_MODE_BCMATH: + $temp->value = (bccomp($this->value, '0', 0) < 0) ? substr($this->value, 1) : $this->value; + break; + default: + $temp->value = $this->value; + } + + return $temp; + } + + /** + * Compares two numbers. + * + * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite. The reason for this is + * demonstrated thusly: + * + * $x > $y: $x->compare($y) > 0 + * $x < $y: $x->compare($y) < 0 + * $x == $y: $x->compare($y) == 0 + * + * Note how the same comparison operator is used. If you want to test for equality, use $x->equals($y). + * + * @param Math_BigInteger $x + * @return Integer < 0 if $this is less than $x; > 0 if $this is greater than $x, and 0 if they are equal. + * @access public + * @see equals() + * @internal Could return $this->subtract($x), but that's not as fast as what we do do. + */ + function compare($y) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + return gmp_cmp($this->value, $y->value); + case MATH_BIGINTEGER_MODE_BCMATH: + return bccomp($this->value, $y->value, 0); + } + + return $this->_compare($this->value, $this->is_negative, $y->value, $y->is_negative); + } + + /** + * Compares two numbers. + * + * @param Array $x_value + * @param Boolean $x_negative + * @param Array $y_value + * @param Boolean $y_negative + * @return Integer + * @see compare() + * @access private + */ + function _compare($x_value, $x_negative, $y_value, $y_negative) + { + if ( $x_negative != $y_negative ) { + return ( !$x_negative && $y_negative ) ? 1 : -1; + } + + $result = $x_negative ? -1 : 1; + + if ( count($x_value) != count($y_value) ) { + return ( count($x_value) > count($y_value) ) ? $result : -$result; + } + $size = max(count($x_value), count($y_value)); + + $x_value = array_pad($x_value, $size, 0); + $y_value = array_pad($y_value, $size, 0); + + for ($i = count($x_value) - 1; $i >= 0; --$i) { + if ($x_value[$i] != $y_value[$i]) { + return ( $x_value[$i] > $y_value[$i] ) ? $result : -$result; + } + } + + return 0; + } + + /** + * Tests the equality of two numbers. + * + * If you need to see if one number is greater than or less than another number, use Math_BigInteger::compare() + * + * @param Math_BigInteger $x + * @return Boolean + * @access public + * @see compare() + */ + function equals($x) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + return gmp_cmp($this->value, $x->value) == 0; + default: + return $this->value === $x->value && $this->is_negative == $x->is_negative; + } + } + + /** + * Set Precision + * + * Some bitwise operations give different results depending on the precision being used. Examples include left + * shift, not, and rotates. + * + * @param Math_BigInteger $x + * @access public + * @return Math_BigInteger + */ + function setPrecision($bits) + { + $this->precision = $bits; + if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_BCMATH ) { + $this->bitmask = new Math_BigInteger(chr((1 << ($bits & 0x7)) - 1) . str_repeat(chr(0xFF), $bits >> 3), 256); + } else { + $this->bitmask = new Math_BigInteger(bcpow('2', $bits, 0)); + } + + $temp = $this->_normalize($this); + $this->value = $temp->value; + } + + /** + * Logical And + * + * @param Math_BigInteger $x + * @access public + * @internal Implemented per a request by Lluis Pamies i Juarez + * @return Math_BigInteger + */ + function bitwise_and($x) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_and($this->value, $x->value); + + return $this->_normalize($temp); + case MATH_BIGINTEGER_MODE_BCMATH: + $left = $this->toBytes(); + $right = $x->toBytes(); + + $length = max(strlen($left), strlen($right)); + + $left = str_pad($left, $length, chr(0), STR_PAD_LEFT); + $right = str_pad($right, $length, chr(0), STR_PAD_LEFT); + + return $this->_normalize(new Math_BigInteger($left & $right, 256)); + } + + $result = $this->copy(); + + $length = min(count($x->value), count($this->value)); + + $result->value = array_slice($result->value, 0, $length); + + for ($i = 0; $i < $length; ++$i) { + $result->value[$i] = $result->value[$i] & $x->value[$i]; + } + + return $this->_normalize($result); + } + + /** + * Logical Or + * + * @param Math_BigInteger $x + * @access public + * @internal Implemented per a request by Lluis Pamies i Juarez + * @return Math_BigInteger + */ + function bitwise_or($x) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_or($this->value, $x->value); + + return $this->_normalize($temp); + case MATH_BIGINTEGER_MODE_BCMATH: + $left = $this->toBytes(); + $right = $x->toBytes(); + + $length = max(strlen($left), strlen($right)); + + $left = str_pad($left, $length, chr(0), STR_PAD_LEFT); + $right = str_pad($right, $length, chr(0), STR_PAD_LEFT); + + return $this->_normalize(new Math_BigInteger($left | $right, 256)); + } + + $length = max(count($this->value), count($x->value)); + $result = $this->copy(); + $result->value = array_pad($result->value, 0, $length); + $x->value = array_pad($x->value, 0, $length); + + for ($i = 0; $i < $length; ++$i) { + $result->value[$i] = $this->value[$i] | $x->value[$i]; + } + + return $this->_normalize($result); + } + + /** + * Logical Exclusive-Or + * + * @param Math_BigInteger $x + * @access public + * @internal Implemented per a request by Lluis Pamies i Juarez + * @return Math_BigInteger + */ + function bitwise_xor($x) + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + $temp = new Math_BigInteger(); + $temp->value = gmp_xor($this->value, $x->value); + + return $this->_normalize($temp); + case MATH_BIGINTEGER_MODE_BCMATH: + $left = $this->toBytes(); + $right = $x->toBytes(); + + $length = max(strlen($left), strlen($right)); + + $left = str_pad($left, $length, chr(0), STR_PAD_LEFT); + $right = str_pad($right, $length, chr(0), STR_PAD_LEFT); + + return $this->_normalize(new Math_BigInteger($left ^ $right, 256)); + } + + $length = max(count($this->value), count($x->value)); + $result = $this->copy(); + $result->value = array_pad($result->value, 0, $length); + $x->value = array_pad($x->value, 0, $length); + + for ($i = 0; $i < $length; ++$i) { + $result->value[$i] = $this->value[$i] ^ $x->value[$i]; + } + + return $this->_normalize($result); + } + + /** + * Logical Not + * + * @access public + * @internal Implemented per a request by Lluis Pamies i Juarez + * @return Math_BigInteger + */ + function bitwise_not() + { + // calculuate "not" without regard to $this->precision + // (will always result in a smaller number. ie. ~1 isn't 1111 1110 - it's 0) + $temp = $this->toBytes(); + $pre_msb = decbin(ord($temp[0])); + $temp = ~$temp; + $msb = decbin(ord($temp[0])); + if (strlen($msb) == 8) { + $msb = substr($msb, strpos($msb, '0')); + } + $temp[0] = chr(bindec($msb)); + + // see if we need to add extra leading 1's + $current_bits = strlen($pre_msb) + 8 * strlen($temp) - 8; + $new_bits = $this->precision - $current_bits; + if ($new_bits <= 0) { + return $this->_normalize(new Math_BigInteger($temp, 256)); + } + + // generate as many leading 1's as we need to. + $leading_ones = chr((1 << ($new_bits & 0x7)) - 1) . str_repeat(chr(0xFF), $new_bits >> 3); + $this->_base256_lshift($leading_ones, $current_bits); + + $temp = str_pad($temp, ceil($this->bits / 8), chr(0), STR_PAD_LEFT); + + return $this->_normalize(new Math_BigInteger($leading_ones | $temp, 256)); + } + + /** + * Logical Right Shift + * + * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift. + * + * @param Integer $shift + * @return Math_BigInteger + * @access public + * @internal The only version that yields any speed increases is the internal version. + */ + function bitwise_rightShift($shift) + { + $temp = new Math_BigInteger(); + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + static $two; + + if (!isset($two)) { + $two = gmp_init('2'); + } + + $temp->value = gmp_div_q($this->value, gmp_pow($two, $shift)); + + break; + case MATH_BIGINTEGER_MODE_BCMATH: + $temp->value = bcdiv($this->value, bcpow('2', $shift, 0), 0); + + break; + default: // could just replace _lshift with this, but then all _lshift() calls would need to be rewritten + // and I don't want to do that... + $temp->value = $this->value; + $temp->_rshift($shift); + } + + return $this->_normalize($temp); + } + + /** + * Logical Left Shift + * + * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift. + * + * @param Integer $shift + * @return Math_BigInteger + * @access public + * @internal The only version that yields any speed increases is the internal version. + */ + function bitwise_leftShift($shift) + { + $temp = new Math_BigInteger(); + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + static $two; + + if (!isset($two)) { + $two = gmp_init('2'); + } + + $temp->value = gmp_mul($this->value, gmp_pow($two, $shift)); + + break; + case MATH_BIGINTEGER_MODE_BCMATH: + $temp->value = bcmul($this->value, bcpow('2', $shift, 0), 0); + + break; + default: // could just replace _rshift with this, but then all _lshift() calls would need to be rewritten + // and I don't want to do that... + $temp->value = $this->value; + $temp->_lshift($shift); + } + + return $this->_normalize($temp); + } + + /** + * Logical Left Rotate + * + * Instead of the top x bits being dropped they're appended to the shifted bit string. + * + * @param Integer $shift + * @return Math_BigInteger + * @access public + */ + function bitwise_leftRotate($shift) + { + $bits = $this->toBytes(); + + if ($this->precision > 0) { + $precision = $this->precision; + if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) { + $mask = $this->bitmask->subtract(new Math_BigInteger(1)); + $mask = $mask->toBytes(); + } else { + $mask = $this->bitmask->toBytes(); + } + } else { + $temp = ord($bits[0]); + for ($i = 0; $temp >> $i; ++$i); + $precision = 8 * strlen($bits) - 8 + $i; + $mask = chr((1 << ($precision & 0x7)) - 1) . str_repeat(chr(0xFF), $precision >> 3); + } + + if ($shift < 0) { + $shift+= $precision; + } + $shift%= $precision; + + if (!$shift) { + return $this->copy(); + } + + $left = $this->bitwise_leftShift($shift); + $left = $left->bitwise_and(new Math_BigInteger($mask, 256)); + $right = $this->bitwise_rightShift($precision - $shift); + $result = MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_BCMATH ? $left->bitwise_or($right) : $left->add($right); + return $this->_normalize($result); + } + + /** + * Logical Right Rotate + * + * Instead of the bottom x bits being dropped they're prepended to the shifted bit string. + * + * @param Integer $shift + * @return Math_BigInteger + * @access public + */ + function bitwise_rightRotate($shift) + { + return $this->bitwise_leftRotate(-$shift); + } + + /** + * Set random number generator function + * + * $generator should be the name of a random generating function whose first parameter is the minimum + * value and whose second parameter is the maximum value. If this function needs to be seeded, it should + * be seeded prior to calling Math_BigInteger::random() or Math_BigInteger::randomPrime() + * + * If the random generating function is not explicitly set, it'll be assumed to be mt_rand(). + * + * @see random() + * @see randomPrime() + * @param optional String $generator + * @access public + */ + function setRandomGenerator($generator) + { + $this->generator = $generator; + } + + /** + * Generate a random number + * + * @param optional Integer $min + * @param optional Integer $max + * @return Math_BigInteger + * @access public + */ + function random($min = false, $max = false) + { + if ($min === false) { + $min = new Math_BigInteger(0); + } + + if ($max === false) { + $max = new Math_BigInteger(0x7FFFFFFF); + } + + $compare = $max->compare($min); + + if (!$compare) { + return $this->_normalize($min); + } else if ($compare < 0) { + // if $min is bigger then $max, swap $min and $max + $temp = $max; + $max = $min; + $min = $temp; + } + + $generator = $this->generator; + + $max = $max->subtract($min); + $max = ltrim($max->toBytes(), chr(0)); + $size = strlen($max) - 1; + $random = ''; + + $bytes = $size & 1; + for ($i = 0; $i < $bytes; ++$i) { + $random.= chr($generator(0, 255)); + } + + $blocks = $size >> 1; + for ($i = 0; $i < $blocks; ++$i) { + // mt_rand(-2147483648, 0x7FFFFFFF) always produces -2147483648 on some systems + $random.= pack('n', $generator(0, 0xFFFF)); + } + + $temp = new Math_BigInteger($random, 256); + if ($temp->compare(new Math_BigInteger(substr($max, 1), 256)) > 0) { + $random = chr($generator(0, ord($max[0]) - 1)) . $random; + } else { + $random = chr($generator(0, ord($max[0]) )) . $random; + } + + $random = new Math_BigInteger($random, 256); + + return $this->_normalize($random->add($min)); + } + + /** + * Generate a random prime number. + * + * If there's not a prime within the given range, false will be returned. If more than $timeout seconds have elapsed, + * give up and return false. + * + * @param optional Integer $min + * @param optional Integer $max + * @param optional Integer $timeout + * @return Math_BigInteger + * @access public + * @internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=15 HAC 4.44}. + */ + function randomPrime($min = false, $max = false, $timeout = false) + { + $compare = $max->compare($min); + + if (!$compare) { + return $min; + } else if ($compare < 0) { + // if $min is bigger then $max, swap $min and $max + $temp = $max; + $max = $min; + $min = $temp; + } + + // gmp_nextprime() requires PHP 5 >= 5.2.0 per . + if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_GMP && function_exists('gmp_nextprime') ) { + // we don't rely on Math_BigInteger::random()'s min / max when gmp_nextprime() is being used since this function + // does its own checks on $max / $min when gmp_nextprime() is used. When gmp_nextprime() is not used, however, + // the same $max / $min checks are not performed. + if ($min === false) { + $min = new Math_BigInteger(0); + } + + if ($max === false) { + $max = new Math_BigInteger(0x7FFFFFFF); + } + + $x = $this->random($min, $max); + + $x->value = gmp_nextprime($x->value); + + if ($x->compare($max) <= 0) { + return $x; + } + + $x->value = gmp_nextprime($min->value); + + if ($x->compare($max) <= 0) { + return $x; + } + + return false; + } + + static $one, $two; + if (!isset($one)) { + $one = new Math_BigInteger(1); + $two = new Math_BigInteger(2); + } + + $start = time(); + + $x = $this->random($min, $max); + if ($x->equals($two)) { + return $x; + } + + $x->_make_odd(); + if ($x->compare($max) > 0) { + // if $x > $max then $max is even and if $min == $max then no prime number exists between the specified range + if ($min->equals($max)) { + return false; + } + $x = $min->copy(); + $x->_make_odd(); + } + + $initial_x = $x->copy(); + + while (true) { + if ($timeout !== false && time() - $start > $timeout) { + return false; + } + + if ($x->isPrime()) { + return $x; + } + + $x = $x->add($two); + + if ($x->compare($max) > 0) { + $x = $min->copy(); + if ($x->equals($two)) { + return $x; + } + $x->_make_odd(); + } + + if ($x->equals($initial_x)) { + return false; + } + } + } + + /** + * Make the current number odd + * + * If the current number is odd it'll be unchanged. If it's even, one will be added to it. + * + * @see randomPrime() + * @access private + */ + function _make_odd() + { + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + gmp_setbit($this->value, 0); + break; + case MATH_BIGINTEGER_MODE_BCMATH: + if ($this->value[strlen($this->value) - 1] % 2 == 0) { + $this->value = bcadd($this->value, '1'); + } + break; + default: + $this->value[0] |= 1; + } + } + + /** + * Checks a numer to see if it's prime + * + * Assuming the $t parameter is not set, this function has an error rate of 2**-80. The main motivation for the + * $t parameter is distributability. Math_BigInteger::randomPrime() can be distributed accross multiple pageloads + * on a website instead of just one. + * + * @param optional Integer $t + * @return Boolean + * @access public + * @internal Uses the + * {@link http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test Miller-Rabin primality test}. See + * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=8 HAC 4.24}. + */ + function isPrime($t = false) + { + $length = strlen($this->toBytes()); + + if (!$t) { + // see HAC 4.49 "Note (controlling the error probability)" + if ($length >= 163) { $t = 2; } // floor(1300 / 8) + else if ($length >= 106) { $t = 3; } // floor( 850 / 8) + else if ($length >= 81 ) { $t = 4; } // floor( 650 / 8) + else if ($length >= 68 ) { $t = 5; } // floor( 550 / 8) + else if ($length >= 56 ) { $t = 6; } // floor( 450 / 8) + else if ($length >= 50 ) { $t = 7; } // floor( 400 / 8) + else if ($length >= 43 ) { $t = 8; } // floor( 350 / 8) + else if ($length >= 37 ) { $t = 9; } // floor( 300 / 8) + else if ($length >= 31 ) { $t = 12; } // floor( 250 / 8) + else if ($length >= 25 ) { $t = 15; } // floor( 200 / 8) + else if ($length >= 18 ) { $t = 18; } // floor( 150 / 8) + else { $t = 27; } + } + + // ie. gmp_testbit($this, 0) + // ie. isEven() or !isOdd() + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + return gmp_prob_prime($this->value, $t) != 0; + case MATH_BIGINTEGER_MODE_BCMATH: + if ($this->value === '2') { + return true; + } + if ($this->value[strlen($this->value) - 1] % 2 == 0) { + return false; + } + break; + default: + if ($this->value == array(2)) { + return true; + } + if (~$this->value[0] & 1) { + return false; + } + } + + static $primes, $zero, $one, $two; + + if (!isset($primes)) { + $primes = array( + 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, + 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, + 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, + 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, + 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, + 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, + 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, + 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, + 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, + 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, + 953, 967, 971, 977, 983, 991, 997 + ); + + if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL ) { + for ($i = 0; $i < count($primes); ++$i) { + $primes[$i] = new Math_BigInteger($primes[$i]); + } + } + + $zero = new Math_BigInteger(); + $one = new Math_BigInteger(1); + $two = new Math_BigInteger(2); + } + + if ($this->equals($one)) { + return false; + } + + // see HAC 4.4.1 "Random search for probable primes" + if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL ) { + foreach ($primes as $prime) { + list(, $r) = $this->divide($prime); + if ($r->equals($zero)) { + return $this->equals($prime); + } + } + } else { + $value = $this->value; + foreach ($primes as $prime) { + list(, $r) = $this->_divide_digit($value, $prime); + if (!$r) { + return count($value) == 1 && $value[0] == $prime; + } + } + } + + $n = $this->copy(); + $n_1 = $n->subtract($one); + $n_2 = $n->subtract($two); + + $r = $n_1->copy(); + $r_value = $r->value; + // ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s)); + if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) { + $s = 0; + // if $n was 1, $r would be 0 and this would be an infinite loop, hence our $this->equals($one) check earlier + while ($r->value[strlen($r->value) - 1] % 2 == 0) { + $r->value = bcdiv($r->value, '2', 0); + ++$s; + } + } else { + for ($i = 0, $r_length = count($r_value); $i < $r_length; ++$i) { + $temp = ~$r_value[$i] & 0xFFFFFF; + for ($j = 1; ($temp >> $j) & 1; ++$j); + if ($j != 25) { + break; + } + } + $s = 26 * $i + $j - 1; + $r->_rshift($s); + } + + for ($i = 0; $i < $t; ++$i) { + $a = $this->random($two, $n_2); + $y = $a->modPow($r, $n); + + if (!$y->equals($one) && !$y->equals($n_1)) { + for ($j = 1; $j < $s && !$y->equals($n_1); ++$j) { + $y = $y->modPow($two, $n); + if ($y->equals($one)) { + return false; + } + } + + if (!$y->equals($n_1)) { + return false; + } + } + } + return true; + } + + /** + * Logical Left Shift + * + * Shifts BigInteger's by $shift bits. + * + * @param Integer $shift + * @access private + */ + function _lshift($shift) + { + if ( $shift == 0 ) { + return; + } + + $num_digits = (int) ($shift / 26); + $shift %= 26; + $shift = 1 << $shift; + + $carry = 0; + + for ($i = 0; $i < count($this->value); ++$i) { + $temp = $this->value[$i] * $shift + $carry; + $carry = (int) ($temp / 0x4000000); + $this->value[$i] = (int) ($temp - $carry * 0x4000000); + } + + if ( $carry ) { + $this->value[] = $carry; + } + + while ($num_digits--) { + array_unshift($this->value, 0); + } + } + + /** + * Logical Right Shift + * + * Shifts BigInteger's by $shift bits. + * + * @param Integer $shift + * @access private + */ + function _rshift($shift) + { + if ($shift == 0) { + return; + } + + $num_digits = (int) ($shift / 26); + $shift %= 26; + $carry_shift = 26 - $shift; + $carry_mask = (1 << $shift) - 1; + + if ( $num_digits ) { + $this->value = array_slice($this->value, $num_digits); + } + + $carry = 0; + + for ($i = count($this->value) - 1; $i >= 0; --$i) { + $temp = $this->value[$i] >> $shift | $carry; + $carry = ($this->value[$i] & $carry_mask) << $carry_shift; + $this->value[$i] = $temp; + } + + $this->value = $this->_trim($this->value); + } + + /** + * Normalize + * + * Removes leading zeros and truncates (if necessary) to maintain the appropriate precision + * + * @param Math_BigInteger + * @return Math_BigInteger + * @see _trim() + * @access private + */ + function _normalize($result) + { + $result->precision = $this->precision; + $result->bitmask = $this->bitmask; + + switch ( MATH_BIGINTEGER_MODE ) { + case MATH_BIGINTEGER_MODE_GMP: + if (!empty($result->bitmask->value)) { + $result->value = gmp_and($result->value, $result->bitmask->value); + } + + return $result; + case MATH_BIGINTEGER_MODE_BCMATH: + if (!empty($result->bitmask->value)) { + $result->value = bcmod($result->value, $result->bitmask->value); + } + + return $result; + } + + $value = &$result->value; + + if ( !count($value) ) { + return $result; + } + + $value = $this->_trim($value); + + if (!empty($result->bitmask->value)) { + $length = min(count($value), count($this->bitmask->value)); + $value = array_slice($value, 0, $length); + + for ($i = 0; $i < $length; ++$i) { + $value[$i] = $value[$i] & $this->bitmask->value[$i]; + } + } + + return $result; + } + + /** + * Trim + * + * Removes leading zeros + * + * @return Math_BigInteger + * @access private + */ + function _trim($value) + { + for ($i = count($value) - 1; $i >= 0; --$i) { + if ( $value[$i] ) { + break; + } + unset($value[$i]); + } + + return $value; + } + + /** + * Array Repeat + * + * @param $input Array + * @param $multiplier mixed + * @return Array + * @access private + */ + function _array_repeat($input, $multiplier) + { + return ($multiplier) ? array_fill(0, $multiplier, $input) : array(); + } + + /** + * Logical Left Shift + * + * Shifts binary strings $shift bits, essentially multiplying by 2**$shift. + * + * @param $x String + * @param $shift Integer + * @return String + * @access private + */ + function _base256_lshift(&$x, $shift) + { + if ($shift == 0) { + return; + } + + $num_bytes = $shift >> 3; // eg. floor($shift/8) + $shift &= 7; // eg. $shift % 8 + + $carry = 0; + for ($i = strlen($x) - 1; $i >= 0; --$i) { + $temp = ord($x[$i]) << $shift | $carry; + $x[$i] = chr($temp); + $carry = $temp >> 8; + } + $carry = ($carry != 0) ? chr($carry) : ''; + $x = $carry . $x . str_repeat(chr(0), $num_bytes); + } + + /** + * Logical Right Shift + * + * Shifts binary strings $shift bits, essentially dividing by 2**$shift and returning the remainder. + * + * @param $x String + * @param $shift Integer + * @return String + * @access private + */ + function _base256_rshift(&$x, $shift) + { + if ($shift == 0) { + $x = ltrim($x, chr(0)); + return ''; + } + + $num_bytes = $shift >> 3; // eg. floor($shift/8) + $shift &= 7; // eg. $shift % 8 + + $remainder = ''; + if ($num_bytes) { + $start = $num_bytes > strlen($x) ? -strlen($x) : -$num_bytes; + $remainder = substr($x, $start); + $x = substr($x, 0, -$num_bytes); + } + + $carry = 0; + $carry_shift = 8 - $shift; + for ($i = 0; $i < strlen($x); ++$i) { + $temp = (ord($x[$i]) >> $shift) | $carry; + $carry = (ord($x[$i]) << $carry_shift) & 0xFF; + $x[$i] = chr($temp); + } + $x = ltrim($x, chr(0)); + + $remainder = chr($carry >> $carry_shift) . $remainder; + + return ltrim($remainder, chr(0)); + } + + // one quirk about how the following functions are implemented is that PHP defines N to be an unsigned long + // at 32-bits, while java's longs are 64-bits. + + /** + * Converts 32-bit integers to bytes. + * + * @param Integer $x + * @return String + * @access private + */ + function _int2bytes($x) + { + return ltrim(pack('N', $x), chr(0)); + } + + /** + * Converts bytes to 32-bit integers + * + * @param String $x + * @return Integer + * @access private + */ + function _bytes2int($x) + { + $temp = unpack('Nint', str_pad($x, 4, chr(0), STR_PAD_LEFT)); + return $temp['int']; + } +} \ No newline at end of file diff --git a/plugins/OStatus/extlib/hkit/hcard.profile.php b/plugins/OStatus/extlib/hkit/hcard.profile.php deleted file mode 100644 index 6ec0dc8906..0000000000 --- a/plugins/OStatus/extlib/hkit/hcard.profile.php +++ /dev/null @@ -1,105 +0,0 @@ -root_class = 'vcard'; - - $this->classes = array( - 'fn', array('honorific-prefix', 'given-name', 'additional-name', 'family-name', 'honorific-suffix'), - 'n', array('honorific-prefix', 'given-name', 'additional-name', 'family-name', 'honorific-suffix'), - 'adr', array('post-office-box', 'extended-address', 'street-address', 'postal-code', 'country-name', 'type', 'region', 'locality'), - 'label', 'bday', 'agent', 'nickname', 'photo', 'class', - 'email', array('type', 'value'), - 'category', 'key', 'logo', 'mailer', 'note', - 'org', array('organization-name', 'organization-unit'), - 'tel', array('type', 'value'), - 'geo', array('latitude', 'longitude'), - 'tz', 'uid', 'url', 'rev', 'role', 'sort-string', 'sound', 'title' - ); - - // classes that must only appear once per card - $this->singles = array( - 'fn' - ); - - // classes that are required (not strictly enforced - give at least one!) - $this->required = array( - 'fn' - ); - - $this->att_map = array( - 'fn' => array('IMG|alt'), - 'url' => array('A|href', 'IMG|src', 'AREA|href'), - 'photo' => array('IMG|src'), - 'bday' => array('ABBR|title'), - 'logo' => array('IMG|src'), - 'email' => array('A|href'), - 'geo' => array('ABBR|title') - ); - - - $this->callbacks = array( - 'url' => array($this, 'resolvePath'), - 'photo' => array($this, 'resolvePath'), - 'logo' => array($this, 'resolvePath'), - 'email' => array($this, 'resolveEmail') - ); - - - - function hKit_hcard_post($a) - { - - foreach ($a as &$vcard){ - - hKit_implied_n_optimization($vcard); - hKit_implied_n_from_fn($vcard); - - } - - return $a; - - } - - - function hKit_implied_n_optimization(&$vcard) - { - if (array_key_exists('fn', $vcard) && !is_array($vcard['fn']) && - !array_key_exists('n', $vcard) && (!array_key_exists('org', $vcard) || $vcard['fn'] != $vcard['org'])){ - - if (sizeof(explode(' ', $vcard['fn'])) == 2){ - $patterns = array(); - $patterns[] = array('/^(\S+),\s*(\S{1})$/', 2, 1); // Lastname, Initial - $patterns[] = array('/^(\S+)\s*(\S{1})\.*$/', 2, 1); // Lastname Initial(.) - $patterns[] = array('/^(\S+),\s*(\S+)$/', 2, 1); // Lastname, Firstname - $patterns[] = array('/^(\S+)\s*(\S+)$/', 1, 2); // Firstname Lastname - - foreach ($patterns as $pattern){ - if (preg_match($pattern[0], $vcard['fn'], $matches) === 1){ - $n = array(); - $n['given-name'] = $matches[$pattern[1]]; - $n['family-name'] = $matches[$pattern[2]]; - $vcard['n'] = $n; - - - break; - } - } - } - } - } - - - function hKit_implied_n_from_fn(&$vcard) - { - if (array_key_exists('fn', $vcard) && is_array($vcard['fn']) - && !array_key_exists('n', $vcard) && (!array_key_exists('org', $vcard) || $vcard['fn'] != $vcard['org'])){ - - $vcard['n'] = $vcard['fn']; - } - - if (array_key_exists('fn', $vcard) && is_array($vcard['fn'])){ - $vcard['fn'] = $vcard['fn']['text']; - } - } - -?> \ No newline at end of file diff --git a/plugins/OStatus/extlib/hkit/hkit.class.php b/plugins/OStatus/extlib/hkit/hkit.class.php deleted file mode 100644 index c3a54cff65..0000000000 --- a/plugins/OStatus/extlib/hkit/hkit.class.php +++ /dev/null @@ -1,475 +0,0 @@ -' . implode(', ', $missing) . ''); - - } - - - public function getByURL($profile='', $url='') - { - - if ($profile=='' || $url == '') return false; - - $this->loadProfile($profile); - - $source = $this->loadURL($url); - - if ($source){ - $tidy_xhtml = $this->tidyThis($source); - - $fragment = false; - - if (strrchr($url, '#')) - $fragment = array_pop(explode('#', $url)); - - $doc = $this->loadDoc($tidy_xhtml, $fragment); - $s = $this->processNodes($doc, $this->classes); - $s = $this->postProcess($profile, $s); - - return $s; - }else{ - return false; - } - } - - public function getByString($profile='', $input_xml='') - { - if ($profile=='' || $input_xml == '') return false; - - $this->loadProfile($profile); - - $doc = $this->loadDoc($input_xml); - $s = $this->processNodes($doc, $this->classes); - $s = $this->postProcess($profile, $s); - - return $s; - - } - - private function processNodes($items, $classes, $allow_includes=true){ - - $out = array(); - - foreach($items as $item){ - $data = array(); - - for ($i=0; $ixpath($xpath); - - if ($results){ - foreach ($results as $result){ - if (isset($classes[$i+1]) && is_array($classes[$i+1])){ - $nodes = $this->processNodes($results, $classes[$i+1]); - if (sizeof($nodes) > 0){ - $nodes = array_merge(array('text'=>$this->getNodeValue($result, $classes[$i])), $nodes); - $data[$classes[$i]] = $nodes; - }else{ - $data[$classes[$i]] = $this->getNodeValue($result, $classes[$i]); - } - - }else{ - if (isset($data[$classes[$i]])){ - if (is_array($data[$classes[$i]])){ - // is already an array - append - $data[$classes[$i]][] = $this->getNodeValue($result, $classes[$i]); - - }else{ - // make it an array - if ($classes[$i] == 'value'){ // unless it's the 'value' of a type/value pattern - $data[$classes[$i]] .= $this->getNodeValue($result, $classes[$i]); - }else{ - $old_val = $data[$classes[$i]]; - $data[$classes[$i]] = array($old_val, $this->getNodeValue($result, $classes[$i])); - $old_val = false; - } - } - }else{ - // set as normal value - $data[$classes[$i]] = $this->getNodeValue($result, $classes[$i]); - - } - } - - // td@headers pattern - if (strtoupper(dom_import_simplexml($result)->tagName)== "TD" && $result['headers']){ - $include_ids = explode(' ', $result['headers']); - $doc = $this->doc; - foreach ($include_ids as $id){ - $xpath = "//*[@id='$id']/.."; - $includes = $doc->xpath($xpath); - foreach ($includes as $include){ - $tmp = $this->processNodes($include, $this->classes); - if (is_array($tmp)) $data = array_merge($data, $tmp); - } - } - } - } - } - } - $result = false; - } - - // include-pattern - if ($allow_includes){ - $xpath = ".//*[contains(concat(' ',normalize-space(@class),' '),' include ')]"; - $results = $item->xpath($xpath); - - if ($results){ - foreach ($results as $result){ - $tagName = strtoupper(dom_import_simplexml($result)->tagName); - if ((($tagName == "OBJECT" && $result['data']) || ($tagName == "A" && $result['href'])) - && preg_match('/\binclude\b/', $result['class'])){ - $att = ($tagName == "OBJECT" ? 'data' : 'href'); - $id = str_replace('#', '', $result[$att]); - $doc = $this->doc; - $xpath = "//*[@id='$id']"; - $includes = $doc->xpath($xpath); - foreach ($includes as $include){ - $include = simplexml_load_string(''.$include->asXML().''); // don't ask. - $tmp = $this->processNodes($include, $this->classes, false); - if (is_array($tmp)) $data = array_merge($data, $tmp); - } - } - } - } - } - $out[] = $data; - } - - if (sizeof($out) > 1){ - return $out; - }else if (isset($data)){ - return $data; - }else{ - return array(); - } - } - - - private function getNodeValue($node, $className) - { - - $tag_name = strtoupper(dom_import_simplexml($node)->tagName); - $s = false; - - // ignore DEL tags - if ($tag_name == 'DEL') return $s; - - // look up att map values - if (array_key_exists($className, $this->att_map)){ - - foreach ($this->att_map[$className] as $map){ - if (preg_match("/$tag_name\|/", $map)){ - $s = ''.$node[array_pop($foo = explode('|', $map))]; - } - } - } - - // if nothing and OBJ, try data. - if (!$s && $tag_name=='OBJECT' && $node['data']) $s = ''.$node['data']; - - // if nothing and IMG, try alt. - if (!$s && $tag_name=='IMG' && $node['alt']) $s = ''.$node['alt']; - - // if nothing and AREA, try alt. - if (!$s && $tag_name=='AREA' && $node['alt']) $s = ''.$node['alt']; - - //if nothing and not A, try title. - if (!$s && $tag_name!='A' && $node['title']) $s = ''.$node['title']; - - - // if nothing found, go with node text - $s = ($s ? $s : implode(array_filter($node->xpath('child::node()'), array(&$this, "filterBlankValues")), ' ')); - - // callbacks - if (array_key_exists($className, $this->callbacks)){ - $s = preg_replace_callback('/.*/', $this->callbacks[$className], $s, 1); - } - - // trim and remove line breaks - if ($tag_name != 'PRE'){ - $s = trim(preg_replace('/[\r\n\t]+/', '', $s)); - $s = trim(preg_replace('/(\s{2})+/', ' ', $s)); - } - - return $s; - } - - private function filterBlankValues($s){ - return preg_match("/\w+/", $s); - } - - - private function tidyThis($source) - { - switch ( $this->tidy_mode ) - { - case 'exec': - $tmp_file = $this->tmp_dir.md5($source).'.txt'; - file_put_contents($tmp_file, $source); - exec("tidy -utf8 -indent -asxhtml -numeric -bare -quiet $tmp_file", $tidy); - unlink($tmp_file); - return implode("\n", $tidy); - break; - - case 'php': - $tidy = tidy_parse_string($source); - return tidy_clean_repair($tidy); - break; - - default: - return $source; - break; - } - - } - - - private function loadProfile($profile) - { - require_once("$profile.profile.php"); - } - - - private function loadDoc($input_xml, $fragment=false) - { - $xml = simplexml_load_string($input_xml); - - $this->doc = $xml; - - if ($fragment){ - $doc = $xml->xpath("//*[@id='$fragment']"); - $xml = simplexml_load_string($doc[0]->asXML()); - $doc = null; - } - - // base tag - if ($xml->head->base['href']) $this->base = $xml->head->base['href']; - - // xml:base attribute - PITA with SimpleXML - preg_match('/xml:base="(.*)"/', $xml->asXML(), $matches); - if (is_array($matches) && sizeof($matches)>1) $this->base = $matches[1]; - - return $xml->xpath("//*[contains(concat(' ',normalize-space(@class),' '),' $this->root_class ')]"); - - } - - - private function loadURL($url) - { - $this->url = $url; - - if ($this->tidy_mode == 'proxy' && $this->tidy_proxy != ''){ - $url = $this->tidy_proxy . $url; - } - - return @file_get_contents($url); - - } - - - private function postProcess($profile, $s) - { - $required = $this->required; - - if (is_array($s) && array_key_exists($required[0], $s)){ - $s = array($s); - } - - $s = $this->dedupeSingles($s); - - if (function_exists('hKit_'.$profile.'_post')){ - $s = call_user_func('hKit_'.$profile.'_post', $s); - } - - $s = $this->removeTextVals($s); - - return $s; - } - - - private function resolvePath($filepath) - { // ugly code ahoy: needs a serious tidy up - - $filepath = $filepath[0]; - - $base = $this->base; - $url = $this->url; - - if ($base != '' && strpos($base, '://') !== false) - $url = $base; - - $r = parse_url($url); - $domain = $r['scheme'] . '://' . $r['host']; - - if (!isset($r['path'])) $r['path'] = '/'; - $path = explode('/', $r['path']); - $file = explode('/', $filepath); - $new = array(''); - - if (strpos($filepath, '://') !== false || strpos($filepath, 'data:') !== false){ - return $filepath; - } - - if ($file[0] == ''){ - // absolute path - return ''.$domain . implode('/', $file); - }else{ - // relative path - if ($path[sizeof($path)-1] == '') array_pop($path); - if (strpos($path[sizeof($path)-1], '.') !== false) array_pop($path); - - foreach ($file as $segment){ - if ($segment == '..'){ - array_pop($path); - }else{ - $new[] = $segment; - } - } - return ''.$domain . implode('/', $path) . implode('/', $new); - } - } - - private function resolveEmail($v) - { - $parts = parse_url($v[0]); - return ($parts['path']); - } - - - private function dedupeSingles($s) - { - $singles = $this->singles; - - foreach ($s as &$item){ - foreach ($singles as $classname){ - if (array_key_exists($classname, $item) && is_array($item[$classname])){ - if (isset($item[$classname][0])) $item[$classname] = $item[$classname][0]; - } - } - } - - return $s; - } - - private function removeTextVals($s) - { - foreach ($s as $key => &$val){ - if ($key){ - $k = $key; - }else{ - $k = ''; - } - - if (is_array($val)){ - $val = $this->removeTextVals($val); - }else{ - if ($k == 'text'){ - $val = ''; - } - } - } - - return array_filter($s); - } - - } - - -?> \ No newline at end of file diff --git a/plugins/OStatus/lib/discovery.php b/plugins/OStatus/lib/discovery.php index f8449b309e..7187c1f3e9 100644 --- a/plugins/OStatus/lib/discovery.php +++ b/plugins/OStatus/lib/discovery.php @@ -40,7 +40,7 @@ class Discovery const PROFILEPAGE = 'http://webfinger.net/rel/profile-page'; const UPDATESFROM = 'http://schemas.google.com/g/2010#updates-from'; const HCARD = 'http://microformats.org/profile/hcard'; - + public $methods = array(); public function __construct() @@ -50,12 +50,11 @@ class Discovery $this->registerMethod('Discovery_LRDD_Link_HTML'); } - public function registerMethod($class) { $this->methods[] = $class; } - + /** * Given a "user id" make sure it's normalized to either a webfinger * acct: uri or a profile HTTP URL. @@ -78,7 +77,7 @@ class Discovery public static function isWebfinger($user_id) { $uri = Discovery::normalize($user_id); - + return (substr($uri, 0, 5) == 'acct:'); } @@ -99,7 +98,7 @@ class Discovery } else { $xrd_uri = $link['href']; } - + $xrd = $this->fetchXrd($xrd_uri); if ($xrd) { return $xrd; @@ -114,14 +113,13 @@ class Discovery if (!is_array($links)) { return false; } - + foreach ($links as $link) { if ($link['rel'] == $service) { return $link; } } } - public static function applyTemplate($template, $id) { @@ -130,7 +128,6 @@ class Discovery return $template; } - public static function fetchXrd($url) { try { @@ -157,12 +154,13 @@ class Discovery_LRDD_Host_Meta implements Discovery_LRDD { public function discover($uri) { - if (!Discovery::isWebfinger($uri)) { - return false; + if (Discovery::isWebfinger($uri)) { + // We have a webfinger acct: - start with host-meta + list($name, $domain) = explode('@', $uri); + } else { + $domain = parse_url($uri, PHP_URL_HOST); } - - // We have a webfinger acct: - start with host-meta - list($name, $domain) = explode('@', $uri); + $url = 'http://'. $domain .'/.well-known/host-meta'; $xrd = Discovery::fetchXrd($url); @@ -171,7 +169,7 @@ class Discovery_LRDD_Host_Meta implements Discovery_LRDD if ($xrd->host != $domain) { return false; } - + return $xrd->links; } } @@ -187,7 +185,7 @@ class Discovery_LRDD_Link_Header implements Discovery_LRDD } catch (HTTP_Request2_Exception $e) { return false; } - + if ($response->getStatus() != 200) { return false; } @@ -196,51 +194,17 @@ class Discovery_LRDD_Link_Header implements Discovery_LRDD if (!$link_header) { // return false; } - - return Discovery_LRDD_Link_Header::parseHeader($link_header); + + return array(Discovery_LRDD_Link_Header::parseHeader($link_header)); } protected static function parseHeader($header) { - preg_match('/^<[^>]+>/', $header, $uri_reference); - //if (empty($uri_reference)) return; + $lh = new LinkHeader($header); - $links = array(); - - $link_uri = trim($uri_reference[0], '<>'); - $link_rel = array(); - $link_type = null; - - // remove uri-reference from header - $header = substr($header, strlen($uri_reference[0])); - - // parse link-params - $params = explode(';', $header); - - foreach ($params as $param) { - if (empty($param)) continue; - list($param_name, $param_value) = explode('=', $param, 2); - $param_name = trim($param_name); - $param_value = preg_replace('(^"|"$)', '', trim($param_value)); - - // for now we only care about 'rel' and 'type' link params - // TODO do something with the other links-params - switch ($param_name) { - case 'rel': - $link_rel = trim($param_value); - break; - - case 'type': - $link_type = trim($param_value); - } - } - - $links[] = array( - 'href' => $link_uri, - 'rel' => $link_rel, - 'type' => $link_type); - - return $links; + return array('href' => $lh->href, + 'rel' => $lh->rel, + 'type' => $lh->type); } } @@ -262,49 +226,48 @@ class Discovery_LRDD_Link_HTML implements Discovery_LRDD return Discovery_LRDD_Link_HTML::parse($response->getBody()); } - public function parse($html) { $links = array(); - + preg_match('/]*)?>(.*?)<\/head>/is', $html, $head_matches); $head_html = $head_matches[2]; - + preg_match_all('/]*>/i', $head_html, $link_matches); - + foreach ($link_matches[0] as $link_html) { $link_url = null; $link_rel = null; $link_type = null; - + preg_match('/\srel=(("|\')([^\\2]*?)\\2|[^"\'\s]+)/i', $link_html, $rel_matches); if ( isset($rel_matches[3]) ) { $link_rel = $rel_matches[3]; } else if ( isset($rel_matches[1]) ) { $link_rel = $rel_matches[1]; } - + preg_match('/\shref=(("|\')([^\\2]*?)\\2|[^"\'\s]+)/i', $link_html, $href_matches); if ( isset($href_matches[3]) ) { $link_uri = $href_matches[3]; } else if ( isset($href_matches[1]) ) { $link_uri = $href_matches[1]; } - + preg_match('/\stype=(("|\')([^\\2]*?)\\2|[^"\'\s]+)/i', $link_html, $type_matches); if ( isset($type_matches[3]) ) { $link_type = $type_matches[3]; } else if ( isset($type_matches[1]) ) { $link_type = $type_matches[1]; } - + $links[] = array( 'href' => $link_url, 'rel' => $link_rel, 'type' => $link_type, ); } - + return $links; } } diff --git a/plugins/OStatus/lib/discoveryhints.php b/plugins/OStatus/lib/discoveryhints.php new file mode 100644 index 0000000000..80cfbbf15e --- /dev/null +++ b/plugins/OStatus/lib/discoveryhints.php @@ -0,0 +1,252 @@ +. + */ + +class DiscoveryHints { + + static function fromXRD($xrd) + { + $hints = array(); + + foreach ($xrd->links as $link) { + switch ($link['rel']) { + case Discovery::PROFILEPAGE: + $hints['profileurl'] = $link['href']; + break; + case Salmon::NS_REPLIES: + $hints['salmon'] = $link['href']; + break; + case Discovery::UPDATESFROM: + $hints['feedurl'] = $link['href']; + break; + case Discovery::HCARD: + $hints['hcardurl'] = $link['href']; + break; + default: + break; + } + } + + return $hints; + } + + static function fromHcardUrl($url) + { + $client = new HTTPClient(); + $client->setHeader('Accept', 'text/html,application/xhtml+xml'); + $response = $client->get($url); + + if (!$response->isOk()) { + return null; + } + + return self::hcardHints($response->getBody(), + $response->getUrl()); + } + + static function hcardHints($body, $url) + { + $hcard = self::_hcard($body, $url); + + if (empty($hcard)) { + return array(); + } + + $hints = array(); + + // XXX: don't copy stuff into an array and then copy it again + + if (array_key_exists('nickname', $hcard)) { + $hints['nickname'] = $hcard['nickname']; + } + + if (array_key_exists('fn', $hcard)) { + $hints['fullname'] = $hcard['fn']; + } else if (array_key_exists('n', $hcard)) { + $hints['fullname'] = implode(' ', $hcard['n']); + } + + if (array_key_exists('photo', $hcard)) { + $hints['avatar'] = $hcard['photo'][0]; + } + + if (array_key_exists('note', $hcard)) { + $hints['bio'] = $hcard['note']; + } + + if (array_key_exists('adr', $hcard)) { + if (is_string($hcard['adr'])) { + $hints['location'] = $hcard['adr']; + } else if (is_array($hcard['adr'])) { + $hints['location'] = implode(' ', $hcard['adr']); + } + } + + if (array_key_exists('url', $hcard)) { + if (is_string($hcard['url'])) { + $hints['homepage'] = $hcard['url']; + } else if (is_array($hcard['url']) && !empty($hcard['url'])) { + // HACK get the last one; that's how our hcards look + $hints['homepage'] = $hcard['url'][count($hcard['url'])-1]; + } + } + + return $hints; + } + + static function _hcard($body, $url) + { + // DOMDocument::loadHTML may throw warnings on unrecognized elements. + + $old = error_reporting(error_reporting() & ~E_WARNING); + + $doc = new DOMDocument(); + $doc->loadHTML($body); + + error_reporting($old); + + $xp = new DOMXPath($doc); + + $hcardNodes = self::_getChildrenByClass($doc->documentElement, 'vcard', $xp); + + $hcards = array(); + + for ($i = 0; $i < $hcardNodes->length; $i++) { + + $hcardNode = $hcardNodes->item($i); + + $hcard = self::_hcardFromNode($hcardNode, $xp, $url); + + $hcards[] = $hcard; + } + + $repr = null; + + foreach ($hcards as $hcard) { + if (in_array($url, $hcard['url'])) { + $repr = $hcard; + break; + } + } + + if (!is_null($repr)) { + return $repr; + } else if (count($hcards) > 0) { + return $hcards[0]; + } else { + return null; + } + } + + function _getChildrenByClass($el, $cls, $xp) + { + // borrowed from hkit. Thanks dudes! + + $qry = ".//*[contains(concat(' ',normalize-space(@class),' '),' $cls ')]"; + + $nodes = $xp->query($qry, $el); + + return $nodes; + } + + function _hcardFromNode($hcardNode, $xp, $base) + { + $hcard = array(); + + $hcard['url'] = array(); + + $urlNodes = self::_getChildrenByClass($hcardNode, 'url', $xp); + + for ($j = 0; $j < $urlNodes->length; $j++) { + + $urlNode = $urlNodes->item($j); + + if ($urlNode->hasAttribute('href')) { + $url = $urlNode->getAttribute('href'); + } else { + $url = $urlNode->textContent; + } + + $hcard['url'][] = self::_rel2abs($url, $base); + } + + $hcard['photo'] = array(); + + $photoNodes = self::_getChildrenByClass($hcardNode, 'photo', $xp); + + for ($j = 0; $j < $photoNodes->length; $j++) { + $photoNode = $photoNodes->item($j); + if ($photoNode->hasAttribute('src')) { + $url = $photoNode->getAttribute('src'); + } else if ($photoNode->hasAttribute('href')) { + $url = $photoNode->getAttribute('href'); + } else { + $url = $photoNode->textContent; + } + $hcard['photo'][] = self::_rel2abs($url, $base); + } + + $singles = array('nickname', 'note', 'fn', 'n', 'adr'); + + foreach ($singles as $single) { + + $nodes = self::_getChildrenByClass($hcardNode, $single, $xp); + + if ($nodes->length > 0) { + $node = $nodes->item(0); + $hcard[$single] = $node->textContent; + } + } + + return $hcard; + } + + // XXX: this is a first pass; we probably need + // to handle things like ../ and ./ and so on + + static function _rel2abs($rel, $wrt) + { + $parts = parse_url($rel); + + if ($parts === false) { + return false; + } + + // If it's got a scheme, use it + + if (!empty($parts['scheme'])) { + return $rel; + } + + $w = parse_url($wrt); + + $base = $w['scheme'].'://'.$w['host']; + + if ($rel[0] == '/') { + return $base.$rel; + } + + $wp = explode('/', $w['path']); + + array_pop($wp); + + return $base.implode('/', $wp).'/'.$rel; + } +} diff --git a/plugins/OStatus/lib/feeddiscovery.php b/plugins/OStatus/lib/feeddiscovery.php index 7afb71bdc1..4809f9d35c 100644 --- a/plugins/OStatus/lib/feeddiscovery.php +++ b/plugins/OStatus/lib/feeddiscovery.php @@ -73,6 +73,7 @@ class FeedDiscovery public $uri; public $type; public $feed; + public $root; /** Post-initialize query helper... */ public function getLink($rel, $type=null) @@ -83,7 +84,7 @@ class FeedDiscovery public function getAtomLink($rel, $type=null) { - return ActivityUtils::getLink($this->feed->documentElement, $rel, $type); + return ActivityUtils::getLink($this->root, $rel, $type); } /** @@ -117,7 +118,7 @@ class FeedDiscovery return $this->discoverFromURL($target, false); } } - + return $this->initFromResponse($response); } @@ -129,7 +130,7 @@ class FeedDiscovery function initFromResponse($response) { if (!$response->isOk()) { - throw new FeedSubBadResponseException($response->getCode()); + throw new FeedSubBadResponseException($response->getStatus()); } $sourceurl = $response->getUrl(); @@ -154,9 +155,27 @@ class FeedDiscovery $this->uri = $sourceurl; $this->type = $type; $this->feed = $feed; + + $el = $this->feed->documentElement; + + // Looking for the "root" element: RSS channel or Atom feed + + if ($el->tagName == 'rss') { + $channels = $el->getElementsByTagName('channel'); + if ($channels->length > 0) { + $this->root = $channels->item(0); + } else { + throw new FeedSubBadXmlException($sourceurl); + } + } else if ($el->tagName == 'feed') { + $this->root = $el; + } else { + throw new FeedSubBadXmlException($sourceurl); + } + return $this->uri; } else { - throw new FeedSubBadXmlException($url); + throw new FeedSubBadXmlException($sourceurl); } } @@ -202,7 +221,7 @@ class FeedDiscovery 'application/atom+xml' => false, 'application/rss+xml' => false, ); - + $nodes = $dom->getElementsByTagName('link'); for ($i = 0; $i < $nodes->length; $i++) { $node = $nodes->item($i); @@ -211,11 +230,11 @@ class FeedDiscovery $type = $node->attributes->getNamedItem('type'); $href = $node->attributes->getNamedItem('href'); if ($rel && $type && $href) { - $rel = trim($rel->value); + $rel = array_filter(explode(" ", $rel->value)); $type = trim($type->value); $href = trim($href->value); - if (trim($rel) == 'alternate' && array_key_exists($type, $feeds) && empty($feeds[$type])) { + if (in_array('alternate', $rel) && array_key_exists($type, $feeds) && empty($feeds[$type])) { // Save the first feed found of each type... $feeds[$type] = $this->resolveURI($href, $base); } diff --git a/plugins/OStatus/lib/linkheader.php b/plugins/OStatus/lib/linkheader.php new file mode 100644 index 0000000000..cd78d31cef --- /dev/null +++ b/plugins/OStatus/lib/linkheader.php @@ -0,0 +1,63 @@ +]+>/', $str, $uri_reference); + //if (empty($uri_reference)) return; + + $this->href = trim($uri_reference[0], '<>'); + $this->rel = array(); + $this->type = null; + + // remove uri-reference from header + $str = substr($str, strlen($uri_reference[0])); + + // parse link-params + $params = explode(';', $str); + + foreach ($params as $param) { + if (empty($param)) continue; + list($param_name, $param_value) = explode('=', $param, 2); + $param_name = trim($param_name); + $param_value = preg_replace('(^"|"$)', '', trim($param_value)); + + // for now we only care about 'rel' and 'type' link params + // TODO do something with the other links-params + switch ($param_name) { + case 'rel': + $this->rel = trim($param_value); + break; + + case 'type': + $this->type = trim($param_value); + } + } + } + + static function getLink($response, $rel=null, $type=null) + { + $headers = $response->getHeader('Link'); + if ($headers) { + // Can get an array or string, so try to simplify the path + if (!is_array($headers)) { + $headers = array($headers); + } + + foreach ($headers as $header) { + $lh = new LinkHeader($header); + + if ((is_null($rel) || $lh->rel == $rel) && + (is_null($type) || $lh->type == $type)) { + return $lh->href; + } + } + } + return null; + } +} diff --git a/plugins/OStatus/lib/magicenvelope.php b/plugins/OStatus/lib/magicenvelope.php index fb8c57c718..9266cab5cf 100644 --- a/plugins/OStatus/lib/magicenvelope.php +++ b/plugins/OStatus/lib/magicenvelope.php @@ -59,7 +59,11 @@ class MagicEnvelope } if ($xrd->links) { if ($link = Discovery::getService($xrd->links, Magicsig::PUBLICKEYREL)) { - list($type, $keypair) = explode(';', $link['href']); + list($type, $keypair) = explode(',', $link['href']); + if (empty($keypair)) { + // Backwards compatibility check for separator bug in 0.9.0 + list($type, $keypair) = explode(';', $link['href']); + } return $keypair; } } @@ -70,7 +74,7 @@ class MagicEnvelope public function signMessage($text, $mimetype, $keypair) { $signature_alg = Magicsig::fromString($keypair); - $armored_text = base64_encode($text); + $armored_text = base64_url_encode($text); return array( 'data' => $armored_text, @@ -108,7 +112,7 @@ class MagicEnvelope public function unfold($env) { $dom = new DOMDocument(); - $dom->loadXML(base64_decode($env['data'])); + $dom->loadXML(base64_url_decode($env['data'])); if ($dom->documentElement->tagName != 'entry') { return false; @@ -165,7 +169,7 @@ class MagicEnvelope return false; } - $text = base64_decode($env['data']); + $text = base64_url_decode($env['data']); $signer_uri = $this->getAuthor($text); try { @@ -193,11 +197,12 @@ class MagicEnvelope public function fromDom($dom) { - if ($dom->documentElement->tagName == 'entry') { + $env_element = $dom->getElementsByTagNameNS(MagicEnvelope::NS, 'env')->item(0); + if (!$env_element) { $env_element = $dom->getElementsByTagNameNS(MagicEnvelope::NS, 'provenance')->item(0); - } else if ($dom->documentElement->tagName == 'me:env') { - $env_element = $dom->documentElement; - } else { + } + + if (!$env_element) { return false; } diff --git a/plugins/OStatus/lib/safecrypt_rsa.php b/plugins/OStatus/lib/safecrypt_rsa.php new file mode 100644 index 0000000000..f3aa2c9285 --- /dev/null +++ b/plugins/OStatus/lib/safecrypt_rsa.php @@ -0,0 +1,18 @@ +zero = new SafeMath_BigInteger(); + } +} + diff --git a/plugins/OStatus/lib/safemath_biginteger.php b/plugins/OStatus/lib/safemath_biginteger.php new file mode 100644 index 0000000000..c05e24d1ec --- /dev/null +++ b/plugins/OStatus/lib/safemath_biginteger.php @@ -0,0 +1,20 @@ +hex == '') { + $this->hex = '0'; + } + parent::__wakeup(); + } +} + diff --git a/plugins/OStatus/lib/xrdaction.php b/plugins/OStatus/lib/xrdaction.php index 6881292add..f1a56e0a84 100644 --- a/plugins/OStatus/lib/xrdaction.php +++ b/plugins/OStatus/lib/xrdaction.php @@ -46,10 +46,10 @@ class XrdAction extends Action if (empty($xrd->subject)) { $xrd->subject = Discovery::normalize($this->uri); } - $xrd->alias[] = common_profile_url($nick); + $xrd->alias[] = $this->user->uri; $xrd->links[] = array('rel' => Discovery::PROFILEPAGE, 'type' => 'text/html', - 'href' => common_profile_url($nick)); + 'href' => $this->user->uri); $xrd->links[] = array('rel' => Discovery::UPDATESFROM, 'href' => common_local_url('ApiTimelineUser', @@ -65,7 +65,7 @@ class XrdAction extends Action // XFN $xrd->links[] = array('rel' => 'http://gmpg.org/xfn/11', 'type' => 'text/html', - 'href' => common_profile_url($nick)); + 'href' => $this->user->uri); // FOAF $xrd->links[] = array('rel' => 'describedby', 'type' => 'application/rdf+xml', @@ -91,7 +91,7 @@ class XrdAction extends Action } $xrd->links[] = array('rel' => Magicsig::PUBLICKEYREL, - 'href' => 'data:application/magic-public-key;'. $magickey->toString(false)); + 'href' => 'data:application/magic-public-key,'. $magickey->toString(false)); // TODO - finalize where the redirect should go on the publisher $url = common_local_url('ostatussub') . '?profile={uri}'; diff --git a/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po index f17dfa50a5..0956d2f9b7 100644 --- a/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po +++ b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po @@ -104,3 +104,6 @@ msgstr "" #: actions/feedsubsettings.php:231 msgid "Previewing feed:" msgstr "" + +msgid "Confirm" +msgstr "Confirmer" diff --git a/plugins/OStatus/scripts/fixup-shadow.php b/plugins/OStatus/scripts/fixup-shadow.php new file mode 100644 index 0000000000..ec014c7878 --- /dev/null +++ b/plugins/OStatus/scripts/fixup-shadow.php @@ -0,0 +1,69 @@ +#!/usr/bin/env php +. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..')); + +$longoptions = array('dry-run'); + +$helptext = << $marker)); +$encProfile = $oprofile->escape($profileTemplate, true); +$encProfile = str_replace($marker, '%', $encProfile); + +$groupTemplate = common_local_url('groupbyid', array('id' => $marker)); +$encGroup = $oprofile->escape($groupTemplate, true); +$encGroup = str_replace($marker, '%', $encGroup); + +$sql = "SELECT * FROM ostatus_profile WHERE uri LIKE '%s' OR uri LIKE '%s'"; +$oprofile->query(sprintf($sql, $encProfile, $encGroup)); + +echo "Found $oprofile->N bogus ostatus_profile entries for local users and groups:\n"; + +while ($oprofile->fetch()) { + echo "$oprofile->uri"; + + if ($dry) { + echo " (unchanged)\n"; + } else { + echo " removing bogus ostatus_profile entry..."; + $evil = clone($oprofile); + $evil->delete(); + echo " ok\n"; + } +} + +echo "done.\n"; + diff --git a/plugins/OStatus/scripts/testfeed.php b/plugins/OStatus/scripts/testfeed.php new file mode 100644 index 0000000000..5e3ccd433a --- /dev/null +++ b/plugins/OStatus/scripts/testfeed.php @@ -0,0 +1,89 @@ +#!/usr/bin/env php +. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..')); + +$longoptions = array('skip=', 'count='); + +$helptext = <<loadXML($xml)) { + print "Bad XML.\n"; + exit(1); +} + +if ($skip || $count) { + $entries = $feed->getElementsByTagNameNS(ActivityUtils::ATOM, 'entry'); + $remove = array(); + for ($i = 0; $i < $skip && $i < $entries->length; $i++) { + $item = $entries->item($i); + if ($item) { + $remove[] = $item; + } + } + if ($count) { + for ($i = $skip + $count; $i < $entries->length; $i++) { + $item = $entries->item($i); + if ($item) { + $remove[] = $item; + } + } + } + foreach ($remove as $item) { + $item->parentNode->removeChild($item); + } +} + +Event::handle('StartFeedSubReceive', array($sub, $feed)); + diff --git a/plugins/OStatus/scripts/updateostatus.php b/plugins/OStatus/scripts/updateostatus.php index d553a7d625..622ded56ab 100644 --- a/plugins/OStatus/scripts/updateostatus.php +++ b/plugins/OStatus/scripts/updateostatus.php @@ -56,7 +56,12 @@ try { $user = new User(); if ($user->find()) { while ($user->fetch()) { - updateOStatus($user); + try { + updateOStatus($user); + } catch (Exception $e) { + common_log(LOG_NOTICE, "Couldn't convert OMB subscriptions ". + "for {$user->nickname} to OStatus: " . $e->getMessage()); + } } } } else { @@ -98,7 +103,7 @@ function updateOStatus($user) echo "Checking {$rp->nickname}..."; } - $op = Ostatus_profile::ensureProfile($rp->profileurl); + $op = Ostatus_profile::ensureProfileURL($rp->profileurl); if (empty($op)) { echo "can't convert.\n"; @@ -107,8 +112,8 @@ function updateOStatus($user) if (!have_option('q', 'quiet')) { echo "Converting..."; } - Subscription::cancel($up, $rp); Subscription::start($up, $op->localProfile()); + Subscription::cancel($up, $rp); if (!have_option('q', 'quiet')) { echo "done.\n"; } @@ -118,8 +123,7 @@ function updateOStatus($user) if (!have_option('q', 'quiet')) { echo "fail.\n"; } - continue; - common_log(LOG_WARNING, "Couldn't convert OMB subscription (" . $up->nickname . ", " . $rp->nickname . + common_log(LOG_NOTICE, "Couldn't convert OMB subscription (" . $up->nickname . ", " . $rp->nickname . ") to OStatus: " . $e->getMessage()); continue; } diff --git a/plugins/OpenExternalLinkTarget/OpenExternalLinkTargetPlugin.php b/plugins/OpenExternalLinkTarget/OpenExternalLinkTargetPlugin.php new file mode 100644 index 0000000000..6756f19930 --- /dev/null +++ b/plugins/OpenExternalLinkTarget/OpenExternalLinkTargetPlugin.php @@ -0,0 +1,64 @@ +. + * + * @category Action + * @package StatusNet + * @author Sarven Capadisli + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +/** + * Opens links with rel=external on a new window or tab + * + * @category Plugin + * @package StatusNet + * @author Sarven Capadisli + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +class OpenExternalLinkTargetPlugin extends Plugin +{ + function onEndShowScripts($action) + { + $action->inlineScript('$("a[rel~=external]:not([class~=attachment])").live("click", function(){ window.open(this.href); return false; });'); + + return true; + } + + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'OpenExternalLinkTarget', + 'version' => STATUSNET_VERSION, + 'author' => 'Sarven Capadisli', + 'homepage' => 'http://status.net/wiki/Plugin:OpenExternalLinkTarget', + 'rawdescription' => + _m('Opens external links (i.e., with rel=external) on a new window or tab')); + return true; + } +} + diff --git a/plugins/OpenID/User_openid.php b/plugins/OpenID/User_openid.php index 5ef05b4c77..1beff9ea30 100644 --- a/plugins/OpenID/User_openid.php +++ b/plugins/OpenID/User_openid.php @@ -44,6 +44,11 @@ class User_openid extends Memcached_DataObject * Unique keys used for lookup *MUST* be listed to ensure proper caching. */ function keys() + { + return array_keys($this->keyTypes()); + } + + function keyTypes() { return array('canonical' => 'K', 'display' => 'U', 'user_id' => 'U'); } diff --git a/plugins/OpenID/User_openid_trustroot.php b/plugins/OpenID/User_openid_trustroot.php index 0b411b8f7f..17c03afb02 100644 --- a/plugins/OpenID/User_openid_trustroot.php +++ b/plugins/OpenID/User_openid_trustroot.php @@ -42,6 +42,11 @@ class User_openid_trustroot extends Memcached_DataObject } function keys() + { + return array_keys($this->keyTypes()); + } + + function keyTypes() { return array('trustroot' => 'K', 'user_id' => 'K'); } diff --git a/plugins/OpenID/openid.php b/plugins/OpenID/openid.php index 8f949c9c5d..9e02c7a883 100644 --- a/plugins/OpenID/openid.php +++ b/plugins/OpenID/openid.php @@ -225,11 +225,11 @@ function oid_update_user(&$user, &$sreg) $orig_profile = clone($profile); - if ($sreg['fullname'] && strlen($sreg['fullname']) <= 255) { + if (!empty($sreg['fullname']) && strlen($sreg['fullname']) <= 255) { $profile->fullname = $sreg['fullname']; } - if ($sreg['country']) { + if (!empty($sreg['country'])) { if ($sreg['postcode']) { # XXX: use postcode to get city and region # XXX: also, store postcode somewhere -- it's valuable! @@ -249,7 +249,7 @@ function oid_update_user(&$user, &$sreg) $orig_user = clone($user); - if ($sreg['email'] && Validate::email($sreg['email'], common_config('email', 'check_domain'))) { + if (!empty($sreg['email']) && Validate::email($sreg['email'], common_config('email', 'check_domain'))) { $user->email = $sreg['email']; } diff --git a/plugins/OpenID/openidsettings.php b/plugins/OpenID/openidsettings.php index 3fc3d61289..16142cf48c 100644 --- a/plugins/OpenID/openidsettings.php +++ b/plugins/OpenID/openidsettings.php @@ -176,6 +176,43 @@ class OpenidsettingsAction extends AccountSettingsAction } } } + + $this->elementStart('form', array('method' => 'post', + 'id' => 'form_settings_openid_trustroots', + 'class' => 'form_settings', + 'action' => + common_local_url('openidsettings'))); + $this->elementStart('fieldset', array('id' => 'settings_openid_trustroots')); + $this->element('legend', null, _m('OpenID Trusted Sites')); + $this->hidden('token', common_session_token()); + $this->element('p', 'form_guide', + _m('The following sites are allowed to access your ' . + 'identity and log you in. You can remove a site from ' . + 'this list to deny it access to your OpenID.')); + $this->elementStart('ul', 'form_data'); + $user_openid_trustroot = new User_openid_trustroot(); + $user_openid_trustroot->user_id=$user->id; + if($user_openid_trustroot->find()) { + while($user_openid_trustroot->fetch()) { + $this->elementStart('li'); + $this->element('input', array('name' => 'openid_trustroot[]', + 'type' => 'checkbox', + 'class' => 'checkbox', + 'value' => $user_openid_trustroot->trustroot, + 'id' => 'openid_trustroot_' . crc32($user_openid_trustroot->trustroot))); + $this->element('label', array('class'=>'checkbox', 'for' => 'openid_trustroot_' . crc32($user_openid_trustroot->trustroot)), + $user_openid_trustroot->trustroot); + $this->elementEnd('li'); + } + } + $this->elementEnd('ul'); + $this->element('input', array('type' => 'submit', + 'id' => 'settings_openid_trustroots_action-submit', + 'name' => 'remove_trustroots', + 'class' => 'submit', + 'value' => _m('Remove'))); + $this->elementEnd('fieldset'); + $this->elementEnd('form'); } /** @@ -204,11 +241,44 @@ class OpenidsettingsAction extends AccountSettingsAction } } else if ($this->arg('remove')) { $this->removeOpenid(); + } else if($this->arg('remove_trustroots')) { + $this->removeTrustroots(); } else { $this->showForm(_m('Something weird happened.')); } } + /** + * Handles a request to remove OpenID trustroots from the user's account + * + * Validates input and, if everything is OK, deletes the trustroots. + * Reloads the form with a success or error notification. + * + * @return void + */ + + function removeTrustroots() + { + $user = common_current_user(); + $trustroots = $this->arg('openid_trustroot'); + if($trustroots) { + foreach($trustroots as $trustroot) { + $user_openid_trustroot = User_openid_trustroot::pkeyGet( + array('user_id'=>$user->id, 'trustroot'=>$trustroot)); + if($user_openid_trustroot) { + $user_openid_trustroot->delete(); + } else { + $this->showForm(_m('No such OpenID trustroot.')); + return; + } + } + $this->showForm(_m('Trustroots removed'), true); + } else { + $this->showForm(); + } + return; + } + /** * Handles a request to remove an OpenID from the user's account * diff --git a/plugins/RSSCloud/RSSCloudNotifier.php b/plugins/RSSCloud/RSSCloudNotifier.php index d454691c80..9e7b536803 100644 --- a/plugins/RSSCloud/RSSCloudNotifier.php +++ b/plugins/RSSCloud/RSSCloudNotifier.php @@ -152,7 +152,7 @@ class RSSCloudNotifier function notify($profile) { $feed = common_path('api/statuses/user_timeline/') . - $profile->nickname . '.rss'; + $profile->id . '.rss'; $cloudSub = new RSSCloudSubscription(); diff --git a/plugins/RSSCloud/RSSCloudRequestNotify.php b/plugins/RSSCloud/RSSCloudRequestNotify.php index d76c08d379..0305295348 100644 --- a/plugins/RSSCloud/RSSCloudRequestNotify.php +++ b/plugins/RSSCloud/RSSCloudRequestNotify.php @@ -270,13 +270,14 @@ class RSSCloudRequestNotifyAction extends Action function userFromFeed($feed) { - // We only do profile feeds + // We only do canonical RSS2 profile feeds (specified by ID), e.g.: + // http://www.example.com/api/statuses/user_timeline/2.rss $path = common_path('api/statuses/user_timeline/'); - $valid = '%^' . $path . '(?.*)\.rss$%'; + $valid = '%^' . $path . '(?.*)\.rss$%'; if (preg_match($valid, $feed, $matches)) { - $user = User::staticGet('nickname', $matches['nickname']); + $user = User::staticGet('id', $matches['id']); if (!empty($user)) { return $user; } diff --git a/plugins/RequireValidatedEmail/README b/plugins/RequireValidatedEmail/README index ccd94d271d..46ee24d5fe 100644 --- a/plugins/RequireValidatedEmail/README +++ b/plugins/RequireValidatedEmail/README @@ -14,8 +14,6 @@ registered prior to that timestamp. Todo: -* make email field required on registration form * add a more visible indicator that validation is still outstanding -* localization for UI strings * test with XMPP, API posting diff --git a/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php b/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php index 3581f1de92..ccefa14f62 100644 --- a/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php +++ b/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php @@ -54,12 +54,33 @@ class RequireValidatedEmailPlugin extends Plugin $user = User::staticGet('id', $notice->profile_id); if (!empty($user)) { // it's a remote notice if (!$this->validated($user)) { - throw new ClientException(_("You must validate your email address before posting.")); + throw new ClientException(_m("You must validate your email address before posting.")); } } return true; } + /** + * Event handler for registration attempts; rejects the registration + * if email field is missing. + * + * @param RegisterAction $action + * @return bool hook result code + */ + function onStartRegistrationTry($action) + { + $email = $action->trimmed('email'); + + if (empty($email)) { + $action->showForm(_m('You must provide an email address to register.')); + return false; + } + + // Default form will run address format validation and reject if bad. + + return true; + } + /** * Check if a user has a validated email address or has been * otherwise grandfathered in. diff --git a/plugins/RequireValidatedEmail/locale/RequireValidatedEmail.po b/plugins/RequireValidatedEmail/locale/RequireValidatedEmail.po new file mode 100644 index 0000000000..49ac4f6f4d --- /dev/null +++ b/plugins/RequireValidatedEmail/locale/RequireValidatedEmail.po @@ -0,0 +1,31 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-10 10:05-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: RequireValidatedEmailPlugin.php:57 +msgid "You must validate your email address before posting." +msgstr "" + +#: RequireValidatedEmailPlugin.php:75 +msgid "You must provide an email address to register." +msgstr "" + +#: RequireValidatedEmailPlugin.php:128 +msgid "" +"The Require Validated Email plugin disables posting for accounts that do not " +"have a validated email address." +msgstr "" diff --git a/plugins/TwitterBridge/README b/plugins/TwitterBridge/README index d0d34b7ef2..d7dfe20de5 100644 --- a/plugins/TwitterBridge/README +++ b/plugins/TwitterBridge/README @@ -59,8 +59,8 @@ unless you configure it with a consumer key and secret.) secret. The Twitter bridge will fall back on the global key pair if it can't find a local pair, e.g.: - $config['twitter']['global_consumer_key'] = 'YOUR_CONSUMER_KEY' - $config['twitter']['global_consumer_secret'] = 'YOUR_CONSUMER_SECRET' + $config['twitter']['global_consumer_key'] = 'YOUR_CONSUMER_KEY'; + $config['twitter']['global_consumer_secret'] = 'YOUR_CONSUMER_SECRET'; Administration panel -------------------- diff --git a/scripts/command.php b/scripts/command.php new file mode 100755 index 0000000000..6041b02eb1 --- /dev/null +++ b/scripts/command.php @@ -0,0 +1,80 @@ +#!/usr/bin/env php +. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); + +$shortoptions = 'i:n:'; +$longoptions = array('id=', 'nickname='); + +$helptext = <<handle_command($user, $body); + if ($cmd) { + $cmd->execute($chan); + return true; + } else { + $chan->error($user, "Not a valid command. Try 'help'?"); + return false; + } +} + + + +if (have_option('i', 'id')) { + $id = get_option_value('i', 'id'); + $user = User::staticGet('id', $id); + if (empty($user)) { + print "Can't find user with ID $id\n"; + exit(1); + } +} else if (have_option('n', 'nickname')) { + $nickname = get_option_value('n', 'nickname'); + $user = User::staticGet('nickname', $nickname); + if (empty($user)) { + print "Can't find user with nickname '$nickname'\n"; + exit(1); + } +} else { + print "You must provide either an ID or a nickname.\n\n"; + print $helptext; + exit(1); +} + +// @todo refactor the interactive console in console.php and use +// that to optionally make an interactive test console here too. +// Would be good to help people test commands when XMPP or email +// isn't available locally. +interpretCommand($user, implode(' ', $args)); + diff --git a/scripts/docgen.php b/scripts/docgen.php new file mode 100755 index 0000000000..78bbe37d8a --- /dev/null +++ b/scripts/docgen.php @@ -0,0 +1,84 @@ +#!/usr/bin/env php + STATUSNET_VERSION, + '%%indir%%' => $indir, + '%%pattern%%' => $pattern, + '%%outdir%%' => $outdir, + '%%htmlout%%' => $outdir, + '%%exclude%%' => $exclude, +); + +var_dump($replacements); + +$template = file_get_contents(dirname(__FILE__) . '/doxygen.tmpl'); +$template = strtr($template, $replacements); + +$templateFile = tempnam(sys_get_temp_dir(), 'statusnet-doxygen'); +file_put_contents($templateFile, $template); + +$cmd = "doxygen " . escapeshellarg($templateFile); + +$retval = 0; +passthru($cmd, $retval); + +if ($retval == 0) { + echo "Done!\n"; + unlink($templateFile); + exit(0); +} else { + echo "Failed! Doxygen config left in $templateFile\n"; + exit($retval); +} + diff --git a/scripts/doxygen.tmpl b/scripts/doxygen.tmpl new file mode 100644 index 0000000000..15d03e3bb9 --- /dev/null +++ b/scripts/doxygen.tmpl @@ -0,0 +1,1516 @@ +# Doxyfile 1.6.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = StatusNet + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = %%version%% + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = %%outdir%% + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = %%indir%% + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it parses. +# With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this tag. +# The format is ext=language, where ext is a file extension, and language is one of +# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, +# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penality. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will rougly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by +# doxygen. The layout file controls the global structure of the generated output files +# in an output format independent way. The create the layout file that represents +# doxygen's defaults, run doxygen with the -l option. You can optionally specify a +# file name after the option, if omitted DoxygenLayout.xml will be used as the name +# of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = %%indir%% + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = %%pattern%% + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +# fixme for some reason this doesn't work? + +EXCLUDE = config.php extlib local plugins scripts + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = %%exclude%% + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = %%htmlout%% + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER +# are set, an additional index file will be generated that can be used as input for +# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated +# HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. +# For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's +# filter section matches. +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) +# there is already a search function so this one should typically +# be disabled. + +SEARCHENGINE = YES + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = NO + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/scripts/fixup_files.php b/scripts/fixup_files.php new file mode 100755 index 0000000000..18feaf2218 --- /dev/null +++ b/scripts/fixup_files.php @@ -0,0 +1,77 @@ +#!/usr/bin/env php +. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); + +$longoptions = array('dry-run'); + +$helptext = <<title = 'h'; +$f->mimetype = 'h'; +$f->size = 0; +$f->protected = 0; +$f->find(); +echo "Found $f->N bad items:\n"; + +while ($f->fetch()) { + echo "$f->id $f->url"; + + $data = File_redirection::lookupWhere($f->url); + if ($dry) { + if (is_array($data)) { + echo " (unchanged)\n"; + } else { + echo " (unchanged, but embedding lookup failed)\n"; + } + } else { + // NULL out the mime/title/size/protected fields + $sql = sprintf("UPDATE file " . + "SET mimetype=null,title=null,size=null,protected=null " . + "WHERE id=%d", + $f->id); + $f->query($sql); + $f->decache(); + + if (is_array($data)) { + if ($f->saveOembed($data, $f->url)) { + echo " (ok)\n"; + } else { + echo " (ok, no embedding data)\n"; + } + } else { + echo " (ok, but embedding lookup failed)\n"; + } + } +} + +echo "done.\n"; + diff --git a/scripts/flushsite.php b/scripts/flushsite.php new file mode 100644 index 0000000000..b7f385ac45 --- /dev/null +++ b/scripts/flushsite.php @@ -0,0 +1,45 @@ +#!/usr/bin/env php +. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); + +$shortoptions = 'd'; +$longoptions = array('delete'); + +$helptext = << +Flush the site with the given name from memcached. + +END_OF_FLUSHSITE_HELP; + +require_once INSTALLDIR.'/scripts/commandline.inc'; + +$nickname = common_config('site', 'nickname'); + +$sn = Status_network::memGet('nickname', $nickname); + +if (empty($sn)) { + print "No such site.\n"; + exit(-1); +} + +print "Flushing cache for {$nickname}..."; +$sn->decache(); +print "OK.\n"; \ No newline at end of file diff --git a/scripts/imdaemon.php b/scripts/imdaemon.php index 4a2c942234..0ce74667c5 100755 --- a/scripts/imdaemon.php +++ b/scripts/imdaemon.php @@ -53,7 +53,7 @@ class ImDaemon extends SpawningDaemon { common_log(LOG_INFO, 'Waiting to listen to IM connections and queues'); - $master = new ImMaster($this->get_id()); + $master = new ImMaster($this->get_id(), $this->processManager()); $master->init($this->allsites); $master->service(); @@ -66,6 +66,14 @@ class ImDaemon extends SpawningDaemon class ImMaster extends IoMaster { + protected $processManager; + + function __construct($id, $processManager) + { + parent::__construct($id); + $this->processManager = $processManager; + } + /** * Initialize IoManagers for the currently configured site * which are appropriate to this instance. @@ -77,6 +85,7 @@ class ImMaster extends IoMaster $qm = QueueManager::get(); $qm->setActiveGroup('im'); $classes[] = $qm; + $classes[] = $this->processManager; } Event::handle('EndImDaemonIoManagers', array(&$classes)); foreach ($classes as $class) { @@ -85,6 +94,14 @@ class ImMaster extends IoMaster } } +if (version_compare(PHP_VERSION, '5.2.6', '<')) { + $arch = php_uname('m'); + if ($arch == 'x86_64' || $arch == 'amd64') { + print "Aborting daemon - 64-bit PHP prior to 5.2.6 has known bugs in stream_select; you are running " . PHP_VERSION . " on $arch.\n"; + exit(1); + } +} + if (have_option('i', 'id')) { $id = get_option_value('i', 'id'); } else if (count($args) > 0) { diff --git a/scripts/importtwitteratom.php b/scripts/importtwitteratom.php new file mode 100644 index 0000000000..7316f21080 --- /dev/null +++ b/scripts/importtwitteratom.php @@ -0,0 +1,192 @@ +#!/usr/bin/env php +. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); + +$shortoptions = 'i:n:f:'; +$longoptions = array('id=', 'nickname=', 'file='); + +$helptext = <<documentElement->namespaceURI != Activity::ATOM || + $dom->documentElement->localName != 'feed') { + throw new Exception("'$filename' is not an Atom feed."); + } + + return $dom; +} + +function importActivityStream($user, $doc) +{ + $feed = $doc->documentElement; + + $entries = $feed->getElementsByTagNameNS(Activity::ATOM, 'entry'); + + for ($i = $entries->length - 1; $i >= 0; $i--) { + $entry = $entries->item($i); + $activity = new Activity($entry, $feed); + $object = $activity->object; + if (!have_option('q', 'quiet')) { + print $activity->content . "\n"; + } + $html = getTweetHtml($object->link); + + $config = array('safe' => 1, + 'deny_attribute' => 'class,rel,id,style,on*'); + + $html = htmLawed($html, $config); + + $content = html_entity_decode(strip_tags($html)); + + $notice = Notice::saveNew($user->id, + $content, + 'importtwitter', + array('uri' => $object->id, + 'url' => $object->link, + 'rendered' => $html, + 'created' => common_sql_date($activity->time), + 'replies' => array(), + 'groups' => array())); + } +} + +function getTweetHtml($url) +{ + try { + $client = new HTTPClient(); + $response = $client->get($url); + } catch (HTTP_Request2_Exception $e) { + print "ERROR: HTTP response " . $e->getMessage() . "\n"; + return false; + } + + if (!$response->isOk()) { + print "ERROR: HTTP response " . $response->getCode() . "\n"; + return false; + } + + $body = $response->getBody(); + + return tweetHtmlFromBody($body); +} + +function tweetHtmlFromBody($body) +{ + $doc = DOMDocument::loadHTML($body); + $xpath = new DOMXPath($doc); + + $spans = $xpath->query('//span[@class="entry-content"]'); + + if ($spans->length == 0) { + print "ERROR: No content in tweet page.\n"; + return ''; + } + + $span = $spans->item(0); + + $children = $span->childNodes; + + $text = ''; + + for ($i = 0; $i < $children->length; $i++) { + $child = $children->item($i); + if ($child instanceof DOMElement && + $child->tagName == 'a' && + !preg_match('#^https?://#', $child->getAttribute('href'))) { + $child->setAttribute('href', 'http://twitter.com' . $child->getAttribute('href')); + } + $text .= $doc->saveXML($child); + } + + return $text; +} + +try { + + $doc = getAtomFeedDocument(); + $user = getUser(); + + importActivityStream($user, $doc); + +} catch (Exception $e) { + print $e->getMessage()."\n"; + exit(1); +} + diff --git a/scripts/queuedaemon.php b/scripts/queuedaemon.php index 6dba16f953..582a3dd888 100755 --- a/scripts/queuedaemon.php +++ b/scripts/queuedaemon.php @@ -105,7 +105,7 @@ class QueueDaemon extends SpawningDaemon { $this->log(LOG_INFO, 'checking for queued notices'); - $master = new QueueMaster($this->get_id()); + $master = new QueueMaster($this->get_id(), $this->processManager()); $master->init($this->allsites); try { $master->service(); @@ -125,6 +125,14 @@ class QueueDaemon extends SpawningDaemon class QueueMaster extends IoMaster { + protected $processManager; + + function __construct($id, $processManager) + { + parent::__construct($id); + $this->processManager = $processManager; + } + /** * Initialize IoManagers which are appropriate to this instance. */ @@ -135,6 +143,7 @@ class QueueMaster extends IoMaster $qm = QueueManager::get(); $qm->setActiveGroup('main'); $managers[] = $qm; + $managers[] = $this->processManager; } Event::handle('EndQueueDaemonIoManagers', array(&$managers)); diff --git a/tests/ActivityParseTests.php b/tests/ActivityParseTests.php index 7bf9cec7c4..9d8fd47af0 100644 --- a/tests/ActivityParseTests.php +++ b/tests/ActivityParseTests.php @@ -138,9 +138,83 @@ class ActivityParseTests extends PHPUnit_Framework_TestCase $this->assertEquals($poco->urls[0]->value, 'http://example.com/blog.html'); $this->assertEquals($poco->urls[0]->primary, 'true'); $this->assertEquals($act->actor->geopoint, '37.7749295 -122.4194155'); - } + public function testExample6() + { + global $_example6; + + $dom = DOMDocument::loadXML($_example6); + + $rss = $dom->documentElement; + + $channels = $dom->getElementsByTagName('channel'); + + $channel = $channels->item(0); + + $items = $channel->getElementsByTagName('item'); + + $item = $items->item(0); + + $act = new Activity($item, $channel); + + $this->assertEquals($act->verb, ActivityVerb::POST); + + $this->assertEquals($act->id, 'http://en.blog.wordpress.com/?p=3857'); + $this->assertEquals($act->link, 'http://en.blog.wordpress.com/2010/03/03/rub-a-dub-dub-in-the-pubsubhubbub/'); + $this->assertEquals($act->title, 'Rub-a-Dub-Dub in the PubSubHubbub'); + $this->assertEquals($act->time, 1267634892); + + $actor = $act->actor; + + $this->assertFalse(empty($actor)); + $this->assertEquals($actor->title, "Joseph Scott"); + } + + public function testExample7() + { + global $_example7; + + $dom = DOMDocument::loadXML($_example7); + + $rss = $dom->documentElement; + + $channels = $dom->getElementsByTagName('channel'); + + $channel = $channels->item(0); + + $items = $channel->getElementsByTagName('item'); + + $item = $items->item(0); + + $act = new Activity($item, $channel); + + $this->assertEquals(ActivityVerb::POST, $act->verb); + $this->assertEquals('http://evanpro.posterous.com/checking-out-captain-bones', $act->link); + $this->assertEquals('http://evanpro.posterous.com/checking-out-captain-bones', $act->id); + $this->assertEquals('Checking out captain bones', $act->title); + $this->assertEquals(1269095551, $act->time); + + $actor = $act->actor; + + $this->assertEquals(ActivityObject::PERSON, $actor->type); + $this->assertEquals('http://posterous.com/people/3sDslhaepotz', $actor->id); + $this->assertEquals('Evan Prodromou', $actor->title); + $this->assertNull($actor->summary); + $this->assertNull($actor->content); + $this->assertEquals('http://posterous.com/people/3sDslhaepotz', $actor->link); + $this->assertNull($actor->source); + $this->assertTrue(is_array($actor->avatarLinks)); + $this->assertEquals(1, count($actor->avatarLinks)); + $this->assertEquals('http://files.posterous.com/user_profile_pics/480326/2009-08-05-142447.jpg', + $actor->avatarLinks[0]); + $this->assertNotNull($actor->poco); + $this->assertEquals('evanpro', $actor->poco->preferredUsername); + $this->assertEquals('Evan Prodromou', $actor->poco->displayName); + $this->assertNull($actor->poco->note); + $this->assertNull($actor->poco->address); + $this->assertEquals(0, count($actor->poco->urls)); + } } $_example1 = << EXAMPLE5; + +$_example6 = << + + + + WordPress.com News + + http://en.blog.wordpress.com + The latest news on WordPress.com and the WordPress community. + Thu, 18 Mar 2010 23:25:35 +0000 + + http://wordpress.com/ + en + hourly + 1 + + + http://www.gravatar.com/blavatar/e6392390e3bcfadff3671c5a5653d95b?s=96&d=http://s2.wp.com/i/buttonw-com.png + WordPress.com News + http://en.blog.wordpress.com + + + +EXAMPLE6; + +$_example7 = << + + + evanpro's posterous + http://evanpro.posterous.com + Most recent posts at evanpro's posterous + posterous.com + + + + + Sat, 20 Mar 2010 07:32:31 -0700 + Checking out captain bones + http://evanpro.posterous.com/checking-out-captain-bones + http://evanpro.posterous.com/checking-out-captain-bones + + +

    Bones!

    + +

    + +

    Permalink + + | Leave a comment  » + +

    ]]> +
    + + http://files.posterous.com/user_profile_pics/480326/2009-08-05-142447.jpg + http://posterous.com/people/3sDslhaepotz + Evan + Prodromou + evanpro + Evan Prodromou + +
    +
    +
    +EXAMPLE7; diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 0246065a7f..d58684efbe 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -1,8 +1,8 @@ /** theme: base * * @package StatusNet - * @author Sarven Capadisli - * @copyright 2009 StatusNet, Inc. + * @author Sarven Capadisli + * @copyright 2009-2010 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ @@ -1284,7 +1284,18 @@ height:16px; position:relative; padding-left:16px; } -#attachments .attachment { +.notice .attachment.more { +text-indent:-9999px; +width:16px; +height:16px; +display:inline-block; +overflow:hidden; +vertical-align:middle; +margin-left:4px; +} + +#attachments .attachment, +.notice .attachment.more { padding-left:0; } .notice .attachment img { @@ -1326,7 +1337,7 @@ margin-bottom:0; padding:11px; min-height:auto; } -#jOverlayContent .external span { +#jOverlayContent .entry-title { display:block; margin-bottom:11px; } diff --git a/theme/base/css/thickbox.css b/theme/base/css/thickbox.css deleted file mode 100644 index d24b9bedff..0000000000 --- a/theme/base/css/thickbox.css +++ /dev/null @@ -1,163 +0,0 @@ -/* ----------------------------------------------------------------------------------------------------------------*/ -/* ---------->>> global settings needed for thickbox <<<-----------------------------------------------------------*/ -/* ----------------------------------------------------------------------------------------------------------------*/ -*{padding: 0; margin: 0;} - -/* ----------------------------------------------------------------------------------------------------------------*/ -/* ---------->>> thickbox specific link and font settings <<<------------------------------------------------------*/ -/* ----------------------------------------------------------------------------------------------------------------*/ -#TB_window { - font: 12px Arial, Helvetica, sans-serif; - color: #333333; -} - -#TB_secondLine { - font: 10px Arial, Helvetica, sans-serif; - color:#666666; -} - -#TB_window a:link {color: #666666;} -#TB_window a:visited {color: #666666;} -#TB_window a:hover {color: #000;} -#TB_window a:active {color: #666666;} -#TB_window a:focus{color: #666666;} - -/* ----------------------------------------------------------------------------------------------------------------*/ -/* ---------->>> thickbox settings <<<-----------------------------------------------------------------------------*/ -/* ----------------------------------------------------------------------------------------------------------------*/ -#TB_overlay { - position: fixed; - z-index:100; - top: 0px; - left: 0px; - height:100%; - width:100%; -} - -.TB_overlayMacFFBGHack {background: url(macFFBgHack.png) repeat;} -.TB_overlayBG { - background-color:#000; - filter:alpha(opacity=75); - -moz-opacity: 0.75; - opacity: 0.75; -} - -* html #TB_overlay { /* ie6 hack */ - position: absolute; - height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); -} - -#TB_window { - position: fixed; - background: #ffffff; - z-index: 102; - color:#000000; - display:none; - border: 4px solid #525252; - text-align:left; - top:50%; - left:50%; -} - -* html #TB_window { /* ie6 hack */ -position: absolute; -margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); -} - -#TB_window img#TB_Image { - display:block; - margin: 15px 0 0 15px; - border-right: 1px solid #ccc; - border-bottom: 1px solid #ccc; - border-top: 1px solid #666; - border-left: 1px solid #666; -} - -#TB_caption{ - height:25px; - padding:7px 30px 10px 25px; - float:left; -} - -#TB_closeWindow{ - height:25px; - padding:11px 25px 10px 0; - float:right; -} - -#TB_closeAjaxWindow{ - padding:7px 10px 5px 0; - margin-bottom:1px; - text-align:right; - float:right; -} - -#TB_ajaxWindowTitle{ - float:left; - padding:7px 0 5px 10px; - margin-bottom:1px; -} - -#TB_title{ - background-color:#e8e8e8; - height:27px; -} - -#TB_ajaxContent{ - clear:both; - padding:2px 15px 15px 15px; - overflow:auto; - text-align:left; - line-height:1.4em; -} - -#TB_ajaxContent.TB_modal{ - padding:15px; -} - -#TB_ajaxContent p{ - padding:5px 0px 5px 0px; -} - -#TB_load{ - position: fixed; - display:none; - height:13px; - width:208px; - z-index:103; - top: 50%; - left: 50%; - margin: -6px 0 0 -104px; /* -height/2 0 0 -width/2 */ -} - -* html #TB_load { /* ie6 hack */ -position: absolute; -margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); -} - -#TB_HideSelect{ - z-index:99; - position:fixed; - top: 0; - left: 0; - background-color:#fff; - border:none; - filter:alpha(opacity=0); - -moz-opacity: 0; - opacity: 0; - height:100%; - width:100%; -} - -* html #TB_HideSelect { /* ie6 hack */ - position: absolute; - height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); -} - -#TB_iframeContent{ - clear:both; - border:none; - margin-bottom:-1px; - margin-top:1px; - _margin-bottom:1px; -} diff --git a/theme/base/images/icons/icons-01.gif b/theme/base/images/icons/icons-01.gif index bf0f1230e5..e0850aa882 100644 Binary files a/theme/base/images/icons/icons-01.gif and b/theme/base/images/icons/icons-01.gif differ diff --git a/theme/biz/css/display.css b/theme/biz/css/display.css index f133ac30b9..3e97444f15 100644 --- a/theme/biz/css/display.css +++ b/theme/biz/css/display.css @@ -22,7 +22,7 @@ background:#144A6E url(../images/illustrations/illu_pattern-01.png) repeat-x; } address { -margin-right:7.18%; +margin-right:5.7%; } input, textarea, select { diff --git a/theme/biz/logo.png b/theme/biz/logo.png index 550d373fef..cf1839194a 100644 Binary files a/theme/biz/logo.png and b/theme/biz/logo.png differ diff --git a/theme/cloudy/css/display.css b/theme/cloudy/css/display.css index 285c2ad836..5bc32e6d95 100644 --- a/theme/cloudy/css/display.css +++ b/theme/cloudy/css/display.css @@ -1554,7 +1554,8 @@ display:none; } #public #core, -#showstream #core { +#showstream #core, +#showgroup #core { margin-top:10em; } #public.user_in #core, diff --git a/theme/cloudy/logo.png b/theme/cloudy/logo.png index 550d373fef..cf1839194a 100644 Binary files a/theme/cloudy/logo.png and b/theme/cloudy/logo.png differ diff --git a/theme/default/css/display.css b/theme/default/css/display.css index be341813a5..d7f15cc469 100644 --- a/theme/default/css/display.css +++ b/theme/default/css/display.css @@ -2,7 +2,7 @@ * * @package StatusNet * @author Sarven Capadisli - * @copyright 2009 StatusNet, Inc. + * @copyright 2009-2010 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ @@ -213,7 +213,7 @@ background-color:transparent; } #wrap form.processing input.submit, -.entity_actions a.processing, +#content a.processing, .dialogbox.processing .submit_dialogbox { background:#FFFFFF url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%; } @@ -410,6 +410,9 @@ background-position: 0 -1714px; .notice .attachment { background-position:0 -394px; } +.notice .attachment.more { +background-position:0 -2770px; +} #attachments .attachment { background:none; } @@ -432,10 +435,12 @@ background-position:0 -1582px; background-position:0 -1648px; } +.notices .attachment.more, .notices div.entry-content, .notices div.notice-options { opacity:0.4; } +.notices li:hover .attachment.more, .notices li:hover div.entry-content, .notices li:hover div.notice-options { opacity:1; @@ -443,6 +448,7 @@ opacity:1; .opaque { opacity:1 !important; } +.attachment.more, .notice-options a, .notice-options input { font-family:sans-serif; @@ -450,6 +456,12 @@ box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3); -moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3); -webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3); } +.attachment.more:focus { +box-shadow:none; +-moz-box-shadow:none; +-webkit-box-shadow:none; +outline:none; +} #content .notices li:hover, #content .applications li:hover, #content tbody tr:hover { diff --git a/theme/h4ck3r/logo.png b/theme/h4ck3r/logo.png index 550d373fef..cf1839194a 100644 Binary files a/theme/h4ck3r/logo.png and b/theme/h4ck3r/logo.png differ diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css index db85408ebd..d9f39e7803 100644 --- a/theme/identica/css/display.css +++ b/theme/identica/css/display.css @@ -2,7 +2,7 @@ * * @package StatusNet * @author Sarven Capadisli - * @copyright 2009 StatusNet, Inc. + * @copyright 2009-2010 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ @@ -214,7 +214,7 @@ background-color:transparent; } #wrap form.processing input.submit, -.entity_actions a.processing, +#content a.processing, .dialogbox.processing .submit_dialogbox { background:#FFFFFF url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%; } @@ -409,6 +409,9 @@ background-position: 0 -1714px; .notice .attachment { background-position:0 -394px; } +.notice .attachment.more { +background-position:0 -2770px; +} #attachments .attachment { background:none; } @@ -431,10 +434,12 @@ background-position:0 -1582px; background-position:0 -1648px; } +.notices .attachment.more, .notices div.entry-content, .notices div.notice-options { opacity:0.4; } +.notices li:hover .attachment.more, .notices li:hover div.entry-content, .notices li:hover div.notice-options { opacity:1; @@ -442,6 +447,7 @@ opacity:1; .opaque { opacity:1 !important; } +.attachment.more, .notice-options a, .notice-options input { font-family:sans-serif; @@ -449,6 +455,12 @@ box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3); -moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3); -webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3); } +.attachment.more:focus { +box-shadow:none; +-moz-box-shadow:none; +-webkit-box-shadow:none; +outline:none; +} #content .notices li:hover, #content .applications li:hover, #content tbody tr:hover {