diff options
Diffstat (limited to 'plugins/OStatus')
41 files changed, 5029 insertions, 638 deletions
diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index 6fef20d6f..f9e7adacd 100644 --- a/plugins/OStatus/OStatusPlugin.php +++ b/plugins/OStatus/OStatusPlugin.php @@ -50,8 +50,6 @@ class OStatusPlugin extends Plugin function onRouterInitialized($m) { // Discovery actions - $m->connect('.well-known/host-meta', - array('action' => 'hostmeta')); $m->connect('main/xrd', array('action' => 'userxrd')); $m->connect('main/ownerxrd', @@ -223,6 +221,7 @@ class OStatusPlugin extends Plugin array('nickname' => $profile->nickname)); $output->element('a', array('href' => $url, 'class' => 'entity_remote_subscribe'), + // TRANS: Link description for link to subscribe to a remote user. _m('Subscribe')); $output->elementEnd('li'); @@ -241,6 +240,7 @@ class OStatusPlugin extends Plugin array('group' => $group->nickname)); $output->element('a', array('href' => $url, 'class' => 'entity_remote_subscribe'), + // TRANS: Link description for link to join a remote group. _m('Join')); } @@ -248,17 +248,6 @@ class OStatusPlugin extends Plugin } /** - * Check if we've got remote replies to send via Salmon. - * - * @fixme push webfinger lookup & sending to a background queue - * @fixme also detect short-form name for remote subscribees where not ambiguous - */ - - function onEndNoticeSave($notice) - { - } - - /** * Find any explicit remote mentions. Accepted forms: * Webfinger: @user@example.com * Profile link: @example.com/mublog/user @@ -464,6 +453,7 @@ class OStatusPlugin extends Plugin } $url = $notice->url; + // TRANSLATE: %s is a domain. $title = sprintf(_m("Sent from %s via OStatus"), $domain); return false; } @@ -492,7 +482,7 @@ class OStatusPlugin extends Plugin * Tell the FeedSub infrastructure whether we have any active OStatus * usage for the feed; if not it'll be able to garbage-collect the * feed subscription. - * + * * @param FeedSub $feedsub * @param integer $count in/out * @return mixed hook return code @@ -535,6 +525,7 @@ class OStatusPlugin extends Plugin } if (!$oprofile->subscribe()) { + // TRANS: Exception. throw new Exception(_m('Could not set up remote subscription.')); } } @@ -564,23 +555,10 @@ class OStatusPlugin extends Plugin return true; } - $act = new Activity(); - - $act->verb = ActivityVerb::FOLLOW; - - $act->id = TagURI::mint('follow:%d:%d:%s', - $subscriber->id, - $other->id, - common_date_iso8601(time())); - - $act->time = time(); - $act->title = _("Follow"); - $act->content = sprintf(_("%s is now following %s."), - $subscriber->getBestName(), - $other->getBestName()); + $sub = Subscription::pkeyGet(array('subscriber' => $subscriber->id, + 'subscribed' => $other->id)); - $act->actor = ActivityObject::fromProfile($subscriber); - $act->object = ActivityObject::fromProfile($other); + $act = $sub->asActivity(); $oprofile->notifyActivity($act, $subscriber); @@ -622,8 +600,10 @@ class OStatusPlugin extends Plugin common_date_iso8601(time())); $act->time = time(); - $act->title = _("Unfollow"); - $act->content = sprintf(_("%s stopped following %s."), + $act->title = _m('Unfollow'); + // TRANS: Success message for unsubscribe from user attempt through OStatus. + // TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name. + $act->content = sprintf(_m('%1$s stopped following %2$s.'), $profile->getBestName(), $other->getBestName()); @@ -654,6 +634,9 @@ class OStatusPlugin extends Plugin throw new Exception(_m('Could not set up remote group membership.')); } + // NOTE: we don't use Group_member::asActivity() since that record + // has not yet been created. + $member = Profile::staticGet($user->id); $act = new Activity(); @@ -668,7 +651,9 @@ class OStatusPlugin extends Plugin $act->time = time(); $act->title = _m("Join"); - $act->content = sprintf(_m("%s has joined group %s."), + // TRANS: Success message for subscribe to group attempt through OStatus. + // TRANS: %1$s is the member name, %2$s is the subscribed group's name. + $act->content = sprintf(_m('%1$s has joined group %2$s.'), $member->getBestName(), $oprofile->getBestName()); @@ -676,6 +661,7 @@ class OStatusPlugin extends Plugin return true; } else { $oprofile->garbageCollect(); + // TRANS: Exception. throw new Exception(_m("Failed joining remote group.")); } } @@ -717,7 +703,9 @@ class OStatusPlugin extends Plugin $act->time = time(); $act->title = _m("Leave"); - $act->content = sprintf(_m("%s has left group %s."), + // TRANS: Success message for unsubscribe from group attempt through OStatus. + // TRANS: %1$s is the member name, %2$s is the unsubscribed group's name. + $act->content = sprintf(_m('%1$s has left group %2$s.'), $member->getBestName(), $oprofile->getBestName()); @@ -732,7 +720,6 @@ class OStatusPlugin extends Plugin * @param Notice $notice being favored * @return hook return value */ - function onEndFavorNotice(Profile $profile, Notice $notice) { $user = User::staticGet('id', $profile->id); @@ -747,22 +734,15 @@ class OStatusPlugin extends Plugin return true; } - $act = new Activity(); - - $act->verb = ActivityVerb::FAVORITE; - $act->id = TagURI::mint('favor:%d:%d:%s', - $profile->id, - $notice->id, - common_date_iso8601(time())); + $fav = Fave::pkeyGet(array('user_id' => $user->id, + 'notice_id' => $notice->id)); - $act->time = time(); - $act->title = _("Favor"); - $act->content = sprintf(_("%s marked notice %s as a favorite."), - $profile->getBestName(), - $notice->uri); + if (empty($fav)) { + // That's weird. + return true; + } - $act->actor = ActivityObject::fromProfile($profile); - $act->object = ActivityObject::fromNotice($notice); + $act = $fav->asActivity(); $oprofile->notifyActivity($act, $profile); @@ -800,8 +780,10 @@ class OStatusPlugin extends Plugin $notice->id, common_date_iso8601(time())); $act->time = time(); - $act->title = _("Disfavor"); - $act->content = sprintf(_("%s marked notice %s as no longer a favorite."), + $act->title = _m('Disfavor'); + // TRANS: Success message for remove a favorite notice through OStatus. + // TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice. + $act->content = sprintf(_m('%1$s marked notice %2$s as no longer a favorite.'), $profile->getBestName(), $notice->uri); @@ -875,8 +857,9 @@ class OStatusPlugin extends Plugin $action->elementStart('p', array('id' => 'entity_remote_subscribe', 'class' => 'entity_subscribe')); $action->element('a', array('href' => common_local_url($target), - 'class' => 'entity_remote_subscribe') - , _m('Remote')); + 'class' => 'entity_remote_subscribe'), + // TRANS: Link text for link to remote subscribe. + _m('Remote')); $action->elementEnd('p'); $action->elementEnd('div'); } @@ -915,7 +898,10 @@ class OStatusPlugin extends Plugin $profile->id, common_date_iso8601(time())); $act->time = time(); + // TRANS: Title for activity. $act->title = _m("Profile update"); + // TRANS: Ping text for remote profile update through OStatus. + // TRANS: %s is user that updated their profile. $act->content = sprintf(_m("%s has updated their profile page."), $profile->getBestName()); @@ -945,6 +931,7 @@ class OStatusPlugin extends Plugin array('nickname' => $profileUser->nickname)); $output->element('a', array('href' => $url, 'class' => 'entity_remote_subscribe'), + // TRANS: Link text for a user to subscribe to an OStatus user. _m('Subscribe')); $output->elementEnd('li'); } @@ -959,15 +946,15 @@ class OStatusPlugin extends Plugin 'version' => STATUSNET_VERSION, 'author' => 'Evan Prodromou, James Walker, Brion Vibber, Zach Copley', 'homepage' => 'http://status.net/wiki/Plugin:OStatus', - 'rawdescription' => - _m('Follow people across social networks that implement '. + // TRANS: Plugin description. + 'rawdescription' => _m('Follow people across social networks that implement '. '<a href="http://ostatus.org/">OStatus</a>.')); return true; } /** - * Utility function to check if the given URL is a canonical group profile + * Utility function to check if the given URI is a canonical group profile * page, and if so return the ID number. * * @param string $url @@ -975,11 +962,22 @@ class OStatusPlugin extends Plugin */ 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]); + $group = User_group::staticGet('uri', $url); + if ($group) { + $local = Local_group::staticGet('id', $group->id); + if ($local) { + return $group->id; + } + } else { + // To find local groups which haven't had their uri fields filled out... + // If the domain has changed since a subscriber got the URI, it'll + // be broken. + $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; } @@ -995,4 +993,26 @@ class OStatusPlugin extends Plugin $feed = $oprofile->feeduri; return false; } + + function onStartGetProfileFromURI($uri, &$profile) { + + // XXX: do discovery here instead (OStatus_profile::ensureProfileURI($uri)) + + $oprofile = Ostatus_profile::staticGet('uri', $uri); + + if (!empty($oprofile) && !$oprofile->isGroup()) { + $profile = $oprofile->localProfile(); + return false; + } + + return true; + } + + function onStartHostMetaLinks(&$links) { + $url = common_local_url('userxrd'); + $url.= '?uri={uri}'; + $links[] = array('rel' => Discovery::LRDD_REL, + 'template' => $url, + 'title' => array('Resource Descriptor')); + } } diff --git a/plugins/OStatus/actions/groupsalmon.php b/plugins/OStatus/actions/groupsalmon.php index d60725a71..3a3d63fe2 100644 --- a/plugins/OStatus/actions/groupsalmon.php +++ b/plugins/OStatus/actions/groupsalmon.php @@ -17,15 +17,14 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -/** - * @package OStatusPlugin - * @author James Walker <james@status.net> - */ - if (!defined('STATUSNET')) { exit(1); } +/** + * @package OStatusPlugin + * @author James Walker <james@status.net> + */ class GroupsalmonAction extends SalmonAction { var $group = null; @@ -37,17 +36,20 @@ class GroupsalmonAction extends SalmonAction $id = $this->trimmed('id'); if (!$id) { - $this->clientError(_('No ID.')); + // TRANS: Client error. + $this->clientError(_m('No ID.')); } $this->group = User_group::staticGet('id', $id); if (empty($this->group)) { - $this->clientError(_('No such group.')); + // TRANS: Client error. + $this->clientError(_m('No such group.')); } $oprofile = Ostatus_profile::staticGet('group_id', $id); if ($oprofile) { + // TRANS: Client error. $this->clientError(_m("Can't accept remote posts for a remote group.")); } @@ -57,11 +59,10 @@ class GroupsalmonAction extends SalmonAction /** * We've gotten a post event on the Salmon backchannel, probably a reply. */ - function handlePost() { // @fixme process all objects? - switch ($this->act->objects[0]->type) { + switch ($this->activity->objects[0]->type) { case ActivityObject::ARTICLE: case ActivityObject::BLOGENTRY: case ActivityObject::NOTE: @@ -69,18 +70,20 @@ class GroupsalmonAction extends SalmonAction case ActivityObject::COMMENT: break; default: + // TRANS: Client exception. throw new ClientException("Can't handle that kind of post."); } // Notice must be to the attention of this group - - $context = $this->act->context; + $context = $this->activity->context; if (empty($context->attention)) { + // TRANS: Client exception. throw new ClientException("Not to the attention of anyone."); } else { $uri = common_local_url('groupbyid', array('id' => $this->group->id)); if (!in_array($uri, $context->attention)) { + // TRANS: Client exception. throw new ClientException("Not to the attention of this group."); } } @@ -116,14 +119,15 @@ class GroupsalmonAction extends SalmonAction * currently we're doing the main logic in joingroup action * and so have to repeat it here. */ - function handleJoin() { $oprofile = $this->ensureProfile(); if (!$oprofile) { + // TRANS: Client error. $this->clientError(_m("Can't read profile to set up group membership.")); } if ($oprofile->isGroup()) { + // TRANS: Client error. $this->clientError(_m("Groups can't join groups.")); } @@ -137,7 +141,7 @@ class GroupsalmonAction extends SalmonAction } if (Group_block::isBlocked($this->group, $profile)) { - $this->clientError(_('You have been blocked from that group by the admin.'), 403); + $this->clientError(_m('You have been blocked from that group by the admin.'), 403); return false; } @@ -151,6 +155,7 @@ class GroupsalmonAction extends SalmonAction //Event::handle('EndJoinGroup', array($this->group, $profile)); //} } catch (Exception $e) { + // TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname. $this->serverError(sprintf(_m('Could not join remote user %1$s to group %2$s.'), $oprofile->uri, $this->group->nickname)); } @@ -159,7 +164,6 @@ class GroupsalmonAction extends SalmonAction /** * A remote user left our group. */ - function handleLeave() { $oprofile = $this->ensureProfile(); @@ -180,10 +184,10 @@ class GroupsalmonAction extends SalmonAction //Event::handle('EndLeaveGroup', array($this->group, $profile)); //} } catch (Exception $e) { + // TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname. $this->serverError(sprintf(_m('Could not remove remote user %1$s from group %2$s.'), $oprofile->uri, $this->group->nickname)); return; } } - } diff --git a/plugins/OStatus/actions/hostmeta.php b/plugins/OStatus/actions/hostmeta.php deleted file mode 100644 index 8ca07f916..000000000 --- a/plugins/OStatus/actions/hostmeta.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php -/* - * StatusNet - the distributed open-source microblogging tool - * Copyright (C) 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 - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -/** - * @package OStatusPlugin - * @maintainer James Walker <james@status.net> - */ - -if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } - -class HostMetaAction extends Action -{ - - function handle() - { - parent::handle(); - - $domain = common_config('site', 'server'); - $url = common_local_url('userxrd'); - $url.= '?uri={uri}'; - - $xrd = new XRD(); - $xrd->host = $domain; - $xrd->links[] = array('rel' => Discovery::LRDD_REL, - 'template' => $url, - 'title' => array('Resource Descriptor')); - - header('Content-type: application/xrd+xml'); - print $xrd->toXML(); - } -} diff --git a/plugins/OStatus/actions/ostatusgroup.php b/plugins/OStatus/actions/ostatusgroup.php index 1b368de63..7db00ffbe 100644 --- a/plugins/OStatus/actions/ostatusgroup.php +++ b/plugins/OStatus/actions/ostatusgroup.php @@ -72,13 +72,16 @@ class OStatusGroupAction extends OStatusSubAction $this->elementStart('ul', 'form_data'); $this->elementStart('li'); $this->input('profile', + // TRANS: Field label. _m('Join group'), $this->profile_uri, - _m("OStatus group's address, like http://example.net/group/nickname")); + // TRANS: Tooltip for field label "Join group". + _m("OStatus group's address, like http://example.net/group/nickname.")); $this->elementEnd('li'); $this->elementEnd('ul'); - $this->submit('validate', _m('Continue')); + // TRANS: Button text. + $this->submit('validate', _m('BUTTON','Continue')); $this->elementEnd('fieldset'); @@ -156,7 +159,6 @@ class OStatusGroupAction extends OStatusSubAction * * @return string Title of the page */ - function title() { // TRANS: Page title for OStatus remote group join form @@ -168,9 +170,9 @@ class OStatusGroupAction extends OStatusSubAction * * @return instructions for use */ - function getInstructions() { + // TRANS: Instructions. return _m('You can subscribe to groups from other supported sites. Paste the group\'s profile URI below:'); } diff --git a/plugins/OStatus/actions/ostatusinit.php b/plugins/OStatus/actions/ostatusinit.php index 22aea9f70..f576823e3 100644 --- a/plugins/OStatus/actions/ostatusinit.php +++ b/plugins/OStatus/actions/ostatusinit.php @@ -27,7 +27,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } class OStatusInitAction extends Action { - var $nickname; var $group; var $profile; @@ -38,6 +37,7 @@ class OStatusInitAction extends Action parent::prepare($args); if (common_logged_in()) { + // TRANS: Client error. $this->clientError(_m('You can use the local subscription!')); return false; } @@ -45,13 +45,13 @@ class OStatusInitAction extends Action // Local user or group the remote wants to subscribe to $this->nickname = $this->trimmed('nickname'); $this->group = $this->trimmed('group'); - + // Webfinger or profile URL of the remote user $this->profile = $this->trimmed('profile'); return true; } - + function handle($args) { parent::handle($args); @@ -69,7 +69,7 @@ class OStatusInitAction extends Action $this->showForm(); } } - + function showForm($err = null) { $this->err = $err; @@ -78,6 +78,7 @@ class OStatusInitAction extends Action $this->xw->startDocument('1.0', 'UTF-8'); $this->elementStart('html'); $this->elementStart('head'); + // TRANS: Form title. $this->element('title', null, _m('Subscribe to user')); $this->elementEnd('head'); $this->elementStart('body'); @@ -92,11 +93,15 @@ class OStatusInitAction extends Action function showContent() { if ($this->group) { + // TRANS: Form legend. $header = sprintf(_m('Join group %s'), $this->group); - $submit = _m('Join'); + // TRANS: Button text. + $submit = _m('BUTTON','Join'); } else { + // TRANS: Form legend. $header = sprintf(_m('Subscribe to %s'), $this->nickname); - $submit = _m('Subscribe'); + // TRANS: Button text. + $submit = _m('BUTTON','Subscribe'); } $this->elementStart('form', array('id' => 'form_ostatus_connect', 'method' => 'post', @@ -108,13 +113,16 @@ class OStatusInitAction extends Action $this->elementStart('ul', 'form_data'); $this->elementStart('li', array('id' => 'ostatus_nickname')); + // TRANS: Field label. $this->input('nickname', _m('User nickname'), $this->nickname, - _m('Nickname of the user you want to follow')); + _m('Nickname of the user you want to follow.')); $this->hidden('group', $this->group); // pass-through for magic links $this->elementEnd('li'); $this->elementStart('li', array('id' => 'ostatus_profile')); + // TRANS: Field label. $this->input('profile', _m('Profile Account'), $this->profile, - _m('Your account id (i.e. user@identi.ca)')); + // TRANS: Tooltip for field label "Profile Account". + _m('Your account id (e.g. user@identi.ca).')); $this->elementEnd('li'); $this->elementEnd('ul'); $this->submit('submit', $submit); @@ -135,6 +143,7 @@ class OStatusInitAction extends Action } elseif (strpos($this->profile, '@') !== false) { $this->connectWebfinger($this->profile); } else { + // TRANS: Client error. $this->clientError(_m("Must provide a remote profile.")); } } @@ -146,6 +155,7 @@ class OStatusInitAction extends Action $disco = new Discovery; $result = $disco->lookup($acct); if (!$result) { + // TRANS: Client error. $this->clientError(_m("Couldn't look up OStatus account profile.")); } @@ -158,6 +168,7 @@ class OStatusInitAction extends Action } } + // TRANS: Client error. $this->clientError(_m("Couldn't confirm remote profile address.")); } @@ -183,6 +194,7 @@ class OStatusInitAction extends Action if ($user) { return common_local_url('userbyid', array('id' => $user->id)); } else { + // TRANS: Client error. $this->clientError("No such user."); } } else if ($this->group) { @@ -190,16 +202,18 @@ class OStatusInitAction extends Action if ($group) { return common_local_url('groupbyid', array('id' => $group->group_id)); } else { + // TRANS: Client error. $this->clientError("No such group."); } } else { + // TRANS: Client error. $this->clientError("No local user or group nickname provided."); } } function title() { - return _m('OStatus Connect'); + // TRANS: Page title. + return _m('OStatus Connect'); } - } diff --git a/plugins/OStatus/actions/ostatussub.php b/plugins/OStatus/actions/ostatussub.php index 28714514f..493b51965 100644 --- a/plugins/OStatus/actions/ostatussub.php +++ b/plugins/OStatus/actions/ostatussub.php @@ -62,13 +62,15 @@ class OStatusSubAction extends Action $this->elementStart('ul', 'form_data'); $this->elementStart('li'); $this->input('profile', + // TRANS: Field label for a field that takes an OStatus user address. _m('Subscribe to'), $this->profile_uri, - _m("OStatus user's address, like nickname@example.com or http://example.net/nickname")); + // TRANS: Tooltip for field label "Subscribe to". + _m('OStatus user\'s address, like nickname@example.com or http://example.net/nickname')); $this->elementEnd('li'); $this->elementEnd('ul'); - - $this->submit('validate', _m('Continue')); + // TRANS: Button text. + $this->submit('validate', _m('BUTTON','Continue')); $this->elementEnd('fieldset'); @@ -103,9 +105,13 @@ class OStatusSubAction extends Action $this->hidden('profile', $this->profile_uri); if ($this->oprofile->isGroup()) { $this->submit('submit', _m('Join'), 'submit', null, - _m('Join this group')); + // TRANS: Button text. + // TRANS: Tooltip for button "Join". + _m('BUTTON','Join this group')); } else { - $this->submit('submit', _m('Confirm'), 'submit', null, + // TRANS: Button text. + $this->submit('submit', _m('BUTTON','Confirm'), 'submit', null, + // TRANS: Tooltip for button "Confirm". _m('Subscribe to this user')); } $this->elementEnd('fieldset'); @@ -156,7 +162,7 @@ class OStatusSubAction extends Action $this->elementStart('div', 'entity_profile vcard'); $this->elementStart('dl', 'entity_depiction'); - $this->element('dt', null, _('Photo')); + $this->element('dt', null, _m('Photo')); $this->elementStart('dd'); $this->element('img', array('src' => $avatar, 'class' => 'photo avatar', @@ -167,7 +173,7 @@ class OStatusSubAction extends Action $this->elementEnd('dl'); $this->elementStart('dl', 'entity_nickname'); - $this->element('dt', null, _('Nickname')); + $this->element('dt', null, _m('Nickname')); $this->elementStart('dd'); $hasFN = ($fullname !== '') ? 'nickname' : 'fn nickname'; $this->elementStart('a', array('href' => $profile, @@ -188,7 +194,7 @@ class OStatusSubAction extends Action } if (!is_null($location)) { $this->elementStart('dl', 'entity_location'); - $this->element('dt', null, _('Location')); + $this->element('dt', null, _m('Location')); $this->elementStart('dd', 'label'); $this->raw($location); $this->elementEnd('dd'); @@ -197,7 +203,7 @@ class OStatusSubAction extends Action if (!is_null($homepage)) { $this->elementStart('dl', 'entity_url'); - $this->element('dt', null, _('URL')); + $this->element('dt', null, _m('URL')); $this->elementStart('dd'); $this->elementStart('a', array('href' => $homepage, 'class' => 'url')); @@ -209,7 +215,7 @@ class OStatusSubAction extends Action if (!is_null($note)) { $this->elementStart('dl', 'entity_note'); - $this->element('dt', null, _('Note')); + $this->element('dt', null, _m('Note')); $this->elementStart('dd', 'note'); $this->raw($note); $this->elementEnd('dd'); @@ -244,32 +250,40 @@ class OStatusSubAction extends Action } else if (Validate::uri($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"); + // TRANS: Error text. + $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__); return false; } return true; } catch (FeedSubBadURLException $e) { - $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"); + // TRANS: Error text. + $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 URL or could not reach server.', __FILE__); } catch (FeedSubBadResponseException $e) { + // TRANS: Error text. $this->error = _m("Sorry, we could not reach that feed. Please try that OStatus address again later."); common_debug('Cannot read feed; server returned error.', __FILE__); } catch (FeedSubEmptyException $e) { + // TRANS: Error text. $this->error = _m("Sorry, we could not reach that feed. Please try that OStatus address again later."); common_debug('Cannot read feed; server returned an empty page.', __FILE__); } catch (FeedSubBadHTMLException $e) { + // TRANS: Error text. $this->error = _m("Sorry, we could not reach that feed. Please try that OStatus address again later."); common_debug('Bad HTML, could not find feed link.', __FILE__); } catch (FeedSubNoFeedException $e) { + // TRANS: Error text. $this->error = _m("Sorry, we could not reach that feed. Please try that OStatus address again later."); common_debug('Could not find a feed linked from this URL.', __FILE__); } catch (FeedSubUnrecognizedTypeException $e) { + // TRANS: Error text. $this->error = _m("Sorry, we could not reach that feed. Please try that OStatus address again later."); common_debug('Not a recognized feed type.', __FILE__); } catch (Exception $e) { // Any new ones we forgot about - $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"); + // TRANS: Error text. + $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(sprintf('Bad feed URL: %s %s', get_class($e), $e->getMessage()), __FILE__); } @@ -350,7 +364,7 @@ class OStatusSubAction extends Action // CSRF protection $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { - $this->showForm(_('There was a problem with your session token. '. + $this->showForm(_m('There was a problem with your session token. '. 'Try again, please.')); return; } @@ -377,6 +391,7 @@ class OStatusSubAction extends Action $this->xw->startDocument('1.0', 'UTF-8'); $this->elementStart('html'); $this->elementStart('head'); + // TRANS: Form title. $this->element('title', null, _m('Subscribe to user')); $this->elementEnd('head'); $this->elementStart('body'); @@ -408,6 +423,7 @@ class OStatusSubAction extends Action function getInstructions() { + // TRANS: Instructions. return _m('You can subscribe to users from other supported sites. Paste their address or profile URI below:'); } @@ -426,7 +442,6 @@ class OStatusSubAction extends Action * * @return void */ - function showContent() { if ($this->oprofile) { @@ -459,5 +474,4 @@ class OStatusSubAction extends Action function showNoticeForm() { // nop } - } diff --git a/plugins/OStatus/actions/ownerxrd.php b/plugins/OStatus/actions/ownerxrd.php index 9c141d8c7..9e84f72ec 100644 --- a/plugins/OStatus/actions/ownerxrd.php +++ b/plugins/OStatus/actions/ownerxrd.php @@ -32,15 +32,15 @@ class OwnerxrdAction extends XrdAction function prepare($args) { $this->user = User::siteOwner(); - + if (!$this->user) { - $this->clientError(_('No such user.'), 404); + $this->clientError(_m('No such user.'), 404); return false; } $nick = common_canonical_nickname($this->user->nickname); $acct = 'acct:' . $nick . '@' . common_config('site', 'server'); - + $this->xrd = new XRD(); // Check to see if a $config['webfinger']['owner'] has been set diff --git a/plugins/OStatus/actions/pushcallback.php b/plugins/OStatus/actions/pushcallback.php index 9a2067b8c..6eec1ad16 100644 --- a/plugins/OStatus/actions/pushcallback.php +++ b/plugins/OStatus/actions/pushcallback.php @@ -24,7 +24,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } - class PushCallbackAction extends Action { function handle() @@ -37,7 +36,7 @@ class PushCallbackAction extends Action $this->handleGet(); } } - + /** * Handler for POST content updates from the hub */ @@ -46,12 +45,13 @@ class PushCallbackAction extends Action $feedid = $this->arg('feed'); common_log(LOG_INFO, "POST for feed id $feedid"); if (!$feedid) { - throw new ServerException('Empty or invalid feed id', 400); + throw new ServerException(_m('Empty or invalid feed id.'), 400); } $feedsub = FeedSub::staticGet('id', $feedid); if (!$feedsub) { - throw new ServerException('Unknown PuSH feed id ' . $feedid, 400); + // TRANS: Server exception. %s is a feed ID. + throw new ServerException(sprintf(_m('Unknown PuSH feed id %s'),$feedid), 400); } $hmac = ''; @@ -70,7 +70,7 @@ class PushCallbackAction extends Action $qm = QueueManager::get(); $qm->enqueue($data, 'pushin'); } - + /** * Handler for GET verification requests from the hub. */ @@ -81,28 +81,34 @@ class PushCallbackAction extends Action $challenge = $this->arg('hub_challenge'); $lease_seconds = $this->arg('hub_lease_seconds'); $verify_token = $this->arg('hub_verify_token'); + common_log(LOG_INFO, __METHOD__ . ": sub verification mode: $mode topic: $topic challenge: $challenge lease_seconds: $lease_seconds verify_token: $verify_token"); if ($mode != 'subscribe' && $mode != 'unsubscribe') { - throw new ClientException("Bad hub.mode $mode", 404); + // TRANS: Client exception. %s is an invalid value for hub.mode. + throw new ClientException(sprintf(_m('Bad hub.mode "$s".',$mode)), 404); } $feedsub = FeedSub::staticGet('uri', $topic); if (!$feedsub) { - throw new ClientException("Bad hub.topic feed $topic", 404); + // TRANS: Client exception. %s is an invalid feed name. + throw new ClientException(sprintf(_m('Bad hub.topic feed "%s".'),$topic), 404); } if ($feedsub->verify_token !== $verify_token) { - throw new ClientException("Bad hub.verify_token $token for $topic", 404); + // TRANS: Client exception. %1$s the invalid token, %2$s is the topic for which the invalid token was given. + throw new ClientException(sprintf(_m('Bad hub.verify_token %1$s for %2$s.'),$token,$topic), 404); } if ($mode == 'subscribe') { // We may get re-sub requests legitimately. if ($feedsub->sub_state != 'subscribe' && $feedsub->sub_state != 'active') { - throw new ClientException("Unexpected subscribe request for $topic.", 404); + // TRANS: Client exception. %s is an invalid topic. + throw new ClientException(sprintf(_m('Unexpected subscribe request for %s.'),$topic), 404); } } else { if ($feedsub->sub_state != 'unsubscribe') { - throw new ClientException("Unexpected unsubscribe request for $topic.", 404); + // TRANS: Client exception. %s is an invalid topic. + throw new ClientException(sprintf(_m('Unexpected unsubscribe request for %s.'),$topic), 404); } } diff --git a/plugins/OStatus/actions/pushhub.php b/plugins/OStatus/actions/pushhub.php index 842d65e7d..68035ab5c 100644 --- a/plugins/OStatus/actions/pushhub.php +++ b/plugins/OStatus/actions/pushhub.php @@ -36,7 +36,6 @@ Things to consider... */ - class PushHubAction extends Action { function arg($arg, $def=null) @@ -63,9 +62,11 @@ class PushHubAction extends Action $this->subunsub($mode); break; case "publish": - throw new ClientException("Publishing outside feeds not supported.", 400); + // TRANS: Client exception. + throw new ClientException(_m('Publishing outside feeds not supported.'), 400); default: - throw new ClientException("Unrecognized mode '$mode'.", 400); + // TRANS: Client exception. %s is a mode. + throw new ClientException(sprintf(_m('Unrecognized mode "%s".'),$mode), 400); } } @@ -84,24 +85,28 @@ class PushHubAction extends Action $topic = $this->argUrl('hub.topic'); if (!$this->recognizedFeed($topic)) { - throw new ClientException("Unsupported hub.topic $topic; this hub only serves local user and group Atom feeds."); + // TRANS: Client exception. %s is a topic. + throw new ClientException(sprintf(_m('Unsupported hub.topic %s this hub only serves local user and group Atom feeds.'),$topic)); } $verify = $this->arg('hub.verify'); // @fixme may be multiple if ($verify != 'sync' && $verify != 'async') { - throw new ClientException("Invalid hub.verify $verify; must be sync or async."); + // TRANS: Client exception. + throw new ClientException(sprintf(_m('Invalid hub.verify "%s". It must be sync or async.'),$verify)); } $lease = $this->arg('hub.lease_seconds', null); if ($mode == 'subscribe' && $lease != '' && !preg_match('/^\d+$/', $lease)) { - throw new ClientException("Invalid hub.lease $lease; must be empty or positive integer."); + // TRANS: Client exception. + throw new ClientException(sprintf(_m('Invalid hub.lease "%s". It must be empty or positive integer.'),$lease)); } $token = $this->arg('hub.verify_token', null); $secret = $this->arg('hub.secret', null); if ($secret != '' && strlen($secret) >= 200) { - throw new ClientException("Invalid hub.secret $secret; must be under 200 bytes."); + // TRANS: Client exception. + throw new ClientException(sprintf(_m('Invalid hub.secret "%s". It must be under 200 bytes.'),$secret)); } $sub = HubSub::staticGet($topic, $callback); @@ -152,7 +157,8 @@ class PushHubAction extends Action if ($feed == $userFeed) { $user = User::staticGet('id', $id); if (!$user) { - throw new ClientException("Invalid hub.topic $feed; user doesn't exist."); + // TRANS: Client exception. + throw new ClientException(sprintt(_m('Invalid hub.topic "%s". User doesn\'t exist.'),$feed)); } else { return true; } @@ -160,7 +166,8 @@ class PushHubAction extends Action if ($feed == $groupFeed) { $user = User_group::staticGet('id', $id); if (!$user) { - throw new ClientException("Invalid hub.topic $feed; group doesn't exist."); + // TRANS: Client exception. + throw new ClientException(sprintf(_m('Invalid hub.topic "%s". Group doesn\'t exist.'),$feed)); } else { return true; } @@ -183,7 +190,9 @@ class PushHubAction extends Action if (Validate::uri($url, $params)) { return $url; } else { - throw new ClientException("Invalid URL passed for $arg: '$url'"); + // TRANS: Client exception. + // TRANS: %1$s is this argument to the method this exception occurs in, %2$s is a URL. + throw new ClientException(sprintf(_m('Invalid URL passed for %1$s: "%2$s"'),$arg,$url)); } } @@ -199,4 +208,3 @@ class PushHubAction extends Action return HubSub::staticGet($feed, $callback); } } - diff --git a/plugins/OStatus/actions/usersalmon.php b/plugins/OStatus/actions/usersalmon.php index 6c360c49f..e78c65330 100644 --- a/plugins/OStatus/actions/usersalmon.php +++ b/plugins/OStatus/actions/usersalmon.php @@ -17,15 +17,14 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -/** - * @package OStatusPlugin - * @author James Walker <james@status.net> - */ - if (!defined('STATUSNET')) { exit(1); } +/** + * @package OStatusPlugin + * @author James Walker <james@status.net> + */ class UsersalmonAction extends SalmonAction { function prepare($args) @@ -35,13 +34,13 @@ class UsersalmonAction extends SalmonAction $id = $this->trimmed('id'); if (!$id) { - $this->clientError(_('No ID.')); + $this->clientError(_m('No ID.')); } $this->user = User::staticGet('id', $id); if (empty($this->user)) { - $this->clientError(_('No such user.')); + $this->clientError(_m('No such user.')); } return true; @@ -55,10 +54,10 @@ class UsersalmonAction extends SalmonAction */ function handlePost() { - common_log(LOG_INFO, "Received post of '{$this->act->objects[0]->id}' from '{$this->act->actor->id}'"); + common_log(LOG_INFO, "Received post of '{$this->activity->objects[0]->id}' from '{$this->activity->actor->id}'"); // @fixme: process all activity objects? - switch ($this->act->objects[0]->type) { + switch ($this->activity->objects[0]->type) { case ActivityObject::ARTICLE: case ActivityObject::BLOGENTRY: case ActivityObject::NOTE: @@ -71,28 +70,34 @@ class UsersalmonAction extends SalmonAction // Notice must either be a) in reply to a notice by this user // or b) to the attention of this user + // or c) in reply to a notice to the attention of this user - $context = $this->act->context; + $context = $this->activity->context; if (!empty($context->replyToID)) { $notice = Notice::staticGet('uri', $context->replyToID); if (empty($notice)) { - throw new ClientException("In reply to unknown notice"); + // TRANS: Client exception. + throw new ClientException(_m('In reply to unknown notice.')); } - if ($notice->profile_id != $this->user->id) { - throw new ClientException("In reply to a notice not by this user"); + if ($notice->profile_id != $this->user->id && + !in_array($this->user->id, $notice->getReplies())) { + // TRANS: Client exception. + throw new ClientException(_m('In reply to a notice not by this user and not mentioning this user.')); } } else if (!empty($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!"); + // TRANS: Client exception. + throw new ClientException('To the attention of user(s), not including this one.'); } } else { - throw new ClientException("Not to anyone in reply to anything!"); + // TRANS: Client exception. + throw new ClientException('Not to anyone in reply to anything.'); } - $existing = Notice::staticGet('uri', $this->act->objects[0]->id); + $existing = Notice::staticGet('uri', $this->activity->objects[0]->id); if (!empty($existing)) { common_log(LOG_ERR, "Not saving notice '{$existing->uri}'; already exists."); @@ -106,7 +111,6 @@ class UsersalmonAction extends SalmonAction * We've gotten a follow/subscribe notification from a remote user. * Save a subscription relationship for them. */ - function handleFollow() { $oprofile = $this->ensureProfile(); @@ -143,18 +147,20 @@ class UsersalmonAction extends SalmonAction function handleFavorite() { - $notice = $this->getNotice($this->act->objects[0]); + $notice = $this->getNotice($this->activity->objects[0]); $profile = $this->ensureProfile()->localProfile(); $old = Fave::pkeyGet(array('user_id' => $profile->id, 'notice_id' => $notice->id)); if (!empty($old)) { - throw new ClientException("We already know that's a fave!"); + // TRANS: Client exception. + throw new ClientException(_('This is already a favorite.')); } if (!Fave::addNew($profile, $notice)) { - throw new ClientException("Could not save new favorite."); + // TRANS: Client exception. + throw new ClientException(_m('Could not save new favorite.')); } } @@ -164,13 +170,14 @@ class UsersalmonAction extends SalmonAction */ function handleUnfavorite() { - $notice = $this->getNotice($this->act->objects[0]); + $notice = $this->getNotice($this->activity->objects[0]); $profile = $this->ensureProfile()->localProfile(); $fave = Fave::pkeyGet(array('user_id' => $profile->id, 'notice_id' => $notice->id)); if (empty($fave)) { - throw new ClientException("Notice wasn't favorited!"); + // TRANS: Client exception. + throw new ClientException(_('Notice wasn\'t favorited!')); } $fave->delete(); @@ -184,7 +191,8 @@ class UsersalmonAction extends SalmonAction function getNotice($object) { if (!$object) { - throw new ClientException("Can't favorite/unfavorite without an object."); + // TRANS: Client exception. + throw new ClientException(_m('Can\'t favorite/unfavorite without an object.')); } switch ($object->type) { @@ -195,20 +203,22 @@ class UsersalmonAction extends SalmonAction case ActivityObject::COMMENT: break; default: - throw new ClientException("Can't handle that kind of object for liking/faving."); + // TRANS: Client exception. + throw new ClientException(_m('Can\'t handle that kind of object for liking/faving.')); } $notice = Notice::staticGet('uri', $object->id); if (empty($notice)) { - throw new ClientException("Notice with ID $object->id unknown."); + // TRANS: Client exception. %s is an object ID. + throw new ClientException(sprintf(_m('Notice with ID %s unknown.'),$object->id)); } if ($notice->profile_id != $this->user->id) { - throw new ClientException("Notice with ID $object->id not posted by $this->user->id."); + // TRANS: Client exception. %1$s is a notice ID, %2$s is a user ID. + throw new ClientException(sprintf(_m('Notice with ID %1$s not posted by %2$s.'),$object->id,$this->user->id)); } return $notice; } - } diff --git a/plugins/OStatus/actions/userxrd.php b/plugins/OStatus/actions/userxrd.php index 6a6886eb8..8179505a5 100644 --- a/plugins/OStatus/actions/userxrd.php +++ b/plugins/OStatus/actions/userxrd.php @@ -17,28 +17,28 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +if (!defined('STATUSNET')) { exit(1); } + /** * @package OStatusPlugin * @maintainer James Walker <james@status.net> */ - -if (!defined('STATUSNET')) { exit(1); } - class UserxrdAction extends XrdAction { - function prepare($args) { parent::prepare($args); $this->uri = $this->trimmed('uri'); $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 + // @fixme if domain checking is added, ensure that it will not + // cause problems with sites that have changed domains! $nick = common_canonical_nickname($nick); $this->user = User::staticGet('nickname', $nick); } @@ -46,7 +46,7 @@ class UserxrdAction extends XrdAction $this->user = User::staticGet('uri', $this->uri); } if (!$this->user) { - $this->clientError(_('No such user.'), 404); + $this->clientError(_m('No such user.'), 404); return false; } diff --git a/plugins/OStatus/classes/FeedSub.php b/plugins/OStatus/classes/FeedSub.php index dd1968db1..58beec673 100644 --- a/plugins/OStatus/classes/FeedSub.php +++ b/plugins/OStatus/classes/FeedSub.php @@ -39,7 +39,6 @@ PuSH subscription flow: hub sends us updates via POST */ - class FeedDBException extends FeedSubException { public $obj; @@ -88,7 +87,6 @@ class FeedSub extends Memcached_DataObject * * @return array array of column definitions */ - function table() { return array('id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, @@ -143,7 +141,6 @@ class FeedSub extends Memcached_DataObject * * @return array key definitions */ - function keys() { return array_keys($this->keyTypes()); @@ -157,7 +154,6 @@ class FeedSub extends Memcached_DataObject * * @return array key definitions */ - function keyTypes() { return array('id' => 'K', 'uri' => 'U'); @@ -249,7 +245,7 @@ class FeedSub extends Memcached_DataObject // We'll never actually get updates in this mode. return true; } else { - throw new ServerException("Attempting to start PuSH subscription for feed with no hub"); + throw new ServerException(_m('Attempting to start PuSH subscription for feed with no hub.')); } } @@ -279,7 +275,7 @@ class FeedSub extends Memcached_DataObject // We'll never actually get updates in this mode. return true; } else { - throw new ServerException("Attempting to end PuSH subscription for feed with no hub"); + throw new ServerException(_m('Attempting to end PuSH subscription for feed with no hub.')); } } @@ -500,6 +496,4 @@ class FeedSub extends Memcached_DataObject } return false; } - } - diff --git a/plugins/OStatus/classes/HubSub.php b/plugins/OStatus/classes/HubSub.php index 7db528a4e..825d36ebd 100644 --- a/plugins/OStatus/classes/HubSub.php +++ b/plugins/OStatus/classes/HubSub.php @@ -54,7 +54,6 @@ class HubSub extends Memcached_DataObject * * @return array array of column definitions */ - function table() { return array('hashkey' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL, @@ -112,7 +111,6 @@ class HubSub extends Memcached_DataObject * * @return array key definitions */ - function keyTypes() { return array('hashkey' => 'K'); @@ -206,7 +204,8 @@ class HubSub extends Memcached_DataObject if ($status >= 200 && $status < 300) { common_log(LOG_INFO, "Verified $mode of $this->callback:$this->topic"); } else { - throw new ClientException("Hub subscriber verification returned HTTP $status"); + // TRANS: Client exception. %s is a HTTP status code. + throw new ClientException(sprintf(_m('Hub subscriber verification returned HTTP %s.'),$status)); } $old = HubSub::staticGet($this->topic, $this->callback); @@ -307,9 +306,9 @@ class HubSub extends Memcached_DataObject /** * Queue up a large batch of pushes to multiple subscribers * for this same topic update. - * + * * If queues are disabled, this will run immediately. - * + * * @param string $atom well-formed Atom feed * @param array $pushCallbacks list of callback URLs */ @@ -352,11 +351,9 @@ class HubSub extends Memcached_DataObject if ($response->isOk()) { return true; } else { - throw new Exception("Callback returned status: " . - $response->getStatus() . - "; body: " . - trim($response->getBody())); + // TRANS: Exception. %1$s is a response status code, %2$s is the body of the response. + throw new Exception(sprintf(_m('Callback returned status: %1$s. Body: %2$s'), + $response->getStatus(),trim($response->getBody()))); } } } - diff --git a/plugins/OStatus/classes/Magicsig.php b/plugins/OStatus/classes/Magicsig.php index f8c56a05f..20025c37a 100644 --- a/plugins/OStatus/classes/Magicsig.php +++ b/plugins/OStatus/classes/Magicsig.php @@ -31,23 +31,22 @@ require_once 'Crypt/RSA.php'; class Magicsig extends Memcached_DataObject { - const PUBLICKEYREL = 'magic-public-key'; - + public $__table = 'magicsig'; public $user_id; public $keypair; public $alg; - + public $publicKey; public $privateKey; - + public function __construct($alg = 'RSA-SHA256') { $this->alg = $alg; } - + public /*static*/ function staticGet($k, $v=null) { $obj = parent::staticGet(__CLASS__, $k, $v); @@ -86,7 +85,6 @@ class Magicsig extends Memcached_DataObject 64, false)); } - function keys() { return array_keys($this->keyTypes()); @@ -111,7 +109,7 @@ class Magicsig extends Memcached_DataObject public function generate($user_id) { $rsa = new Crypt_RSA(); - + $keypair = $rsa->createKey(); $rsa->loadKey($keypair['privatekey']); @@ -121,12 +119,11 @@ class Magicsig extends Memcached_DataObject $this->publicKey = new Crypt_RSA(); $this->publicKey->loadKey($keypair['publickey']); - + $this->user_id = $user_id; $this->insert(); } - public function toString($full_pair = true) { $mod = Magicsig::base64_url_encode($this->publicKey->modulus->toBytes()); @@ -136,13 +133,13 @@ class Magicsig extends Memcached_DataObject $private_exp = '.' . Magicsig::base64_url_encode($this->privateKey->exponent->toBytes()); } - return 'RSA.' . $mod . '.' . $exp . $private_exp; + return 'RSA.' . $mod . '.' . $exp . $private_exp; } - + public static function fromString($text) { $magic_sig = new Magicsig(); - + // remove whitespace $text = preg_replace('/\s+/', '', $text); @@ -150,7 +147,7 @@ class Magicsig extends Memcached_DataObject if (!preg_match('/RSA\.([^\.]+)\.([^\.]+)(.([^\.]+))?/', $text, $matches)) { return false; } - + $mod = $matches[1]; $exp = $matches[2]; if (!empty($matches[4])) { @@ -184,7 +181,7 @@ class Magicsig extends Memcached_DataObject $this->publicKey = $rsa; } } - + public function getName() { return $this->alg; @@ -197,9 +194,8 @@ class Magicsig extends Memcached_DataObject case 'RSA-SHA256': return 'sha256'; } - } - + public function sign($bytes) { $sig = $this->privateKey->sign($bytes); @@ -223,5 +219,3 @@ class Magicsig extends Memcached_DataObject return base64_decode(strtr($input, '-_', '+/')); } } - - diff --git a/plugins/OStatus/classes/Ostatus_profile.php b/plugins/OStatus/classes/Ostatus_profile.php index 176066ef6..ee126c02a 100644 --- a/plugins/OStatus/classes/Ostatus_profile.php +++ b/plugins/OStatus/classes/Ostatus_profile.php @@ -146,9 +146,11 @@ class Ostatus_profile extends Managed_DataObject } else if ($this->group_id && !$this->profile_id) { return true; } else if ($this->group_id && $this->profile_id) { - throw new ServerException("Invalid ostatus_profile state: both group and profile IDs set for $this->uri"); + // TRANS: Server exception. + throw new ServerException(sprintf(_m('Invalid ostatus_profile state: both group and profile IDs set for %s.'),$this->uri)); } else { - throw new ServerException("Invalid ostatus_profile state: both group and profile IDs empty for $this->uri"); + // TRANS: Server exception. + throw new ServerException(sprintf(_m('Invalid ostatus_profile state: both group and profile IDs empty for %s.'),$this->uri)); } } @@ -236,7 +238,9 @@ class Ostatus_profile extends Managed_DataObject if ($type == 'object') { $type = get_class($actor); } - throw new ServerException("Invalid actor passed to " . __METHOD__ . ": " . $type); + // TRANS: Server exception. + // TRANS: %1$s is the method name the exception occured in, %2$s is the actor type. + throw new ServerException(sprintf(_m('Invalid actor passed to %1$s: %2$s.'),__METHOD__,$type)); } if ($object == null) { $object = $this; @@ -328,7 +332,8 @@ class Ostatus_profile extends Managed_DataObject } else if ($entry instanceof Notice) { return $preamble . $entry->asAtomEntry(true, true); } else { - throw new ServerException("Invalid type passed to Ostatus_profile::notify; must be XML string or Activity entry"); + // TRANS: Server exception. + throw new ServerException(_m('Invalid type passed to Ostatus_profile::notify. It must be XML string or Activity entry.')); } } @@ -358,7 +363,7 @@ class Ostatus_profile extends Managed_DataObject } else if ($feed->localName == 'rss') { // @fixme check namespace $this->processRssFeed($feed, $source); } else { - throw new Exception("Unknown feed format."); + throw new Exception(_m('Unknown feed format.')); } } @@ -381,7 +386,7 @@ class Ostatus_profile extends Managed_DataObject $channels = $rss->getElementsByTagName('channel'); if ($channels->length == 0) { - throw new Exception("RSS feed without a channel."); + throw new Exception(_m('RSS feed without a channel.')); } else if ($channels->length > 1) { common_log(LOG_WARNING, __METHOD__ . ": more than one channel in an RSS feed"); } @@ -403,26 +408,33 @@ class Ostatus_profile extends Managed_DataObject * @param DOMElement $feed for context * @param string $source identifier ("push" or "salmon") */ + public function processEntry($entry, $feed, $source) { $activity = new Activity($entry, $feed); - // @todo process all activity objects - switch ($activity->objects[0]->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 (Event::handle('StartHandleFeedEntry', array($activity))) { + + // @todo process all activity objects + switch ($activity->objects[0]->type) { + case ActivityObject::ARTICLE: + case ActivityObject::BLOGENTRY: + case ActivityObject::NOTE: + case ActivityObject::STATUS: + case ActivityObject::COMMENT: + case null: + if ($activity->verb == ActivityVerb::POST) { + $this->processPost($activity, $source); + } else { + common_log(LOG_INFO, "Ignoring activity with unrecognized verb $activity->verb"); + } + break; + default: + // TRANS: Client exception. + throw new ClientException(_m('Can\'t handle that kind of post.')); + } - if ($activity->verb == ActivityVerb::POST) { - $this->processPost($activity, $source); - } else { - common_log(LOG_INFO, "Ignoring activity with unrecognized verb $activity->verb"); + Event::handle('EndHandleFeedEntry', array($activity)); } } @@ -454,8 +466,11 @@ class Ostatus_profile extends Managed_DataObject } else if ($actor->id) { // We have an ActivityStreams actor with an explicit ID that doesn't match the feed owner. // This isn't what we expect from mainline OStatus person feeds! - // Group feeds go down another path, with different validation. - throw new Exception("Got an actor '{$actor->title}' ({$actor->id}) on single-user feed for {$this->uri}"); + // Group feeds go down another path, with different validation... + // Most likely this is a plain ol' blog feed of some kind which + // doesn't match our expectations. We'll take the entry, but ignore + // the <author> info. + common_log(LOG_WARNING, "Got an actor '{$actor->title}' ({$actor->id}) on single-user feed for {$this->uri}"); } else { // Plain <author> without ActivityStreams actor info. // We'll just ignore this info for now and save the update under the feed's identity. @@ -498,13 +513,14 @@ class Ostatus_profile extends Managed_DataObject $sourceContent = $note->title; } else { // @fixme fetch from $sourceUrl? - throw new ClientException("No content for notice {$sourceUri}"); + // TRANS: Client exception. %s is a source URL. + throw new ClientException(sprintf(_m('No content for notice %s.'),$sourceUri)); } // Get (safe!) HTML and text versions of the content $rendered = $this->purify($sourceContent); - $content = html_entity_decode(strip_tags($rendered)); + $content = html_entity_decode(strip_tags($rendered), ENT_QUOTES, 'UTF-8'); $shortened = common_shorten_links($content); @@ -515,7 +531,7 @@ class Ostatus_profile extends Managed_DataObject if (Notice::contentTooLong($shortened)) { $attachment = $this->saveHTMLFile($note->title, $rendered); - $summary = html_entity_decode(strip_tags($note->summary)); + $summary = html_entity_decode(strip_tags($note->summary), ENT_QUOTES, 'UTF-8'); if (empty($summary)) { $summary = $content; } @@ -529,12 +545,15 @@ class Ostatus_profile extends Managed_DataObject // We mark up the attachment link specially for the HTML output // so we can fold-out the full version inline. + + // TRANS: Shown when a notice is longer than supported and/or when attachments are present. + $showMoreText = _m('Show more'); $attachUrl = common_local_url('attachment', array('attachment' => $attachment->id)); $rendered = common_render_text($shortSummary) . '<a href="' . htmlspecialchars($attachUrl) .'"'. ' class="attachment more"' . - ' title="'. htmlspecialchars(_m('Show more')) . '">' . + ' title="'. htmlspecialchars($showMoreText) . '">' . '…' . '</a>'; } @@ -648,21 +667,7 @@ class Ostatus_profile extends Managed_DataObject continue; } - // Is the recipient a remote group? - $oprofile = Ostatus_profile::staticGet('uri', $recipient); - if ($oprofile) { - if ($oprofile->isGroup()) { - // Deliver to local members of this remote group. - // @fixme sender verification? - $groups[] = $oprofile->group_id; - } else { - common_log(LOG_DEBUG, "Skipping reply to remote profile $recipient"); - } - continue; - } - // Is the recipient a local group? - // @fixme uri on user_group isn't reliable yet // $group = User_group::staticGet('uri', $recipient); $id = OStatusPlugin::localGroupFromUrl($recipient); if ($id) { @@ -681,7 +686,22 @@ class Ostatus_profile extends Managed_DataObject } } - common_log(LOG_DEBUG, "Skipping reply to unrecognized profile $recipient"); + // Is the recipient a remote user or group? + try { + $oprofile = Ostatus_profile::ensureProfileURI($recipient); + if ($oprofile->isGroup()) { + // Deliver to local members of this remote group. + // @fixme sender verification? + $groups[] = $oprofile->group_id; + } else { + // may be canonicalized or something + $replies[] = $oprofile->uri; + } + continue; + } catch (Exception $e) { + // Neither a recognizable local nor remote user! + common_log(LOG_DEBUG, "Skipping reply to unrecognized profile $recipient: " . $e->getMessage()); + } } $attention_uris = $replies; @@ -719,7 +739,8 @@ class Ostatus_profile extends Managed_DataObject $response = $client->get($profile_url); if (!$response->isOk()) { - throw new Exception("Could not reach profile page: " . $profile_url); + // TRANS: Exception. %s is a profile URL. + throw new Exception(sprintf(_m('Could not reach profile page %s.'),$profile_url)); } // Check if we have a non-canonical URL @@ -776,7 +797,8 @@ class Ostatus_profile extends Managed_DataObject return self::ensureFeedURL($feedurl, $hints); } - throw new Exception("Could not find a feed URL for profile page " . $finalUrl); + // TRANS: Exception. + throw new Exception(sprintf(_m('Could not find a feed URL for profile page %s.'),$finalUrl)); } /** @@ -808,6 +830,7 @@ class Ostatus_profile extends Managed_DataObject $user = User::staticGet('id', $profile->id); if (!empty($user)) { + // @todo i18n FIXME: use sprintf and add i18n (?) throw new OStatusShadowException($profile, "'$profile_url' is the profile for local user '{$user->nickname}'."); } @@ -912,8 +935,7 @@ class Ostatus_profile extends Managed_DataObject } // XXX: make some educated guesses here - - throw new FeedSubException("Can't find enough profile information to make a feed."); + throw new FeedSubException(_m('Can\'t find enough profile information to make a feed.')); } /** @@ -972,7 +994,7 @@ class Ostatus_profile extends Managed_DataObject return; } if (!common_valid_http_url($url)) { - throw new ServerException(sprintf(_m("Invalid avatar URL %s"), $url)); + throw new ServerException(sprintf(_m("Invalid avatar URL %s."), $url)); } if ($this->isGroup()) { @@ -982,7 +1004,7 @@ class Ostatus_profile extends Managed_DataObject } if (!$self) { throw new ServerException(sprintf( - _m("Tried to update avatar for unsaved remote profile %s"), + _m("Tried to update avatar for unsaved remote profile %s."), $this->uri)); } @@ -990,7 +1012,7 @@ class Ostatus_profile extends Managed_DataObject // ripped from oauthstore.php (for old OMB client) $temp_filename = tempnam(sys_get_temp_dir(), 'listener_avatar'); if (!copy($url, $temp_filename)) { - throw new ServerException(sprintf(_m("Unable to fetch avatar from %s"), $url)); + throw new ServerException(sprintf(_m("Unable to fetch avatar from %s."), $url)); } if ($this->isGroup()) { @@ -1005,6 +1027,14 @@ class Ostatus_profile extends Managed_DataObject null, common_timestamp()); rename($temp_filename, Avatar::path($filename)); + // @fixme hardcoded chmod is lame, but seems to be necessary to + // keep from accidentally saving images from command-line (queues) + // that can't be read from web server, which causes hard-to-notice + // problems later on: + // + // http://status.net/open-source/issues/2663 + chmod(Avatar::path($filename), 0644); + $self->setOriginal($filename); $orig = clone($this); @@ -1020,7 +1050,7 @@ class Ostatus_profile extends Managed_DataObject * @return mixed URL string or false */ - protected static function getActivityObjectAvatar($object, $hints=array()) + public static function getActivityObjectAvatar($object, $hints=array()) { if ($object->avatarLinks) { $best = false; @@ -1173,7 +1203,7 @@ class Ostatus_profile extends Managed_DataObject if ($object->link && common_valid_http_url($object->link)) { return $object->link; } - throw new ServerException("No author ID URI found"); + throw new ServerException("No author ID URI found."); } /** @@ -1203,11 +1233,13 @@ class Ostatus_profile extends Managed_DataObject $user = User::staticGet('uri', $homeuri); if ($user) { - throw new Exception("Local user can't be referenced as remote."); + // TRANS: Exception. + throw new Exception(_m('Local user can\'t be referenced as remote.')); } if (OStatusPlugin::localGroupFromUrl($homeuri)) { - throw new Exception("Local group can't be referenced as remote."); + // TRANS: Exception. + throw new Exception(_m('Local group can\'t be referenced as remote.')); } if (array_key_exists('feedurl', $hints)) { @@ -1258,7 +1290,8 @@ class Ostatus_profile extends Managed_DataObject $oprofile->profile_id = $profile->insert(); if (!$oprofile->profile_id) { - throw new ServerException("Can't save local profile"); + // TRANS: Exception. + throw new ServerException(_m('Can\'t save local profile.')); } } else { $group = new User_group(); @@ -1268,14 +1301,16 @@ class Ostatus_profile extends Managed_DataObject $oprofile->group_id = $group->insert(); if (!$oprofile->group_id) { - throw new ServerException("Can't save local profile"); + // TRANS: Exception. + throw new ServerException(_m('Can\'t save local profile.')); } } $ok = $oprofile->insert(); if (!$ok) { - throw new ServerException("Can't save OStatus profile"); + // TRANS: Exception. + throw new ServerException(_m('Can\'t save OStatus profile.')); } $avatar = self::getActivityObjectAvatar($object, $hints); @@ -1317,7 +1352,7 @@ class Ostatus_profile extends Managed_DataObject } } - protected static function updateProfile($profile, $object, $hints=array()) + public static function updateProfile($profile, $object, $hints=array()) { $orig = clone($profile); @@ -1445,7 +1480,7 @@ class Ostatus_profile extends Managed_DataObject return $bio; } - protected static function getActivityObjectNickname($object, $hints=array()) + public static function getActivityObjectNickname($object, $hints=array()) { if ($object->poco) { if (!empty($object->poco->preferredUsername)) { @@ -1533,7 +1568,8 @@ class Ostatus_profile extends Managed_DataObject if ($uri !== false) { if (is_null($uri)) { // Negative cache entry - throw new Exception('Not a valid webfinger address.'); + // TRANS: Exception. + throw new Exception(_m('Not a valid webfinger address.')); } $oprofile = Ostatus_profile::staticGet('uri', $uri); if (!empty($oprofile)) { @@ -1560,7 +1596,8 @@ class Ostatus_profile extends Managed_DataObject // Save negative cache entry so we don't waste time looking it up again. // @fixme distinguish temporary failures? self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), null); - throw new Exception('Not a valid webfinger address.'); + // TRANS: Exception. + throw new Exception(_m('Not a valid webfinger address.')); } $hints = array('webfinger' => $addr); @@ -1641,7 +1678,8 @@ class Ostatus_profile extends Managed_DataObject if (!$profile_id) { common_log_db_error($profile, 'INSERT', __FILE__); - throw new Exception("Couldn't save profile for '$addr'"); + // TRANS: Exception. %s is a webfinger address. + throw new Exception(sprintf(_m('Couldn\'t save profile for "%s".'),$addr)); } $oprofile = new Ostatus_profile(); @@ -1659,14 +1697,16 @@ class Ostatus_profile extends Managed_DataObject if (!$result) { common_log_db_error($oprofile, 'INSERT', __FILE__); - throw new Exception("Couldn't save ostatus_profile for '$addr'"); + // TRANS: Exception. %s is a webfinger address. + throw new Exception(sprintf(_m('Couldn\'t save ostatus_profile for "%s".'),$addr)); } self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), $oprofile->uri); return $oprofile; } - throw new Exception("Couldn't find a valid profile for '$addr'"); + // TRANS: Exception. %s is a webfinger address. + throw new Exception(sprintf(_m('Couldn\'t find a valid profile for "%s".'),$addr)); } /** @@ -1708,11 +1748,42 @@ class Ostatus_profile extends Managed_DataObject if ($file_id === false) { common_log_db_error($file, "INSERT", __FILE__); - throw new ServerException(_('Could not store HTML content of long post as file.')); + throw new ServerException(_m('Could not store HTML content of long post as file.')); } return $file; } + + static function ensureProfileURI($uri) + { + $oprofile = null; + + // First, try to query it + + $oprofile = Ostatus_profile::staticGet('uri', $uri); + + // If unfound, do discovery stuff + + if (empty($oprofile)) { + if (preg_match("/^(\w+)\:(.*)/", $uri, $match)) { + $protocol = $match[1]; + switch ($protocol) { + case 'http': + case 'https': + $oprofile = Ostatus_profile::ensureProfileURL($uri); + break; + case 'acct': + case 'mailto': + $rest = $match[2]; + $oprofile = Ostatus_profile::ensureWebfinger($rest); + default: + common_log("Unrecognized URI protocol for profile: $protocol ($uri)"); + break; + } + } + } + return $oprofile; + } } /** @@ -1734,4 +1805,3 @@ class OStatusShadowException extends Exception parent::__construct($message); } } - diff --git a/plugins/OStatus/classes/Ostatus_source.php b/plugins/OStatus/classes/Ostatus_source.php index e6ce7d442..b76bbce56 100644 --- a/plugins/OStatus/classes/Ostatus_source.php +++ b/plugins/OStatus/classes/Ostatus_source.php @@ -21,7 +21,6 @@ * @package OStatusPlugin * @maintainer Brion Vibber <brion@status.net> */ - class Ostatus_source extends Memcached_DataObject { public $__table = 'ostatus_source'; @@ -43,7 +42,6 @@ class Ostatus_source extends Memcached_DataObject * * @return array array of column definitions */ - function table() { return array('notice_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, @@ -69,7 +67,6 @@ class Ostatus_source extends Memcached_DataObject * * @return array key definitions */ - function keys() { return array_keys($this->keyTypes()); @@ -83,7 +80,6 @@ class Ostatus_source extends Memcached_DataObject * * @return array key definitions */ - function keyTypes() { return array('notice_id' => 'K'); diff --git a/plugins/OStatus/lib/discovery.php b/plugins/OStatus/lib/discovery.php index 7187c1f3e..905ece2ca 100644 --- a/plugins/OStatus/lib/discovery.php +++ b/plugins/OStatus/lib/discovery.php @@ -106,7 +106,8 @@ class Discovery } } - throw new Exception('Unable to find services for '. $id); + // TRANS: Exception. + throw new Exception(sprintf(_m('Unable to find services for %s.'),$id)); } public static function getService($links, $service) { @@ -160,7 +161,7 @@ class Discovery_LRDD_Host_Meta implements Discovery_LRDD } else { $domain = parse_url($uri, PHP_URL_HOST); } - + $url = 'http://'. $domain .'/.well-known/host-meta'; $xrd = Discovery::fetchXrd($url); diff --git a/plugins/OStatus/lib/discoveryhints.php b/plugins/OStatus/lib/discoveryhints.php index 34c9be277..a98f4a6d6 100644 --- a/plugins/OStatus/lib/discoveryhints.php +++ b/plugins/OStatus/lib/discoveryhints.php @@ -20,7 +20,6 @@ */ class DiscoveryHints { - static function fromXRD($xrd) { $hints = array(); @@ -114,9 +113,10 @@ class DiscoveryHints { static function _hcard($body, $url) { - // DOMDocument::loadHTML may throw warnings on unrecognized elements. + // DOMDocument::loadHTML may throw warnings on unrecognized elements, + // and notices on unrecognized namespaces. - $old = error_reporting(error_reporting() & ~E_WARNING); + $old = error_reporting(error_reporting() & ~(E_WARNING | E_NOTICE)); $doc = new DOMDocument(); $doc->loadHTML($body); diff --git a/plugins/OStatus/lib/feeddiscovery.php b/plugins/OStatus/lib/feeddiscovery.php index a55399d7c..8a166a0be 100644 --- a/plugins/OStatus/lib/feeddiscovery.php +++ b/plugins/OStatus/lib/feeddiscovery.php @@ -196,8 +196,9 @@ class FeedDiscovery */ function discoverFromHTML($url, $body) { - // DOMDocument::loadHTML may throw warnings on unrecognized elements. - $old = error_reporting(error_reporting() & ~E_WARNING); + // DOMDocument::loadHTML may throw warnings on unrecognized elements, + // and notices on unrecognized namespaces. + $old = error_reporting(error_reporting() & ~(E_WARNING | E_NOTICE)); $dom = new DOMDocument(); $ok = $dom->loadHTML($body); error_reporting($old); diff --git a/plugins/OStatus/lib/hubconfqueuehandler.php b/plugins/OStatus/lib/hubconfqueuehandler.php index c8e0b72fe..8219f8420 100644 --- a/plugins/OStatus/lib/hubconfqueuehandler.php +++ b/plugins/OStatus/lib/hubconfqueuehandler.php @@ -51,4 +51,3 @@ class HubConfQueueHandler extends QueueHandler return true; } } - diff --git a/plugins/OStatus/lib/linkheader.php b/plugins/OStatus/lib/linkheader.php index cd78d31ce..efa3f65ff 100644 --- a/plugins/OStatus/lib/linkheader.php +++ b/plugins/OStatus/lib/linkheader.php @@ -1,4 +1,7 @@ <?php +/** + * @todo Add file header and documentation. + */ class LinkHeader { diff --git a/plugins/OStatus/lib/magicenvelope.php b/plugins/OStatus/lib/magicenvelope.php index 967e5f6d1..03e6f7c66 100644 --- a/plugins/OStatus/lib/magicenvelope.php +++ b/plugins/OStatus/lib/magicenvelope.php @@ -32,7 +32,7 @@ class MagicEnvelope const ENCODING = 'base64url'; const NS = 'http://salmon-protocol.org/ns/magic-env'; - + private function normalizeUser($user_id) { if (substr($user_id, 0, 5) == 'http:' || @@ -70,13 +70,14 @@ class MagicEnvelope $keypair = $parts[1]; } } - + if ($keypair) { return $keypair; } } } - throw new Exception('Unable to locate signer public key'); + // TRANS: Exception. + throw new Exception(_m('Unable to locate signer public key.')); } @@ -92,8 +93,6 @@ class MagicEnvelope 'sig' => $signature_alg->sign($armored_text), 'alg' => $signature_alg->getName() ); - - } public function toXML($env) { @@ -105,13 +104,12 @@ class MagicEnvelope $xs->element('me:alg', null, $env['alg']); $xs->element('me:sig', null, $env['sig']); $xs->elementEnd('me:env'); - + $string = $xs->getString(); common_debug($string); return $string; } - public function unfold($env) { $dom = new DOMDocument(); @@ -137,7 +135,7 @@ class MagicEnvelope return $dom->saveXML(); } - + public function getAuthor($text) { $doc = new DOMDocument(); if (!$doc->loadXML($text)) { @@ -154,12 +152,12 @@ class MagicEnvelope } } } - + public function checkAuthor($text, $signer_uri) { return ($this->getAuthor($text) == $signer_uri); } - + public function verify($env) { if ($env['alg'] != 'RSA-SHA256') { @@ -181,14 +179,14 @@ class MagicEnvelope common_log(LOG_DEBUG, "Salmon error: ".$e->getMessage()); return false; } - + $verifier = Magicsig::fromString($keypair); if (!$verifier) { common_log(LOG_DEBUG, "Salmon error: unable to parse keypair"); return false; } - + return $verifier->verify($env['data'], $env['sig']); } @@ -219,5 +217,4 @@ class MagicEnvelope 'sig' => preg_replace('/\s/', '', $sig_element->nodeValue), ); } - } diff --git a/plugins/OStatus/lib/ostatusqueuehandler.php b/plugins/OStatus/lib/ostatusqueuehandler.php index 8905d2e21..5e0ab46a5 100644 --- a/plugins/OStatus/lib/ostatusqueuehandler.php +++ b/plugins/OStatus/lib/ostatusqueuehandler.php @@ -67,6 +67,17 @@ class OStatusQueueHandler extends QueueHandler } } + if (!empty($this->notice->reply_to)) { + $replyTo = Notice::staticGet('id', $this->notice->reply_to); + if (!empty($replyTo)) { + foreach($replyTo->getReplies() as $profile_id) { + $oprofile = Ostatus_profile::staticGet('profile_id', $profile_id); + if ($oprofile) { + $this->pingReply($oprofile); + } + } + } + } return true; } @@ -161,7 +172,7 @@ class OStatusQueueHandler extends QueueHandler * Queue up direct feed update pushes to subscribers on our internal hub. * If there are a large number of subscriber sites, intermediate bulk * distribution triggers may be queued. - * + * * @param string $atom update feed, containing only new/changed items * @param HubSub $sub open query of subscribers */ @@ -210,6 +221,4 @@ class OStatusQueueHandler extends QueueHandler return $feed; } - } - diff --git a/plugins/OStatus/lib/pushinqueuehandler.php b/plugins/OStatus/lib/pushinqueuehandler.php index 1fd29ae30..965d04266 100644 --- a/plugins/OStatus/lib/pushinqueuehandler.php +++ b/plugins/OStatus/lib/pushinqueuehandler.php @@ -22,7 +22,6 @@ * @package FeedSub * @author Brion Vibber <brion@status.net> */ - class PushInQueueHandler extends QueueHandler { function transport() diff --git a/plugins/OStatus/lib/salmon.php b/plugins/OStatus/lib/salmon.php index ef7719a40..963da6508 100644 --- a/plugins/OStatus/lib/salmon.php +++ b/plugins/OStatus/lib/salmon.php @@ -31,10 +31,10 @@ class Salmon const REL_SALMON = 'salmon'; const REL_MENTIONED = 'mentioned'; - // XXX: these are deprecated + // XXX: these are deprecated const NS_REPLIES = "http://salmon-protocol.org/ns/salmon-replies"; const NS_MENTIONS = "http://salmon-protocol.org/ns/salmon-mention"; - + /** * Sign and post the given Atom entry as a Salmon message. * @@ -87,9 +87,10 @@ class Salmon // No keypair yet, let's generate one. $magickey = new Magicsig(); $magickey->generate($user->id); - } + } } else { - throw new Exception("Salmon invalid actor for signing"); + // TRANS: Exception. + throw new Exception(_m('Salmon invalid actor for signing.')); } try { @@ -100,11 +101,10 @@ class Salmon return $magic_env->toXML($env); } - public function verifyMagicEnv($text) { $magic_env = new MagicEnvelope(); - + $env = $magic_env->parse($text); return $magic_env->verify($env); diff --git a/plugins/OStatus/lib/salmonaction.php b/plugins/OStatus/lib/salmonaction.php index fa9dc3b1d..41bdb4892 100644 --- a/plugins/OStatus/lib/salmonaction.php +++ b/plugins/OStatus/lib/salmonaction.php @@ -38,36 +38,38 @@ class SalmonAction extends Action parent::prepare($args); if ($_SERVER['REQUEST_METHOD'] != 'POST') { + // TRANS: Client error. POST is a HTTP command. It should not be translated. $this->clientError(_m('This method requires a POST.')); } if (empty($_SERVER['CONTENT_TYPE']) || $_SERVER['CONTENT_TYPE'] != 'application/magic-envelope+xml') { - $this->clientError(_m('Salmon requires application/magic-envelope+xml')); + // TRANS: Client error. Do not translate "application/magic-envelope+xml" + $this->clientError(_m('Salmon requires "application/magic-envelope+xml".')); } $xml = file_get_contents('php://input'); - // Check the signature $salmon = new Salmon; if (!$salmon->verifyMagicEnv($xml)) { common_log(LOG_DEBUG, "Salmon signature verification failed."); + // TRANS: Client error. $this->clientError(_m('Salmon signature verification failed.')); } else { $magic_env = new MagicEnvelope(); $env = $magic_env->parse($xml); $xml = $magic_env->unfold($env); } - $dom = DOMDocument::loadXML($xml); if ($dom->documentElement->namespaceURI != Activity::ATOM || $dom->documentElement->localName != 'entry') { common_log(LOG_DEBUG, "Got invalid Salmon post: $xml"); + // TRANS: Client error. $this->clientError(_m('Salmon post must be an Atom entry.')); } - $this->act = new Activity($dom->documentElement); + $this->activity = new Activity($dom->documentElement); return true; } @@ -79,9 +81,9 @@ class SalmonAction extends Action { StatusNet::setApi(true); // Send smaller error pages - common_log(LOG_DEBUG, "Got a " . $this->act->verb); + common_log(LOG_DEBUG, "Got a " . $this->activity->verb); if (Event::handle('StartHandleSalmon', array($this->activity))) { - switch ($this->act->verb) + switch ($this->activity->verb) { case ActivityVerb::POST: $this->handlePost(); @@ -112,6 +114,7 @@ class SalmonAction extends Action $this->handleUpdateProfile(); break; default: + // TRANS: Client exception. throw new ClientException(_m("Unrecognized activity type.")); } Event::handle('EndHandleSalmon', array($this->activity)); @@ -120,41 +123,49 @@ class SalmonAction extends Action function handlePost() { + // TRANS: Client exception. throw new ClientException(_m("This target doesn't understand posts.")); } function handleFollow() { + // TRANS: Client exception. throw new ClientException(_m("This target doesn't understand follows.")); } function handleUnfollow() { + // TRANS: Client exception. throw new ClientException(_m("This target doesn't understand unfollows.")); } function handleFavorite() { + // TRANS: Client exception. throw new ClientException(_m("This target doesn't understand favorites.")); } function handleUnfavorite() { + // TRANS: Client exception. throw new ClientException(_m("This target doesn't understand unfavorites.")); } function handleShare() { + // TRANS: Client exception. throw new ClientException(_m("This target doesn't understand share events.")); } function handleJoin() { + // TRANS: Client exception. throw new ClientException(_m("This target doesn't understand joins.")); } function handleLeave() { + // TRANS: Client exception. throw new ClientException(_m("This target doesn't understand leave events.")); } @@ -164,12 +175,12 @@ class SalmonAction extends Action */ function handleUpdateProfile() { - $oprofile = Ostatus_profile::getActorProfile($this->act); + $oprofile = Ostatus_profile::getActorProfile($this->activity); if ($oprofile) { common_log(LOG_INFO, "Got a profile-update ping from $oprofile->uri"); - $oprofile->updateFromActivityObject($this->act->actor); + $oprofile->updateFromActivityObject($this->activity->actor); } else { - common_log(LOG_INFO, "Ignoring profile-update ping from unknown " . $this->act->actor->id); + common_log(LOG_INFO, "Ignoring profile-update ping from unknown " . $this->activity->actor->id); } } @@ -178,11 +189,12 @@ class SalmonAction extends Action */ function ensureProfile() { - $actor = $this->act->actor; + $actor = $this->activity->actor; if (empty($actor->id)) { common_log(LOG_ERR, "broken actor: " . var_export($actor, true)); - common_log(LOG_ERR, "activity with no actor: " . var_export($this->act, true)); - throw new Exception("Received a salmon slap from unidentified actor."); + common_log(LOG_ERR, "activity with no actor: " . var_export($this->activity, true)); + // TRANS: Exception. + throw new Exception(_m('Received a salmon slap from unidentified actor.')); } return Ostatus_profile::ensureActivityObjectProfile($actor); @@ -191,6 +203,6 @@ class SalmonAction extends Action function saveNotice() { $oprofile = $this->ensureProfile(); - return $oprofile->processPost($this->act, 'salmon'); + return $oprofile->processPost($this->activity, 'salmon'); } } diff --git a/plugins/OStatus/lib/salmonqueuehandler.php b/plugins/OStatus/lib/salmonqueuehandler.php index 7eeb5f8e9..56d3c9eff 100644 --- a/plugins/OStatus/lib/salmonqueuehandler.php +++ b/plugins/OStatus/lib/salmonqueuehandler.php @@ -36,7 +36,7 @@ class SalmonQueueHandler extends QueueHandler assert(is_string($data['entry'])); $actor = Profile::staticGet($data['actor']); - + $salmon = new Salmon(); $salmon->post($data['salmonuri'], $data['entry'], $actor); diff --git a/plugins/OStatus/lib/xrd.php b/plugins/OStatus/lib/xrd.php deleted file mode 100644 index a10b9f427..000000000 --- a/plugins/OStatus/lib/xrd.php +++ /dev/null @@ -1,172 +0,0 @@ -<?php -/** - * StatusNet - the distributed open-source microblogging tool - * Copyright (C) 2010, StatusNet, Inc. - * - * A sample module to show best practices for StatusNet plugins - * - * PHP version 5 - * - * 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 - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @package StatusNet - * @author James Walker <james@status.net> - * @copyright 2010 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 - * @link http://status.net/ - */ - - -class XRD -{ - const XML_NS = 'http://www.w3.org/2000/xmlns/'; - - const XRD_NS = 'http://docs.oasis-open.org/ns/xri/xrd-1.0'; - - const HOST_META_NS = 'http://host-meta.net/xrd/1.0'; - - public $expires; - - public $subject; - - public $host; - - public $alias = array(); - - public $types = array(); - - public $links = array(); - - public static function parse($xml) - { - $xrd = new XRD(); - - $dom = new DOMDocument(); - - // Don't spew XML warnings to output - $old = error_reporting(); - error_reporting($old & ~E_WARNING); - $ok = $dom->loadXML($xml); - error_reporting($old); - - if (!$ok) { - throw new Exception("Invalid XML"); - } - $xrd_element = $dom->getElementsByTagName('XRD')->item(0); - if (!$xrd_element) { - throw new Exception("Invalid XML, missing XRD root"); - } - - // Check for host-meta host - $host = $xrd_element->getElementsByTagName('Host')->item(0); - if ($host) { - $xrd->host = $host->nodeValue; - } - - // Loop through other elements - foreach ($xrd_element->childNodes as $node) { - if (!($node instanceof DOMElement)) { - continue; - } - switch ($node->tagName) { - case 'Expires': - $xrd->expires = $node->nodeValue; - break; - case 'Subject': - $xrd->subject = $node->nodeValue; - break; - - case 'Alias': - $xrd->alias[] = $node->nodeValue; - break; - - case 'Link': - $xrd->links[] = $xrd->parseLink($node); - break; - - case 'Type': - $xrd->types[] = $xrd->parseType($node); - break; - - } - } - return $xrd; - } - - public function toXML() - { - $xs = new XMLStringer(); - - $xs->startXML(); - $xs->elementStart('XRD', array('xmlns' => XRD::XRD_NS)); - - if ($this->host) { - $xs->element('hm:Host', array('xmlns:hm' => XRD::HOST_META_NS), $this->host); - } - - if ($this->expires) { - $xs->element('Expires', null, $this->expires); - } - - if ($this->subject) { - $xs->element('Subject', null, $this->subject); - } - - foreach ($this->alias as $alias) { - $xs->element('Alias', null, $alias); - } - - foreach ($this->links as $link) { - $titles = array(); - if (isset($link['title'])) { - $titles = $link['title']; - unset($link['title']); - } - $xs->elementStart('Link', $link); - foreach ($titles as $title) { - $xs->element('Title', null, $title); - } - $xs->elementEnd('Link'); - } - - $xs->elementEnd('XRD'); - - return $xs->getString(); - } - - function parseType($element) - { - return array(); - } - - function parseLink($element) - { - $link = array(); - $link['rel'] = $element->getAttribute('rel'); - $link['type'] = $element->getAttribute('type'); - $link['href'] = $element->getAttribute('href'); - $link['template'] = $element->getAttribute('template'); - foreach ($element->childNodes as $node) { - if ($node instanceof DOMElement) { - switch($node->tagName) { - case 'Title': - $link['title'][] = $node->nodeValue; - } - } - } - - return $link; - } -} - diff --git a/plugins/OStatus/lib/xrdaction.php b/plugins/OStatus/lib/xrdaction.php index d8cf648d6..c8b5beff3 100644 --- a/plugins/OStatus/lib/xrdaction.php +++ b/plugins/OStatus/lib/xrdaction.php @@ -26,13 +26,12 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } class XrdAction extends Action { - public $uri; - + public $user; public $xrd; - + function handle() { $nick = $this->user->nickname; @@ -104,5 +103,4 @@ class XrdAction extends Action header('Content-type: application/xrd+xml'); print $xrd->toXML(); } - } diff --git a/plugins/OStatus/locale/OStatus.pot b/plugins/OStatus/locale/OStatus.pot index 97d593ead..a94ea84dd 100644 --- a/plugins/OStatus/locale/OStatus.pot +++ b/plugins/OStatus/locale/OStatus.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-29 23:39+0000\n" +"POT-Creation-Date: 2010-10-04 22:30+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -16,316 +16,738 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: OStatusPlugin.php:210 OStatusPlugin.php:913 actions/ostatusinit.php:99 +#. TRANS: Link description for link to subscribe to a remote user. +#. TRANS: Link text for a user to subscribe to an OStatus user. +#: OStatusPlugin.php:227 OStatusPlugin.php:937 msgid "Subscribe" msgstr "" -#: OStatusPlugin.php:228 OStatusPlugin.php:635 actions/ostatussub.php:105 -#: actions/ostatusinit.php:96 +#. TRANS: Link description for link to join a remote group. +#: OStatusPlugin.php:246 OStatusPlugin.php:655 actions/ostatussub.php:107 msgid "Join" msgstr "" -#: OStatusPlugin.php:451 +#. TRANSLATE: %s is a domain. +#: OStatusPlugin.php:459 #, php-format msgid "Sent from %s via OStatus" msgstr "" -#: OStatusPlugin.php:503 +#. TRANS: Exception. +#: OStatusPlugin.php:531 msgid "Could not set up remote subscription." msgstr "" -#: OStatusPlugin.php:619 -msgid "Could not set up remote group membership." +#: OStatusPlugin.php:605 +msgid "Unfollow" +msgstr "" + +#. TRANS: Success message for unsubscribe from user attempt through OStatus. +#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name. +#: OStatusPlugin.php:608 +#, php-format +msgid "%1$s stopped following %2$s." msgstr "" #: OStatusPlugin.php:636 +msgid "Could not set up remote group membership." +msgstr "" + +#. TRANS: Success message for subscribe to group attempt through OStatus. +#. TRANS: %1$s is the member name, %2$s is the subscribed group's name. +#: OStatusPlugin.php:658 #, php-format -msgid "%s has joined group %s." +msgid "%1$s has joined group %2$s." msgstr "" -#: OStatusPlugin.php:644 +#. TRANS: Exception. +#: OStatusPlugin.php:667 msgid "Failed joining remote group." msgstr "" -#: OStatusPlugin.php:684 +#: OStatusPlugin.php:707 msgid "Leave" msgstr "" -#: OStatusPlugin.php:685 +#. TRANS: Success message for unsubscribe from group attempt through OStatus. +#. TRANS: %1$s is the member name, %2$s is the unsubscribed group's name. +#: OStatusPlugin.php:710 +#, php-format +msgid "%1$s has left group %2$s." +msgstr "" + +#: OStatusPlugin.php:785 +msgid "Disfavor" +msgstr "" + +#. TRANS: Success message for remove a favorite notice through OStatus. +#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice. +#: OStatusPlugin.php:788 #, php-format -msgid "%s has left group %s." +msgid "%1$s marked notice %2$s as no longer a favorite." msgstr "" -#: OStatusPlugin.php:844 +#. TRANS: Link text for link to remote subscribe. +#: OStatusPlugin.php:864 msgid "Remote" msgstr "" -#: OStatusPlugin.php:883 +#. TRANS: Title for activity. +#: OStatusPlugin.php:904 msgid "Profile update" msgstr "" -#: OStatusPlugin.php:884 +#. TRANS: Ping text for remote profile update through OStatus. +#. TRANS: %s is user that updated their profile. +#: OStatusPlugin.php:907 #, php-format msgid "%s has updated their profile page." msgstr "" -#: OStatusPlugin.php:928 +#. TRANS: Plugin description. +#: OStatusPlugin.php:952 msgid "" "Follow people across social networks that implement <a href=\"http://ostatus." "org/\">OStatus</a>." msgstr "" -#: classes/Ostatus_profile.php:566 +#: classes/FeedSub.php:248 +msgid "Attempting to start PuSH subscription for feed with no hub." +msgstr "" + +#: classes/FeedSub.php:278 +msgid "Attempting to end PuSH subscription for feed with no hub." +msgstr "" + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:188 +#, php-format +msgid "Invalid ostatus_profile state: both group and profile IDs set for %s." +msgstr "" + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:191 +#, php-format +msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s." +msgstr "" + +#. TRANS: Server exception. +#. TRANS: %1$s is the method name the exception occured in, %2$s is the actor type. +#: classes/Ostatus_profile.php:281 +#, php-format +msgid "Invalid actor passed to %1$s: %2$s." +msgstr "" + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:374 +msgid "" +"Invalid type passed to Ostatus_profile::notify. It must be XML string or " +"Activity entry." +msgstr "" + +#: classes/Ostatus_profile.php:404 +msgid "Unknown feed format." +msgstr "" + +#: classes/Ostatus_profile.php:427 +msgid "RSS feed without a channel." +msgstr "" + +#. TRANS: Client exception. +#: classes/Ostatus_profile.php:472 +msgid "Can't handle that kind of post." +msgstr "" + +#. TRANS: Client exception. %s is a source URL. +#: classes/Ostatus_profile.php:555 +#, php-format +msgid "No content for notice %s." +msgstr "" + +#. TRANS: Shown when a notice is longer than supported and/or when attachments are present. +#: classes/Ostatus_profile.php:588 msgid "Show more" msgstr "" -#: classes/Ostatus_profile.php:1004 +#. TRANS: Exception. %s is a profile URL. +#: classes/Ostatus_profile.php:781 +#, php-format +msgid "Could not reach profile page %s." +msgstr "" + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:839 +#, php-format +msgid "Could not find a feed URL for profile page %s." +msgstr "" + +#: classes/Ostatus_profile.php:976 +msgid "Can't find enough profile information to make a feed." +msgstr "" + +#: classes/Ostatus_profile.php:1035 +#, php-format +msgid "Invalid avatar URL %s." +msgstr "" + +#: classes/Ostatus_profile.php:1045 +#, php-format +msgid "Tried to update avatar for unsaved remote profile %s." +msgstr "" + +#: classes/Ostatus_profile.php:1053 +#, php-format +msgid "Unable to fetch avatar from %s." +msgstr "" + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1275 +msgid "Local user can't be referenced as remote." +msgstr "" + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1280 +msgid "Local group can't be referenced as remote." +msgstr "" + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1332 classes/Ostatus_profile.php:1343 +msgid "Can't save local profile." +msgstr "" + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1351 +msgid "Can't save OStatus profile." +msgstr "" + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1610 classes/Ostatus_profile.php:1638 +msgid "Not a valid webfinger address." +msgstr "" + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1720 +#, php-format +msgid "Couldn't save profile for \"%s\"." +msgstr "" + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1739 +#, php-format +msgid "Couldn't save ostatus_profile for \"%s\"." +msgstr "" + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1747 #, php-format -msgid "Invalid avatar URL %s" +msgid "Couldn't find a valid profile for \"%s\"." +msgstr "" + +#: classes/Ostatus_profile.php:1789 +msgid "Could not store HTML content of long post as file." msgstr "" -#: classes/Ostatus_profile.php:1014 +#. TRANS: Client exception. %s is a HTTP status code. +#: classes/HubSub.php:208 #, php-format -msgid "Tried to update avatar for unsaved remote profile %s" +msgid "Hub subscriber verification returned HTTP %s." msgstr "" -#: classes/Ostatus_profile.php:1022 +#. TRANS: Exception. %1$s is a response status code, %2$s is the body of the response. +#: classes/HubSub.php:355 #, php-format -msgid "Unable to fetch avatar from %s" +msgid "Callback returned status: %1$s. Body: %2$s" msgstr "" -#: lib/salmonaction.php:41 +#. TRANS: Client error. POST is a HTTP command. It should not be translated. +#: lib/salmonaction.php:42 msgid "This method requires a POST." msgstr "" -#: lib/salmonaction.php:45 -msgid "Salmon requires application/magic-envelope+xml" +#. TRANS: Client error. Do not translate "application/magic-envelope+xml" +#: lib/salmonaction.php:47 +msgid "Salmon requires \"application/magic-envelope+xml\"." msgstr "" -#: lib/salmonaction.php:55 +#. TRANS: Client error. +#: lib/salmonaction.php:57 msgid "Salmon signature verification failed." msgstr "" -#: lib/salmonaction.php:67 +#. TRANS: Client error. +#: lib/salmonaction.php:69 msgid "Salmon post must be an Atom entry." msgstr "" -#: lib/salmonaction.php:115 +#. TRANS: Client exception. +#: lib/salmonaction.php:118 msgid "Unrecognized activity type." msgstr "" -#: lib/salmonaction.php:123 +#. TRANS: Client exception. +#: lib/salmonaction.php:127 msgid "This target doesn't understand posts." msgstr "" -#: lib/salmonaction.php:128 +#. TRANS: Client exception. +#: lib/salmonaction.php:133 msgid "This target doesn't understand follows." msgstr "" -#: lib/salmonaction.php:133 +#. TRANS: Client exception. +#: lib/salmonaction.php:139 msgid "This target doesn't understand unfollows." msgstr "" -#: lib/salmonaction.php:138 +#. TRANS: Client exception. +#: lib/salmonaction.php:145 msgid "This target doesn't understand favorites." msgstr "" -#: lib/salmonaction.php:143 +#. TRANS: Client exception. +#: lib/salmonaction.php:151 msgid "This target doesn't understand unfavorites." msgstr "" -#: lib/salmonaction.php:148 +#. TRANS: Client exception. +#: lib/salmonaction.php:157 msgid "This target doesn't understand share events." msgstr "" -#: lib/salmonaction.php:153 +#. TRANS: Client exception. +#: lib/salmonaction.php:163 msgid "This target doesn't understand joins." msgstr "" -#: lib/salmonaction.php:158 +#. TRANS: Client exception. +#: lib/salmonaction.php:169 msgid "This target doesn't understand leave events." msgstr "" +#. TRANS: Exception. +#: lib/salmonaction.php:197 +msgid "Received a salmon slap from unidentified actor." +msgstr "" + +#. TRANS: Exception. +#: lib/discovery.php:110 +#, php-format +msgid "Unable to find services for %s." +msgstr "" + +#. TRANS: Exception. +#: lib/xrd.php:64 +msgid "Invalid XML." +msgstr "" + +#. TRANS: Exception. +#: lib/xrd.php:69 +msgid "Invalid XML, missing XRD root." +msgstr "" + +#. TRANS: Exception. +#: lib/magicenvelope.php:80 +msgid "Unable to locate signer public key." +msgstr "" + +#. TRANS: Exception. +#: lib/salmon.php:93 +msgid "Salmon invalid actor for signing." +msgstr "" + #: tests/gettext-speedtest.php:57 msgid "Feeds" msgstr "" -#: actions/ostatusgroup.php:75 +#. TRANS: Client exception. +#: actions/pushhub.php:66 +msgid "Publishing outside feeds not supported." +msgstr "" + +#. TRANS: Client exception. %s is a mode. +#: actions/pushhub.php:69 +#, php-format +msgid "Unrecognized mode \"%s\"." +msgstr "" + +#. TRANS: Client exception. %s is a topic. +#: actions/pushhub.php:89 +#, php-format +msgid "" +"Unsupported hub.topic %s this hub only serves local user and group Atom " +"feeds." +msgstr "" + +#. TRANS: Client exception. +#: actions/pushhub.php:95 +#, php-format +msgid "Invalid hub.verify \"%s\". It must be sync or async." +msgstr "" + +#. TRANS: Client exception. +#: actions/pushhub.php:101 +#, php-format +msgid "Invalid hub.lease \"%s\". It must be empty or positive integer." +msgstr "" + +#. TRANS: Client exception. +#: actions/pushhub.php:109 +#, php-format +msgid "Invalid hub.secret \"%s\". It must be under 200 bytes." +msgstr "" + +#. TRANS: Client exception. +#: actions/pushhub.php:161 +#, php-format +msgid "Invalid hub.topic \"%s\". User doesn't exist." +msgstr "" + +#. TRANS: Client exception. +#: actions/pushhub.php:170 +#, php-format +msgid "Invalid hub.topic \"%s\". Group doesn't exist." +msgstr "" + +#. TRANS: Client exception. +#. TRANS: %1$s is this argument to the method this exception occurs in, %2$s is a URL. +#: actions/pushhub.php:195 +#, php-format +msgid "Invalid URL passed for %1$s: \"%2$s\"" +msgstr "" + +#: actions/userxrd.php:49 actions/ownerxrd.php:37 actions/usersalmon.php:43 +msgid "No such user." +msgstr "" + +#. TRANS: Client error. +#: actions/usersalmon.php:37 actions/groupsalmon.php:40 +msgid "No ID." +msgstr "" + +#. TRANS: Client exception. +#: actions/usersalmon.php:81 +msgid "In reply to unknown notice." +msgstr "" + +#. TRANS: Client exception. +#: actions/usersalmon.php:86 +msgid "In reply to a notice not by this user and not mentioning this user." +msgstr "" + +#. TRANS: Client exception. +#: actions/usersalmon.php:163 +msgid "Could not save new favorite." +msgstr "" + +#. TRANS: Client exception. +#: actions/usersalmon.php:195 +msgid "Can't favorite/unfavorite without an object." +msgstr "" + +#. TRANS: Client exception. +#: actions/usersalmon.php:207 +msgid "Can't handle that kind of object for liking/faving." +msgstr "" + +#. TRANS: Client exception. %s is an object ID. +#: actions/usersalmon.php:214 +#, php-format +msgid "Notice with ID %s unknown." +msgstr "" + +#. TRANS: Client exception. %1$s is a notice ID, %2$s is a user ID. +#: actions/usersalmon.php:219 +#, php-format +msgid "Notice with ID %1$s not posted by %2$s." +msgstr "" + +#. TRANS: Field label. +#: actions/ostatusgroup.php:76 msgid "Join group" msgstr "" -#: actions/ostatusgroup.php:77 -msgid "OStatus group's address, like http://example.net/group/nickname" +#. TRANS: Tooltip for field label "Join group". +#: actions/ostatusgroup.php:79 +msgid "OStatus group's address, like http://example.net/group/nickname." msgstr "" -#: actions/ostatusgroup.php:81 actions/ostatussub.php:71 +#. TRANS: Button text. +#: actions/ostatusgroup.php:84 actions/ostatussub.php:73 +msgctxt "BUTTON" msgid "Continue" msgstr "" -#: actions/ostatusgroup.php:100 +#: actions/ostatusgroup.php:103 msgid "You are already a member of this group." msgstr "" #. TRANS: OStatus remote group subscription dialog error. -#: actions/ostatusgroup.php:135 +#: actions/ostatusgroup.php:138 msgid "Already a member!" msgstr "" #. TRANS: OStatus remote group subscription dialog error. -#: actions/ostatusgroup.php:146 +#: actions/ostatusgroup.php:149 msgid "Remote group join failed!" msgstr "" #. TRANS: OStatus remote group subscription dialog error. -#: actions/ostatusgroup.php:150 +#: actions/ostatusgroup.php:153 msgid "Remote group join aborted!" msgstr "" #. TRANS: Page title for OStatus remote group join form -#: actions/ostatusgroup.php:163 +#: actions/ostatusgroup.php:165 msgid "Confirm joining remote group" msgstr "" -#: actions/ostatusgroup.php:174 +#. TRANS: Instructions. +#: actions/ostatusgroup.php:176 msgid "" "You can subscribe to groups from other supported sites. Paste the group's " "profile URI below:" msgstr "" -#: actions/groupsalmon.php:51 +#. TRANS: Client error. +#: actions/groupsalmon.php:47 +msgid "No such group." +msgstr "" + +#. TRANS: Client error. +#: actions/groupsalmon.php:53 msgid "Can't accept remote posts for a remote group." msgstr "" -#: actions/groupsalmon.php:124 +#. TRANS: Client error. +#: actions/groupsalmon.php:127 msgid "Can't read profile to set up group membership." msgstr "" -#: actions/groupsalmon.php:127 actions/groupsalmon.php:170 +#. TRANS: Client error. +#: actions/groupsalmon.php:131 actions/groupsalmon.php:174 msgid "Groups can't join groups." msgstr "" -#: actions/groupsalmon.php:154 +#: actions/groupsalmon.php:144 +msgid "You have been blocked from that group by the admin." +msgstr "" + +#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname. +#: actions/groupsalmon.php:159 #, php-format msgid "Could not join remote user %1$s to group %2$s." msgstr "" -#: actions/groupsalmon.php:167 +#: actions/groupsalmon.php:171 msgid "Can't read profile to cancel group membership." msgstr "" -#: actions/groupsalmon.php:183 +#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname. +#: actions/groupsalmon.php:188 #, php-format msgid "Could not remove remote user %1$s from group %2$s." msgstr "" -#: actions/ostatussub.php:65 +#. TRANS: Field label for a field that takes an OStatus user address. +#: actions/ostatussub.php:66 msgid "Subscribe to" msgstr "" -#: actions/ostatussub.php:67 +#. TRANS: Tooltip for field label "Subscribe to". +#: actions/ostatussub.php:69 msgid "" "OStatus user's address, like nickname@example.com or http://example.net/" "nickname" msgstr "" -#: actions/ostatussub.php:106 +#. TRANS: Button text. +#. TRANS: Tooltip for button "Join". +#: actions/ostatussub.php:110 +msgctxt "BUTTON" msgid "Join this group" msgstr "" -#. TRANS: Page title for OStatus remote subscription form -#: actions/ostatussub.php:108 actions/ostatussub.php:400 +#. TRANS: Button text. +#: actions/ostatussub.php:113 +msgctxt "BUTTON" msgid "Confirm" msgstr "" -#: actions/ostatussub.php:109 +#. TRANS: Tooltip for button "Confirm". +#: actions/ostatussub.php:115 msgid "Subscribe to this user" msgstr "" -#: actions/ostatussub.php:130 +#: actions/ostatussub.php:136 msgid "You are already subscribed to this user." msgstr "" -#: actions/ostatussub.php:247 actions/ostatussub.php:253 -#: actions/ostatussub.php:272 +#: actions/ostatussub.php:165 +msgid "Photo" +msgstr "" + +#: actions/ostatussub.php:176 +msgid "Nickname" +msgstr "" + +#: actions/ostatussub.php:197 +msgid "Location" +msgstr "" + +#: actions/ostatussub.php:206 +msgid "URL" +msgstr "" + +#: actions/ostatussub.php:218 +msgid "Note" +msgstr "" + +#. TRANS: Error text. +#: actions/ostatussub.php:254 actions/ostatussub.php:261 +#: actions/ostatussub.php:286 msgid "" "Sorry, we could not reach that address. Please make sure that the OStatus " -"address is like nickname@example.com or http://example.net/nickname" +"address is like nickname@example.com or http://example.net/nickname." msgstr "" -#: actions/ostatussub.php:256 actions/ostatussub.php:259 -#: actions/ostatussub.php:262 actions/ostatussub.php:265 -#: actions/ostatussub.php:268 +#. TRANS: Error text. +#: actions/ostatussub.php:265 actions/ostatussub.php:269 +#: actions/ostatussub.php:273 actions/ostatussub.php:277 +#: actions/ostatussub.php:281 msgid "" "Sorry, we could not reach that feed. Please try that OStatus address again " "later." msgstr "" #. TRANS: OStatus remote subscription dialog error. -#: actions/ostatussub.php:301 +#: actions/ostatussub.php:315 msgid "Already subscribed!" msgstr "" #. TRANS: OStatus remote subscription dialog error. -#: actions/ostatussub.php:306 +#: actions/ostatussub.php:320 msgid "Remote subscription failed!" msgstr "" -#: actions/ostatussub.php:380 actions/ostatusinit.php:81 +#: actions/ostatussub.php:367 actions/ostatusinit.php:63 +msgid "There was a problem with your session token. Try again, please." +msgstr "" + +#. TRANS: Form title. +#: actions/ostatussub.php:395 actions/ostatusinit.php:82 msgid "Subscribe to user" msgstr "" -#: actions/ostatussub.php:411 +#. TRANS: Page title for OStatus remote subscription form +#: actions/ostatussub.php:415 +msgid "Confirm" +msgstr "" + +#. TRANS: Instructions. +#: actions/ostatussub.php:427 msgid "" "You can subscribe to users from other supported sites. Paste their address " "or profile URI below:" msgstr "" +#. TRANS: Client error. #: actions/ostatusinit.php:41 msgid "You can use the local subscription!" msgstr "" -#: actions/ostatusinit.php:63 -msgid "There was a problem with your session token. Try again, please." -msgstr "" - -#: actions/ostatusinit.php:95 +#. TRANS: Form legend. +#: actions/ostatusinit.php:97 #, php-format msgid "Join group %s" msgstr "" -#: actions/ostatusinit.php:98 +#. TRANS: Button text. +#: actions/ostatusinit.php:99 +msgctxt "BUTTON" +msgid "Join" +msgstr "" + +#. TRANS: Form legend. +#: actions/ostatusinit.php:102 #, php-format msgid "Subscribe to %s" msgstr "" -#: actions/ostatusinit.php:111 +#. TRANS: Button text. +#: actions/ostatusinit.php:104 +msgctxt "BUTTON" +msgid "Subscribe" +msgstr "" + +#. TRANS: Field label. +#: actions/ostatusinit.php:117 msgid "User nickname" msgstr "" -#: actions/ostatusinit.php:112 -msgid "Nickname of the user you want to follow" +#: actions/ostatusinit.php:118 +msgid "Nickname of the user you want to follow." msgstr "" -#: actions/ostatusinit.php:116 +#. TRANS: Field label. +#: actions/ostatusinit.php:123 msgid "Profile Account" msgstr "" -#: actions/ostatusinit.php:117 -msgid "Your account id (i.e. user@identi.ca)" +#. TRANS: Tooltip for field label "Profile Account". +#: actions/ostatusinit.php:125 +msgid "Your account id (e.g. user@identi.ca)." msgstr "" -#: actions/ostatusinit.php:138 +#. TRANS: Client error. +#: actions/ostatusinit.php:147 msgid "Must provide a remote profile." msgstr "" -#: actions/ostatusinit.php:149 +#. TRANS: Client error. +#: actions/ostatusinit.php:159 msgid "Couldn't look up OStatus account profile." msgstr "" -#: actions/ostatusinit.php:161 +#. TRANS: Client error. +#: actions/ostatusinit.php:172 msgid "Couldn't confirm remote profile address." msgstr "" -#: actions/ostatusinit.php:202 +#. TRANS: Page title. +#: actions/ostatusinit.php:217 msgid "OStatus Connect" msgstr "" + +#: actions/pushcallback.php:48 +msgid "Empty or invalid feed id." +msgstr "" + +#. TRANS: Server exception. %s is a feed ID. +#: actions/pushcallback.php:54 +#, php-format +msgid "Unknown PuSH feed id %s" +msgstr "" + +#. TRANS: Client exception. %s is an invalid feed name. +#: actions/pushcallback.php:94 +#, php-format +msgid "Bad hub.topic feed \"%s\"." +msgstr "" + +#. TRANS: Client exception. %1$s the invalid token, %2$s is the topic for which the invalid token was given. +#: actions/pushcallback.php:99 +#, php-format +msgid "Bad hub.verify_token %1$s for %2$s." +msgstr "" + +#. TRANS: Client exception. %s is an invalid topic. +#: actions/pushcallback.php:106 +#, php-format +msgid "Unexpected subscribe request for %s." +msgstr "" + +#. TRANS: Client exception. %s is an invalid topic. +#: actions/pushcallback.php:111 +#, php-format +msgid "Unexpected unsubscribe request for %s." +msgstr "" diff --git a/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po new file mode 100644 index 000000000..79f288793 --- /dev/null +++ b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po @@ -0,0 +1,810 @@ +# Translation of StatusNet - OStatus to French (Français) +# Expored from translatewiki.net +# +# Author: Verdy p +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - OStatus\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-04 22:30+0000\n" +"PO-Revision-Date: 2010-10-04 22:33:41+0000\n" +"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-03 20:57:03+0000\n" +"X-Generator: MediaWiki 1.17alpha (r74276); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: fr\n" +"X-Message-Group: #out-statusnet-plugin-ostatus\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. TRANS: Link description for link to subscribe to a remote user. +#. TRANS: Link text for a user to subscribe to an OStatus user. +#: OStatusPlugin.php:227 OStatusPlugin.php:937 +msgid "Subscribe" +msgstr "S'abonner" + +#. TRANS: Link description for link to join a remote group. +#: OStatusPlugin.php:246 OStatusPlugin.php:655 actions/ostatussub.php:107 +msgid "Join" +msgstr "Rejoindre" + +#. TRANSLATE: %s is a domain. +#: OStatusPlugin.php:459 +#, php-format +msgid "Sent from %s via OStatus" +msgstr "Envoyé depuis %s via OStatus" + +#. TRANS: Exception. +#: OStatusPlugin.php:531 +msgid "Could not set up remote subscription." +msgstr "Impossible de mettre en place l’abonnement distant." + +#: OStatusPlugin.php:605 +msgid "Unfollow" +msgstr "Ne plus suivre" + +#. TRANS: Success message for unsubscribe from user attempt through OStatus. +#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name. +#: OStatusPlugin.php:608 +#, php-format +msgid "%1$s stopped following %2$s." +msgstr "%1$s a cessé de suivre %2$s." + +#: OStatusPlugin.php:636 +msgid "Could not set up remote group membership." +msgstr "Impossible de mettre en place l’appartenance au groupe distant." + +#. TRANS: Success message for subscribe to group attempt through OStatus. +#. TRANS: %1$s is the member name, %2$s is the subscribed group's name. +#: OStatusPlugin.php:658 +#, fuzzy, php-format +msgid "%1$s has joined group %2$s." +msgstr "%1$s a cessé de suivre %2$s." + +#. TRANS: Exception. +#: OStatusPlugin.php:667 +msgid "Failed joining remote group." +msgstr "Échec lors de l’adhésion au groupe distant." + +#: OStatusPlugin.php:707 +msgid "Leave" +msgstr "Sortir" + +#. TRANS: Success message for unsubscribe from group attempt through OStatus. +#. TRANS: %1$s is the member name, %2$s is the unsubscribed group's name. +#: OStatusPlugin.php:710 +#, php-format +msgid "%1$s has left group %2$s." +msgstr "" + +#: OStatusPlugin.php:785 +msgid "Disfavor" +msgstr "Retirer des favoris" + +#. TRANS: Success message for remove a favorite notice through OStatus. +#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice. +#: OStatusPlugin.php:788 +#, php-format +msgid "%1$s marked notice %2$s as no longer a favorite." +msgstr "%1$s a retiré l’avis %2$s de ses favoris." + +#. TRANS: Link text for link to remote subscribe. +#: OStatusPlugin.php:864 +msgid "Remote" +msgstr "À distance" + +#. TRANS: Title for activity. +#: OStatusPlugin.php:904 +msgid "Profile update" +msgstr "Mise à jour du profil" + +#. TRANS: Ping text for remote profile update through OStatus. +#. TRANS: %s is user that updated their profile. +#: OStatusPlugin.php:907 +#, php-format +msgid "%s has updated their profile page." +msgstr "%s a mis à jour sa page de profil." + +#. TRANS: Plugin description. +#: OStatusPlugin.php:952 +msgid "" +"Follow people across social networks that implement <a href=\"http://ostatus." +"org/\">OStatus</a>." +msgstr "" +"Suivez les personnes à travers les réseaux sociaux mettant en œuvre <a href=" +"\"http://ostatus.org/\">OStatus</a> ." + +#: classes/FeedSub.php:248 +msgid "Attempting to start PuSH subscription for feed with no hub." +msgstr "" +"Tente de démarrer l’inscription PuSH à un flux d’information sans " +"concentrateur." + +#: classes/FeedSub.php:278 +msgid "Attempting to end PuSH subscription for feed with no hub." +msgstr "" +"Tente d’arrêter l’inscription PuSH à un flux d’information sans " +"concentrateur." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:188 +#, php-format +msgid "Invalid ostatus_profile state: both group and profile IDs set for %s." +msgstr "" +"État invalide du profil OStatus : identifiants à la fois de groupe et de " +"profil définis pour « %s »." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:191 +#, php-format +msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s." +msgstr "" +"État invalide du profil OStatus : identifiants à la fois de groupe et de " +"profil non renseignés pour « %s »." + +#. TRANS: Server exception. +#. TRANS: %1$s is the method name the exception occured in, %2$s is the actor type. +#: classes/Ostatus_profile.php:281 +#, php-format +msgid "Invalid actor passed to %1$s: %2$s." +msgstr "Type d’acteur invalide passé à la méthode « %1$s » : « %2$s »." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:374 +msgid "" +"Invalid type passed to Ostatus_profile::notify. It must be XML string or " +"Activity entry." +msgstr "" +"Type invalide passé à la méthode « Ostatus_profile::notify ». Ce doit être " +"une chaîne XML ou une entrée « Activity »." + +#: classes/Ostatus_profile.php:404 +msgid "Unknown feed format." +msgstr "Format de flux d’information inconnu." + +#: classes/Ostatus_profile.php:427 +msgid "RSS feed without a channel." +msgstr "Flux RSS sans canal." + +#. TRANS: Client exception. +#: classes/Ostatus_profile.php:472 +msgid "Can't handle that kind of post." +msgstr "Impossible de gérer cette sorte de publication." + +#. TRANS: Client exception. %s is a source URL. +#: classes/Ostatus_profile.php:555 +#, php-format +msgid "No content for notice %s." +msgstr "Aucun contenu dans l’avis « %s »." + +#. TRANS: Shown when a notice is longer than supported and/or when attachments are present. +#: classes/Ostatus_profile.php:588 +msgid "Show more" +msgstr "Voir davantage" + +#. TRANS: Exception. %s is a profile URL. +#: classes/Ostatus_profile.php:781 +#, php-format +msgid "Could not reach profile page %s." +msgstr "Impossible d’atteindre la page de profil « %s »." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:839 +#, php-format +msgid "Could not find a feed URL for profile page %s." +msgstr "" +"Impossible de trouver une adresse URL de flux d’information pour la page de " +"profil « %s »." + +#: classes/Ostatus_profile.php:976 +msgid "Can't find enough profile information to make a feed." +msgstr "" +"Impossible de trouver assez d’informations de profil pour créer un flux " +"d’information." + +#: classes/Ostatus_profile.php:1035 +#, php-format +msgid "Invalid avatar URL %s." +msgstr "Adresse URL d’avatar « %s » invalide." + +#: classes/Ostatus_profile.php:1045 +#, php-format +msgid "Tried to update avatar for unsaved remote profile %s." +msgstr "" +"Tente de mettre à jour l’avatar associé au profil distant non sauvegardé « %s " +"»." + +#: classes/Ostatus_profile.php:1053 +#, php-format +msgid "Unable to fetch avatar from %s." +msgstr "Impossible de récupérer l’avatar depuis « %s »." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1275 +msgid "Local user can't be referenced as remote." +msgstr "L’utilisateur local ne peut être référencé comme distant." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1280 +msgid "Local group can't be referenced as remote." +msgstr "Le groupe local ne peut être référencé comme distant." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1332 classes/Ostatus_profile.php:1343 +msgid "Can't save local profile." +msgstr "Impossible de sauvegarder le profil local." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1351 +msgid "Can't save OStatus profile." +msgstr "Impossible de sauvegarder le profil OStatus." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1610 classes/Ostatus_profile.php:1638 +msgid "Not a valid webfinger address." +msgstr "Ce n’est pas une adresse « webfinger » valide." + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1720 +#, php-format +msgid "Couldn't save profile for \"%s\"." +msgstr "Impossible de sauvegarder le profil pour « %s »." + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1739 +#, php-format +msgid "Couldn't save ostatus_profile for \"%s\"." +msgstr "Impossible d’enregistrer le profil OStatus pour « %s »." + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1747 +#, php-format +msgid "Couldn't find a valid profile for \"%s\"." +msgstr "Impossible de trouver un profil valide pour « %s »." + +#: classes/Ostatus_profile.php:1789 +msgid "Could not store HTML content of long post as file." +msgstr "" +"Impossible de stocker le contenu HTML d’une longue publication en un fichier." + +#. TRANS: Client exception. %s is a HTTP status code. +#: classes/HubSub.php:208 +#, php-format +msgid "Hub subscriber verification returned HTTP %s." +msgstr "" +"La vérification d’abonné sur le concentrateur a retourné le statut HTTP « %s " +"»." + +#. TRANS: Exception. %1$s is a response status code, %2$s is the body of the response. +#: classes/HubSub.php:355 +#, php-format +msgid "Callback returned status: %1$s. Body: %2$s" +msgstr "La routine de rappel a retourné le statut « %1$s ». Corps : %2$s" + +#. TRANS: Client error. POST is a HTTP command. It should not be translated. +#: lib/salmonaction.php:42 +msgid "This method requires a POST." +msgstr "Cette méthode nécessite une commande HTTP « POST »." + +#. TRANS: Client error. Do not translate "application/magic-envelope+xml" +#: lib/salmonaction.php:47 +msgid "Salmon requires \"application/magic-envelope+xml\"." +msgstr "Salmon exige le type « application/magic-envelope+xml »." + +#. TRANS: Client error. +#: lib/salmonaction.php:57 +msgid "Salmon signature verification failed." +msgstr "La vérification de signature Salmon a échoué." + +#. TRANS: Client error. +#: lib/salmonaction.php:69 +msgid "Salmon post must be an Atom entry." +msgstr "Une publication Salmon doit être une entrée « Atom »." + +#. TRANS: Client exception. +#: lib/salmonaction.php:118 +msgid "Unrecognized activity type." +msgstr "Type d’activité non reconnu." + +#. TRANS: Client exception. +#: lib/salmonaction.php:127 +msgid "This target doesn't understand posts." +msgstr "Cette cible ne reconnaît pas les publications." + +#. TRANS: Client exception. +#: lib/salmonaction.php:133 +msgid "This target doesn't understand follows." +msgstr "Cette cible ne reconnaît pas les indications de début de suivi." + +#. TRANS: Client exception. +#: lib/salmonaction.php:139 +msgid "This target doesn't understand unfollows." +msgstr "Cette cible ne reconnaît pas les indications de fin de suivi." + +#. TRANS: Client exception. +#: lib/salmonaction.php:145 +msgid "This target doesn't understand favorites." +msgstr "Cette cible ne reconnaît pas les indications de mise en favoris." + +#. TRANS: Client exception. +#: lib/salmonaction.php:151 +msgid "This target doesn't understand unfavorites." +msgstr "Cette cible ne reconnaît pas les indications de retrait des favoris." + +#. TRANS: Client exception. +#: lib/salmonaction.php:157 +msgid "This target doesn't understand share events." +msgstr "Cette cible ne reconnaît pas les évènements partagés." + +#. TRANS: Client exception. +#: lib/salmonaction.php:163 +msgid "This target doesn't understand joins." +msgstr "Cette cible ne reconnaît pas les indications d’adhésion." + +#. TRANS: Client exception. +#: lib/salmonaction.php:169 +msgid "This target doesn't understand leave events." +msgstr "Cette cible ne reconnaît pas les indications de retrait d’évènements." + +#. TRANS: Exception. +#: lib/salmonaction.php:197 +msgid "Received a salmon slap from unidentified actor." +msgstr "Réception d’une giffle Salmon d’un acteur non identifié." + +#. TRANS: Exception. +#: lib/discovery.php:110 +#, php-format +msgid "Unable to find services for %s." +msgstr "Impossible de trouver des services pour « %s »." + +#. TRANS: Exception. +#: lib/xrd.php:64 +msgid "Invalid XML." +msgstr "XML invalide." + +#. TRANS: Exception. +#: lib/xrd.php:69 +msgid "Invalid XML, missing XRD root." +msgstr "XML invalide, racine XRD manquante." + +#. TRANS: Exception. +#: lib/magicenvelope.php:80 +msgid "Unable to locate signer public key." +msgstr "Impossible de trouver la clé publique du signataire." + +#. TRANS: Exception. +#: lib/salmon.php:93 +msgid "Salmon invalid actor for signing." +msgstr "Acteur Salmon invalide pour la signature." + +#: tests/gettext-speedtest.php:57 +msgid "Feeds" +msgstr "Flux d’informations" + +#. TRANS: Client exception. +#: actions/pushhub.php:66 +msgid "Publishing outside feeds not supported." +msgstr "La publication des flux externes n’est pas supportée." + +#. TRANS: Client exception. %s is a mode. +#: actions/pushhub.php:69 +#, php-format +msgid "Unrecognized mode \"%s\"." +msgstr "Mode « %s » non reconnu." + +#. TRANS: Client exception. %s is a topic. +#: actions/pushhub.php:89 +#, php-format +msgid "" +"Unsupported hub.topic %s this hub only serves local user and group Atom " +"feeds." +msgstr "" +"Le sujet de concentrateur « %s » n’est pas supporté. Ce concentrateur ne sert " +"que les flux Atom d’utilisateurs et groupes locaux." + +#. TRANS: Client exception. +#: actions/pushhub.php:95 +#, php-format +msgid "Invalid hub.verify \"%s\". It must be sync or async." +msgstr "" +"La vérification de concentrateur « %s » est invalide. Ce doit être « sync » ou " +"« async »." + +#. TRANS: Client exception. +#: actions/pushhub.php:101 +#, php-format +msgid "Invalid hub.lease \"%s\". It must be empty or positive integer." +msgstr "" +"Le bail de concentrateur « %s » est invalide. Ce doit être vide ou un entier " +"positif." + +#. TRANS: Client exception. +#: actions/pushhub.php:109 +#, php-format +msgid "Invalid hub.secret \"%s\". It must be under 200 bytes." +msgstr "" +"Le secret de concentrateur « %s » est invalide. Il doit faire moins de 200 " +"octets." + +#. TRANS: Client exception. +#: actions/pushhub.php:161 +#, php-format +msgid "Invalid hub.topic \"%s\". User doesn't exist." +msgstr "" +"Le sujet de concentrateur « %s » est invalide. L’utilisateur n’existe pas." + +#. TRANS: Client exception. +#: actions/pushhub.php:170 +#, php-format +msgid "Invalid hub.topic \"%s\". Group doesn't exist." +msgstr "Le sujet de concentrateur « %s » est invalide. Le groupe n’existe pas." + +#. TRANS: Client exception. +#. TRANS: %1$s is this argument to the method this exception occurs in, %2$s is a URL. +#: actions/pushhub.php:195 +#, php-format +msgid "Invalid URL passed for %1$s: \"%2$s\"" +msgstr "URL invalide passée à la méthode « %1$s » : « %2$s »" + +#: actions/userxrd.php:49 actions/ownerxrd.php:37 actions/usersalmon.php:43 +msgid "No such user." +msgstr "Utilisateur inexistant." + +#. TRANS: Client error. +#: actions/usersalmon.php:37 actions/groupsalmon.php:40 +msgid "No ID." +msgstr "Aucun identifiant." + +#. TRANS: Client exception. +#: actions/usersalmon.php:81 +msgid "In reply to unknown notice." +msgstr "En réponse à l’avis inconnu." + +#. TRANS: Client exception. +#: actions/usersalmon.php:86 +msgid "In reply to a notice not by this user and not mentioning this user." +msgstr "" +"En réponse à un avis non émis par cet utilisateur et ne mentionnant pas cet " +"utilisateur." + +#. TRANS: Client exception. +#: actions/usersalmon.php:163 +msgid "Could not save new favorite." +msgstr "Impossible de sauvegarder le nouveau favori." + +#. TRANS: Client exception. +#: actions/usersalmon.php:195 +msgid "Can't favorite/unfavorite without an object." +msgstr "Impossible de mettre en favoris ou retirer des favoris sans un objet." + +#. TRANS: Client exception. +#: actions/usersalmon.php:207 +msgid "Can't handle that kind of object for liking/faving." +msgstr "" +"Impossible de gérer ce genre d’objet parmi les sujets appréciés ou favoris." + +#. TRANS: Client exception. %s is an object ID. +#: actions/usersalmon.php:214 +#, php-format +msgid "Notice with ID %s unknown." +msgstr "Avis d’identifiant « %s » inconnu." + +#. TRANS: Client exception. %1$s is a notice ID, %2$s is a user ID. +#: actions/usersalmon.php:219 +#, php-format +msgid "Notice with ID %1$s not posted by %2$s." +msgstr "Avis d’identifiant « %1$s » non publié par %2$s." + +#. TRANS: Field label. +#: actions/ostatusgroup.php:76 +msgid "Join group" +msgstr "Rejoindre le groupe" + +#. TRANS: Tooltip for field label "Join group". +#: actions/ostatusgroup.php:79 +msgid "OStatus group's address, like http://example.net/group/nickname." +msgstr "" +"Une adresse de groupe OStatus telle que « http://example.net/group/pseudonyme " +"»." + +#. TRANS: Button text. +#: actions/ostatusgroup.php:84 actions/ostatussub.php:73 +msgctxt "BUTTON" +msgid "Continue" +msgstr "Continuer" + +#: actions/ostatusgroup.php:103 +msgid "You are already a member of this group." +msgstr "Vous êtes déjà membre de ce groupe." + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:138 +msgid "Already a member!" +msgstr "Déjà membre !" + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:149 +msgid "Remote group join failed!" +msgstr "L’adhésion au groupe distant a échoué !" + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:153 +msgid "Remote group join aborted!" +msgstr "L’adhésion au groupe distant a été avortée !" + +#. TRANS: Page title for OStatus remote group join form +#: actions/ostatusgroup.php:165 +msgid "Confirm joining remote group" +msgstr "Confirmer l’adhésion au groupe distant" + +#. TRANS: Instructions. +#: actions/ostatusgroup.php:176 +msgid "" +"You can subscribe to groups from other supported sites. Paste the group's " +"profile URI below:" +msgstr "" +"Vous pouvez souscrire aux groupes d’autres sites supportés. Collez l’adresse " +"URI du profil du groupe ci-dessous :" + +#. TRANS: Client error. +#: actions/groupsalmon.php:47 +msgid "No such group." +msgstr "Groupe inexistant." + +#. TRANS: Client error. +#: actions/groupsalmon.php:53 +msgid "Can't accept remote posts for a remote group." +msgstr "" +"Impossible d’accepter des envois distants de messages pour un groupe distant." + +#. TRANS: Client error. +#: actions/groupsalmon.php:127 +msgid "Can't read profile to set up group membership." +msgstr "" +"Impossible de lire le profil pour mettre en place l’adhésion à un groupe." + +#. TRANS: Client error. +#: actions/groupsalmon.php:131 actions/groupsalmon.php:174 +msgid "Groups can't join groups." +msgstr "Les groupes ne peuvent pas adhérer à des groupes." + +#: actions/groupsalmon.php:144 +msgid "You have been blocked from that group by the admin." +msgstr "Vous avez été bloqué de ce groupe par l’administrateur." + +#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname. +#: actions/groupsalmon.php:159 +#, php-format +msgid "Could not join remote user %1$s to group %2$s." +msgstr "Impossible de joindre l’utilisateur distant %1$s au groupe %2$s." + +#: actions/groupsalmon.php:171 +msgid "Can't read profile to cancel group membership." +msgstr "Impossible de lire le profil pour annuler l’adhésion à un groupe." + +#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname. +#: actions/groupsalmon.php:188 +#, php-format +msgid "Could not remove remote user %1$s from group %2$s." +msgstr "Impossible de retirer l’utilisateur distant %1$s du groupe %2$s." + +#. TRANS: Field label for a field that takes an OStatus user address. +#: actions/ostatussub.php:66 +msgid "Subscribe to" +msgstr "S’abonner à" + +#. TRANS: Tooltip for field label "Subscribe to". +#: actions/ostatussub.php:69 +msgid "" +"OStatus user's address, like nickname@example.com or http://example.net/" +"nickname" +msgstr "" +"Adresse d’un utilisateur OStatus ou de sa page de profil, telle que " +"pseudonyme@example.com ou http://example.net/pseudonyme" + +#. TRANS: Button text. +#. TRANS: Tooltip for button "Join". +#: actions/ostatussub.php:110 +msgctxt "BUTTON" +msgid "Join this group" +msgstr "Rejoindre ce groupe" + +#. TRANS: Button text. +#: actions/ostatussub.php:113 +msgctxt "BUTTON" +msgid "Confirm" +msgstr "Confirmer" + +#. TRANS: Tooltip for button "Confirm". +#: actions/ostatussub.php:115 +msgid "Subscribe to this user" +msgstr "S’abonner à cet utilisateur" + +#: actions/ostatussub.php:136 +msgid "You are already subscribed to this user." +msgstr "Vous êtes déjà abonné à cet utilisateur." + +#: actions/ostatussub.php:165 +msgid "Photo" +msgstr "Photo" + +#: actions/ostatussub.php:176 +msgid "Nickname" +msgstr "Pseudonyme" + +#: actions/ostatussub.php:197 +msgid "Location" +msgstr "Emplacement" + +#: actions/ostatussub.php:206 +msgid "URL" +msgstr "Adresse URL" + +#: actions/ostatussub.php:218 +msgid "Note" +msgstr "Note" + +#. TRANS: Error text. +#: actions/ostatussub.php:254 actions/ostatussub.php:261 +#: actions/ostatussub.php:286 +msgid "" +"Sorry, we could not reach that address. Please make sure that the OStatus " +"address is like nickname@example.com or http://example.net/nickname." +msgstr "" +"Désolé, nous n’avons pas pu atteindre cette adresse. Veuillez vous assurer " +"que l’adresse OStatus de l’utilisateur ou de sa page de profil est de la " +"forme pseudonyme@example.com ou http://example.net/pseudonyme." + +#. TRANS: Error text. +#: actions/ostatussub.php:265 actions/ostatussub.php:269 +#: actions/ostatussub.php:273 actions/ostatussub.php:277 +#: actions/ostatussub.php:281 +msgid "" +"Sorry, we could not reach that feed. Please try that OStatus address again " +"later." +msgstr "" +"Désolé, nous n’avons pas pu atteindre ce flux. Veuillez réessayer plus tard " +"cette adresse OStatus." + +#. TRANS: OStatus remote subscription dialog error. +#: actions/ostatussub.php:315 +msgid "Already subscribed!" +msgstr "Déjà abonné !" + +#. TRANS: OStatus remote subscription dialog error. +#: actions/ostatussub.php:320 +msgid "Remote subscription failed!" +msgstr "Ĺ’abonnement distant a échoué !" + +#: actions/ostatussub.php:367 actions/ostatusinit.php:63 +msgid "There was a problem with your session token. Try again, please." +msgstr "" +"Un problème est survenu avec votre jeton de session. Veuillez essayer à " +"nouveau." + +#. TRANS: Form title. +#: actions/ostatussub.php:395 actions/ostatusinit.php:82 +msgid "Subscribe to user" +msgstr "S’abonner à un utilisateur" + +#. TRANS: Page title for OStatus remote subscription form +#: actions/ostatussub.php:415 +msgid "Confirm" +msgstr "Confirmer" + +#. TRANS: Instructions. +#: actions/ostatussub.php:427 +msgid "" +"You can subscribe to users from other supported sites. Paste their address " +"or profile URI below:" +msgstr "" +"Vous pouvez vous abonner aux utilisateurs d’autres sites pris en charge. " +"Collez leur adresse ou l’URI de leur profil ci-dessous :" + +#. TRANS: Client error. +#: actions/ostatusinit.php:41 +msgid "You can use the local subscription!" +msgstr "Vous pouvez utiliser l’abonnement local !" + +#. TRANS: Form legend. +#: actions/ostatusinit.php:97 +#, php-format +msgid "Join group %s" +msgstr "Rejoindre le groupe « %s »" + +#. TRANS: Button text. +#: actions/ostatusinit.php:99 +msgctxt "BUTTON" +msgid "Join" +msgstr "Rejoindre" + +#. TRANS: Form legend. +#: actions/ostatusinit.php:102 +#, php-format +msgid "Subscribe to %s" +msgstr "S’abonner à « %s »" + +#. TRANS: Button text. +#: actions/ostatusinit.php:104 +msgctxt "BUTTON" +msgid "Subscribe" +msgstr "S’abonner" + +#. TRANS: Field label. +#: actions/ostatusinit.php:117 +msgid "User nickname" +msgstr "Pseudonyme de l’utilisateur" + +#: actions/ostatusinit.php:118 +msgid "Nickname of the user you want to follow." +msgstr "Pseudonyme de l’utilisateur que vous voulez suivre." + +#. TRANS: Field label. +#: actions/ostatusinit.php:123 +msgid "Profile Account" +msgstr "Compte de profil" + +#. TRANS: Tooltip for field label "Profile Account". +#: actions/ostatusinit.php:125 +msgid "Your account id (e.g. user@identi.ca)." +msgstr "Votre identifiant de compte (utilisateur@identi.ca, par exemple)." + +#. TRANS: Client error. +#: actions/ostatusinit.php:147 +msgid "Must provide a remote profile." +msgstr "Vous devez fournir un profil distant." + +#. TRANS: Client error. +#: actions/ostatusinit.php:159 +msgid "Couldn't look up OStatus account profile." +msgstr "Impossible de consulter le profil de compte OStatus." + +#. TRANS: Client error. +#: actions/ostatusinit.php:172 +msgid "Couldn't confirm remote profile address." +msgstr "Impossible de confirmer l’adresse de profil distant." + +#. TRANS: Page title. +#: actions/ostatusinit.php:217 +msgid "OStatus Connect" +msgstr "Connexion OStatus" + +#: actions/pushcallback.php:48 +msgid "Empty or invalid feed id." +msgstr "Identifiant de flux vide ou invalide." + +#. TRANS: Server exception. %s is a feed ID. +#: actions/pushcallback.php:54 +#, php-format +msgid "Unknown PuSH feed id %s" +msgstr "Identifiant de flux PuSH inconnu : « %s »" + +#. TRANS: Client exception. %s is an invalid feed name. +#: actions/pushcallback.php:94 +#, php-format +msgid "Bad hub.topic feed \"%s\"." +msgstr "Flux de sujet de concentrateur incorrect : « %s »" + +#. TRANS: Client exception. %1$s the invalid token, %2$s is the topic for which the invalid token was given. +#: actions/pushcallback.php:99 +#, php-format +msgid "Bad hub.verify_token %1$s for %2$s." +msgstr "" +"Jeton de vérification de concentrateur incorrect « %1$s » pour le sujet « %2$s " +"»." + +#. TRANS: Client exception. %s is an invalid topic. +#: actions/pushcallback.php:106 +#, php-format +msgid "Unexpected subscribe request for %s." +msgstr "Demande d’abonnement inattendue pour le sujet invalide « %s »." + +#. TRANS: Client exception. %s is an invalid topic. +#: actions/pushcallback.php:111 +#, php-format +msgid "Unexpected unsubscribe request for %s." +msgstr "Demande de désabonnement inattendue pour le sujet invalide « %s »." diff --git a/plugins/OStatus/locale/ia/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/ia/LC_MESSAGES/OStatus.po new file mode 100644 index 000000000..53935c04c --- /dev/null +++ b/plugins/OStatus/locale/ia/LC_MESSAGES/OStatus.po @@ -0,0 +1,782 @@ +# Translation of StatusNet - OStatus to Interlingua (Interlingua) +# Expored from translatewiki.net +# +# Author: McDutchie +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - OStatus\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-04 22:30+0000\n" +"PO-Revision-Date: 2010-10-04 22:33:41+0000\n" +"Language-Team: Interlingua <http://translatewiki.net/wiki/Portal:ia>\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-03 20:57:03+0000\n" +"X-Generator: MediaWiki 1.17alpha (r74276); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: ia\n" +"X-Message-Group: #out-statusnet-plugin-ostatus\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANS: Link description for link to subscribe to a remote user. +#. TRANS: Link text for a user to subscribe to an OStatus user. +#: OStatusPlugin.php:227 OStatusPlugin.php:937 +msgid "Subscribe" +msgstr "Subscriber" + +#. TRANS: Link description for link to join a remote group. +#: OStatusPlugin.php:246 OStatusPlugin.php:655 actions/ostatussub.php:107 +msgid "Join" +msgstr "Inscriber" + +#. TRANSLATE: %s is a domain. +#: OStatusPlugin.php:459 +#, php-format +msgid "Sent from %s via OStatus" +msgstr "Inviate de %s via OStatus" + +#. TRANS: Exception. +#: OStatusPlugin.php:531 +msgid "Could not set up remote subscription." +msgstr "Non poteva configurar le subscription remote." + +#: OStatusPlugin.php:605 +msgid "Unfollow" +msgstr "Non plus sequer" + +#. TRANS: Success message for unsubscribe from user attempt through OStatus. +#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name. +#: OStatusPlugin.php:608 +#, php-format +msgid "%1$s stopped following %2$s." +msgstr "%1$s cessava de sequer %2$s." + +#: OStatusPlugin.php:636 +msgid "Could not set up remote group membership." +msgstr "Non poteva configurar le membrato del gruppo remote." + +#. TRANS: Success message for subscribe to group attempt through OStatus. +#. TRANS: %1$s is the member name, %2$s is the subscribed group's name. +#: OStatusPlugin.php:658 +#, fuzzy, php-format +msgid "%1$s has joined group %2$s." +msgstr "%1$s cessava de sequer %2$s." + +#. TRANS: Exception. +#: OStatusPlugin.php:667 +msgid "Failed joining remote group." +msgstr "Falleva de facer se membro del gruppo remote." + +#: OStatusPlugin.php:707 +msgid "Leave" +msgstr "Quitar" + +#. TRANS: Success message for unsubscribe from group attempt through OStatus. +#. TRANS: %1$s is the member name, %2$s is the unsubscribed group's name. +#: OStatusPlugin.php:710 +#, php-format +msgid "%1$s has left group %2$s." +msgstr "" + +#: OStatusPlugin.php:785 +msgid "Disfavor" +msgstr "Disfavorir" + +#. TRANS: Success message for remove a favorite notice through OStatus. +#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice. +#: OStatusPlugin.php:788 +#, php-format +msgid "%1$s marked notice %2$s as no longer a favorite." +msgstr "%1$s marcava le nota %2$s como non plus favorite." + +#. TRANS: Link text for link to remote subscribe. +#: OStatusPlugin.php:864 +msgid "Remote" +msgstr "Remote" + +#. TRANS: Title for activity. +#: OStatusPlugin.php:904 +msgid "Profile update" +msgstr "Actualisation de profilo" + +#. TRANS: Ping text for remote profile update through OStatus. +#. TRANS: %s is user that updated their profile. +#: OStatusPlugin.php:907 +#, php-format +msgid "%s has updated their profile page." +msgstr "%s ha actualisate su pagina de profilo." + +#. TRANS: Plugin description. +#: OStatusPlugin.php:952 +msgid "" +"Follow people across social networks that implement <a href=\"http://ostatus." +"org/\">OStatus</a>." +msgstr "" +"Sequer personas trans retes social que implementa <a href=\"http://ostatus." +"org/\">OStatus</a>." + +#: classes/FeedSub.php:248 +msgid "Attempting to start PuSH subscription for feed with no hub." +msgstr "Tentativa de comenciar subscription PuSH pro syndication sin centro." + +#: classes/FeedSub.php:278 +msgid "Attempting to end PuSH subscription for feed with no hub." +msgstr "Tentativa de terminar subscription PuSH pro syndication sin centro." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:188 +#, php-format +msgid "Invalid ostatus_profile state: both group and profile IDs set for %s." +msgstr "" +"Stato ostatus_profile invalide: IDs e de gruppo e de profilo definite pro %s." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:191 +#, php-format +msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s." +msgstr "" +"Stato ostatus_profile invalide: IDs e de gruppo e de profilo vacue pro %s." + +#. TRANS: Server exception. +#. TRANS: %1$s is the method name the exception occured in, %2$s is the actor type. +#: classes/Ostatus_profile.php:281 +#, php-format +msgid "Invalid actor passed to %1$s: %2$s." +msgstr "Actor invalide passate a %1$s: %2$s." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:374 +msgid "" +"Invalid type passed to Ostatus_profile::notify. It must be XML string or " +"Activity entry." +msgstr "" +"Typo invalide passate a Ostatos_profile::notify. Illo debe esser catena XML " +"o entrata Activity." + +#: classes/Ostatus_profile.php:404 +msgid "Unknown feed format." +msgstr "Formato de syndication incognite." + +#: classes/Ostatus_profile.php:427 +msgid "RSS feed without a channel." +msgstr "Syndication RSS sin canal." + +#. TRANS: Client exception. +#: classes/Ostatus_profile.php:472 +msgid "Can't handle that kind of post." +msgstr "Non pote tractar iste typo de message." + +#. TRANS: Client exception. %s is a source URL. +#: classes/Ostatus_profile.php:555 +#, php-format +msgid "No content for notice %s." +msgstr "Nulle contento pro nota %s." + +#. TRANS: Shown when a notice is longer than supported and/or when attachments are present. +#: classes/Ostatus_profile.php:588 +msgid "Show more" +msgstr "Monstrar plus" + +#. TRANS: Exception. %s is a profile URL. +#: classes/Ostatus_profile.php:781 +#, php-format +msgid "Could not reach profile page %s." +msgstr "Non poteva attinger pagina de profilo %s." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:839 +#, php-format +msgid "Could not find a feed URL for profile page %s." +msgstr "Non poteva trovar un URL de syndication pro pagina de profilo %s." + +#: classes/Ostatus_profile.php:976 +msgid "Can't find enough profile information to make a feed." +msgstr "" +"Non pote trovar satis de information de profilo pro facer un syndication." + +#: classes/Ostatus_profile.php:1035 +#, php-format +msgid "Invalid avatar URL %s." +msgstr "URL de avatar %s invalide." + +#: classes/Ostatus_profile.php:1045 +#, php-format +msgid "Tried to update avatar for unsaved remote profile %s." +msgstr "Tentava actualisar avatar pro profilo remote non salveguardate %s." + +#: classes/Ostatus_profile.php:1053 +#, php-format +msgid "Unable to fetch avatar from %s." +msgstr "Incapace de obtener avatar ab %s." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1275 +msgid "Local user can't be referenced as remote." +msgstr "Usator local non pote esser referentiate como remote." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1280 +msgid "Local group can't be referenced as remote." +msgstr "Gruppo local non pote esser referentiate como remote." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1332 classes/Ostatus_profile.php:1343 +msgid "Can't save local profile." +msgstr "Non pote salveguardar profilo local." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1351 +msgid "Can't save OStatus profile." +msgstr "Non pote salveguardar profilo OStatus." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1610 classes/Ostatus_profile.php:1638 +msgid "Not a valid webfinger address." +msgstr "Adresse webfinger invalide." + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1720 +#, php-format +msgid "Couldn't save profile for \"%s\"." +msgstr "Non poteva salveguardar profilo pro \"%s\"." + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1739 +#, php-format +msgid "Couldn't save ostatus_profile for \"%s\"." +msgstr "Non poteva salveguardar osatus_profile pro %s." + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1747 +#, php-format +msgid "Couldn't find a valid profile for \"%s\"." +msgstr "Non poteva trovar un profilo valide pro \"%s\"." + +#: classes/Ostatus_profile.php:1789 +msgid "Could not store HTML content of long post as file." +msgstr "Non poteva immagazinar contento HTML de longe message como file." + +#. TRANS: Client exception. %s is a HTTP status code. +#: classes/HubSub.php:208 +#, php-format +msgid "Hub subscriber verification returned HTTP %s." +msgstr "Verification de subscriptor de centro retornava HTTP %s." + +#. TRANS: Exception. %1$s is a response status code, %2$s is the body of the response. +#: classes/HubSub.php:355 +#, php-format +msgid "Callback returned status: %1$s. Body: %2$s" +msgstr "Appello de retorno retornava stato: %1$s. Corpore: %2$s" + +#. TRANS: Client error. POST is a HTTP command. It should not be translated. +#: lib/salmonaction.php:42 +msgid "This method requires a POST." +msgstr "Iste methodo require un POST." + +#. TRANS: Client error. Do not translate "application/magic-envelope+xml" +#: lib/salmonaction.php:47 +msgid "Salmon requires \"application/magic-envelope+xml\"." +msgstr "Salmon require \"application/magic-envelope+xml\"." + +#. TRANS: Client error. +#: lib/salmonaction.php:57 +msgid "Salmon signature verification failed." +msgstr "Verification de signatura Salmon falleva." + +#. TRANS: Client error. +#: lib/salmonaction.php:69 +msgid "Salmon post must be an Atom entry." +msgstr "Message Salmon debe esser un entrata Atom." + +#. TRANS: Client exception. +#: lib/salmonaction.php:118 +msgid "Unrecognized activity type." +msgstr "Typo de activitate non recognoscite." + +#. TRANS: Client exception. +#: lib/salmonaction.php:127 +msgid "This target doesn't understand posts." +msgstr "Iste destination non comprende messages." + +#. TRANS: Client exception. +#: lib/salmonaction.php:133 +msgid "This target doesn't understand follows." +msgstr "Iste destination non comprende sequimentos." + +#. TRANS: Client exception. +#: lib/salmonaction.php:139 +msgid "This target doesn't understand unfollows." +msgstr "Iste destination non comprende cessationes de sequimento." + +#. TRANS: Client exception. +#: lib/salmonaction.php:145 +msgid "This target doesn't understand favorites." +msgstr "Iste destination non comprende le addition de favorites." + +#. TRANS: Client exception. +#: lib/salmonaction.php:151 +msgid "This target doesn't understand unfavorites." +msgstr "Iste destination non comprende le remotion de favorites." + +#. TRANS: Client exception. +#: lib/salmonaction.php:157 +msgid "This target doesn't understand share events." +msgstr "Iste destination non comprende eventos commun." + +#. TRANS: Client exception. +#: lib/salmonaction.php:163 +msgid "This target doesn't understand joins." +msgstr "Iste destination non comprende indicationes de adhesion." + +#. TRANS: Client exception. +#: lib/salmonaction.php:169 +msgid "This target doesn't understand leave events." +msgstr "Iste destination non comprende eventos de partita." + +#. TRANS: Exception. +#: lib/salmonaction.php:197 +msgid "Received a salmon slap from unidentified actor." +msgstr "Recipeva un claffo de salmon de un actor non identificate." + +#. TRANS: Exception. +#: lib/discovery.php:110 +#, php-format +msgid "Unable to find services for %s." +msgstr "Incapace de trovar servicios pro %s." + +#. TRANS: Exception. +#: lib/xrd.php:64 +msgid "Invalid XML." +msgstr "XML invalide." + +#. TRANS: Exception. +#: lib/xrd.php:69 +msgid "Invalid XML, missing XRD root." +msgstr "XML invalide, radice XRD mancante." + +#. TRANS: Exception. +#: lib/magicenvelope.php:80 +msgid "Unable to locate signer public key." +msgstr "Incapace de localisar le clave public del signator." + +#. TRANS: Exception. +#: lib/salmon.php:93 +msgid "Salmon invalid actor for signing." +msgstr "Salmon: actor invalide pro signar." + +#: tests/gettext-speedtest.php:57 +msgid "Feeds" +msgstr "Syndicationes" + +#. TRANS: Client exception. +#: actions/pushhub.php:66 +msgid "Publishing outside feeds not supported." +msgstr "Le publication de syndicationes externe non es supportate." + +#. TRANS: Client exception. %s is a mode. +#: actions/pushhub.php:69 +#, php-format +msgid "Unrecognized mode \"%s\"." +msgstr "Modo \"%s\" non recognoscite." + +#. TRANS: Client exception. %s is a topic. +#: actions/pushhub.php:89 +#, php-format +msgid "" +"Unsupported hub.topic %s this hub only serves local user and group Atom " +"feeds." +msgstr "" +"Le topico de centro %s non es supportate. Iste centro servi solmente le " +"syndicationes Atom de usatores e gruppos local." + +#. TRANS: Client exception. +#: actions/pushhub.php:95 +#, php-format +msgid "Invalid hub.verify \"%s\". It must be sync or async." +msgstr "Invalide hub.verify \"%s\". Debe esser sync o async." + +#. TRANS: Client exception. +#: actions/pushhub.php:101 +#, php-format +msgid "Invalid hub.lease \"%s\". It must be empty or positive integer." +msgstr "" +"Invalide hub.lease \"%s\". Debe esser vacue o un numero integre positive." + +#. TRANS: Client exception. +#: actions/pushhub.php:109 +#, php-format +msgid "Invalid hub.secret \"%s\". It must be under 200 bytes." +msgstr "Invalide hub.secret \"%s\". Debe pesar minus de 200 bytes." + +#. TRANS: Client exception. +#: actions/pushhub.php:161 +#, php-format +msgid "Invalid hub.topic \"%s\". User doesn't exist." +msgstr "Invalide hub.topic \"%s\". Usator non existe." + +#. TRANS: Client exception. +#: actions/pushhub.php:170 +#, php-format +msgid "Invalid hub.topic \"%s\". Group doesn't exist." +msgstr "Invalide hub.topic \"%s\". Gruppo non existe." + +#. TRANS: Client exception. +#. TRANS: %1$s is this argument to the method this exception occurs in, %2$s is a URL. +#: actions/pushhub.php:195 +#, php-format +msgid "Invalid URL passed for %1$s: \"%2$s\"" +msgstr "Invalide URL passate pro %1$s: \"%2$s\"" + +#: actions/userxrd.php:49 actions/ownerxrd.php:37 actions/usersalmon.php:43 +msgid "No such user." +msgstr "Iste usator non existe." + +#. TRANS: Client error. +#: actions/usersalmon.php:37 actions/groupsalmon.php:40 +msgid "No ID." +msgstr "Nulle ID." + +#. TRANS: Client exception. +#: actions/usersalmon.php:81 +msgid "In reply to unknown notice." +msgstr "In responsa a un nota incognite." + +#. TRANS: Client exception. +#: actions/usersalmon.php:86 +msgid "In reply to a notice not by this user and not mentioning this user." +msgstr "" +"In responsa a un nota non scribite per iste usator e que non mentiona iste " +"usator." + +#. TRANS: Client exception. +#: actions/usersalmon.php:163 +msgid "Could not save new favorite." +msgstr "Non poteva salveguardar le nove favorite." + +#. TRANS: Client exception. +#: actions/usersalmon.php:195 +msgid "Can't favorite/unfavorite without an object." +msgstr "Non pote favorir/disfavorir sin objecto." + +#. TRANS: Client exception. +#: actions/usersalmon.php:207 +msgid "Can't handle that kind of object for liking/faving." +msgstr "Non pote manear iste typo de objecto pro appreciar/favorir." + +#. TRANS: Client exception. %s is an object ID. +#: actions/usersalmon.php:214 +#, php-format +msgid "Notice with ID %s unknown." +msgstr "Nota con ID %s incognite." + +#. TRANS: Client exception. %1$s is a notice ID, %2$s is a user ID. +#: actions/usersalmon.php:219 +#, php-format +msgid "Notice with ID %1$s not posted by %2$s." +msgstr "Nota con ID %1$s non publicate per %2$s." + +#. TRANS: Field label. +#: actions/ostatusgroup.php:76 +msgid "Join group" +msgstr "Adherer al gruppo" + +#. TRANS: Tooltip for field label "Join group". +#: actions/ostatusgroup.php:79 +msgid "OStatus group's address, like http://example.net/group/nickname." +msgstr "" +"Un adresse de gruppo OStatus, como http://example.net/group/pseudonymo." + +#. TRANS: Button text. +#: actions/ostatusgroup.php:84 actions/ostatussub.php:73 +msgctxt "BUTTON" +msgid "Continue" +msgstr "Continuar" + +#: actions/ostatusgroup.php:103 +msgid "You are already a member of this group." +msgstr "Tu es ja membro de iste gruppo." + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:138 +msgid "Already a member!" +msgstr "Ja membro!" + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:149 +msgid "Remote group join failed!" +msgstr "Le adhesion al gruppo remote ha fallite!" + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:153 +msgid "Remote group join aborted!" +msgstr "Le adhesion al gruppo remote ha essite abortate!" + +#. TRANS: Page title for OStatus remote group join form +#: actions/ostatusgroup.php:165 +msgid "Confirm joining remote group" +msgstr "Confirmar adhesion a gruppo remote" + +#. TRANS: Instructions. +#: actions/ostatusgroup.php:176 +msgid "" +"You can subscribe to groups from other supported sites. Paste the group's " +"profile URI below:" +msgstr "" +"Tu pote subscriber a gruppos de altere sitos supportate. Colla le URI del " +"profilo del gruppo hic infra:" + +#. TRANS: Client error. +#: actions/groupsalmon.php:47 +msgid "No such group." +msgstr "Gruppo non existe." + +#. TRANS: Client error. +#: actions/groupsalmon.php:53 +msgid "Can't accept remote posts for a remote group." +msgstr "Non pote acceptar messages remote pro un gruppo remote." + +#. TRANS: Client error. +#: actions/groupsalmon.php:127 +msgid "Can't read profile to set up group membership." +msgstr "Non pote leger profilo pro establir membrato de gruppo." + +#. TRANS: Client error. +#: actions/groupsalmon.php:131 actions/groupsalmon.php:174 +msgid "Groups can't join groups." +msgstr "Gruppos non pote adherer a gruppos." + +#: actions/groupsalmon.php:144 +msgid "You have been blocked from that group by the admin." +msgstr "Le administrator te ha blocate de iste gruppo." + +#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname. +#: actions/groupsalmon.php:159 +#, php-format +msgid "Could not join remote user %1$s to group %2$s." +msgstr "Non poteva inscriber le usator remote %1$s in le gruppo %2$s." + +#: actions/groupsalmon.php:171 +msgid "Can't read profile to cancel group membership." +msgstr "Non pote leger profilo pro cancellar membrato de gruppo." + +#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname. +#: actions/groupsalmon.php:188 +#, php-format +msgid "Could not remove remote user %1$s from group %2$s." +msgstr "Non poteva remover le usator remote %1$s del gruppo %2$s." + +#. TRANS: Field label for a field that takes an OStatus user address. +#: actions/ostatussub.php:66 +msgid "Subscribe to" +msgstr "Subscriber a" + +#. TRANS: Tooltip for field label "Subscribe to". +#: actions/ostatussub.php:69 +msgid "" +"OStatus user's address, like nickname@example.com or http://example.net/" +"nickname" +msgstr "" +"Le adresse de un usator OStatus, como pseudonymo@example.com o http://" +"example.net/pseudonymo" + +#. TRANS: Button text. +#. TRANS: Tooltip for button "Join". +#: actions/ostatussub.php:110 +msgctxt "BUTTON" +msgid "Join this group" +msgstr "Adherer a iste gruppo" + +#. TRANS: Button text. +#: actions/ostatussub.php:113 +msgctxt "BUTTON" +msgid "Confirm" +msgstr "Confirmar" + +#. TRANS: Tooltip for button "Confirm". +#: actions/ostatussub.php:115 +msgid "Subscribe to this user" +msgstr "Subscriber a iste usator" + +#: actions/ostatussub.php:136 +msgid "You are already subscribed to this user." +msgstr "Tu es ja subscribite a iste usator." + +#: actions/ostatussub.php:165 +msgid "Photo" +msgstr "Photo" + +#: actions/ostatussub.php:176 +msgid "Nickname" +msgstr "Pseudonymo" + +#: actions/ostatussub.php:197 +msgid "Location" +msgstr "Loco" + +#: actions/ostatussub.php:206 +msgid "URL" +msgstr "URL" + +#: actions/ostatussub.php:218 +msgid "Note" +msgstr "Nota" + +#. TRANS: Error text. +#: actions/ostatussub.php:254 actions/ostatussub.php:261 +#: actions/ostatussub.php:286 +msgid "" +"Sorry, we could not reach that address. Please make sure that the OStatus " +"address is like nickname@example.com or http://example.net/nickname." +msgstr "" +"Regrettabilemente, nos non poteva attinger iste adresse. Per favor assecura " +"te que le adresse OStatus es como pseudonymo@example.com o http://example." +"net/pseudonymo." + +#. TRANS: Error text. +#: actions/ostatussub.php:265 actions/ostatussub.php:269 +#: actions/ostatussub.php:273 actions/ostatussub.php:277 +#: actions/ostatussub.php:281 +msgid "" +"Sorry, we could not reach that feed. Please try that OStatus address again " +"later." +msgstr "" +"Regrettabilemente, nos non poteva attinger iste syndication. Per favor " +"reproba iste adresse OStatus plus tarde." + +#. TRANS: OStatus remote subscription dialog error. +#: actions/ostatussub.php:315 +msgid "Already subscribed!" +msgstr "Ja subscribite!" + +#. TRANS: OStatus remote subscription dialog error. +#: actions/ostatussub.php:320 +msgid "Remote subscription failed!" +msgstr "Subscription remote fallite!" + +#: actions/ostatussub.php:367 actions/ostatusinit.php:63 +msgid "There was a problem with your session token. Try again, please." +msgstr "Occurreva un problema con le indicio de tu session. Per favor reproba." + +#. TRANS: Form title. +#: actions/ostatussub.php:395 actions/ostatusinit.php:82 +msgid "Subscribe to user" +msgstr "Subscriber a usator" + +#. TRANS: Page title for OStatus remote subscription form +#: actions/ostatussub.php:415 +msgid "Confirm" +msgstr "Confirmar" + +#. TRANS: Instructions. +#: actions/ostatussub.php:427 +msgid "" +"You can subscribe to users from other supported sites. Paste their address " +"or profile URI below:" +msgstr "" +"Tu pote subscriber a usatores de altere sitos supportate. Colla su adresse o " +"URI de profilo hic infra:" + +#. TRANS: Client error. +#: actions/ostatusinit.php:41 +msgid "You can use the local subscription!" +msgstr "Tu pote usar le subscription local!" + +#. TRANS: Form legend. +#: actions/ostatusinit.php:97 +#, php-format +msgid "Join group %s" +msgstr "Adherer al gruppo %s" + +#. TRANS: Button text. +#: actions/ostatusinit.php:99 +msgctxt "BUTTON" +msgid "Join" +msgstr "Inscriber" + +#. TRANS: Form legend. +#: actions/ostatusinit.php:102 +#, php-format +msgid "Subscribe to %s" +msgstr "Subscriber a %s" + +#. TRANS: Button text. +#: actions/ostatusinit.php:104 +msgctxt "BUTTON" +msgid "Subscribe" +msgstr "Subscriber" + +#. TRANS: Field label. +#: actions/ostatusinit.php:117 +msgid "User nickname" +msgstr "Pseudonymo del usator" + +#: actions/ostatusinit.php:118 +msgid "Nickname of the user you want to follow." +msgstr "Le pseudonymo del usator que tu vole sequer." + +#. TRANS: Field label. +#: actions/ostatusinit.php:123 +msgid "Profile Account" +msgstr "Conto de profilo" + +#. TRANS: Tooltip for field label "Profile Account". +#: actions/ostatusinit.php:125 +msgid "Your account id (e.g. user@identi.ca)." +msgstr "Le ID de tu conto (p.ex. usator@identi.ca)." + +#. TRANS: Client error. +#: actions/ostatusinit.php:147 +msgid "Must provide a remote profile." +msgstr "Debe fornir un profilo remote." + +#. TRANS: Client error. +#: actions/ostatusinit.php:159 +msgid "Couldn't look up OStatus account profile." +msgstr "Non poteva cercar le profilo del conto OStatus." + +#. TRANS: Client error. +#: actions/ostatusinit.php:172 +msgid "Couldn't confirm remote profile address." +msgstr "Non poteva confirmar le adresse del profilo remote." + +#. TRANS: Page title. +#: actions/ostatusinit.php:217 +msgid "OStatus Connect" +msgstr "Connexion OStatus" + +#: actions/pushcallback.php:48 +msgid "Empty or invalid feed id." +msgstr "ID de syndication vacue o invalide." + +#. TRANS: Server exception. %s is a feed ID. +#: actions/pushcallback.php:54 +#, php-format +msgid "Unknown PuSH feed id %s" +msgstr "ID de syndication PuSH %s incognite" + +#. TRANS: Client exception. %s is an invalid feed name. +#: actions/pushcallback.php:94 +#, php-format +msgid "Bad hub.topic feed \"%s\"." +msgstr "Syndication hub.topic \"%s\" incorrecte." + +#. TRANS: Client exception. %1$s the invalid token, %2$s is the topic for which the invalid token was given. +#: actions/pushcallback.php:99 +#, php-format +msgid "Bad hub.verify_token %1$s for %2$s." +msgstr "Incorrecte hub.verify_token %1$s pro %2$s." + +#. TRANS: Client exception. %s is an invalid topic. +#: actions/pushcallback.php:106 +#, php-format +msgid "Unexpected subscribe request for %s." +msgstr "Requesta de subscription inexpectate pro %s." + +#. TRANS: Client exception. %s is an invalid topic. +#: actions/pushcallback.php:111 +#, php-format +msgid "Unexpected unsubscribe request for %s." +msgstr "Requesta de cancellation de subscription inexpectate pro %s." diff --git a/plugins/OStatus/locale/mk/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/mk/LC_MESSAGES/OStatus.po new file mode 100644 index 000000000..fda59785e --- /dev/null +++ b/plugins/OStatus/locale/mk/LC_MESSAGES/OStatus.po @@ -0,0 +1,785 @@ +# Translation of StatusNet - OStatus to Macedonian (Македонски) +# Expored from translatewiki.net +# +# Author: Bjankuloski06 +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - OStatus\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-04 22:30+0000\n" +"PO-Revision-Date: 2010-10-04 22:33:41+0000\n" +"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-03 20:57:03+0000\n" +"X-Generator: MediaWiki 1.17alpha (r74276); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: mk\n" +"X-Message-Group: #out-statusnet-plugin-ostatus\n" +"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" + +#. TRANS: Link description for link to subscribe to a remote user. +#. TRANS: Link text for a user to subscribe to an OStatus user. +#: OStatusPlugin.php:227 OStatusPlugin.php:937 +msgid "Subscribe" +msgstr "Претплати се" + +#. TRANS: Link description for link to join a remote group. +#: OStatusPlugin.php:246 OStatusPlugin.php:655 actions/ostatussub.php:107 +msgid "Join" +msgstr "Придружи се" + +#. TRANSLATE: %s is a domain. +#: OStatusPlugin.php:459 +#, php-format +msgid "Sent from %s via OStatus" +msgstr "Испратено од %s преку OStatus" + +#. TRANS: Exception. +#: OStatusPlugin.php:531 +msgid "Could not set up remote subscription." +msgstr "Не можев да ја поставам далечинската претплата." + +#: OStatusPlugin.php:605 +msgid "Unfollow" +msgstr "Престани со следење" + +#. TRANS: Success message for unsubscribe from user attempt through OStatus. +#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name. +#: OStatusPlugin.php:608 +#, php-format +msgid "%1$s stopped following %2$s." +msgstr "%1$s престана да го/ја следи %2$s." + +#: OStatusPlugin.php:636 +msgid "Could not set up remote group membership." +msgstr "Не можев да го поставам членството во далечинската група." + +#. TRANS: Success message for subscribe to group attempt through OStatus. +#. TRANS: %1$s is the member name, %2$s is the subscribed group's name. +#: OStatusPlugin.php:658 +#, fuzzy, php-format +msgid "%1$s has joined group %2$s." +msgstr "%1$s престана да го/ја следи %2$s." + +#. TRANS: Exception. +#: OStatusPlugin.php:667 +msgid "Failed joining remote group." +msgstr "Не успеав да Ве зачленам во далечинската група." + +#: OStatusPlugin.php:707 +msgid "Leave" +msgstr "Напушти" + +#. TRANS: Success message for unsubscribe from group attempt through OStatus. +#. TRANS: %1$s is the member name, %2$s is the unsubscribed group's name. +#: OStatusPlugin.php:710 +#, php-format +msgid "%1$s has left group %2$s." +msgstr "" + +#: OStatusPlugin.php:785 +msgid "Disfavor" +msgstr "Откажи бендисана" + +#. TRANS: Success message for remove a favorite notice through OStatus. +#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice. +#: OStatusPlugin.php:788 +#, php-format +msgid "%1$s marked notice %2$s as no longer a favorite." +msgstr "%1$s повеќе не ја бендисува забелешката %2$s." + +#. TRANS: Link text for link to remote subscribe. +#: OStatusPlugin.php:864 +msgid "Remote" +msgstr "Далечински" + +#. TRANS: Title for activity. +#: OStatusPlugin.php:904 +msgid "Profile update" +msgstr "Поднова на профил" + +#. TRANS: Ping text for remote profile update through OStatus. +#. TRANS: %s is user that updated their profile. +#: OStatusPlugin.php:907 +#, php-format +msgid "%s has updated their profile page." +msgstr "%s ја поднови својата профилна страница." + +#. TRANS: Plugin description. +#: OStatusPlugin.php:952 +msgid "" +"Follow people across social networks that implement <a href=\"http://ostatus." +"org/\">OStatus</a>." +msgstr "" +"Следете луѓе низ разни друштвени мрежи што го применуваат <a href=\"http://" +"ostatus.org/\">OStatus</a>." + +#: classes/FeedSub.php:248 +msgid "Attempting to start PuSH subscription for feed with no hub." +msgstr "Се обидов да ја започнам PuSH-претплатата за канал без средиште." + +#: classes/FeedSub.php:278 +msgid "Attempting to end PuSH subscription for feed with no hub." +msgstr "" +"Се обидувам да ставам крај на PuSH-претплатата за емитување без средиште." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:188 +#, php-format +msgid "Invalid ostatus_profile state: both group and profile IDs set for %s." +msgstr "" +"Неважечка ostatus_profile-состојба: назнаките (ID) на групата и профилот се " +"наместени за %s." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:191 +#, php-format +msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s." +msgstr "" +"Неважечка ostatus_profile-состојба: назнаките (ID) за групата и профилот се " +"празни за %s." + +#. TRANS: Server exception. +#. TRANS: %1$s is the method name the exception occured in, %2$s is the actor type. +#: classes/Ostatus_profile.php:281 +#, php-format +msgid "Invalid actor passed to %1$s: %2$s." +msgstr "На %1$s е пренесен неважечки учесник: %2$s." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:374 +msgid "" +"Invalid type passed to Ostatus_profile::notify. It must be XML string or " +"Activity entry." +msgstr "" +"На Ostatus_profile::notify е пренесен неважечки тип. Мора да биде XML-низа " +"или ставка во Activity." + +#: classes/Ostatus_profile.php:404 +msgid "Unknown feed format." +msgstr "Непознат формат на каналско емитување." + +#: classes/Ostatus_profile.php:427 +msgid "RSS feed without a channel." +msgstr "RSS-емитување без канал." + +#. TRANS: Client exception. +#: classes/Ostatus_profile.php:472 +msgid "Can't handle that kind of post." +msgstr "Не можам да работам со таква објава." + +#. TRANS: Client exception. %s is a source URL. +#: classes/Ostatus_profile.php:555 +#, php-format +msgid "No content for notice %s." +msgstr "Нема содржина за забелешката %s." + +#. TRANS: Shown when a notice is longer than supported and/or when attachments are present. +#: classes/Ostatus_profile.php:588 +msgid "Show more" +msgstr "Повеќе" + +#. TRANS: Exception. %s is a profile URL. +#: classes/Ostatus_profile.php:781 +#, php-format +msgid "Could not reach profile page %s." +msgstr "Не можев да ја добијам профилната страница %s." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:839 +#, php-format +msgid "Could not find a feed URL for profile page %s." +msgstr "Не можев да пронајдам каналска URL-адреса за профилната страница %s." + +#: classes/Ostatus_profile.php:976 +msgid "Can't find enough profile information to make a feed." +msgstr "Не можев да најдам доволно профилни податоци за да направам канал." + +#: classes/Ostatus_profile.php:1035 +#, php-format +msgid "Invalid avatar URL %s." +msgstr "Неважечка URL-адреса за аватарот: %s." + +#: classes/Ostatus_profile.php:1045 +#, php-format +msgid "Tried to update avatar for unsaved remote profile %s." +msgstr "" +"Се обидов да го подновам аватарот за незачуваниот далечински профил %s." + +#: classes/Ostatus_profile.php:1053 +#, php-format +msgid "Unable to fetch avatar from %s." +msgstr "Не можам да го добијам аватарот од %s." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1275 +msgid "Local user can't be referenced as remote." +msgstr "Локалниот корисник не може да се наведе како далечински." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1280 +msgid "Local group can't be referenced as remote." +msgstr "Локалната група не може да се наведе како далечинска." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1332 classes/Ostatus_profile.php:1343 +msgid "Can't save local profile." +msgstr "Не можам да го зачувам локалниот профил." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1351 +msgid "Can't save OStatus profile." +msgstr "Не можам да го зачувам профилот од OStatus." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1610 classes/Ostatus_profile.php:1638 +msgid "Not a valid webfinger address." +msgstr "Ова не е важечка Webfinger-адреса" + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1720 +#, php-format +msgid "Couldn't save profile for \"%s\"." +msgstr "Не можам да го зачувам профилот за „%s“." + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1739 +#, php-format +msgid "Couldn't save ostatus_profile for \"%s\"." +msgstr "Не можам да го зачувам ostatus_profile за „%s“." + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1747 +#, php-format +msgid "Couldn't find a valid profile for \"%s\"." +msgstr "Не можев да пронајдам важечки профил за „%s“." + +#: classes/Ostatus_profile.php:1789 +msgid "Could not store HTML content of long post as file." +msgstr "" +"Не можам да ја складирам HTML-содржината на долгата објава како податотека." + +#. TRANS: Client exception. %s is a HTTP status code. +#: classes/HubSub.php:208 +#, php-format +msgid "Hub subscriber verification returned HTTP %s." +msgstr "Потврдата на претплатникот на средиштето даде HTTP %s." + +#. TRANS: Exception. %1$s is a response status code, %2$s is the body of the response. +#: classes/HubSub.php:355 +#, php-format +msgid "Callback returned status: %1$s. Body: %2$s" +msgstr "Повратниот повик даде статус: %1$s. Содржина: %2$s" + +#. TRANS: Client error. POST is a HTTP command. It should not be translated. +#: lib/salmonaction.php:42 +msgid "This method requires a POST." +msgstr "Овој метод бара POST." + +#. TRANS: Client error. Do not translate "application/magic-envelope+xml" +#: lib/salmonaction.php:47 +msgid "Salmon requires \"application/magic-envelope+xml\"." +msgstr "Salmon бара „програм/magic-envelope+xml“." + +#. TRANS: Client error. +#: lib/salmonaction.php:57 +msgid "Salmon signature verification failed." +msgstr "Salmon-овото потврдување на потпис не успеа." + +#. TRANS: Client error. +#: lib/salmonaction.php:69 +msgid "Salmon post must be an Atom entry." +msgstr "Salmon-овата објава мора да биде Atom-ова ставка." + +#. TRANS: Client exception. +#: lib/salmonaction.php:118 +msgid "Unrecognized activity type." +msgstr "Непризнаен вид на активност." + +#. TRANS: Client exception. +#: lib/salmonaction.php:127 +msgid "This target doesn't understand posts." +msgstr "Оваа цел не разбира објави." + +#. TRANS: Client exception. +#: lib/salmonaction.php:133 +msgid "This target doesn't understand follows." +msgstr "Оваа цел не разбира следења." + +#. TRANS: Client exception. +#: lib/salmonaction.php:139 +msgid "This target doesn't understand unfollows." +msgstr "Оваа цел не разбира прекини на следења." + +#. TRANS: Client exception. +#: lib/salmonaction.php:145 +msgid "This target doesn't understand favorites." +msgstr "Оваа цел не разбира бендисување на забелешки." + +#. TRANS: Client exception. +#: lib/salmonaction.php:151 +msgid "This target doesn't understand unfavorites." +msgstr "Оваа цел не разбира одбендисување на забелешки." + +#. TRANS: Client exception. +#: lib/salmonaction.php:157 +msgid "This target doesn't understand share events." +msgstr "Оваа цел не разбира споделување на настани." + +#. TRANS: Client exception. +#: lib/salmonaction.php:163 +msgid "This target doesn't understand joins." +msgstr "Оваа цел не разбира придружувања." + +#. TRANS: Client exception. +#: lib/salmonaction.php:169 +msgid "This target doesn't understand leave events." +msgstr "Оваа цел не разбира напуштање на настани." + +#. TRANS: Exception. +#: lib/salmonaction.php:197 +msgid "Received a salmon slap from unidentified actor." +msgstr "Примив Salmon-шамар од непознат учесник." + +#. TRANS: Exception. +#: lib/discovery.php:110 +#, php-format +msgid "Unable to find services for %s." +msgstr "Не можев да најдам служби за %s." + +#. TRANS: Exception. +#: lib/xrd.php:64 +msgid "Invalid XML." +msgstr "Неважечко XML." + +#. TRANS: Exception. +#: lib/xrd.php:69 +msgid "Invalid XML, missing XRD root." +msgstr "Неважечко XML. Нема XRD-основа." + +#. TRANS: Exception. +#: lib/magicenvelope.php:80 +msgid "Unable to locate signer public key." +msgstr "Не можам да го пронајдам јавниот клуч на потписникот." + +#. TRANS: Exception. +#: lib/salmon.php:93 +msgid "Salmon invalid actor for signing." +msgstr "Ова е неважечки учесник во потпишувањето според Salmon." + +#: tests/gettext-speedtest.php:57 +msgid "Feeds" +msgstr "Канали" + +#. TRANS: Client exception. +#: actions/pushhub.php:66 +msgid "Publishing outside feeds not supported." +msgstr "Објавувањето вон каналите не е поддржано." + +#. TRANS: Client exception. %s is a mode. +#: actions/pushhub.php:69 +#, php-format +msgid "Unrecognized mode \"%s\"." +msgstr "Непрепознат режим „%s“." + +#. TRANS: Client exception. %s is a topic. +#: actions/pushhub.php:89 +#, php-format +msgid "" +"Unsupported hub.topic %s this hub only serves local user and group Atom " +"feeds." +msgstr "" +"Неподдржан hub.topic %s - ова средиште служи само за само Atom-емитувања од " +"локални корисници и групи." + +#. TRANS: Client exception. +#: actions/pushhub.php:95 +#, php-format +msgid "Invalid hub.verify \"%s\". It must be sync or async." +msgstr "Неважечки hub.verify „%s“. Мора да биде sync или async." + +#. TRANS: Client exception. +#: actions/pushhub.php:101 +#, php-format +msgid "Invalid hub.lease \"%s\". It must be empty or positive integer." +msgstr "Неважечки hub.lease „%s“. Мора да биде празно или позитивен цел број." + +#. TRANS: Client exception. +#: actions/pushhub.php:109 +#, php-format +msgid "Invalid hub.secret \"%s\". It must be under 200 bytes." +msgstr "Неважечки hub.secret „%s“. Мора да биде под 200 бајти." + +#. TRANS: Client exception. +#: actions/pushhub.php:161 +#, php-format +msgid "Invalid hub.topic \"%s\". User doesn't exist." +msgstr "Неважеки hub.topic „%s“. Корисникот не постои." + +#. TRANS: Client exception. +#: actions/pushhub.php:170 +#, php-format +msgid "Invalid hub.topic \"%s\". Group doesn't exist." +msgstr "Неважечки hub.topic „%s“. Групата не постои." + +#. TRANS: Client exception. +#. TRANS: %1$s is this argument to the method this exception occurs in, %2$s is a URL. +#: actions/pushhub.php:195 +#, php-format +msgid "Invalid URL passed for %1$s: \"%2$s\"" +msgstr "Добив неважечка URL-адреса за %1$s: „%2$s“" + +#: actions/userxrd.php:49 actions/ownerxrd.php:37 actions/usersalmon.php:43 +msgid "No such user." +msgstr "Нема таков корисник." + +#. TRANS: Client error. +#: actions/usersalmon.php:37 actions/groupsalmon.php:40 +msgid "No ID." +msgstr "Нема ID." + +#. TRANS: Client exception. +#: actions/usersalmon.php:81 +msgid "In reply to unknown notice." +msgstr "Како одговор на непозната забелешка." + +#. TRANS: Client exception. +#: actions/usersalmon.php:86 +msgid "In reply to a notice not by this user and not mentioning this user." +msgstr "" +"Како одговор на забелешка која не е од овој корисник и не го споменува." + +#. TRANS: Client exception. +#: actions/usersalmon.php:163 +msgid "Could not save new favorite." +msgstr "Не можам да го зачувам новобендисаното." + +#. TRANS: Client exception. +#: actions/usersalmon.php:195 +msgid "Can't favorite/unfavorite without an object." +msgstr "Не можам да означам како бендисано или да тргнам бендисано без објект." + +#. TRANS: Client exception. +#: actions/usersalmon.php:207 +msgid "Can't handle that kind of object for liking/faving." +msgstr "" +"Не можам да работам со таков објект за ставање врски/означување бендисани." + +#. TRANS: Client exception. %s is an object ID. +#: actions/usersalmon.php:214 +#, php-format +msgid "Notice with ID %s unknown." +msgstr "Не ја распознавам забелешката со ID %s." + +#. TRANS: Client exception. %1$s is a notice ID, %2$s is a user ID. +#: actions/usersalmon.php:219 +#, php-format +msgid "Notice with ID %1$s not posted by %2$s." +msgstr "Забелешката со ID %1$s не е објавена од %2$s." + +#. TRANS: Field label. +#: actions/ostatusgroup.php:76 +msgid "Join group" +msgstr "Придружи се на групата" + +#. TRANS: Tooltip for field label "Join group". +#: actions/ostatusgroup.php:79 +msgid "OStatus group's address, like http://example.net/group/nickname." +msgstr "" +"Адреса на групата на OStatus, како на пр. http://primer.net/group/prekar." + +#. TRANS: Button text. +#: actions/ostatusgroup.php:84 actions/ostatussub.php:73 +msgctxt "BUTTON" +msgid "Continue" +msgstr "Продолжи" + +#: actions/ostatusgroup.php:103 +msgid "You are already a member of this group." +msgstr "Веќе членувате во групава." + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:138 +msgid "Already a member!" +msgstr "Веќе членувате!" + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:149 +msgid "Remote group join failed!" +msgstr "Придружувањето на далечинската група не успеа!" + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:153 +msgid "Remote group join aborted!" +msgstr "Придружувањето на далечинската група е откажано!" + +#. TRANS: Page title for OStatus remote group join form +#: actions/ostatusgroup.php:165 +msgid "Confirm joining remote group" +msgstr "Потврди придружување кон далечинска група." + +#. TRANS: Instructions. +#: actions/ostatusgroup.php:176 +msgid "" +"You can subscribe to groups from other supported sites. Paste the group's " +"profile URI below:" +msgstr "" +"Можете да се претплаќате на групи од други поддржани мреж. места. Подолу " +"залепете го URI-то на профилот на групата." + +#. TRANS: Client error. +#: actions/groupsalmon.php:47 +msgid "No such group." +msgstr "Нема таква група." + +#. TRANS: Client error. +#: actions/groupsalmon.php:53 +msgid "Can't accept remote posts for a remote group." +msgstr "Не можам да прифаќам далечински објави од далечинска група." + +#. TRANS: Client error. +#: actions/groupsalmon.php:127 +msgid "Can't read profile to set up group membership." +msgstr "" +"Не можев да го прочитам профилот за да го поставам членството во групата." + +#. TRANS: Client error. +#: actions/groupsalmon.php:131 actions/groupsalmon.php:174 +msgid "Groups can't join groups." +msgstr "Во групите не можат да се зачленуваат групи." + +#: actions/groupsalmon.php:144 +msgid "You have been blocked from that group by the admin." +msgstr "Блокирани сте на таа група од администратор." + +#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname. +#: actions/groupsalmon.php:159 +#, php-format +msgid "Could not join remote user %1$s to group %2$s." +msgstr "Не можев да го зачленам далечинскиот корисник %1$s во групата %2$s." + +#: actions/groupsalmon.php:171 +msgid "Can't read profile to cancel group membership." +msgstr "Не можам да го прочитам профилот за откажам членство во групата." + +#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname. +#: actions/groupsalmon.php:188 +#, php-format +msgid "Could not remove remote user %1$s from group %2$s." +msgstr "Не можев да го отстранам далечинскиот корисник %1$s од групата %2$s." + +#. TRANS: Field label for a field that takes an OStatus user address. +#: actions/ostatussub.php:66 +msgid "Subscribe to" +msgstr "Претплати се" + +#. TRANS: Tooltip for field label "Subscribe to". +#: actions/ostatussub.php:69 +msgid "" +"OStatus user's address, like nickname@example.com or http://example.net/" +"nickname" +msgstr "" +"Адреса на корисникот на OStatus, како на пр. prekar@primer.com or http://" +"primer.net/prekar" + +#. TRANS: Button text. +#. TRANS: Tooltip for button "Join". +#: actions/ostatussub.php:110 +msgctxt "BUTTON" +msgid "Join this group" +msgstr "Зачлени се во групава" + +#. TRANS: Button text. +#: actions/ostatussub.php:113 +msgctxt "BUTTON" +msgid "Confirm" +msgstr "Потврди" + +#. TRANS: Tooltip for button "Confirm". +#: actions/ostatussub.php:115 +msgid "Subscribe to this user" +msgstr "Претплати се на корисников" + +#: actions/ostatussub.php:136 +msgid "You are already subscribed to this user." +msgstr "Веќе сте претплатени на овој корисник." + +#: actions/ostatussub.php:165 +msgid "Photo" +msgstr "Слика" + +#: actions/ostatussub.php:176 +msgid "Nickname" +msgstr "Прекар" + +#: actions/ostatussub.php:197 +msgid "Location" +msgstr "Место" + +#: actions/ostatussub.php:206 +msgid "URL" +msgstr "URL-адереса" + +#: actions/ostatussub.php:218 +msgid "Note" +msgstr "Белешка" + +#. TRANS: Error text. +#: actions/ostatussub.php:254 actions/ostatussub.php:261 +#: actions/ostatussub.php:286 +msgid "" +"Sorry, we could not reach that address. Please make sure that the OStatus " +"address is like nickname@example.com or http://example.net/nickname." +msgstr "" +"Нажалост, не можевме да ја добиеме таа адреса. Проверете дали адресата од " +"OStatus е од типот prekar@primer.com или http://primer.net/prekar." + +#. TRANS: Error text. +#: actions/ostatussub.php:265 actions/ostatussub.php:269 +#: actions/ostatussub.php:273 actions/ostatussub.php:277 +#: actions/ostatussub.php:281 +msgid "" +"Sorry, we could not reach that feed. Please try that OStatus address again " +"later." +msgstr "" +"Нажалост, не можевме да го добиеме тој канал. Обидете се со таа OStatus-" +"адреса подоцна." + +#. TRANS: OStatus remote subscription dialog error. +#: actions/ostatussub.php:315 +msgid "Already subscribed!" +msgstr "Веќе сте претплатени!" + +#. TRANS: OStatus remote subscription dialog error. +#: actions/ostatussub.php:320 +msgid "Remote subscription failed!" +msgstr "Далечинската претплата не успеа!" + +#: actions/ostatussub.php:367 actions/ostatusinit.php:63 +msgid "There was a problem with your session token. Try again, please." +msgstr "Се појави проблем со жетонот на Вашата сесија. Обидете се повторно." + +#. TRANS: Form title. +#: actions/ostatussub.php:395 actions/ostatusinit.php:82 +msgid "Subscribe to user" +msgstr "Претплати се на корисник" + +#. TRANS: Page title for OStatus remote subscription form +#: actions/ostatussub.php:415 +msgid "Confirm" +msgstr "Потврди" + +#. TRANS: Instructions. +#: actions/ostatussub.php:427 +msgid "" +"You can subscribe to users from other supported sites. Paste their address " +"or profile URI below:" +msgstr "" +"Можете да се претплатите на корисници од други поддржани мрежни места. " +"Ископирајте ја нивната адреса или профилно URI подолу:" + +#. TRANS: Client error. +#: actions/ostatusinit.php:41 +msgid "You can use the local subscription!" +msgstr "Можете да ја користите локалната претплата!" + +#. TRANS: Form legend. +#: actions/ostatusinit.php:97 +#, php-format +msgid "Join group %s" +msgstr "Зачлени се во групата %s" + +#. TRANS: Button text. +#: actions/ostatusinit.php:99 +msgctxt "BUTTON" +msgid "Join" +msgstr "Зачлени се" + +#. TRANS: Form legend. +#: actions/ostatusinit.php:102 +#, php-format +msgid "Subscribe to %s" +msgstr "Претплати се на %s" + +#. TRANS: Button text. +#: actions/ostatusinit.php:104 +msgctxt "BUTTON" +msgid "Subscribe" +msgstr "Претплати се" + +#. TRANS: Field label. +#: actions/ostatusinit.php:117 +msgid "User nickname" +msgstr "Прекар на корисникот" + +#: actions/ostatusinit.php:118 +msgid "Nickname of the user you want to follow." +msgstr "Прекарот на корисникот што сакате да го следите." + +#. TRANS: Field label. +#: actions/ostatusinit.php:123 +msgid "Profile Account" +msgstr "Профилна сметка" + +#. TRANS: Tooltip for field label "Profile Account". +#: actions/ostatusinit.php:125 +msgid "Your account id (e.g. user@identi.ca)." +msgstr "Вашата назнака (ID) на сметката (на пр. korisnik@identi.ca)." + +#. TRANS: Client error. +#: actions/ostatusinit.php:147 +msgid "Must provide a remote profile." +msgstr "Мора да наведете далечински профил." + +#. TRANS: Client error. +#: actions/ostatusinit.php:159 +msgid "Couldn't look up OStatus account profile." +msgstr "Не можев да го проверам профилот на OStatus-сметката." + +#. TRANS: Client error. +#: actions/ostatusinit.php:172 +msgid "Couldn't confirm remote profile address." +msgstr "Не можев да ја потврдам адресата на далечинскиот профил." + +#. TRANS: Page title. +#: actions/ostatusinit.php:217 +msgid "OStatus Connect" +msgstr "OStatus - Поврзување" + +#: actions/pushcallback.php:48 +msgid "Empty or invalid feed id." +msgstr "Празен или неважечки ID за канал" + +#. TRANS: Server exception. %s is a feed ID. +#: actions/pushcallback.php:54 +#, php-format +msgid "Unknown PuSH feed id %s" +msgstr "Непознат ID %s за PuSH-канал" + +#. TRANS: Client exception. %s is an invalid feed name. +#: actions/pushcallback.php:94 +#, php-format +msgid "Bad hub.topic feed \"%s\"." +msgstr "Лош hub.topic-канал „%s“." + +#. TRANS: Client exception. %1$s the invalid token, %2$s is the topic for which the invalid token was given. +#: actions/pushcallback.php:99 +#, php-format +msgid "Bad hub.verify_token %1$s for %2$s." +msgstr "Лош hub.verify_token %1$s за %2$s." + +#. TRANS: Client exception. %s is an invalid topic. +#: actions/pushcallback.php:106 +#, php-format +msgid "Unexpected subscribe request for %s." +msgstr "Неочекувано барање за претплата за %s." + +#. TRANS: Client exception. %s is an invalid topic. +#: actions/pushcallback.php:111 +#, php-format +msgid "Unexpected unsubscribe request for %s." +msgstr "Неочекувано барање за отпишување од претплата за %s." diff --git a/plugins/OStatus/locale/nl/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/nl/LC_MESSAGES/OStatus.po new file mode 100644 index 000000000..6fec3ea2a --- /dev/null +++ b/plugins/OStatus/locale/nl/LC_MESSAGES/OStatus.po @@ -0,0 +1,814 @@ +# Translation of StatusNet - OStatus to Dutch (Nederlands) +# Expored from translatewiki.net +# +# Author: McDutchie +# Author: Siebrand +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - OStatus\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-04 22:30+0000\n" +"PO-Revision-Date: 2010-10-04 22:33:41+0000\n" +"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-03 20:57:03+0000\n" +"X-Generator: MediaWiki 1.17alpha (r74276); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: nl\n" +"X-Message-Group: #out-statusnet-plugin-ostatus\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANS: Link description for link to subscribe to a remote user. +#. TRANS: Link text for a user to subscribe to an OStatus user. +#: OStatusPlugin.php:227 OStatusPlugin.php:937 +msgid "Subscribe" +msgstr "Abonneren" + +#. TRANS: Link description for link to join a remote group. +#: OStatusPlugin.php:246 OStatusPlugin.php:655 actions/ostatussub.php:107 +msgid "Join" +msgstr "Toetreden" + +#. TRANSLATE: %s is a domain. +#: OStatusPlugin.php:459 +#, php-format +msgid "Sent from %s via OStatus" +msgstr "Verzonden vanaf %s via OStatus" + +#. TRANS: Exception. +#: OStatusPlugin.php:531 +msgid "Could not set up remote subscription." +msgstr "" +"Het was niet mogelijk het abonnement via een andere dienst in te stellen." + +#: OStatusPlugin.php:605 +msgid "Unfollow" +msgstr "Niet langer volgen" + +#. TRANS: Success message for unsubscribe from user attempt through OStatus. +#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name. +#: OStatusPlugin.php:608 +#, php-format +msgid "%1$s stopped following %2$s." +msgstr "%1$s volgt %2$s niet langer." + +#: OStatusPlugin.php:636 +msgid "Could not set up remote group membership." +msgstr "" +"Het was niet mogelijk het groepslidmaatschap via een andere dienst in te " +"stellen." + +#. TRANS: Success message for subscribe to group attempt through OStatus. +#. TRANS: %1$s is the member name, %2$s is the subscribed group's name. +#: OStatusPlugin.php:658 +#, fuzzy, php-format +msgid "%1$s has joined group %2$s." +msgstr "%1$s volgt %2$s niet langer." + +#. TRANS: Exception. +#: OStatusPlugin.php:667 +msgid "Failed joining remote group." +msgstr "" +"Het was niet mogelijk toe te streden to de groep van een andere dienst." + +#: OStatusPlugin.php:707 +msgid "Leave" +msgstr "Verlaten" + +#. TRANS: Success message for unsubscribe from group attempt through OStatus. +#. TRANS: %1$s is the member name, %2$s is the unsubscribed group's name. +#: OStatusPlugin.php:710 +#, php-format +msgid "%1$s has left group %2$s." +msgstr "" + +#: OStatusPlugin.php:785 +msgid "Disfavor" +msgstr "Uit favorieten verwijderen" + +#. TRANS: Success message for remove a favorite notice through OStatus. +#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice. +#: OStatusPlugin.php:788 +#, php-format +msgid "%1$s marked notice %2$s as no longer a favorite." +msgstr "%1$s heeft de mededeling %2$s als favoriet verwijderd." + +#. TRANS: Link text for link to remote subscribe. +#: OStatusPlugin.php:864 +msgid "Remote" +msgstr "Via andere dienst" + +#. TRANS: Title for activity. +#: OStatusPlugin.php:904 +msgid "Profile update" +msgstr "Profielupdate" + +#. TRANS: Ping text for remote profile update through OStatus. +#. TRANS: %s is user that updated their profile. +#: OStatusPlugin.php:907 +#, php-format +msgid "%s has updated their profile page." +msgstr "Het profiel van %s is bijgewerkt." + +#. TRANS: Plugin description. +#: OStatusPlugin.php:952 +msgid "" +"Follow people across social networks that implement <a href=\"http://ostatus." +"org/\">OStatus</a>." +msgstr "" +"Mensen volgen over sociale netwerken die gebruik maken van <a href=\"http://" +"ostatus.org/\">OStatus</a>." + +#: classes/FeedSub.php:248 +msgid "Attempting to start PuSH subscription for feed with no hub." +msgstr "" +"Aan het proberen een PuSH-abonnement te krijgen op een feed zonder hub." + +#: classes/FeedSub.php:278 +msgid "Attempting to end PuSH subscription for feed with no hub." +msgstr "" +"Aan het proberen een PuSH-abonnement te verwijderen voor een feed zonder hub." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:188 +#, php-format +msgid "Invalid ostatus_profile state: both group and profile IDs set for %s." +msgstr "" +"Ongeldige ostatus_profile status: het ID voor zowel de groep als het profiel " +"voor %s is ingesteld." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:191 +#, php-format +msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s." +msgstr "" +"Ongeldige ostatus_profile status: het ID voor zowel de groep als het profiel " +"voor %s is leeg." + +#. TRANS: Server exception. +#. TRANS: %1$s is the method name the exception occured in, %2$s is the actor type. +#: classes/Ostatus_profile.php:281 +#, php-format +msgid "Invalid actor passed to %1$s: %2$s." +msgstr "Ongeldige actor doorgegeven aan %1$s: %2$s." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:374 +msgid "" +"Invalid type passed to Ostatus_profile::notify. It must be XML string or " +"Activity entry." +msgstr "" +"Ongeldig type doorgegeven aan Ostatus_profile::notify. Het moet een XML-" +"string of Activity zijn." + +#: classes/Ostatus_profile.php:404 +msgid "Unknown feed format." +msgstr "Onbekend feedformaat" + +#: classes/Ostatus_profile.php:427 +msgid "RSS feed without a channel." +msgstr "RSS-feed zonder kanaal." + +#. TRANS: Client exception. +#: classes/Ostatus_profile.php:472 +msgid "Can't handle that kind of post." +msgstr "Dat type post kan niet verwerkt worden." + +#. TRANS: Client exception. %s is a source URL. +#: classes/Ostatus_profile.php:555 +#, php-format +msgid "No content for notice %s." +msgstr "Geen inhoud voor mededeling %s." + +#. TRANS: Shown when a notice is longer than supported and/or when attachments are present. +#: classes/Ostatus_profile.php:588 +msgid "Show more" +msgstr "Meer weergeven" + +#. TRANS: Exception. %s is a profile URL. +#: classes/Ostatus_profile.php:781 +#, php-format +msgid "Could not reach profile page %s." +msgstr "Het was niet mogelijk de profielpagina %s te bereiken." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:839 +#, php-format +msgid "Could not find a feed URL for profile page %s." +msgstr "Het was niet mogelijk de feed-URL voor de profielpagina %s te vinden." + +#: classes/Ostatus_profile.php:976 +msgid "Can't find enough profile information to make a feed." +msgstr "" +"Het was niet mogelijk voldoende profielinformatie te vinden om een feed te " +"maken." + +#: classes/Ostatus_profile.php:1035 +#, php-format +msgid "Invalid avatar URL %s." +msgstr "Ongeldige avatar-URL %s." + +#: classes/Ostatus_profile.php:1045 +#, php-format +msgid "Tried to update avatar for unsaved remote profile %s." +msgstr "" +"Geprobeerd om een avatar bij te werken voor het niet opgeslagen profiel %s." + +#: classes/Ostatus_profile.php:1053 +#, php-format +msgid "Unable to fetch avatar from %s." +msgstr "Het was niet mogelijk de avatar op te halen van %s." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1275 +msgid "Local user can't be referenced as remote." +msgstr "" +"Naar een lokale gebruiker kan niet verwezen worden alsof die zich bij een " +"andere dienst bevindt." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1280 +msgid "Local group can't be referenced as remote." +msgstr "" +"Naar een lokale groep kan niet verwezen worden alsof die zich bij een andere " +"dienst bevindt." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1332 classes/Ostatus_profile.php:1343 +msgid "Can't save local profile." +msgstr "Het was niet mogelijk het lokale profiel op te slaan." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1351 +msgid "Can't save OStatus profile." +msgstr "Het was niet mogelijk het Ostatusprofiel op te slaan." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1610 classes/Ostatus_profile.php:1638 +msgid "Not a valid webfinger address." +msgstr "Geen geldig webfingeradres." + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1720 +#, php-format +msgid "Couldn't save profile for \"%s\"." +msgstr "Het was niet mogelijk het profiel voor \"%s\" op te slaan." + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1739 +#, php-format +msgid "Couldn't save ostatus_profile for \"%s\"." +msgstr "Het was niet mogelijk het ostatus_profile voor \"%s\" op te slaan." + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1747 +#, php-format +msgid "Couldn't find a valid profile for \"%s\"." +msgstr "Er is geen geldig profiel voor \"%s\" gevonden." + +#: classes/Ostatus_profile.php:1789 +msgid "Could not store HTML content of long post as file." +msgstr "" +"Het was niet mogelijk de HTML-inhoud van het lange bericht als bestand op te " +"slaan." + +#. TRANS: Client exception. %s is a HTTP status code. +#: classes/HubSub.php:208 +#, php-format +msgid "Hub subscriber verification returned HTTP %s." +msgstr "De controle voor de hubabonnee heeft een HTTP %s teruggegeven." + +#. TRANS: Exception. %1$s is a response status code, %2$s is the body of the response. +#: classes/HubSub.php:355 +#, php-format +msgid "Callback returned status: %1$s. Body: %2$s" +msgstr "De callback heeft de status %1$s teruggegeven. Inhoud: %2$s." + +#. TRANS: Client error. POST is a HTTP command. It should not be translated. +#: lib/salmonaction.php:42 +msgid "This method requires a POST." +msgstr "Deze methode vereist een POST." + +#. TRANS: Client error. Do not translate "application/magic-envelope+xml" +#: lib/salmonaction.php:47 +msgid "Salmon requires \"application/magic-envelope+xml\"." +msgstr "Salmon vereist \"application/magic-envelope+xml\"." + +#. TRANS: Client error. +#: lib/salmonaction.php:57 +msgid "Salmon signature verification failed." +msgstr "De controle voor Salmon is mislukt." + +#. TRANS: Client error. +#: lib/salmonaction.php:69 +msgid "Salmon post must be an Atom entry." +msgstr "Een Salmonbericht moet in Atomopmaak gemaakt zijn." + +#. TRANS: Client exception. +#: lib/salmonaction.php:118 +msgid "Unrecognized activity type." +msgstr "Onbekend activiteitentype." + +#. TRANS: Client exception. +#: lib/salmonaction.php:127 +msgid "This target doesn't understand posts." +msgstr "Deze bestemming begrijpt berichten niet." + +#. TRANS: Client exception. +#: lib/salmonaction.php:133 +msgid "This target doesn't understand follows." +msgstr "Deze bestemming begrijpt volgen niet." + +#. TRANS: Client exception. +#: lib/salmonaction.php:139 +msgid "This target doesn't understand unfollows." +msgstr "Deze bestemming begrijpt niet langer volgen niet." + +#. TRANS: Client exception. +#: lib/salmonaction.php:145 +msgid "This target doesn't understand favorites." +msgstr "Deze bestemming begrijpt favorieten niet." + +#. TRANS: Client exception. +#: lib/salmonaction.php:151 +msgid "This target doesn't understand unfavorites." +msgstr "Deze bestemming begrijpt favorieten verwijderen niet." + +#. TRANS: Client exception. +#: lib/salmonaction.php:157 +msgid "This target doesn't understand share events." +msgstr "Deze bestemming begrijpt gebeurtenissen delen niet." + +#. TRANS: Client exception. +#: lib/salmonaction.php:163 +msgid "This target doesn't understand joins." +msgstr "Deze bestemming begrijpt lid worden niet." + +#. TRANS: Client exception. +#: lib/salmonaction.php:169 +msgid "This target doesn't understand leave events." +msgstr "Deze bestemming begrijpt uitschrijven van gebeurtenissen niet." + +#. TRANS: Exception. +#: lib/salmonaction.php:197 +msgid "Received a salmon slap from unidentified actor." +msgstr "Er is een Salmonslap ontvangen van een niet-geïdentificeerde actor." + +#. TRANS: Exception. +#: lib/discovery.php:110 +#, php-format +msgid "Unable to find services for %s." +msgstr "Het was niet mogelijk diensten te vinden voor %s." + +#. TRANS: Exception. +#: lib/xrd.php:64 +msgid "Invalid XML." +msgstr "Ongeldige XML." + +#. TRANS: Exception. +#: lib/xrd.php:69 +msgid "Invalid XML, missing XRD root." +msgstr "Ongeldige XML. De XRD-root mist." + +#. TRANS: Exception. +#: lib/magicenvelope.php:80 +msgid "Unable to locate signer public key." +msgstr "" +"Het was niet mogelijk de publieke sleutel van de ondertekenaar te vinden." + +#. TRANS: Exception. +#: lib/salmon.php:93 +msgid "Salmon invalid actor for signing." +msgstr "Ongeldige actor voor het ondertekenen van Salmon." + +#: tests/gettext-speedtest.php:57 +msgid "Feeds" +msgstr "Feeds" + +#. TRANS: Client exception. +#: actions/pushhub.php:66 +msgid "Publishing outside feeds not supported." +msgstr "Publiceren buiten feeds om wordt niet ondersteund." + +#. TRANS: Client exception. %s is a mode. +#: actions/pushhub.php:69 +#, php-format +msgid "Unrecognized mode \"%s\"." +msgstr "Niet herkende modus \"%s\"." + +#. TRANS: Client exception. %s is a topic. +#: actions/pushhub.php:89 +#, php-format +msgid "" +"Unsupported hub.topic %s this hub only serves local user and group Atom " +"feeds." +msgstr "" +"Niet ondersteund hub.topic \"%s\". Deze hub serveert alleen Atom feeds van " +"lokale gebruikers en groepen." + +#. TRANS: Client exception. +#: actions/pushhub.php:95 +#, php-format +msgid "Invalid hub.verify \"%s\". It must be sync or async." +msgstr "" +"Ongeldige waarde voor hub.verify \"%s\". Het moet \"sync\" of \"async\" zijn." + +#. TRANS: Client exception. +#: actions/pushhub.php:101 +#, php-format +msgid "Invalid hub.lease \"%s\". It must be empty or positive integer." +msgstr "" +"Ongeldige waarde voor hub.lease \"%s\". Deze waarde moet leeg zijn of een " +"positief geheel getal." + +#. TRANS: Client exception. +#: actions/pushhub.php:109 +#, php-format +msgid "Invalid hub.secret \"%s\". It must be under 200 bytes." +msgstr "" +"Ongeldig hub.secret \"%s\". Het moet minder dan tweehonderd bytes bevatten." + +#. TRANS: Client exception. +#: actions/pushhub.php:161 +#, php-format +msgid "Invalid hub.topic \"%s\". User doesn't exist." +msgstr "Ongeldig hub.topic \"%s\". De gebruiker bestaat niet." + +#. TRANS: Client exception. +#: actions/pushhub.php:170 +#, php-format +msgid "Invalid hub.topic \"%s\". Group doesn't exist." +msgstr "Ongeldig hub.topic \"%s\". De groep bestaat niet." + +#. TRANS: Client exception. +#. TRANS: %1$s is this argument to the method this exception occurs in, %2$s is a URL. +#: actions/pushhub.php:195 +#, php-format +msgid "Invalid URL passed for %1$s: \"%2$s\"" +msgstr "Er is een ongeldige URL doorgegeven voor %1$s: \"%2$s\"" + +#: actions/userxrd.php:49 actions/ownerxrd.php:37 actions/usersalmon.php:43 +msgid "No such user." +msgstr "Onbekende gebruiker." + +#. TRANS: Client error. +#: actions/usersalmon.php:37 actions/groupsalmon.php:40 +msgid "No ID." +msgstr "Geen ID." + +#. TRANS: Client exception. +#: actions/usersalmon.php:81 +msgid "In reply to unknown notice." +msgstr "In antwoord op een onbekende mededeling." + +#. TRANS: Client exception. +#: actions/usersalmon.php:86 +msgid "In reply to a notice not by this user and not mentioning this user." +msgstr "" +"In antwoord op een mededeling niet door deze gebruiker en niet over of aan " +"deze gebruiker." + +#. TRANS: Client exception. +#: actions/usersalmon.php:163 +msgid "Could not save new favorite." +msgstr "Het was niet mogelijk de nieuwe favoriet op te slaan." + +#. TRANS: Client exception. +#: actions/usersalmon.php:195 +msgid "Can't favorite/unfavorite without an object." +msgstr "" +"Het is niet mogelijk (niet langer) als favoriet te markeren zonder object." + +#. TRANS: Client exception. +#: actions/usersalmon.php:207 +msgid "Can't handle that kind of object for liking/faving." +msgstr "" +"Dat object is niet beschikbaar voor (niet langer) als favoriet aanmerken." + +#. TRANS: Client exception. %s is an object ID. +#: actions/usersalmon.php:214 +#, php-format +msgid "Notice with ID %s unknown." +msgstr "De mededeling met ID %s is onbekend." + +#. TRANS: Client exception. %1$s is a notice ID, %2$s is a user ID. +#: actions/usersalmon.php:219 +#, php-format +msgid "Notice with ID %1$s not posted by %2$s." +msgstr "De mededeling met ID %1$s is niet geplaatst foor %2$s." + +#. TRANS: Field label. +#: actions/ostatusgroup.php:76 +msgid "Join group" +msgstr "Lid worden van groep" + +#. TRANS: Tooltip for field label "Join group". +#: actions/ostatusgroup.php:79 +msgid "OStatus group's address, like http://example.net/group/nickname." +msgstr "" +"Het adres voor de OStatusgroep. Bijvoorbeeld; http://example.net/group/" +"nickname." + +#. TRANS: Button text. +#: actions/ostatusgroup.php:84 actions/ostatussub.php:73 +msgctxt "BUTTON" +msgid "Continue" +msgstr "Doorgaan" + +#: actions/ostatusgroup.php:103 +msgid "You are already a member of this group." +msgstr "U bent al lid van deze groep." + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:138 +msgid "Already a member!" +msgstr "U bent al lid!" + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:149 +msgid "Remote group join failed!" +msgstr "Het verlaten van de groep bij een andere dienst is mislukt." + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:153 +msgid "Remote group join aborted!" +msgstr "Het lid worden van de groep bij een andere dienst is afgebroken." + +#. TRANS: Page title for OStatus remote group join form +#: actions/ostatusgroup.php:165 +msgid "Confirm joining remote group" +msgstr "Lid worden van groep bij andere dienst" + +#. TRANS: Instructions. +#: actions/ostatusgroup.php:176 +msgid "" +"You can subscribe to groups from other supported sites. Paste the group's " +"profile URI below:" +msgstr "" +"U kunt abonneren op groepen van andere ondersteunde sites. Plak hieronder de " +"URI van het groepsprofiel:" + +#. TRANS: Client error. +#: actions/groupsalmon.php:47 +msgid "No such group." +msgstr "De opgegeven groep bestaat niet." + +#. TRANS: Client error. +#: actions/groupsalmon.php:53 +msgid "Can't accept remote posts for a remote group." +msgstr "" +"Berichten van andere diensten voor groepen bij andere diensten worden niet " +"geaccepteerd." + +#. TRANS: Client error. +#: actions/groupsalmon.php:127 +msgid "Can't read profile to set up group membership." +msgstr "Het profiel om lid te worden van een groep kon niet gelezen worden." + +#. TRANS: Client error. +#: actions/groupsalmon.php:131 actions/groupsalmon.php:174 +msgid "Groups can't join groups." +msgstr "Groepen kunnen geen lid worden van groepen." + +#: actions/groupsalmon.php:144 +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." + +#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname. +#: actions/groupsalmon.php:159 +#, php-format +msgid "Could not join remote user %1$s to group %2$s." +msgstr "" +"De gebruiker %1$s van een andere dienst kon niet lid worden van de groep %2" +"$s." + +#: actions/groupsalmon.php:171 +msgid "Can't read profile to cancel group membership." +msgstr "" +"Het profiel om groepslidmaatschap te annuleren kon niet gelezen worden." + +#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname. +#: actions/groupsalmon.php:188 +#, php-format +msgid "Could not remove remote user %1$s from group %2$s." +msgstr "" +"Het was niet mogelijk gebruiker %1$s van een andere dienst uit de groep %2$s " +"te verwijderen." + +#. TRANS: Field label for a field that takes an OStatus user address. +#: actions/ostatussub.php:66 +msgid "Subscribe to" +msgstr "Abonneren op" + +#. TRANS: Tooltip for field label "Subscribe to". +#: actions/ostatussub.php:69 +msgid "" +"OStatus user's address, like nickname@example.com or http://example.net/" +"nickname" +msgstr "" +"Het OStatusadres van de gebruiker. Bijvoorbeeld nickname@example.com of " +"http://example.net/nickname" + +#. TRANS: Button text. +#. TRANS: Tooltip for button "Join". +#: actions/ostatussub.php:110 +msgctxt "BUTTON" +msgid "Join this group" +msgstr "Lid worden van deze groep" + +#. TRANS: Button text. +#: actions/ostatussub.php:113 +msgctxt "BUTTON" +msgid "Confirm" +msgstr "Bevestigen" + +#. TRANS: Tooltip for button "Confirm". +#: actions/ostatussub.php:115 +msgid "Subscribe to this user" +msgstr "Abonneren op deze gebruiker" + +#: actions/ostatussub.php:136 +msgid "You are already subscribed to this user." +msgstr "U bent al geabonneerd op deze gebruiker." + +#: actions/ostatussub.php:165 +msgid "Photo" +msgstr "Foto" + +#: actions/ostatussub.php:176 +msgid "Nickname" +msgstr "Gebruikersnaam" + +#: actions/ostatussub.php:197 +msgid "Location" +msgstr "Locatie" + +#: actions/ostatussub.php:206 +msgid "URL" +msgstr "URL" + +#: actions/ostatussub.php:218 +msgid "Note" +msgstr "Opmerking" + +#. TRANS: Error text. +#: actions/ostatussub.php:254 actions/ostatussub.php:261 +#: actions/ostatussub.php:286 +msgid "" +"Sorry, we could not reach that address. Please make sure that the OStatus " +"address is like nickname@example.com or http://example.net/nickname." +msgstr "" +"Dat adres is helaas niet te bereiken. Zorg dat het OStatusadres de voor heft " +"van gebruiker@example.com of http://example.net/gebruiker." + +#. TRANS: Error text. +#: actions/ostatussub.php:265 actions/ostatussub.php:269 +#: actions/ostatussub.php:273 actions/ostatussub.php:277 +#: actions/ostatussub.php:281 +msgid "" +"Sorry, we could not reach that feed. Please try that OStatus address again " +"later." +msgstr "" +"Die feed was niet te bereiken. Probeer dat OStatusadres later nog een keer." + +#. TRANS: OStatus remote subscription dialog error. +#: actions/ostatussub.php:315 +msgid "Already subscribed!" +msgstr "U bent al gebonneerd!" + +#. TRANS: OStatus remote subscription dialog error. +#: actions/ostatussub.php:320 +msgid "Remote subscription failed!" +msgstr "Abonneren via een andere dienst is mislukt!" + +#: actions/ostatussub.php:367 actions/ostatusinit.php:63 +msgid "There was a problem with your session token. Try again, please." +msgstr "" +"Er is een probleem ontstaan met uw sessie. Probeer het nog een keer, " +"alstublieft." + +#. TRANS: Form title. +#: actions/ostatussub.php:395 actions/ostatusinit.php:82 +msgid "Subscribe to user" +msgstr "Abonneren op gebruiker" + +#. TRANS: Page title for OStatus remote subscription form +#: actions/ostatussub.php:415 +msgid "Confirm" +msgstr "Bevestigen" + +#. TRANS: Instructions. +#: actions/ostatussub.php:427 +msgid "" +"You can subscribe to users from other supported sites. Paste their address " +"or profile URI below:" +msgstr "" +"U kunt abonneren op gebruikers van andere ondersteunde sites. Plak hun adres " +"of profiel-URI hieronder:" + +#. TRANS: Client error. +#: actions/ostatusinit.php:41 +msgid "You can use the local subscription!" +msgstr "U kunt het lokale abonnement gebruiken!" + +#. TRANS: Form legend. +#: actions/ostatusinit.php:97 +#, php-format +msgid "Join group %s" +msgstr "Lid worden van de groep %s" + +#. TRANS: Button text. +#: actions/ostatusinit.php:99 +msgctxt "BUTTON" +msgid "Join" +msgstr "Toetreden" + +#. TRANS: Form legend. +#: actions/ostatusinit.php:102 +#, php-format +msgid "Subscribe to %s" +msgstr "Abonneren op %s" + +#. TRANS: Button text. +#: actions/ostatusinit.php:104 +msgctxt "BUTTON" +msgid "Subscribe" +msgstr "Abonneren" + +#. TRANS: Field label. +#: actions/ostatusinit.php:117 +msgid "User nickname" +msgstr "Gebruikersnaam" + +#: actions/ostatusinit.php:118 +msgid "Nickname of the user you want to follow." +msgstr "Gebruikersnaam van de gebruiker waarop u wilt abonneren." + +#. TRANS: Field label. +#: actions/ostatusinit.php:123 +msgid "Profile Account" +msgstr "Gebruikersprofiel" + +#. TRANS: Tooltip for field label "Profile Account". +#: actions/ostatusinit.php:125 +msgid "Your account id (e.g. user@identi.ca)." +msgstr "Uw gebruikers-ID (bv. gebruiker@identi.ca)." + +#. TRANS: Client error. +#: actions/ostatusinit.php:147 +msgid "Must provide a remote profile." +msgstr "Er moet een profiel bij een andere dienst opgegeven worden." + +#. TRANS: Client error. +#: actions/ostatusinit.php:159 +msgid "Couldn't look up OStatus account profile." +msgstr "Het was niet mogelijk het OStatusgebruikersprofiel te vinden." + +#. TRANS: Client error. +#: actions/ostatusinit.php:172 +msgid "Couldn't confirm remote profile address." +msgstr "" +"Het was niet mogelijk het profieladres bij de andere dienst te bevestigen." + +#. TRANS: Page title. +#: actions/ostatusinit.php:217 +msgid "OStatus Connect" +msgstr "OStatuskoppeling" + +#: actions/pushcallback.php:48 +msgid "Empty or invalid feed id." +msgstr "Het feed-ID is leeg of ongeldig." + +#. TRANS: Server exception. %s is a feed ID. +#: actions/pushcallback.php:54 +#, php-format +msgid "Unknown PuSH feed id %s" +msgstr "Het PuSH feed-ID %s is onbekend" + +#. TRANS: Client exception. %s is an invalid feed name. +#: actions/pushcallback.php:94 +#, php-format +msgid "Bad hub.topic feed \"%s\"." +msgstr "Ongeldige hub.topic feed \"%s\"." + +#. TRANS: Client exception. %1$s the invalid token, %2$s is the topic for which the invalid token was given. +#: actions/pushcallback.php:99 +#, php-format +msgid "Bad hub.verify_token %1$s for %2$s." +msgstr "Ongeldig hub.verify_token %1$s voor %2$s." + +#. TRANS: Client exception. %s is an invalid topic. +#: actions/pushcallback.php:106 +#, php-format +msgid "Unexpected subscribe request for %s." +msgstr "Onverwacht abonneringsverzoek voor %s." + +#. TRANS: Client exception. %s is an invalid topic. +#: actions/pushcallback.php:111 +#, php-format +msgid "Unexpected unsubscribe request for %s." +msgstr "Onverwacht verzoek om abonnement op te hebben voor %s." diff --git a/plugins/OStatus/locale/uk/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/uk/LC_MESSAGES/OStatus.po new file mode 100644 index 000000000..3312c5e60 --- /dev/null +++ b/plugins/OStatus/locale/uk/LC_MESSAGES/OStatus.po @@ -0,0 +1,796 @@ +# Translation of StatusNet - OStatus to Ukrainian (Українська) +# Expored from translatewiki.net +# +# Author: Boogie +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - OStatus\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-04 22:30+0000\n" +"PO-Revision-Date: 2010-10-04 22:33:41+0000\n" +"Language-Team: Ukrainian <http://translatewiki.net/wiki/Portal:uk>\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-03 20:57:03+0000\n" +"X-Generator: MediaWiki 1.17alpha (r74276); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: uk\n" +"X-Message-Group: #out-statusnet-plugin-ostatus\n" +"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " +"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" + +#. TRANS: Link description for link to subscribe to a remote user. +#. TRANS: Link text for a user to subscribe to an OStatus user. +#: OStatusPlugin.php:227 OStatusPlugin.php:937 +msgid "Subscribe" +msgstr "Підписатись" + +#. TRANS: Link description for link to join a remote group. +#: OStatusPlugin.php:246 OStatusPlugin.php:655 actions/ostatussub.php:107 +msgid "Join" +msgstr "Приєднатися" + +#. TRANSLATE: %s is a domain. +#: OStatusPlugin.php:459 +#, php-format +msgid "Sent from %s via OStatus" +msgstr "Надіслано з %s через OStatus" + +#. TRANS: Exception. +#: OStatusPlugin.php:531 +msgid "Could not set up remote subscription." +msgstr "Не вдалося створити віддалену підписку." + +#: OStatusPlugin.php:605 +msgid "Unfollow" +msgstr "Не читати" + +#. TRANS: Success message for unsubscribe from user attempt through OStatus. +#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name. +#: OStatusPlugin.php:608 +#, php-format +msgid "%1$s stopped following %2$s." +msgstr "%1$s припинив читати ваші дописи %2$s." + +#: OStatusPlugin.php:636 +msgid "Could not set up remote group membership." +msgstr "Не вдалося приєднатися до віддаленої спільноти." + +#. TRANS: Success message for subscribe to group attempt through OStatus. +#. TRANS: %1$s is the member name, %2$s is the subscribed group's name. +#: OStatusPlugin.php:658 +#, fuzzy, php-format +msgid "%1$s has joined group %2$s." +msgstr "%1$s припинив читати ваші дописи %2$s." + +#. TRANS: Exception. +#: OStatusPlugin.php:667 +msgid "Failed joining remote group." +msgstr "Помилка приєднання до віддаленої спільноти." + +#: OStatusPlugin.php:707 +msgid "Leave" +msgstr "Залишити" + +#. TRANS: Success message for unsubscribe from group attempt through OStatus. +#. TRANS: %1$s is the member name, %2$s is the unsubscribed group's name. +#: OStatusPlugin.php:710 +#, php-format +msgid "%1$s has left group %2$s." +msgstr "" + +#: OStatusPlugin.php:785 +msgid "Disfavor" +msgstr "Не обраний" + +#. TRANS: Success message for remove a favorite notice through OStatus. +#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice. +#: OStatusPlugin.php:788 +#, php-format +msgid "%1$s marked notice %2$s as no longer a favorite." +msgstr "%1$s позначив допис %2$s, як такий, що більше не є обраним." + +#. TRANS: Link text for link to remote subscribe. +#: OStatusPlugin.php:864 +msgid "Remote" +msgstr "Віддалено" + +#. TRANS: Title for activity. +#: OStatusPlugin.php:904 +msgid "Profile update" +msgstr "Оновлення профілю" + +#. TRANS: Ping text for remote profile update through OStatus. +#. TRANS: %s is user that updated their profile. +#: OStatusPlugin.php:907 +#, php-format +msgid "%s has updated their profile page." +msgstr "%s оновив сторінку свого профілю." + +#. TRANS: Plugin description. +#: OStatusPlugin.php:952 +msgid "" +"Follow people across social networks that implement <a href=\"http://ostatus." +"org/\">OStatus</a>." +msgstr "" +"Додає можливість слідкувати за дописами людей з інших мереж, які підтримують " +"протокол <a href=\"http://ostatus.org/\">OStatus</a>." + +#: classes/FeedSub.php:248 +msgid "Attempting to start PuSH subscription for feed with no hub." +msgstr "" +"Спроба підписатися за допомогою PuSH до веб-стрічки, котра не має вузла." + +#: classes/FeedSub.php:278 +msgid "Attempting to end PuSH subscription for feed with no hub." +msgstr "" +"Спроба скасувати підписку за допомогою PuSH до веб-стрічки, котра не має " +"вузла." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:188 +#, php-format +msgid "Invalid ostatus_profile state: both group and profile IDs set for %s." +msgstr "" +"Невірний стан параметру ostatus_profile: як групові, так і персональні " +"ідентифікатори встановлено для %s." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:191 +#, php-format +msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s." +msgstr "" +"Невірний стан параметру ostatus_profile: як групові, так і персональні " +"ідентифікатори порожні для %s." + +#. TRANS: Server exception. +#. TRANS: %1$s is the method name the exception occured in, %2$s is the actor type. +#: classes/Ostatus_profile.php:281 +#, php-format +msgid "Invalid actor passed to %1$s: %2$s." +msgstr "До %1$s передано невірний об’єкт: %2$s." + +#. TRANS: Server exception. +#: classes/Ostatus_profile.php:374 +msgid "" +"Invalid type passed to Ostatus_profile::notify. It must be XML string or " +"Activity entry." +msgstr "" +"До параметру Ostatus_profile::notify передано невірний тип. Це має бути або " +"рядок у форматі XML, або запис активності." + +#: classes/Ostatus_profile.php:404 +msgid "Unknown feed format." +msgstr "Невідомий формат веб-стрічки." + +#: classes/Ostatus_profile.php:427 +msgid "RSS feed without a channel." +msgstr "RSS-стрічка не має каналу." + +#. TRANS: Client exception. +#: classes/Ostatus_profile.php:472 +msgid "Can't handle that kind of post." +msgstr "Не вдається обробити такий тип допису." + +#. TRANS: Client exception. %s is a source URL. +#: classes/Ostatus_profile.php:555 +#, php-format +msgid "No content for notice %s." +msgstr "Допис %s не має змісту." + +#. TRANS: Shown when a notice is longer than supported and/or when attachments are present. +#: classes/Ostatus_profile.php:588 +msgid "Show more" +msgstr "Дивитись далі" + +#. TRANS: Exception. %s is a profile URL. +#: classes/Ostatus_profile.php:781 +#, php-format +msgid "Could not reach profile page %s." +msgstr "Не вдалося досягти сторінки профілю %s." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:839 +#, php-format +msgid "Could not find a feed URL for profile page %s." +msgstr "Не вдалося знайти URL веб-стрічки для сторінки профілю %s." + +#: classes/Ostatus_profile.php:976 +msgid "Can't find enough profile information to make a feed." +msgstr "" +"Не можу знайти достатньо інформації про профіль, аби сформувати веб-стрічку." + +#: classes/Ostatus_profile.php:1035 +#, php-format +msgid "Invalid avatar URL %s." +msgstr "Невірна URL-адреса аватари %s." + +#: classes/Ostatus_profile.php:1045 +#, php-format +msgid "Tried to update avatar for unsaved remote profile %s." +msgstr "Намагаюся оновити аватару для не збереженого віддаленого профілю %s." + +#: classes/Ostatus_profile.php:1053 +#, php-format +msgid "Unable to fetch avatar from %s." +msgstr "Неможливо завантажити аватару з %s." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1275 +msgid "Local user can't be referenced as remote." +msgstr "Місцевий користувач не може бути зазначеним у якості віддаленого." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1280 +msgid "Local group can't be referenced as remote." +msgstr "Локальну спільноту не можна зазначити у якості віддаленої." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1332 classes/Ostatus_profile.php:1343 +msgid "Can't save local profile." +msgstr "Не вдається зберегти місцевий профіль." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1351 +msgid "Can't save OStatus profile." +msgstr "Не вдається зберегти профіль OStatus." + +#. TRANS: Exception. +#: classes/Ostatus_profile.php:1610 classes/Ostatus_profile.php:1638 +msgid "Not a valid webfinger address." +msgstr "Це недійсна адреса для протоколу WebFinger." + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1720 +#, php-format +msgid "Couldn't save profile for \"%s\"." +msgstr "Не можу зберегти профіль для «%s»." + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1739 +#, php-format +msgid "Couldn't save ostatus_profile for \"%s\"." +msgstr "Не можу зберегти профіль OStatus для «%s»." + +#. TRANS: Exception. %s is a webfinger address. +#: classes/Ostatus_profile.php:1747 +#, php-format +msgid "Couldn't find a valid profile for \"%s\"." +msgstr "не можу знайти відповідний й профіль для «%s»." + +#: classes/Ostatus_profile.php:1789 +msgid "Could not store HTML content of long post as file." +msgstr "Не можу зберегти HTML місткого допису у якості файлу." + +#. TRANS: Client exception. %s is a HTTP status code. +#: classes/HubSub.php:208 +#, php-format +msgid "Hub subscriber verification returned HTTP %s." +msgstr "Перевірка вузла підписки завершилася зі статусом HTTP %s." + +#. TRANS: Exception. %1$s is a response status code, %2$s is the body of the response. +#: classes/HubSub.php:355 +#, php-format +msgid "Callback returned status: %1$s. Body: %2$s" +msgstr "Зворотній виклик повернуто зі статусом: %1$s. Зміст: %2$s" + +#. TRANS: Client error. POST is a HTTP command. It should not be translated. +#: lib/salmonaction.php:42 +msgid "This method requires a POST." +msgstr "Цей метод вимагає команди POST." + +#. TRANS: Client error. Do not translate "application/magic-envelope+xml" +#: lib/salmonaction.php:47 +msgid "Salmon requires \"application/magic-envelope+xml\"." +msgstr "Протокол Salmon вимагає \"application/magic-envelope+xml\"." + +#. TRANS: Client error. +#: lib/salmonaction.php:57 +msgid "Salmon signature verification failed." +msgstr "Перевірка підпису протоколу Salmon не вдалася." + +#. TRANS: Client error. +#: lib/salmonaction.php:69 +msgid "Salmon post must be an Atom entry." +msgstr "Дописи за протоколом Salmon мають бути у форматі Atom." + +#. TRANS: Client exception. +#: lib/salmonaction.php:118 +msgid "Unrecognized activity type." +msgstr "Невідомий тип діяльності." + +#. TRANS: Client exception. +#: lib/salmonaction.php:127 +msgid "This target doesn't understand posts." +msgstr "Ціль не розуміє, що таке «дописи»." + +#. TRANS: Client exception. +#: lib/salmonaction.php:133 +msgid "This target doesn't understand follows." +msgstr "Ціль не розуміє, що таке «слідувати»." + +#. TRANS: Client exception. +#: lib/salmonaction.php:139 +msgid "This target doesn't understand unfollows." +msgstr "Ціль не розуміє, що таке «не слідувати»." + +#. TRANS: Client exception. +#: lib/salmonaction.php:145 +msgid "This target doesn't understand favorites." +msgstr "Ціль не розуміє, що таке «додати до обраних»." + +#. TRANS: Client exception. +#: lib/salmonaction.php:151 +msgid "This target doesn't understand unfavorites." +msgstr "Ціль не розуміє, що таке «вилучити з обраних»." + +#. TRANS: Client exception. +#: lib/salmonaction.php:157 +msgid "This target doesn't understand share events." +msgstr "Ціль не розуміє, що таке «поділитися подією»." + +#. TRANS: Client exception. +#: lib/salmonaction.php:163 +msgid "This target doesn't understand joins." +msgstr "Ціль не розуміє, що таке «приєднатися»." + +#. TRANS: Client exception. +#: lib/salmonaction.php:169 +msgid "This target doesn't understand leave events." +msgstr "Ціль не розуміє, що таке «залишати подію»." + +#. TRANS: Exception. +#: lib/salmonaction.php:197 +msgid "Received a salmon slap from unidentified actor." +msgstr "Отримано ляпаса від невизначеного учасника за протоколом Salmon." + +#. TRANS: Exception. +#: lib/discovery.php:110 +#, php-format +msgid "Unable to find services for %s." +msgstr "Не вдається знайти сервіси для %s." + +#. TRANS: Exception. +#: lib/xrd.php:64 +msgid "Invalid XML." +msgstr "Невірний XML." + +#. TRANS: Exception. +#: lib/xrd.php:69 +msgid "Invalid XML, missing XRD root." +msgstr "Невірний XML, корінь XRD відсутній." + +#. TRANS: Exception. +#: lib/magicenvelope.php:80 +msgid "Unable to locate signer public key." +msgstr "Не вдалося знайти публічного ключа підписанта." + +#. TRANS: Exception. +#: lib/salmon.php:93 +msgid "Salmon invalid actor for signing." +msgstr "Недійсний учасник подій за протоколом Salmon для підписання." + +#: tests/gettext-speedtest.php:57 +msgid "Feeds" +msgstr "Веб-стрічки" + +#. TRANS: Client exception. +#: actions/pushhub.php:66 +msgid "Publishing outside feeds not supported." +msgstr "Публікація змісту зовнішніх веб-стрічок не підтримується." + +#. TRANS: Client exception. %s is a mode. +#: actions/pushhub.php:69 +#, php-format +msgid "Unrecognized mode \"%s\"." +msgstr "Невизначений режим «%s»." + +#. TRANS: Client exception. %s is a topic. +#: actions/pushhub.php:89 +#, php-format +msgid "" +"Unsupported hub.topic %s this hub only serves local user and group Atom " +"feeds." +msgstr "" +"hub.topic %s не підтримується. Цей вузол використовується лише тутешніми " +"користувачами та групою веб-стрічок у форматі Atom." + +#. TRANS: Client exception. +#: actions/pushhub.php:95 +#, php-format +msgid "Invalid hub.verify \"%s\". It must be sync or async." +msgstr "hub.verify «%s» невірний. Він має бути синхронним або ж асинхронним." + +#. TRANS: Client exception. +#: actions/pushhub.php:101 +#, php-format +msgid "Invalid hub.lease \"%s\". It must be empty or positive integer." +msgstr "" +"hub.lease «%s» невірний. Він має бути порожнім або містити ціле позитивне " +"число." + +#. TRANS: Client exception. +#: actions/pushhub.php:109 +#, php-format +msgid "Invalid hub.secret \"%s\". It must be under 200 bytes." +msgstr "hub.secret «%s» невірний. 200 байтів — не більше." + +#. TRANS: Client exception. +#: actions/pushhub.php:161 +#, php-format +msgid "Invalid hub.topic \"%s\". User doesn't exist." +msgstr "hub.topic «%s» невірний. Користувача не існує." + +#. TRANS: Client exception. +#: actions/pushhub.php:170 +#, php-format +msgid "Invalid hub.topic \"%s\". Group doesn't exist." +msgstr "hub.topic «%s» невірний. Спільноти не існує." + +#. TRANS: Client exception. +#. TRANS: %1$s is this argument to the method this exception occurs in, %2$s is a URL. +#: actions/pushhub.php:195 +#, php-format +msgid "Invalid URL passed for %1$s: \"%2$s\"" +msgstr "Для %1$s передано невірний URL: «%2$s»" + +#: actions/userxrd.php:49 actions/ownerxrd.php:37 actions/usersalmon.php:43 +msgid "No such user." +msgstr "Такого користувача немає." + +#. TRANS: Client error. +#: actions/usersalmon.php:37 actions/groupsalmon.php:40 +msgid "No ID." +msgstr "Немає ідентифікатора." + +#. TRANS: Client exception. +#: actions/usersalmon.php:81 +msgid "In reply to unknown notice." +msgstr "У відповідь на невідомий допис." + +#. TRANS: Client exception. +#: actions/usersalmon.php:86 +msgid "In reply to a notice not by this user and not mentioning this user." +msgstr "" +"У відповідь на допис іншого користувача, а даний користувач у ньому навіть " +"не згадується." + +#. TRANS: Client exception. +#: actions/usersalmon.php:163 +msgid "Could not save new favorite." +msgstr "Не вдалося зберегти як новий обраний допис." + +#. TRANS: Client exception. +#: actions/usersalmon.php:195 +msgid "Can't favorite/unfavorite without an object." +msgstr "" +"Неможливо додати до обраних або видалити зі списку обраних, якщо немає " +"об’єкта." + +#. TRANS: Client exception. +#: actions/usersalmon.php:207 +msgid "Can't handle that kind of object for liking/faving." +msgstr "" +"Не вдається обробити подібний об’єкт для додавання його до списку обраних." + +#. TRANS: Client exception. %s is an object ID. +#: actions/usersalmon.php:214 +#, php-format +msgid "Notice with ID %s unknown." +msgstr "Допис з ідентифікатором %s є невідомим." + +#. TRANS: Client exception. %1$s is a notice ID, %2$s is a user ID. +#: actions/usersalmon.php:219 +#, php-format +msgid "Notice with ID %1$s not posted by %2$s." +msgstr "Допис з ідентифікатором %1$s було надіслано не %2$s." + +#. TRANS: Field label. +#: actions/ostatusgroup.php:76 +msgid "Join group" +msgstr "Долучитися до спільноти" + +#. TRANS: Tooltip for field label "Join group". +#: actions/ostatusgroup.php:79 +msgid "OStatus group's address, like http://example.net/group/nickname." +msgstr "" +"Адреса спільноти згідно протоколу OStatus, наприклад http://example.net/" +"group/nickname." + +#. TRANS: Button text. +#: actions/ostatusgroup.php:84 actions/ostatussub.php:73 +msgctxt "BUTTON" +msgid "Continue" +msgstr "Продовжити" + +#: actions/ostatusgroup.php:103 +msgid "You are already a member of this group." +msgstr "Ви вже є учасником цієї спільноти." + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:138 +msgid "Already a member!" +msgstr "Ви вже учасник!" + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:149 +msgid "Remote group join failed!" +msgstr "Приєднатися до віддаленої спільноти не вдалося!" + +#. TRANS: OStatus remote group subscription dialog error. +#: actions/ostatusgroup.php:153 +msgid "Remote group join aborted!" +msgstr "Приєднання до віддаленої спільноти перервано!" + +#. TRANS: Page title for OStatus remote group join form +#: actions/ostatusgroup.php:165 +msgid "Confirm joining remote group" +msgstr "Підтвердження приєднання до віддаленої спільноти" + +#. TRANS: Instructions. +#: actions/ostatusgroup.php:176 +msgid "" +"You can subscribe to groups from other supported sites. Paste the group's " +"profile URI below:" +msgstr "" +"Ви можете долучатися до спільнот на аналогічних сайтах. Просто вставте URI " +"профілю спільноти тут:" + +#. TRANS: Client error. +#: actions/groupsalmon.php:47 +msgid "No such group." +msgstr "Такої спільноти немає." + +#. TRANS: Client error. +#: actions/groupsalmon.php:53 +msgid "Can't accept remote posts for a remote group." +msgstr "Не можу узгодити віддалену пересилку дописів до віддаленої спільноти." + +#. TRANS: Client error. +#: actions/groupsalmon.php:127 +msgid "Can't read profile to set up group membership." +msgstr "Не можу прочитати профіль, аби долучитися до спільноти." + +#. TRANS: Client error. +#: actions/groupsalmon.php:131 actions/groupsalmon.php:174 +msgid "Groups can't join groups." +msgstr "Спільноти ніяк не можуть приєднуватися до спільнот." + +#: actions/groupsalmon.php:144 +msgid "You have been blocked from that group by the admin." +msgstr "Адміністратор спільноти заблокував ваш профіль." + +#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname. +#: actions/groupsalmon.php:159 +#, php-format +msgid "Could not join remote user %1$s to group %2$s." +msgstr "" +"Віддаленому користувачеві %1$s не вдалося долучитися до спільноти %2$s." + +#: actions/groupsalmon.php:171 +msgid "Can't read profile to cancel group membership." +msgstr "" +"Не вдається прочитати профіль користувача, щоб скасувати його перебування у " +"спільноті." + +#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname. +#: actions/groupsalmon.php:188 +#, php-format +msgid "Could not remove remote user %1$s from group %2$s." +msgstr "Не вдалось видалити віддаленого користувача %1$s зі спільноти %2$s." + +#. TRANS: Field label for a field that takes an OStatus user address. +#: actions/ostatussub.php:66 +msgid "Subscribe to" +msgstr "Підписатися" + +#. TRANS: Tooltip for field label "Subscribe to". +#: actions/ostatussub.php:69 +msgid "" +"OStatus user's address, like nickname@example.com or http://example.net/" +"nickname" +msgstr "" +"Адреса користувача згідно протоколу OStatus, щось на зразок nickname@example." +"com або http://example.net/nickname" + +#. TRANS: Button text. +#. TRANS: Tooltip for button "Join". +#: actions/ostatussub.php:110 +msgctxt "BUTTON" +msgid "Join this group" +msgstr "Приєднатися до спільноти" + +#. TRANS: Button text. +#: actions/ostatussub.php:113 +msgctxt "BUTTON" +msgid "Confirm" +msgstr "Підтвердити" + +#. TRANS: Tooltip for button "Confirm". +#: actions/ostatussub.php:115 +msgid "Subscribe to this user" +msgstr "Підписатись до цього користувача" + +#: actions/ostatussub.php:136 +msgid "You are already subscribed to this user." +msgstr "Ви вже підписані до цього користувача." + +#: actions/ostatussub.php:165 +msgid "Photo" +msgstr "Фото" + +#: actions/ostatussub.php:176 +msgid "Nickname" +msgstr "Псевдонім" + +#: actions/ostatussub.php:197 +msgid "Location" +msgstr "Розташування" + +#: actions/ostatussub.php:206 +msgid "URL" +msgstr "URL-адреса" + +#: actions/ostatussub.php:218 +msgid "Note" +msgstr "Примітка" + +#. TRANS: Error text. +#: actions/ostatussub.php:254 actions/ostatussub.php:261 +#: actions/ostatussub.php:286 +msgid "" +"Sorry, we could not reach that address. Please make sure that the OStatus " +"address is like nickname@example.com or http://example.net/nickname." +msgstr "" +"Вибачайте, але ми в змозі розшукати дану адресу. Будь ласка, переконайтеся, " +"що адресу зазначено згідно правил протоколу OStatus, щось на зразок " +"nickname@example.com або ж http://example.net/nickname." + +#. TRANS: Error text. +#: actions/ostatussub.php:265 actions/ostatussub.php:269 +#: actions/ostatussub.php:273 actions/ostatussub.php:277 +#: actions/ostatussub.php:281 +msgid "" +"Sorry, we could not reach that feed. Please try that OStatus address again " +"later." +msgstr "" +"Вибачайте, але ми не в змозі досягти цієї веб-стрічки. Будь ласка, спробуйте " +"дану адресу ще раз пізніше." + +#. TRANS: OStatus remote subscription dialog error. +#: actions/ostatussub.php:315 +msgid "Already subscribed!" +msgstr "Вже підписаний!" + +#. TRANS: OStatus remote subscription dialog error. +#: actions/ostatussub.php:320 +msgid "Remote subscription failed!" +msgstr "Підписатися віддалено не вдалося!" + +#: actions/ostatussub.php:367 actions/ostatusinit.php:63 +msgid "There was a problem with your session token. Try again, please." +msgstr "Виникли певні проблеми з токеном сесії. Спробуйте знов, будь ласка." + +#. TRANS: Form title. +#: actions/ostatussub.php:395 actions/ostatusinit.php:82 +msgid "Subscribe to user" +msgstr "Підписатися до користувача" + +#. TRANS: Page title for OStatus remote subscription form +#: actions/ostatussub.php:415 +msgid "Confirm" +msgstr "Підтвердити" + +#. TRANS: Instructions. +#: actions/ostatussub.php:427 +msgid "" +"You can subscribe to users from other supported sites. Paste their address " +"or profile URI below:" +msgstr "" +"Ви маєте можливість підписуватись до користувачів на аналогічних сайтах. " +"Просто вставте їхні адреси або URI профілів тут:" + +#. TRANS: Client error. +#: actions/ostatusinit.php:41 +msgid "You can use the local subscription!" +msgstr "Ви можете користуватись локальними підписками!" + +#. TRANS: Form legend. +#: actions/ostatusinit.php:97 +#, php-format +msgid "Join group %s" +msgstr "Приєднатися до спільноти %s" + +#. TRANS: Button text. +#: actions/ostatusinit.php:99 +msgctxt "BUTTON" +msgid "Join" +msgstr "Приєднатися" + +#. TRANS: Form legend. +#: actions/ostatusinit.php:102 +#, php-format +msgid "Subscribe to %s" +msgstr "Підписатися до %s" + +#. TRANS: Button text. +#: actions/ostatusinit.php:104 +msgctxt "BUTTON" +msgid "Subscribe" +msgstr "Підписатись" + +#. TRANS: Field label. +#: actions/ostatusinit.php:117 +msgid "User nickname" +msgstr "Ім’я користувача" + +#: actions/ostatusinit.php:118 +msgid "Nickname of the user you want to follow." +msgstr "Ім’я користувача, дописи якого ви хотіли б читати." + +#. TRANS: Field label. +#: actions/ostatusinit.php:123 +msgid "Profile Account" +msgstr "Профіль акаунту" + +#. TRANS: Tooltip for field label "Profile Account". +#: actions/ostatusinit.php:125 +msgid "Your account id (e.g. user@identi.ca)." +msgstr "Ідентифікатор вашого акаунту (щось на зразок user@identi.ca)" + +#. TRANS: Client error. +#: actions/ostatusinit.php:147 +msgid "Must provide a remote profile." +msgstr "Мусите зазначити віддалений профіль." + +#. TRANS: Client error. +#: actions/ostatusinit.php:159 +msgid "Couldn't look up OStatus account profile." +msgstr "Не вдалося знайти профіль акаунту за протоколом OStatus." + +#. TRANS: Client error. +#: actions/ostatusinit.php:172 +msgid "Couldn't confirm remote profile address." +msgstr "Не вдалося підтвердити адресу віддаленого профілю." + +#. TRANS: Page title. +#: actions/ostatusinit.php:217 +msgid "OStatus Connect" +msgstr "З’єднання OStatus" + +#: actions/pushcallback.php:48 +msgid "Empty or invalid feed id." +msgstr "Порожній або недійсний ідентифікатор веб-стрічки." + +#. TRANS: Server exception. %s is a feed ID. +#: actions/pushcallback.php:54 +#, php-format +msgid "Unknown PuSH feed id %s" +msgstr "Веб-стрічка за протоколом PuSH має невідомий ідентифікатор %s" + +#. TRANS: Client exception. %s is an invalid feed name. +#: actions/pushcallback.php:94 +#, php-format +msgid "Bad hub.topic feed \"%s\"." +msgstr "hub.topic веб-стрічки «%s» неправильний." + +#. TRANS: Client exception. %1$s the invalid token, %2$s is the topic for which the invalid token was given. +#: actions/pushcallback.php:99 +#, php-format +msgid "Bad hub.verify_token %1$s for %2$s." +msgstr "hub.verify_token %1$s для %2$s неправильний." + +#. TRANS: Client exception. %s is an invalid topic. +#: actions/pushcallback.php:106 +#, php-format +msgid "Unexpected subscribe request for %s." +msgstr "Несподіваний запит підписки для %s." + +#. TRANS: Client exception. %s is an invalid topic. +#: actions/pushcallback.php:111 +#, php-format +msgid "Unexpected unsubscribe request for %s." +msgstr "Несподіваний запит щодо скасування підписки для %s." diff --git a/plugins/OStatus/scripts/fixup-shadow.php b/plugins/OStatus/scripts/fixup-shadow.php index 6522ca240..3e2c18e02 100644 --- a/plugins/OStatus/scripts/fixup-shadow.php +++ b/plugins/OStatus/scripts/fixup-shadow.php @@ -35,6 +35,58 @@ require_once INSTALLDIR.'/scripts/commandline.inc'; $dry = have_option('dry-run'); +// Look for user.uri matches... These may not match up with the current +// URL schema if the site has changed names. +echo "Checking for bogus ostatus_profile entries matching user.uri...\n"; + +$user = new User(); +$oprofile = new Ostatus_profile(); +$user->joinAdd($oprofile, 'INNER', 'oprofile', 'uri'); +$user->find(); +$count = $user->N; +echo "Found $count...\n"; + +while ($user->fetch()) { + $uri = $user->uri; + echo "user $user->id ($user->nickname) hidden by $uri"; + if ($dry) { + echo " - skipping\n"; + } else { + echo " - removing bogus ostatus_profile entry..."; + $evil = Ostatus_profile::staticGet('uri', $uri); + $evil->delete(); + echo " ok\n"; + } +} +echo "\n"; + +// Also try user_group.uri matches for local groups. +// Not all group entries will have this filled out, though, as it's new! +echo "Checking for bogus ostatus_profile entries matching local user_group.uri...\n"; +$group = new User_group(); +$group->joinAdd(array('uri', 'ostatus_profile:uri')); +$group->joinAdd(array('id', 'local_group:group_id')); +$group->find(); +$count = $group->N; +echo "Found $count...\n"; + +while ($group->fetch()) { + $uri = $group->uri; + echo "group $group->id ($group->nickname) hidden by $uri"; + if ($dry) { + echo " - skipping\n"; + } else { + echo " - removing bogus ostatus_profile entry..."; + $evil = Ostatus_profile::staticGet('uri', $uri); + $evil->delete(); + echo " ok\n"; + } +} +echo "\n"; + + +// Fallback? +echo "Checking for bogus profiles blocking local users/groups by URI pattern match...\n"; $oprofile = new Ostatus_profile(); $marker = mt_rand(31337, 31337000); @@ -42,16 +94,18 @@ $marker = mt_rand(31337, 31337000); $profileTemplate = common_local_url('userbyid', array('id' => $marker)); $encProfile = $oprofile->escape($profileTemplate, true); $encProfile = str_replace($marker, '%', $encProfile); +echo " LIKE '$encProfile'\n"; $groupTemplate = common_local_url('groupbyid', array('id' => $marker)); $encGroup = $oprofile->escape($groupTemplate, true); $encGroup = str_replace($marker, '%', $encGroup); +echo " LIKE '$encGroup'\n"; $sql = "SELECT * FROM ostatus_profile WHERE uri LIKE '%s' OR uri LIKE '%s'"; $oprofile->query(sprintf($sql, $encProfile, $encGroup)); $count = $oprofile->N; -echo "Found $count bogus ostatus_profile entries shadowing local users and groups:\n"; +echo "Found $count...\n"; while ($oprofile->fetch()) { $uri = $oprofile->uri; @@ -77,7 +131,7 @@ while ($oprofile->fetch()) { echo "$uri matched query, but we don't recognize it.\n"; continue; } - + if ($dry) { echo " - skipping\n"; } else { @@ -93,4 +147,3 @@ if ($count && $dry) { } else { echo "done.\n"; } - diff --git a/plugins/OStatus/scripts/resub-feed.php b/plugins/OStatus/scripts/resub-feed.php index 121d12109..8803c0118 100644 --- a/plugins/OStatus/scripts/resub-feed.php +++ b/plugins/OStatus/scripts/resub-feed.php @@ -38,7 +38,7 @@ if (empty($args[0]) || !Validate::uri($args[0])) { $feedurl = $args[0]; -$sub = FeedSub::staticGet('topic', $feedurl); +$sub = FeedSub::staticGet('uri', $feedurl); if (!$sub) { print "Feed $feedurl is not subscribed.\n"; exit(1); @@ -57,7 +57,7 @@ if ($ok) { print "Could not confirm.\n"; } -$sub2 = FeedSub::staticGet('topic', $feedurl); +$sub2 = FeedSub::staticGet('uri', $feedurl); print "\n"; print "New state:\n"; diff --git a/plugins/OStatus/scripts/testfeed.php b/plugins/OStatus/scripts/testfeed.php index 5e3ccd433..149bcc343 100644 --- a/plugins/OStatus/scripts/testfeed.php +++ b/plugins/OStatus/scripts/testfeed.php @@ -45,7 +45,7 @@ $skip = have_option('skip') ? intval(get_option_value('skip')) : 0; $count = have_option('count') ? intval(get_option_value('count')) : 0; -$sub = FeedSub::staticGet('topic', $feedurl); +$sub = FeedSub::staticGet('uri', $feedurl); if (!$sub) { print "Feed $feedurl is not subscribed.\n"; exit(1); @@ -86,4 +86,3 @@ if ($skip || $count) { } Event::handle('StartFeedSubReceive', array($sub, $feed)); - diff --git a/plugins/OStatus/scripts/updateostatus.php b/plugins/OStatus/scripts/updateostatus.php index 622ded56a..052cca146 100644 --- a/plugins/OStatus/scripts/updateostatus.php +++ b/plugins/OStatus/scripts/updateostatus.php @@ -44,14 +44,14 @@ try { if (empty($user)) { throw new Exception("Can't find user with id '$id'."); } - updateProfileURL($user); + updateOStatus($user); } else if (have_option('n', 'nickname')) { $nickname = get_option_value('n', 'nickname'); $user = User::staticGet('nickname', $nickname); if (empty($user)) { - throw new Exception("Can't find user with nickname '$nickname'"); + throw new Exception("Can't find user with nickname '$nickname'."); } - updateProfileURL($user); + updateOStatus($user); } else if (have_option('a', 'all')) { $user = new User(); if ($user->find()) { diff --git a/plugins/OStatus/tests/FeedDiscoveryTest.php b/plugins/OStatus/tests/FeedDiscoveryTest.php index 0e6354a86..3be4bf736 100644 --- a/plugins/OStatus/tests/FeedDiscoveryTest.php +++ b/plugins/OStatus/tests/FeedDiscoveryTest.php @@ -53,7 +53,7 @@ class FeedDiscoveryTest extends PHPUnit_Framework_TestCase </style> <link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://leuksman.com/log/xmlrpc.php?rsd" /> -<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://leuksman.com/log/wp-includes/wlwmanifest.xml" /> +<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://leuksman.com/log/wp-includes/wlwmanifest.xml" /> <link rel='index' title='leŭksman' href='http://leuksman.com/log' /> <meta name="generator" content="WordPress 2.8.6" /> </head> diff --git a/plugins/OStatus/tests/remote-tests.php b/plugins/OStatus/tests/remote-tests.php index 24b4b1660..64c60a8a4 100644 --- a/plugins/OStatus/tests/remote-tests.php +++ b/plugins/OStatus/tests/remote-tests.php @@ -4,6 +4,8 @@ if (php_sapi_name() != 'cli') { die('not for web'); } +define('TIMEOUT', 60); // ssslllloowwwww salmon if queues are off + define('INSTALLDIR', dirname(dirname(dirname(dirname(__FILE__))))); set_include_path(INSTALLDIR . '/extlib' . PATH_SEPARATOR . get_include_path()); @@ -188,7 +190,7 @@ class SNTestClient extends TestBase { $url = $this->basepath . '/' . $path; - $http = new HTTP_Request2($url, 'POST'); + $http = new HTTP_Request2($url, 'POST', array('timeout' => TIMEOUT)); if ($auth) { $http->setAuth($this->username, $this->password, HTTP_Request2::AUTH_BASIC); } @@ -215,7 +217,7 @@ class SNTestClient extends TestBase protected function web($path, $form, $params=array()) { $url = $this->basepath . '/' . $path; - $http = new HTTP_Request2($url, 'GET'); + $http = new HTTP_Request2($url, 'GET', array('timeout' => TIMEOUT)); $response = $http->send(); $dom = $this->checkWeb($url, 'GET', $response); @@ -500,7 +502,7 @@ class SNTestClient extends TestBase $me = $this->getProfileUri(); return $this->checkSubscription($profile_uri, $me); } - + protected function checkSubscription($subscriber, $subscribed) { // Using FOAF as the API methods for checking the social graph @@ -552,4 +554,3 @@ $b = $args[1]; $tester = new OStatusTester($a, $b); $tester->run(); - |