summaryrefslogtreecommitdiff
path: root/plugins/OStatus
diff options
context:
space:
mode:
authorBrion Vibber <brion@pobox.com>2010-10-04 12:54:36 -0700
committerBrion Vibber <brion@pobox.com>2010-10-04 12:54:36 -0700
commit59119482ca34540bd7f0a2a1aa994de1d5328ea2 (patch)
tree864fdc9dda3da54a78d868339c32479b5296b6d0 /plugins/OStatus
parent2db8aa3ec3f6804f8f16efe754aafb149f4035c9 (diff)
parent1652ded48c9c62c40157a5142e5231adbc574ddb (diff)
Merge branch '0.9.x' of gitorious.org:statusnet/mainline into 1.0.x
Conflicts: actions/hostmeta.php actions/imsettings.php classes/User.php lib/adminpanelaction.php lib/channel.php lib/default.php lib/router.php lib/util.php
Diffstat (limited to 'plugins/OStatus')
-rw-r--r--plugins/OStatus/OStatusPlugin.php99
-rw-r--r--plugins/OStatus/actions/groupsalmon.php30
-rw-r--r--plugins/OStatus/actions/ostatusgroup.php8
-rw-r--r--plugins/OStatus/actions/ostatusinit.php22
-rw-r--r--plugins/OStatus/actions/ostatussub.php42
-rw-r--r--plugins/OStatus/actions/ownerxrd.php2
-rw-r--r--plugins/OStatus/actions/pushcallback.php26
-rw-r--r--plugins/OStatus/actions/pushhub.php37
-rw-r--r--plugins/OStatus/actions/usersalmon.php48
-rw-r--r--plugins/OStatus/actions/userxrd.php10
-rw-r--r--plugins/OStatus/classes/FeedSub.php9
-rw-r--r--plugins/OStatus/classes/HubSub.php13
-rw-r--r--plugins/OStatus/classes/Magicsig.php4
-rw-r--r--plugins/OStatus/classes/Ostatus_profile.php136
-rw-r--r--plugins/OStatus/classes/Ostatus_source.php4
-rw-r--r--plugins/OStatus/lib/discovery.php4
-rw-r--r--plugins/OStatus/lib/discoveryhints.php1
-rw-r--r--plugins/OStatus/lib/linkheader.php3
-rw-r--r--plugins/OStatus/lib/magicenvelope.php6
-rw-r--r--plugins/OStatus/lib/ostatusqueuehandler.php1
-rw-r--r--plugins/OStatus/lib/pushinqueuehandler.php1
-rw-r--r--plugins/OStatus/lib/salmon.php5
-rw-r--r--plugins/OStatus/lib/salmonaction.php16
-rw-r--r--plugins/OStatus/lib/xrdaction.php1
-rw-r--r--plugins/OStatus/locale/OStatus.pot584
-rw-r--r--plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po796
-rw-r--r--plugins/OStatus/locale/ia/LC_MESSAGES/OStatus.po768
-rw-r--r--plugins/OStatus/locale/mk/LC_MESSAGES/OStatus.po771
-rw-r--r--plugins/OStatus/locale/nl/LC_MESSAGES/OStatus.po800
-rw-r--r--plugins/OStatus/locale/uk/LC_MESSAGES/OStatus.po782
-rw-r--r--plugins/OStatus/scripts/fixup-shadow.php56
-rw-r--r--plugins/OStatus/tests/remote-tests.php6
32 files changed, 4753 insertions, 338 deletions
diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php
index dd1509954..601243b42 100644
--- a/plugins/OStatus/OStatusPlugin.php
+++ b/plugins/OStatus/OStatusPlugin.php
@@ -221,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');
@@ -239,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'));
}
@@ -451,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;
}
@@ -522,6 +525,7 @@ class OStatusPlugin extends Plugin
}
if (!$oprofile->subscribe()) {
+ // TRANS: Exception.
throw new Exception(_m('Could not set up remote subscription.'));
}
}
@@ -551,25 +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");
- // TRANS: Success message for subscribe to user attempt through OStatus.
- // TRANS: %1$s is the subscriber name, %2$s is the subscribed user's name.
- $act->content = sprintf(_("%1$s is now following %2$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);
@@ -611,10 +600,10 @@ class OStatusPlugin extends Plugin
common_date_iso8601(time()));
$act->time = time();
- $act->title = _("Unfollow");
+ $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(_("%1$s stopped following %2$s."),
+ $act->content = sprintf(_m('%1$s stopped following %2$s.'),
$profile->getBestName(),
$other->getBestName());
@@ -645,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();
@@ -669,6 +661,7 @@ class OStatusPlugin extends Plugin
return true;
} else {
$oprofile->garbageCollect();
+ // TRANS: Exception.
throw new Exception(_m("Failed joining remote group."));
}
}
@@ -727,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);
@@ -742,24 +734,15 @@ class OStatusPlugin extends Plugin
return true;
}
- $act = new Activity();
+ $fav = Fave::pkeyGet(array('user_id' => $user->id,
+ 'notice_id' => $notice->id));
- $act->verb = ActivityVerb::FAVORITE;
- $act->id = TagURI::mint('favor:%d:%d:%s',
- $profile->id,
- $notice->id,
- common_date_iso8601(time()));
+ if (empty($fav)) {
+ // That's weird.
+ return true;
+ }
- $act->time = time();
- $act->title = _("Favor");
- // TRANS: Success message for adding a favorite notice through OStatus.
- // TRANS: %1$s is the favoring user's name, %2$s is URI to the favored notice.
- $act->content = sprintf(_("%1$s marked notice %2$s as a favorite."),
- $profile->getBestName(),
- $notice->uri);
-
- $act->actor = ActivityObject::fromProfile($profile);
- $act->object = ActivityObject::fromNotice($notice);
+ $act = $fav->asActivity();
$oprofile->notifyActivity($act, $profile);
@@ -797,10 +780,10 @@ class OStatusPlugin extends Plugin
$notice->id,
common_date_iso8601(time()));
$act->time = time();
- $act->title = _("Disfavor");
+ $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(_("%1$s marked notice %2$s as no longer a favorite."),
+ $act->content = sprintf(_m('%1$s marked notice %2$s as no longer a favorite.'),
$profile->getBestName(),
$notice->uri);
@@ -874,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')); // @todo: i18n: Add translator hint for this text.
+ 'class' => 'entity_remote_subscribe'),
+ // TRANS: Link text for link to remote subscribe.
+ _m('Remote'));
$action->elementEnd('p');
$action->elementEnd('div');
}
@@ -914,6 +898,7 @@ 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.
@@ -946,7 +931,8 @@ class OStatusPlugin extends Plugin
array('nickname' => $profileUser->nickname));
$output->element('a', array('href' => $url,
'class' => 'entity_remote_subscribe'),
- _m('Subscribe')); // @todo: i18n: Add context.
+ // TRANS: Link text for a user to subscribe to an OStatus user.
+ _m('Subscribe'));
$output->elementEnd('li');
}
}
@@ -960,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 '.
- '<a href="http://ostatus.org/">OStatus</a>.')); // @todo i18n: Add translator hint.
+ // 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
@@ -976,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;
}
diff --git a/plugins/OStatus/actions/groupsalmon.php b/plugins/OStatus/actions/groupsalmon.php
index 5094dccf0..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,7 +59,6 @@ class GroupsalmonAction extends SalmonAction
/**
* We've gotten a post event on the Salmon backchannel, probably a reply.
*/
-
function handlePost()
{
// @fixme process all objects?
@@ -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->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/ostatusgroup.php b/plugins/OStatus/actions/ostatusgroup.php
index 1861e866f..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,
+ // 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 0c991aba9..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;
}
@@ -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,12 +113,15 @@ 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.'));
$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,
+ // TRANS: Tooltip for field label "Profile Account".
_m('Your account id (e.g. user@identi.ca).'));
$this->elementEnd('li');
$this->elementEnd('ul');
@@ -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()
{
+ // TRANS: Page title.
return _m('OStatus Connect');
}
-
}
diff --git a/plugins/OStatus/actions/ostatussub.php b/plugins/OStatus/actions/ostatussub.php
index 4cbd7d034..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")); // @todo i18n FIXME: needs context/translator hint.
+ // 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')); // @todo i18n FIXME: needs context/translator hint.
+ // TRANS: Button text.
+ $this->submit('validate', _m('BUTTON','Continue'));
$this->elementEnd('fieldset');
@@ -103,10 +105,14 @@ 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')); // @todo i18n FIXME: needs context/translator hint.
+ // TRANS: Button text.
+ // TRANS: Tooltip for button "Join".
+ _m('BUTTON','Join this group'));
} else {
- $this->submit('submit', _m('Confirm'), 'submit', null,
- _m('Subscribe to this user')); // @todo i18n FIXME: needs context/translator hint.
+ // TRANS: Button text.
+ $this->submit('submit', _m('BUTTON','Confirm'), 'submit', null,
+ // TRANS: Tooltip for button "Confirm".
+ _m('Subscribe to this user'));
}
$this->elementEnd('fieldset');
$this->elementEnd('form');
@@ -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,31 +250,39 @@ class OStatusSubAction extends Action
} else if (Validate::uri($this->profile_uri)) {
$this->oprofile = Ostatus_profile::ensureProfileURL($this->profile_uri);
} else {
+ // 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) {
+ // 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
+ // 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 3fcb982b8..9e84f72ec 100644
--- a/plugins/OStatus/actions/ownerxrd.php
+++ b/plugins/OStatus/actions/ownerxrd.php
@@ -34,7 +34,7 @@ class OwnerxrdAction extends XrdAction
$this->user = User::siteOwner();
if (!$this->user) {
- $this->clientError(_('No such user.'), 404);
+ $this->clientError(_m('No such user.'), 404);
return false;
}
diff --git a/plugins/OStatus/actions/pushcallback.php b/plugins/OStatus/actions/pushcallback.php
index 6c6978745..701a39c16 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()
@@ -46,13 +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) {
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- 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 = '';
@@ -84,30 +83,31 @@ class PushCallbackAction extends Action
$verify_token = $this->arg('hub_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) {
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- 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) {
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- 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') {
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- 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') {
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- 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 6909b8539..68035ab5c 100644
--- a/plugins/OStatus/actions/pushhub.php
+++ b/plugins/OStatus/actions/pushhub.php
@@ -62,11 +62,11 @@ class PushHubAction extends Action
$this->subunsub($mode);
break;
case "publish":
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- throw new ClientException("Publishing outside feeds not supported.", 400);
+ // TRANS: Client exception.
+ throw new ClientException(_m('Publishing outside feeds not supported.'), 400);
default:
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- throw new ClientException("Unrecognized mode '$mode'.", 400);
+ // TRANS: Client exception. %s is a mode.
+ throw new ClientException(sprintf(_m('Unrecognized mode "%s".'),$mode), 400);
}
}
@@ -85,28 +85,28 @@ class PushHubAction extends Action
$topic = $this->argUrl('hub.topic');
if (!$this->recognizedFeed($topic)) {
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- 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') {
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- 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)) {
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- 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) {
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- 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);
@@ -157,8 +157,8 @@ class PushHubAction extends Action
if ($feed == $userFeed) {
$user = User::staticGet('id', $id);
if (!$user) {
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- 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;
}
@@ -166,8 +166,8 @@ class PushHubAction extends Action
if ($feed == $groupFeed) {
$user = User_group::staticGet('id', $id);
if (!$user) {
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- 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;
}
@@ -190,8 +190,9 @@ class PushHubAction extends Action
if (Validate::uri($url, $params)) {
return $url;
} else {
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- 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));
}
}
diff --git a/plugins/OStatus/actions/usersalmon.php b/plugins/OStatus/actions/usersalmon.php
index 06a72bf02..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;
@@ -78,20 +77,24 @@ class UsersalmonAction extends SalmonAction
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 &&
!in_array($this->user->id, $notice->getReplies())) {
- throw new ClientException("In reply to a notice not by this user and not mentioning this user");
+ // 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->activity->objects[0]->id);
@@ -108,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();
@@ -152,11 +154,13 @@ class UsersalmonAction extends SalmonAction
'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.'));
}
}
@@ -172,7 +176,8 @@ class UsersalmonAction extends SalmonAction
$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();
@@ -186,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) {
@@ -197,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 dd720568b..8179505a5 100644
--- a/plugins/OStatus/actions/userxrd.php
+++ b/plugins/OStatus/actions/userxrd.php
@@ -17,16 +17,14 @@
* 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);
@@ -39,6 +37,8 @@ class UserxrdAction extends XrdAction
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 6f9e0856a..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,5 +496,4 @@ class FeedSub extends Memcached_DataObject
}
return false;
}
-
}
diff --git a/plugins/OStatus/classes/HubSub.php b/plugins/OStatus/classes/HubSub.php
index e01ae4e79..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,8 +204,8 @@ class HubSub extends Memcached_DataObject
if ($status >= 200 && $status < 300) {
common_log(LOG_INFO, "Verified $mode of $this->callback:$this->topic");
} else {
- // @todo i18n FIXME: add i18n and use sprintf for parameter.
- 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);
@@ -353,10 +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 e39a6d8f7..20025c37a 100644
--- a/plugins/OStatus/classes/Magicsig.php
+++ b/plugins/OStatus/classes/Magicsig.php
@@ -31,7 +31,6 @@ require_once 'Crypt/RSA.php';
class Magicsig extends Memcached_DataObject
{
-
const PUBLICKEYREL = 'magic-public-key';
public $__table = 'magicsig';
@@ -86,7 +85,6 @@ class Magicsig extends Memcached_DataObject
64, false));
}
-
function keys()
{
return array_keys($this->keyTypes());
@@ -126,7 +124,6 @@ class Magicsig extends Memcached_DataObject
$this->insert();
}
-
public function toString($full_pair = true)
{
$mod = Magicsig::base64_url_encode($this->publicKey->modulus->toBytes());
@@ -197,7 +194,6 @@ class Magicsig extends Memcached_DataObject
case 'RSA-SHA256':
return 'sha256';
}
-
}
public function sign($bytes)
diff --git a/plugins/OStatus/classes/Ostatus_profile.php b/plugins/OStatus/classes/Ostatus_profile.php
index 19fe5169b..10cee917e 100644
--- a/plugins/OStatus/classes/Ostatus_profile.php
+++ b/plugins/OStatus/classes/Ostatus_profile.php
@@ -21,7 +21,6 @@
* @package OStatusPlugin
* @maintainer Brion Vibber <brion@status.net>
*/
-
class Ostatus_profile extends Memcached_DataObject
{
public $__table = 'ostatus_profile';
@@ -51,7 +50,6 @@ class Ostatus_profile extends Memcached_DataObject
*
* @return array array of column definitions
*/
-
function table()
{
return array('uri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
@@ -92,7 +90,6 @@ class Ostatus_profile extends Memcached_DataObject
*
* @return array key definitions
*/
-
function keys()
{
return array_keys($this->keyTypes());
@@ -106,7 +103,6 @@ class Ostatus_profile extends Memcached_DataObject
*
* @return array key definitions
*/
-
function keyTypes()
{
return array('uri' => 'K', 'profile_id' => 'U', 'group_id' => 'U', 'feeduri' => 'U');
@@ -188,11 +184,11 @@ class Ostatus_profile extends Memcached_DataObject
} else if ($this->group_id && !$this->profile_id) {
return true;
} else if ($this->group_id && $this->profile_id) {
- // @todo i18n FIXME: use sprintf and add i18n.
- 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 {
- // @todo i18n FIXME: use sprintf and add i18n.
- 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));
}
}
@@ -280,7 +276,9 @@ class Ostatus_profile extends Memcached_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;
@@ -372,8 +370,8 @@ class Ostatus_profile extends Memcached_DataObject
} else if ($entry instanceof Notice) {
return $preamble . $entry->asAtomEntry(true, true);
} else {
- // @todo i18n FIXME: use sprintf and add i18n.
- 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.'));
}
}
@@ -403,7 +401,7 @@ class Ostatus_profile extends Memcached_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.'));
}
}
@@ -426,7 +424,7 @@ class Ostatus_profile extends Memcached_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");
}
@@ -470,7 +468,8 @@ class Ostatus_profile extends Memcached_DataObject
}
break;
default:
- throw new ClientException("Can't handle that kind of post.");
+ // TRANS: Client exception.
+ throw new ClientException(_m('Can\'t handle that kind of post.'));
}
Event::handle('EndHandleFeedEntry', array($activity));
@@ -552,14 +551,14 @@ class Ostatus_profile extends Memcached_DataObject
$sourceContent = $note->title;
} else {
// @fixme fetch from $sourceUrl?
- // @todo i18n FIXME: use sprintf and add i18n.
- 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);
@@ -570,7 +569,7 @@ class Ostatus_profile extends Memcached_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;
}
@@ -584,14 +583,17 @@ class Ostatus_profile extends Memcached_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) . '">' .
'&#8230;' .
- '</a>'; // @todo i18n FIXME: add translator hint/context.
+ '</a>';
}
}
@@ -703,23 +705,7 @@ class Ostatus_profile extends Memcached_DataObject
continue;
}
- // Is the recipient a remote group?
- $oprofile = Ostatus_profile::ensureProfileURI($recipient);
-
- if ($oprofile) {
- 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;
- }
-
// 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) {
@@ -738,7 +724,22 @@ class Ostatus_profile extends Memcached_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;
@@ -776,8 +777,8 @@ class Ostatus_profile extends Memcached_DataObject
$response = $client->get($profile_url);
if (!$response->isOk()) {
- // @todo i18n FIXME: use sprintf and add i18n.
- 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
@@ -834,8 +835,8 @@ class Ostatus_profile extends Memcached_DataObject
return self::ensureFeedURL($feedurl, $hints);
}
- // @todo i18n FIXME: use sprintf and add i18n.
- 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));
}
/**
@@ -867,7 +868,7 @@ class Ostatus_profile extends Memcached_DataObject
$user = User::staticGet('id', $profile->id);
if (!empty($user)) {
- // @todo i18n FIXME: use sprintf and add i18n.
+ // @todo i18n FIXME: use sprintf and add i18n (?)
throw new OStatusShadowException($profile, "'$profile_url' is the profile for local user '{$user->nickname}'.");
}
@@ -972,8 +973,7 @@ class Ostatus_profile extends Memcached_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.'));
}
/**
@@ -1088,7 +1088,7 @@ class Ostatus_profile extends Memcached_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;
@@ -1271,13 +1271,13 @@ class Ostatus_profile extends Memcached_DataObject
$user = User::staticGet('uri', $homeuri);
if ($user) {
- // @todo i18n FIXME: add i18n.
- 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)) {
- // @todo i18n FIXME: add i18n.
- 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)) {
@@ -1328,8 +1328,8 @@ class Ostatus_profile extends Memcached_DataObject
$oprofile->profile_id = $profile->insert();
if (!$oprofile->profile_id) {
- // @todo i18n FIXME: add i18n.
- throw new ServerException("Can't save local profile.");
+ // TRANS: Exception.
+ throw new ServerException(_m('Can\'t save local profile.'));
}
} else {
$group = new User_group();
@@ -1339,16 +1339,16 @@ class Ostatus_profile extends Memcached_DataObject
$oprofile->group_id = $group->insert();
if (!$oprofile->group_id) {
- // @todo i18n FIXME: add i18n.
- throw new ServerException("Can't save local profile.");
+ // TRANS: Exception.
+ throw new ServerException(_m('Can\'t save local profile.'));
}
}
$ok = $oprofile->insert();
if (!$ok) {
- // @todo i18n FIXME: add i18n.
- throw new ServerException("Can't save OStatus profile.");
+ // TRANS: Exception.
+ throw new ServerException(_m('Can\'t save OStatus profile.'));
}
$avatar = self::getActivityObjectAvatar($object, $hints);
@@ -1390,7 +1390,7 @@ class Ostatus_profile extends Memcached_DataObject
}
}
- protected static function updateProfile($profile, $object, $hints=array())
+ public static function updateProfile($profile, $object, $hints=array())
{
$orig = clone($profile);
@@ -1518,7 +1518,7 @@ class Ostatus_profile extends Memcached_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)) {
@@ -1606,8 +1606,8 @@ class Ostatus_profile extends Memcached_DataObject
if ($uri !== false) {
if (is_null($uri)) {
// Negative cache entry
- // @todo i18n FIXME: add i18n.
- 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)) {
@@ -1634,8 +1634,8 @@ class Ostatus_profile extends Memcached_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);
- // @todo i18n FIXME: add i18n.
- throw new Exception('Not a valid webfinger address.');
+ // TRANS: Exception.
+ throw new Exception(_m('Not a valid webfinger address.'));
}
$hints = array('webfinger' => $addr);
@@ -1716,8 +1716,8 @@ class Ostatus_profile extends Memcached_DataObject
if (!$profile_id) {
common_log_db_error($profile, 'INSERT', __FILE__);
- // @todo i18n FIXME: add i18n and use sprintf for parameter.
- 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();
@@ -1735,16 +1735,16 @@ class Ostatus_profile extends Memcached_DataObject
if (!$result) {
common_log_db_error($oprofile, 'INSERT', __FILE__);
- // @todo i18n FIXME: add i18n and use sprintf for parameter.
- 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;
}
- // @todo i18n FIXME: add i18n and use sprintf for parameter.
- 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));
}
/**
@@ -1786,7 +1786,7 @@ class Ostatus_profile extends Memcached_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;
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 04c672720..905ece2ca 100644
--- a/plugins/OStatus/lib/discovery.php
+++ b/plugins/OStatus/lib/discovery.php
@@ -106,8 +106,8 @@ class Discovery
}
}
- // @todo Needs i18n.
- 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) {
diff --git a/plugins/OStatus/lib/discoveryhints.php b/plugins/OStatus/lib/discoveryhints.php
index fa2ead732..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();
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 bbd4ce17a..03e6f7c66 100644
--- a/plugins/OStatus/lib/magicenvelope.php
+++ b/plugins/OStatus/lib/magicenvelope.php
@@ -76,7 +76,8 @@ class MagicEnvelope
}
}
}
- throw new Exception('Unable to locate signer public key.');
+ // TRANS: Exception.
+ throw new Exception(_m('Unable to locate signer public key.'));
}
@@ -92,7 +93,6 @@ class MagicEnvelope
'sig' => $signature_alg->sign($armored_text),
'alg' => $signature_alg->getName()
);
-
}
public function toXML($env) {
@@ -110,7 +110,6 @@ class MagicEnvelope
return $string;
}
-
public function unfold($env)
{
$dom = new DOMDocument();
@@ -218,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 9814cab9f..5e0ab46a5 100644
--- a/plugins/OStatus/lib/ostatusqueuehandler.php
+++ b/plugins/OStatus/lib/ostatusqueuehandler.php
@@ -221,5 +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 631ebc7d8..963da6508 100644
--- a/plugins/OStatus/lib/salmon.php
+++ b/plugins/OStatus/lib/salmon.php
@@ -89,8 +89,8 @@ class Salmon
$magickey->generate($user->id);
}
} else {
- // @todo i18n FIXME: added i18n and use sprintf when using parameters.
- throw new Exception("Salmon invalid actor for signing.");
+ // TRANS: Exception.
+ throw new Exception(_m('Salmon invalid actor for signing.'));
}
try {
@@ -101,7 +101,6 @@ class Salmon
return $magic_env->toXML($env);
}
-
public function verifyMagicEnv($text)
{
$magic_env = new MagicEnvelope();
diff --git a/plugins/OStatus/lib/salmonaction.php b/plugins/OStatus/lib/salmonaction.php
index 5fdb11abe..41bdb4892 100644
--- a/plugins/OStatus/lib/salmonaction.php
+++ b/plugins/OStatus/lib/salmonaction.php
@@ -38,10 +38,12 @@ 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') {
+ // TRANS: Client error. Do not translate "application/magic-envelope+xml"
$this->clientError(_m('Salmon requires "application/magic-envelope+xml".'));
}
@@ -51,6 +53,7 @@ class SalmonAction extends Action
$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();
@@ -62,6 +65,7 @@ class SalmonAction extends Action
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.'));
}
@@ -110,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));
@@ -118,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."));
}
@@ -180,7 +193,8 @@ class SalmonAction extends Action
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->activity, true));
- throw new Exception("Received a salmon slap from unidentified actor.");
+ // TRANS: Exception.
+ throw new Exception(_m('Received a salmon slap from unidentified actor.'));
}
return Ostatus_profile::ensureActivityObjectProfile($actor);
diff --git a/plugins/OStatus/lib/xrdaction.php b/plugins/OStatus/lib/xrdaction.php
index 91bb87cc2..c8b5beff3 100644
--- a/plugins/OStatus/lib/xrdaction.php
+++ b/plugins/OStatus/lib/xrdaction.php
@@ -103,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..a55b30f4b 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-03 19:53+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,724 @@ 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 ""
-#: OStatusPlugin.php:636
+#. 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 "%s has joined group %s."
+msgid "%1$s stopped following %2$s."
+msgstr ""
+
+#: OStatusPlugin.php:636
+msgid "Could not set up remote group membership."
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
+#: 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 "Invalid avatar URL %s"
+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 "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:93
+#, 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:98
+#, php-format
+msgid "Bad hub.verify_token %1$s for %2$s."
+msgstr ""
+
+#. TRANS: Client exception. %s is an invalid topic.
+#: actions/pushcallback.php:105
+#, php-format
+msgid "Unexpected subscribe request for %s."
+msgstr ""
+
+#. TRANS: Client exception. %s is an invalid topic.
+#: actions/pushcallback.php:110
+#, 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..39101b839
--- /dev/null
+++ b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po
@@ -0,0 +1,796 @@
+# 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-03 19:53+0000\n"
+"PO-Revision-Date: 2010-10-03 19:57:15+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-01 20:39:03+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r74231); 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: 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"
+
+#: 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:93
+#, 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:98
+#, 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:105
+#, 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:110
+#, 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..cd5eebd16
--- /dev/null
+++ b/plugins/OStatus/locale/ia/LC_MESSAGES/OStatus.po
@@ -0,0 +1,768 @@
+# 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-03 19:53+0000\n"
+"PO-Revision-Date: 2010-10-03 19:57:15+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-01 20:39:03+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r74231); 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: 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"
+
+#: 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:93
+#, 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:98
+#, 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:105
+#, 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:110
+#, 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..fc2e4b1e2
--- /dev/null
+++ b/plugins/OStatus/locale/mk/LC_MESSAGES/OStatus.po
@@ -0,0 +1,771 @@
+# 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-03 19:53+0000\n"
+"PO-Revision-Date: 2010-10-03 19:57:15+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-01 20:39:03+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r74231); 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: Exception.
+#: OStatusPlugin.php:667
+msgid "Failed joining remote group."
+msgstr "Не успеав да Ве зачленам во далечинската група."
+
+#: OStatusPlugin.php:707
+msgid "Leave"
+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:93
+#, 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:98
+#, 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:105
+#, php-format
+msgid "Unexpected subscribe request for %s."
+msgstr "Неочекувано барање за претплата за %s."
+
+#. TRANS: Client exception. %s is an invalid topic.
+#: actions/pushcallback.php:110
+#, 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..e0c6c4aa8
--- /dev/null
+++ b/plugins/OStatus/locale/nl/LC_MESSAGES/OStatus.po
@@ -0,0 +1,800 @@
+# 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-03 19:53+0000\n"
+"PO-Revision-Date: 2010-10-03 19:57:16+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-01 20:39:03+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r74231); 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: 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"
+
+#: 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:93
+#, 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:98
+#, 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:105
+#, php-format
+msgid "Unexpected subscribe request for %s."
+msgstr "Onverwacht abonneringsverzoek voor %s."
+
+#. TRANS: Client exception. %s is an invalid topic.
+#: actions/pushcallback.php:110
+#, 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..0f49a0245
--- /dev/null
+++ b/plugins/OStatus/locale/uk/LC_MESSAGES/OStatus.po
@@ -0,0 +1,782 @@
+# 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-03 19:53+0000\n"
+"PO-Revision-Date: 2010-10-03 19:57:16+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-01 20:39:03+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r74231); 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: Exception.
+#: OStatusPlugin.php:667
+msgid "Failed joining remote group."
+msgstr "Помилка приєднання до віддаленої спільноти."
+
+#: OStatusPlugin.php:707
+msgid "Leave"
+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:93
+#, 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:98
+#, 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:105
+#, php-format
+msgid "Unexpected subscribe request for %s."
+msgstr "Несподіваний запит підписки для %s."
+
+#. TRANS: Client exception. %s is an invalid topic.
+#: actions/pushcallback.php:110
+#, 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 4b6ad08a3..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;
diff --git a/plugins/OStatus/tests/remote-tests.php b/plugins/OStatus/tests/remote-tests.php
index c2c9a5d97..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);